From 3cb00a5141f3cea9d103f50c0f82ec77d7baffde Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 21:33:25 -0600 Subject: [PATCH 01/19] test the workflow --- .github/workflows/compile_all_scripts.yml | 44 + .gitignore | 2 + K1/nwnnsscomp/KScript/nwnnsscomp.exe | Bin 0 -> 266240 bytes K1/nwnnsscomp/KScript/nwscript-kotor.nss | 5173 +++++++++++++++++ K1/nwnnsscomp/KScript/nwscript-tsl.nss | 6325 +++++++++++++++++++++ K1/nwnnsscomp/KTool/nwnnsscomp.exe | Bin 0 -> 266240 bytes K1/nwnnsscomp/KTool/nwscript.nss | 5173 +++++++++++++++++ K1/nwnnsscomp/TSLPatcher/nwnnsscomp.exe | Bin 0 -> 212992 bytes K1/nwnnsscomp/TSLPatcher/nwscript.nss | 5173 +++++++++++++++++ K1/nwnnsscomp/V1/nwnnsscomp.exe | Bin 0 -> 462848 bytes K1/nwnnsscomp/V1/nwscript.nss | 5173 +++++++++++++++++ TSL/nwnnsscomp/KScript/nwnnsscomp.exe | Bin 0 -> 266240 bytes TSL/nwnnsscomp/KScript/nwscript-kotor.nss | 5173 +++++++++++++++++ TSL/nwnnsscomp/KScript/nwscript-tsl.nss | 6325 +++++++++++++++++++++ TSL/nwnnsscomp/KTool/nwnnsscomp.exe | Bin 0 -> 266240 bytes TSL/nwnnsscomp/KTool/nwscript.nss | 6325 +++++++++++++++++++++ TSL/nwnnsscomp/TSLPatcher/nwnnsscomp.exe | Bin 0 -> 212992 bytes TSL/nwnnsscomp/TSLPatcher/nwscript.nss | 6325 +++++++++++++++++++++ TSL/nwnnsscomp/V1/nwnnsscomp.exe | Bin 0 -> 462848 bytes TSL/nwnnsscomp/V1/nwscript.nss | 6325 +++++++++++++++++++++ 20 files changed, 57536 insertions(+) create mode 100644 .github/workflows/compile_all_scripts.yml create mode 100644 K1/nwnnsscomp/KScript/nwnnsscomp.exe create mode 100644 K1/nwnnsscomp/KScript/nwscript-kotor.nss create mode 100644 K1/nwnnsscomp/KScript/nwscript-tsl.nss create mode 100644 K1/nwnnsscomp/KTool/nwnnsscomp.exe create mode 100644 K1/nwnnsscomp/KTool/nwscript.nss create mode 100644 K1/nwnnsscomp/TSLPatcher/nwnnsscomp.exe create mode 100644 K1/nwnnsscomp/TSLPatcher/nwscript.nss create mode 100644 K1/nwnnsscomp/V1/nwnnsscomp.exe create mode 100644 K1/nwnnsscomp/V1/nwscript.nss create mode 100644 TSL/nwnnsscomp/KScript/nwnnsscomp.exe create mode 100644 TSL/nwnnsscomp/KScript/nwscript-kotor.nss create mode 100644 TSL/nwnnsscomp/KScript/nwscript-tsl.nss create mode 100644 TSL/nwnnsscomp/KTool/nwnnsscomp.exe create mode 100644 TSL/nwnnsscomp/KTool/nwscript.nss create mode 100644 TSL/nwnnsscomp/TSLPatcher/nwnnsscomp.exe create mode 100644 TSL/nwnnsscomp/TSLPatcher/nwscript.nss create mode 100644 TSL/nwnnsscomp/V1/nwnnsscomp.exe create mode 100644 TSL/nwnnsscomp/V1/nwscript.nss diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml new file mode 100644 index 000000000..42e73539d --- /dev/null +++ b/.github/workflows/compile_all_scripts.yml @@ -0,0 +1,44 @@ +name: Compile All Scripts Test + +on: [push] + +permissions: + contents: read + +jobs: + build: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.8 + uses: actions/setup-python@v3 + with: + python-version: "3.8" + + #- name: Install PowerShell Core + # run: | + # # Install pre-requisite packages + # sudo apt-get update + # sudo apt-get install -y wget apt-transport-https software-properties-common + # Import the Microsoft repository key + # wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" + # sudo dpkg -i packages-microsoft-prod.deb + # sudo apt-get update + # Install PowerShell + # sudo apt-get install -y powershell + # shell: bash + + - name: Clone PyKotor + run: | + git clone --branch vanilla-source-test https://github.com/th3w1zard1/PyKotor.git PyKotor + cd PyKotor + chmod +x ./install_python_venv.ps1 + chmod +x ./compile/compile_holopatcher.ps1 + ./install_python_venv.ps1 -noprompt + python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary + python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary + python -m pip install pytest + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no + shell: pwsh diff --git a/.gitignore b/.gitignore index 093c2bebd..733f066d8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ # RTF MS Word temp file ~$*.rtf* +*.ncs +.secrets diff --git a/K1/nwnnsscomp/KScript/nwnnsscomp.exe b/K1/nwnnsscomp/KScript/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..668bbeddcbc2eaa83e475838d8f53166caee3043 GIT binary patch literal 266240 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 literal 0 HcmV?d00001 diff --git a/K1/nwnnsscomp/KScript/nwscript-kotor.nss b/K1/nwnnsscomp/KScript/nwscript-kotor.nss new file mode 100644 index 000000000..7a9b4f12d --- /dev/null +++ b/K1/nwnnsscomp/KScript/nwscript-kotor.nss @@ -0,0 +1,5173 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 18; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_ENDAR_SPIRE = 0; +int PLANET_TARIS = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_DANTOOINE = 3; +int PLANET_TATOOINE = 4; +int PLANET_KASHYYYK = 5; +int PLANET_MANAAN = 6; +int PLANET_KORRIBAN = 7; +int PLANET_LEVIATHAN = 8; +int PLANET_UNKNOWN_WORLD = 9; +int PLANET_STAR_FORGE = 10; +int PLANET_LIVE_01 = 11; +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; + +int NPC_PLAYER = -1; +int NPC_BASTILA = 0; +int NPC_CANDEROUS = 1; +int NPC_CARTH = 2; +int NPC_HK_47 = 3; +int NPC_JOLEE = 4; +int NPC_JUHANI = 5; +int NPC_MISSION = 6; +int NPC_T3_M4 = 7; +int NPC_ZAALBAR = 8; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0; +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4; +int NPC_AISTYLE_JEDI_SUPPORT = 5; + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; + +int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; +int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +effect EffectResurrection(); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: 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. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +void AdjustAlignment(object oSubject, int nAlignment, int nShift); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +int GetIsInCombat(object oCreature=OBJECT_SELF); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +void ShowUpgradeScreen(object oItem = OBJECT_INVALID); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef); + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 0 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 0 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 0 and 0 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 0 and 0 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); + +// 768. IsMoviePlaying +// Checks if a movie is currently playing. +int IsMoviePlaying(); + +// 769. QueueMovie +// Queues up a movie to be played using PlayMovieQueue. +// If bSkippable is TRUE, the player can cancel the movie by hitting escape. +// If bSkippable is FALSE, the player cannot cancel the movie and must wait +// for it to finish playing. +void QueueMovie( string sMovie, int bSkippable ); + +// 770. PlayMovieQueue +// Plays the movies that have been added to the queue by QueueMovie +// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only +// cancels out of the currently playing movie rather than the entire queue +// of movies (assuming the currently playing movie is flagged as skippable). +// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled +// if the player hits escape (assuming the currently playing movie is flagged +// as skippable). +void PlayMovieQueue( int bAllowSeparateSkips ); + +// 771. YavinHackCloseDoor +// This is an incredibly hacky function to allow the doors to be properly +// closed on Yavin without running into the problems we've had. It is too +// late in development to fix it correctly, so thus we do this. Life is +// hard. You'll get over it +void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/K1/nwnnsscomp/KScript/nwscript-tsl.nss b/K1/nwnnsscomp/KScript/nwscript-tsl.nss new file mode 100644 index 000000000..94e753a63 --- /dev/null +++ b/K1/nwnnsscomp/KScript/nwscript-tsl.nss @@ -0,0 +1,6325 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 20; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; +int INVENTORY_SLOT_RIGHTWEAPON2= 18; +int INVENTORY_SLOT_LEFTWEAPON2 = 19; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; +int IMMUNITY_TYPE_DROID_CONFUSED = 33; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; +int EFFECT_TYPE_DROID_CONFUSED = 79; +int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 +int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; +int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code +int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; +int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; +int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; +int ITEM_PROPERTY_DAMPEN_SOUND = 63; +int ITEM_PROPERTY_DOORCUTTING = 64; +int ITEM_PROPERTY_DOORSABERING = 65; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; +int BASE_ITEM_WRIST_LAUNCHER = 91; +int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; +int VFX_DUR_ELECTRICAL_SPARK = 2067; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + +int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/28/2004 +// These masks are used in Spells.2DA to indicate which spells +// can be affected by which Forms. Unfortunately, the script compiler +// won't let me make a constant with a Hex value, so I've had to use +// decimal. +int FORM_MASK_FORCE_FOCUS = 1; +int FORM_MASK_ENDURING_FORCE = 2; +int FORM_MASK_FORCE_AMPLIFICATION = 4; +int FORM_MASK_FORCE_POTENCY = 8; +int FORM_MASK_REGENERATION = 16; +int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; +*/ + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// DJS-OEI 12/9/2003 +// New Force Powers +int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; +int FORCE_POWER_MASTER_HEAL = 134; +int FORCE_POWER_FORCE_BARRIER = 135; +int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; +int FORCE_POWER_MASTER_FORCE_BARRIER = 137; +int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast +int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. +int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // +int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast +int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. +int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // +int FORCE_POWER_CRUSH_OPPOSITION_I = 144; +int FORCE_POWER_CRUSH_OPPOSITION_II = 145; +int FORCE_POWER_CRUSH_OPPOSITION_III = 146; +int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; +int FORCE_POWER_CRUSH_OPPOSITION_V = 148; +int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; +int FORCE_POWER_FORCE_BODY = 150; +int FORCE_POWER_IMPROVED_FORCE_BODY = 151; +int FORCE_POWER_MASTER_FORCE_BODY = 152; +int FORCE_POWER_DRAIN_FORCE = 153; +int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; +int FORCE_POWER_MASTER_DRAIN_FORCE = 155; +int FORCE_POWER_FORCE_CAMOUFLAGE = 156; +int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; +int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; +int FORCE_POWER_FORCE_SCREAM = 159; +int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; +int FORCE_POWER_MASTER_FORCE_SCREAM = 161; +int FORCE_POWER_FORCE_REPULSION = 162; +int FORCE_POWER_FORCE_REDIRECTION = 163; +int FORCE_POWER_FURY = 164; +int FORCE_POWER_IMPROVED_FURY = 165; +int FORCE_POWER_MASTER_FURY = 166; +int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; +int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; +int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; +int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; +int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; +int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; +int FORCE_POWER_REVITALIZE = 173; +int FORCE_POWER_IMPROVED_REVITALIZE = 174; +int FORCE_POWER_MASTER_REVITALIZE = 175; +int FORCE_POWER_FORCE_SIGHT = 176; +int FORCE_POWER_FORCE_CRUSH = 177; +int FORCE_POWER_PRECOGNITION = 178; +int FORCE_POWER_BATTLE_PRECOGNITION = 179; +int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; +int FORCE_POWER_MIND_TRICK = 181; +int FORCE_POWER_CONFUSION = 200; +int FORCE_POWER_BEAST_TRICK = 182; +int FORCE_POWER_BEAST_CONFUSION = 184; +int FORCE_POWER_DROID_TRICK = 201; +int FORCE_POWER_DROID_CONFUSION = 269; +int FORCE_POWER_BREATH_CONTROL = 270; +int FORCE_POWER_WOOKIEE_RAGE_I = 271; +int FORCE_POWER_WOOKIEE_RAGE_II = 272; +int FORCE_POWER_WOOKIEE_RAGE_III = 273; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/25/2004 +int FORM_LIGHTSABER_PADAWAN_I = 205; +int FORM_LIGHTSABER_PADAWAN_II = 206; +int FORM_LIGHTSABER_PADAWAN_III = 207; +int FORM_LIGHTSABER_DAKLEAN_I = 208; +int FORM_LIGHTSABER_DAKLEAN_II = 209; +int FORM_LIGHTSABER_DAKLEAN_III = 210; +int FORM_LIGHTSABER_SENTINEL_I = 211; +int FORM_LIGHTSABER_SENTINEL_II = 212; +int FORM_LIGHTSABER_SENTINEL_III = 213; +int FORM_LIGHTSABER_SODAK_I = 214; +int FORM_LIGHTSABER_SODAK_II = 215; +int FORM_LIGHTSABER_SODAK_III = 216; +int FORM_LIGHTSABER_ANCIENT_I = 217; +int FORM_LIGHTSABER_ANCIENT_II = 218; +int FORM_LIGHTSABER_ANCIENT_III = 219; +int FORM_LIGHTSABER_MASTER_I = 220; +int FORM_LIGHTSABER_MASTER_II = 221; +int FORM_LIGHTSABER_MASTER_III = 222; +int FORM_CONSULAR_FORCE_FOCUS_I = 223; +int FORM_CONSULAR_FORCE_FOCUS_II = 224; +int FORM_CONSULAR_FORCE_FOCUS_III = 225; +int FORM_CONSULAR_ENDURING_FORCE_I = 226; +int FORM_CONSULAR_ENDURING_FORCE_II = 227; +int FORM_CONSULAR_ENDURING_FORCE_III = 228; +int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; +int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; +int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; +int FORM_CONSULAR_FORCE_SHELL_I = 232; +int FORM_CONSULAR_FORCE_SHELL_II = 233; +int FORM_CONSULAR_FORCE_SHELL_III = 234; +int FORM_CONSULAR_FORCE_POTENCY_I = 235; +int FORM_CONSULAR_FORCE_POTENCY_II = 236; +int FORM_CONSULAR_FORCE_POTENCY_III = 237; +int FORM_CONSULAR_REGENERATION_I = 238; +int FORM_CONSULAR_REGENERATION_II = 239; +int FORM_CONSULAR_REGENERATION_III = 240; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; +*/ + +int FORM_SABER_I_SHII_CHO = 258; +int FORM_SABER_II_MAKASHI = 259; +int FORM_SABER_III_SORESU = 260; +int FORM_SABER_IV_ATARU = 261; +int FORM_SABER_V_SHIEN = 262; +int FORM_SABER_VI_NIMAN = 263; +int FORM_SABER_VII_JUYO = 264; +int FORM_FORCE_I_FOCUS = 265; +int FORM_FORCE_II_POTENCY = 266; +int FORM_FORCE_III_AFFINITY = 267; +int FORM_FORCE_IV_MASTERY = 268; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; +int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; +int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; +int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 +int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +// DJS-OEI 2/11/2004 +int CLASS_TYPE_TECHSPECIALIST = 9; +int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe +int CLASS_TYPE_JEDIWEAPONMASTER = 11; +int CLASS_TYPE_JEDIMASTER = 12; +int CLASS_TYPE_JEDIWATCHMAN = 13; +int CLASS_TYPE_SITHMARAUDER = 14; +int CLASS_TYPE_SITHLORD = 15; +int CLASS_TYPE_SITHASSASSIN = 16; + + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; +// DJS-OEI 2/25/2004 +int STANDARD_FACTION_SELF_LOATHING = 21; +int STANDARD_FACTION_ONE_ON_ONE = 22; +int STANDARD_FACTION_PARTYPUPPET = 23; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; +// DJS-OEI 11/12/2003 +int FEAT_EVASION = 125; +int FEAT_TARGETING_1 = 126; +int FEAT_TARGETING_2 = 127; +int FEAT_TARGETING_3 = 128; +int FEAT_TARGETING_4 = 129; +int FEAT_TARGETING_5 = 130; +int FEAT_TARGETING_6 = 131; +int FEAT_TARGETING_7 = 132; +int FEAT_TARGETING_8 = 133; +int FEAT_TARGETING_9 = 134; +int FEAT_TARGETING_10 = 135; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT = 136; +int FEAT_IMPROVED_PRECISE_SHOT = 137; +int FEAT_MASTER_PRECISE_SHOT = 138; +*/ +int FEAT_CLOSE_COMBAT = 139; +int FEAT_IMPROVED_CLOSE_COMBAT = 140; +int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; +int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; +int FEAT_REGENERATE_FORCE_POINTS = 143; +int FEAT_DARK_SIDE_CORRUPTION = 149; +int FEAT_IGNORE_PAIN_1 = 150; +int FEAT_IGNORE_PAIN_2 = 151; +int FEAT_IGNORE_PAIN_3 = 152; +int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; +int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; +int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; +int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; +int FEAT_DEFLECT = 168; +int FEAT_INNER_STRENGTH_1 = 169; +int FEAT_INNER_STRENGTH_2 = 170; +int FEAT_INNER_STRENGTH_3 = 171; +int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; +int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; +int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; +int FEAT_CRAFT = 175; +int FEAT_MASTERCRAFT_WEAPONS_1 = 176; +int FEAT_MASTERCRAFT_WEAPONS_2 = 177; +int FEAT_MASTERCRAFT_WEAPONS_3 = 178; +int FEAT_MASTERCRAFT_ARMOR_1 = 179; +int FEAT_MASTERCRAFT_ARMOR_2 = 180; +int FEAT_MASTERCRAFT_ARMOR_3 = 181; +int FEAT_DROID_INTERFACE = 182; +int FEAT_CLASS_SKILL_AWARENESS = 183; +int FEAT_CLASS_SKILL_COMPUTER_USE = 184; +int FEAT_CLASS_SKILL_DEMOLITIONS = 185; +int FEAT_CLASS_SKILL_REPAIR = 186; +int FEAT_CLASS_SKILL_SECURITY = 187; +int FEAT_CLASS_SKILL_STEALTH = 188; +int FEAT_CLASS_SKILL_TREAT_INJURY = 189; +int FEAT_DUAL_STRIKE = 190; +int FEAT_IMPROVED_DUAL_STRIKE = 191; +int FEAT_MASTER_DUAL_STRIKE = 192; +int FEAT_FINESSE_LIGHTSABERS = 193; +int FEAT_FINESSE_MELEE_WEAPONS = 194; +int FEAT_MOBILITY = 195; +int FEAT_REGENERATE_VITALITY_POINTS = 196; +int FEAT_STEALTH_RUN = 197; +int FEAT_KINETIC_COMBAT = 198; +int FEAT_SURVIVAL = 199; +int FEAT_MANDALORIAN_COURAGE = 200; +int FEAT_PERSONAL_CLOAKING_SHIELD = 201; +int FEAT_MENTOR = 202; +int FEAT_IMPLANT_SWITCHING = 203; +int FEAT_SPIRIT = 204; +int FEAT_FORCE_CHAIN = 205; +int FEAT_WAR_VETERAN = 206; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT_IV = 226; +int FEAT_PRECISE_SHOT_V = 227; +*/ +int FEAT_FIGHTING_SPIRIT = 236; +int FEAT_HEROIC_RESOLVE = 237; +int FEAT_PRECISE_SHOT = 240; +int FEAT_IMPROVED_PRECISE_SHOT = 241; +int FEAT_MASTER_PRECISE_SHOT = 242; +int FEAT_PRECISE_SHOT_IV = 243; +int FEAT_PRECISE_SHOT_V = 244; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; +int ANIMATION_LOOPING_CHECK_BODY = 33; +int ANIMATION_LOOPING_UNLOCK_DOOR = 34; +int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; + +int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 + +int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 +//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 +int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 +int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 +int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 +int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; +int ANIMATION_FIREFORGET_FORCE_CAST = 121; +int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 +int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 +int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; +int ACTION_FOLLOWOWNER = 43; + + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; +int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; +int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; +// DJS-OEI 1/20/2004 +int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; +int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; +int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; +int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; +int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; +int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; +int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_DANTOOINE = 0; +int PLANET_DXUN = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_KORRIBAN = 3; +int PLANET_M4_78 = 4; +int PLANET_MALACHOR_V = 5; +int PLANET_NAR_SHADDAA = 6; +int PLANET_ONDERON = 7; +int PLANET_PERAGUS = 8; +int PLANET_TELOS = 9; +int PLANET_HARBINGER = 10; +int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; +int PLANET_LIVE_06 = 16; + +int NPC_PLAYER =-1; +int NPC_ATTON = 0; +int NPC_BAO_DUR = 1; +int NPC_CANDEROUS = 2; +int NPC_G0T0 = 3; +int NPC_HANDMAIDEN = 4; +int NPC_HK_47 = 5; +int NPC_KREIA = 6; +int NPC_MIRA = 7; +int NPC_T3_M4 = 8; +int NPC_VISAS = 9; +int NPC_HANHARR = 10; +int NPC_DISCIPLE = 11; + +int PUP_SENSORBALL = 0; +int PUP_OTHER1 = 1; +int PUP_OTHER2 = 2; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals +int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots +int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack +int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member +int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. +int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. +int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. +int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff +int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. +int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; +int SHIELD_PLOT_MAN_M28AA = 18; +int SHIELD_HEAT = 19; +int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 + + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; +int VIDEO_EFFECT_CLAIRVOYANCE = 3; +int VIDEO_EFFECT_FORCESIGHT = 4; +int VIDEO_EFFECT_VISAS_FREELOOK = 5; +int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; +int VIDEO_EFFECT_FURY_1 = 7; +int VIDEO_EFFECT_FURY_2 = 8; +int VIDEO_EFFECT_FURY_3 = 9; +int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. + +// DJS-OEI 1/14/2004 +// Modified the way these work. The values +// listed here are now direct references to +// rows in Tutorial.2DA. Originally these +// would have to be converted to .2DA ids +// in the code. +int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; +// DJS-OEI 11/21/2003 +int TUTORIAL_WINDOW_TEMP1 = 42; +int TUTORIAL_WINDOW_TEMP2 = 43; +int TUTORIAL_WINDOW_TEMP3 = 44; +int TUTORIAL_WINDOW_TEMP4 = 45; +int TUTORIAL_WINDOW_TEMP5 = 46; +int TUTORIAL_WINDOW_TEMP6 = 47; +int TUTORIAL_WINDOW_TEMP7 = 48; +int TUTORIAL_WINDOW_TEMP8 = 49; +int TUTORIAL_WINDOW_TEMP9 = 50; +int TUTORIAL_WINDOW_TEMP10 = 51; +int TUTORIAL_WINDOW_TEMP11 = 52; +int TUTORIAL_WINDOW_TEMP12 = 53; +int TUTORIAL_WINDOW_TEMP13 = 54; +int TUTORIAL_WINDOW_TEMP14 = 55; +int TUTORIAL_WINDOW_TEMP15 = 56; + +int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 +int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 +int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 +int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 +int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + +//RWT-OEI 12/16/03 +// These constants are for the Implant Swapping support in a_swapimplant +// They correspond directly with the ACTIONIDs in the game for each of the +// implant swapping actions. +int IMPLANT_NONE = 0; +int IMPLANT_REGEN = 1; +int IMPLANT_STR = 2; +int IMPLANT_END = 3; +int IMPLANT_AGI = 4; + +// DJS-OEI 6/12/2004 +// These constants can be OR'ed together and sent to SetForfeitConditions() +// in order to set up flagging situations that will alert the area script that +// the player has violated them. This is usually used for Battle Arena restrictions. +int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers +int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) +int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. +int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start + // of one of the Dxun Battle Circle fights, or no weapon at all. +int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. +int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. +int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. +int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +//RWT-OEI 12/16/03 - Added the bHideMessage parameter +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +// DJS-OEI 8/26/2004 +// Added a parameter for the percentage of HP the target +// should receive when they are revived. +effect EffectResurrection( int nHPPercent=0 ); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). +// This can be called by a creature or by an Area of Effect object. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature +// dies. Note that NO XP will be awarded if the creature is killed with this parameter. +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust +// the playercharacter's alignment without impacting the rest of the NPCs +void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. +// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the feat due to daily limits or +// other restrictions. Use GetFeatAcquired() if you just want to +// know if they've got it or not. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then +//this function will only return true if the character is in REAL combat. +//If you don't know what that means, don't pass in TRUE. +int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. +// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* +// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen +// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able +// to access Item Upgrading. +void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the spell due to lack of sufficient +// Force Points. Use GetSpellAcquired() if you just want to +// know if they've got it or not. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// nWindow - A row index from Tutorial.2DA specifying the message to display. +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); + + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 20 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 20 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 12 and 28 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 12 and 28 +// the value range is 0 to 255 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +// nNPC - NPC_ +// returns 1 if in current party, 0 if selectable as a party member +// -1 if not in party at all +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE +// to this parameter makes it possible for the player to cancel out +// of the party selection GUI, so be careful that you are okay with +// them cancelling out of it before you pass TRUE. +// Also, in the sExitScript that gets called after the Party Select +// GUI exits, you can use GetRunScriptVar to find out if they +// cancelled. If it returns TRUE, they didn't cancel. If it returns +// FALSE, they cancelled. See me if there's questions. +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(int nNPC, object oidNPC); + +// DJS-OEI +// 768. GetScriptParameter +// This function will take the index of a script parameter +// and return the value associated with it. The index +// of the first parameter is 1. +int GetScriptParameter( int nIndex ); + +//RWT-OEI 12/10/03 +// 769. SetFadeUntilScript +// This script function will make it so that the fade cannot be lifted under any circumstances +// other than a call to the SetGlobalFadeIn() script. +// This function should be called AFTER the fade has already been called. For example, you would +// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() +// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new +// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript +// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. +void SetFadeUntilScript(); + +// DJS-OEI 12/15/2003 +// 770: Create a Force Body effect +// - nLevel: The level of the Force Body effect. +// 0 = Force Body +// 1 = Improved Force Body +// 2 = Master Force Body +effect EffectForceBody(int nLevel); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item +int GetItemComponent( ); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item in pieces +int GetItemComponentPieceValue( ); + +// FAK-OEI 12/15/2003 +// 773: Start the GUI for Chemical Workshop +void ShowChemicalUpgradeScreen(object oCharacter ); + +// FAK-OEI 12/15/2003 +// 774: Get the number of chemicals for an item +int GetChemicals( ); + +// FAK-OEI 12/15/2003 +// 775: Get the number of chemicals for an item in pieces +int GetChemicalPieceValue( ); + +// DJS-OEI 12/30/2003 +// 776: Get the number of Force Points that were required to +// cast this spell. This includes modifiers such as Room Force +// Ratings and the Force Body power. +// * Return value on error: 0 +int GetSpellForcePointCost( ); + +// DJS-OEI 1/2/2004 +// 777: Create a Fury effect. +effect EffectFury(); + +// DJS-OEI 1/3/2004 +// 778: Create a Blind effect. +effect EffectBlind(); + +// DJS-OEI 1/4/2004 +// 779: Create an FP regeneration modifier effect. +effect EffectFPRegenModifier( int nPercent ); + +// DJS-OEI 1/4/2004 +// 780: Create a VP regeneration modifier effect. +effect EffectVPRegenModifier( int nPercent ); + +// DJS-OEI 1/9/2004 +// 781: Create a Force Crush effect. +effect EffectCrush(); + +// FAK - OEI 1/12/04 +// 782: Minigame grabs a swoop bike upgrade +int SWMG_GetSwoopUpgrade( int nSlot ); + +// DJS-OEI 1/12/2004 +// 783: Returns whether or not the target has access to a feat, +// even if they can't use it right now due to daily limits or +// other restrictions. +int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); + +// DJS-OEI 1/12/2004 +// 784: Returns whether or not the target has access to a spell, +// even if they can't use it right now due to lack of Force Points. +int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); + +// FAK-OEI 1/12/2004 +// 785: Displays the Swoop Bike upgrade screen. +void ShowSwoopUpgradeScreen( ); + +// DJS-OEI 1/13/2004 +// 786: Grants the target a feat without regard for prerequisites. +void GrantFeat( int nFeat, object oCreature ); + +// DJS-OEI 1/13/2004 +// 787: Grants the target a spell without regard for prerequisites. +void GrantSpell( int nSpell, object oCreature ); + +// DJS-OEI 1/13/2004 +// 788: Places an active mine on the map. +// nMineType - Mine Type from Traps.2DA +// lPoint - The location in the world to place the mine. +// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA +// results in the final DC for creatures to detect this mine. +// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA +// results in the final DC for creatures to disarm this mine. +// oCreator - The object that should be considered the owner of the mine. +// If oCreator is set to OBJECT_INVALID, the faction of the mine will be +// considered Hostile1, meaning the party will be vulnerable to it. +void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); + +// FAK - OEI 1/15/04 +// 789: Yet another minigame function. Returns the object's track's position. +vector SWMG_GetTrackPosition(object oFollower); + +// FAK - OEI 1/15/04 +// 790: minigame function that lets you psuedo-set the position of a follower object +vector SWMG_SetFollowerPosition(vector vPos); + +//RWT-OEI 01/16/04 +// 791: A function to put the character into a true combat state but the reason set to +// not real combat. This should help us control animations in cutscenes with a bit +// more precision. -- Not totally sure this is doing anything just yet. Seems +// the combat condition gets cleared shortly after anyway. +// If nEnable is 1, it enables fake combat mode. If 0, it disables it. +// WARNING: Whenever using this function to enable fake combat mode, you should +// have a matching call to it to disable it. (pass 0 for nEnable). +void SetFakeCombatState( object oObject, int nEnable ); + +// FAK - OEI 1/23/04 +// 792: minigame function that deletes a minigame object +void SWMG_DestroyMiniGameObject(object oObject); + +// DJS-OEI 1/26/2004 +// 793: Returns the Demolitions skill of the creature that +// placed this mine. This will often be 0. This function accepts +// the object that the mine is attached to (Door, Placeable, or Trigger) +// and will determine which one it actually is at runtime. +int GetOwnerDemolitionsSkill( object oObject ); + +// RWT-OEI 01/29/04 +// 794: Disables or Enables the Orient On Click behavior in creatures. If +// disabled, they will not orient to face the player when clicked on +// for dialogue. The default behavior is TRUE. +void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); + +// DJS-OEI 1/29/2004 +// 795: Gets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, the return +// value with be 0. If the character is in the party, but has an +// attitude of Ambivalent, this will be -1. +int GetInfluence( int nNPC ); + +// DJS-OEI 1/29/2004 +// 796: Sets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nInfluence - The new value for the influence on this CNPC. +void SetInfluence( int nNPC, int nInfluence ); + +// DJS-OEI 1/29/2004 +// 797: Modifies the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nModifier - The modifier to the current influence on this CNPC. +// This may be a negative value to reduce the influence. +void ModifyInfluence( int nNPC, int nModifier ); + +// FAK - OEI 2/3/04 +// 798: returns the racial sub-type of the oTarget object +int GetRacialSubType(object oTarget); + +// DJS-OEI 2/3/2004 +// 799: Increases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is greater than the max +// of 127. +void IncrementGlobalNumber( string sIdentifier, int nAmount ); + +// DJS-OEI 2/3/2004 +// 800: Decreases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is less than the minimum +// of -128. +void DecrementGlobalNumber( string sIdentifier, int nAmount ); + +// RWT-OEI 02/06/04 +// 801: SetBonusForcePoints - This sets the number of bonus force points +// that will always be added to that character's total calculated +// force points. +void SetBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 802: AddBonusForcePoints - This adds nBonusFP to the current total +// bonus that the player has. The Bonus Force Points are a pool +// of force points that will always be added after the player's +// total force points are calculated (based on level, force dice, +// etc.) +void AddBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 803: GetBonusForcePoints - This returns the total number of bonus +// force points a player has. Bonus Force Points are a pool of +// points that are always added to a player's Max Force Points. +// ST: Please explain how a function returning VOID could return a +// numerical value? Hope it works changing the return type... +// void GetBonusForcePoints( object oCreature ); +int GetBonusForcePoints( object oCreature ); + +// FAK - OEI 2/11/04 +// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop +// bike races. Gravity will act upon this velocity. +void SWMG_SetJumpSpeed(float fSpeed); + +// PC CODE MERGER +// 805. IsMoviePlaying--dummy func so we can compile +int IsMoviePlaying(); + +// 806 QueueMovie +void QueueMovie(string sMovie, int nSkippable = TRUE); + +// 807 +void PlayMovieQueue(int nAllowSkips = TRUE); + +// 808 +void YavinHackDoorClose(object oCreature); + +// 809 +// new function for droid confusion so inherint mind immunity can be +// avoided. +effect EffectDroidConfused(); +// END PC CODE MERGER + +// 810 +// DJS-OEI 3/8/2004 +// Determines if the given creature is in Stealth mode or not. +// 0 = Creature is not stealthed. +// 1 = Creature is stealthed. +// This function will return 0 for any non-creature. +int IsStealthed( object oCreature ); + +// 811 +// DJS-OEI 3/12/2004 +// Determines if the given creature is using any Meditation Tree +// Force Power. +// 0 = Creature is not meditating. +// 1 = Creature is meditating. +// This function will return 0 for any non-creature. +int IsMeditating( object oCreature ); + +// 812 +// DJS-OEI 3/16/2004 +// Determines if the given creature is using the Total Defense +// Stance. +// 0 = Creature is not in Total Defense. +// 1 = Creature is in Total Defense. +// This function will return 0 for any non-creature. +int IsInTotalDefense( object oCreature ); + +// 813 +// RWT-OEI 03/19/04 +// Stores a Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +void SetHealTarget( object oidHealer, object oidTarget ); + +// 814 +// RWT-OEI 03/19/04 +// Retrieves the Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +object GetHealTarget( object oidHealer ); + +// 815 +// RWT-OEI 03/23/04 +// Returns a vector containing a random destination that the +// given creature can walk to that's within the range of the +// passed parameter. +vector GetRandomDestination( object oCreature, int rangeLimit ); + +// 816 +// DJS-OEI 3/25/2004 +// Returns whether the given creature is currently in the +// requested Lightsaber/Consular Form and can make use of +// its benefits. This function will perform trumping checks +// and lightsaber-wielding checks for those Forms that require +// them. +int IsFormActive( object oCreature, int nFormID ); + +// 817 +// DJS-OEI 3/28/2004 +// Returns the Form Mask of the requested spell. This is used +// to determine if a spell is affected by various Forms, usually +// Consular forms that modify duration/range. +int GetSpellFormMask( int nSpellID ); + +// 818 +// DJS-OEI 3/29/2004 +// Return the base number of Force Points required to cast +// the given spell. This does not take into account modifiers +// of any kind. +int GetSpellBaseForcePointCost( int nSpellID ); + +// 819 +// RWT-OEI 04/05/04 +// Setting this to TRUE makes it so that the Stealth status is +// left on characters even when entering cutscenes. By default, +// stealth is removed from anyone taking part in a cutscene. +// ALWAYS set this back to FALSE on every End Dialog node in +// the cutscene you wanted to stay stealthed in. This isn't a +// flag that should be left on indefinitely. In fact, it isn't +// saved, so needs to be set/unset on a case by case basis. +void SetKeepStealthInDialog( int nStealthState ); + +// 820 +// RWT-OEI 04/06/04 +// This returns TRUE or FALSE if there is a clear line of sight from +// the source vector to the target vector. This is used in the AI to +// help the creatures using ranged weapons find better places to shoot +// when the player moves out of sight. +int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); + +// 821 +// FAK - OEI 5/3/04 +// ShowDemoScreen, displays a texture, timeout, string and xy for string +int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); + +// 822 +// DJS-OEI 5/4/2004 +// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES +// AT THE MOMENT. This heartbeat should force perception updates to occur. +void ForceHeartbeat( object oCreature ); + +// 823 +// DJS-OEI 5/5/2004 +// Creates a Force Sight effect. +effect EffectForceSight(); + +// 824 +// FAK - OEI 5/7/04 +// gets the walk state of the creature: 0 walk or standing, 1 is running +int IsRunning( object oCreature ); + +// 825 +// FAK - OEI 5/24/04 +// applies a velocity to the player object +void SWMG_PlayerApplyForce(vector vForce); + +// 826 +// DJS-OEI 6/12/2004 +// This function allows a script to set the conditions which constitute +// a combat forfeit by a member of the player's party. This is typically +// used to handle Battle Circle behavior or other challenge-based combats. +// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. +void SetForfeitConditions( int nForfeitFlags ); + +// 827 +// DJS-OEI 6/12/2004 +// This function returns the last FORFEIT_* condition that the player +// has violated. +int GetLastForfeitViolation(); + +// 828 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the REFLEX saving throw for aObject +void ModifyReflexSavingThrowBase(object aObject, int aModValue); + +// 829 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the FORTITUDE saving throw for aObject +void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); + +// 830 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the WILL saving throw for aObject +void ModifyWillSavingThrowBase(object aObject, int aModValue); + +// DJS-OEI 6/21/2004 +// 831 +// This function will return the one CExoString parameter +// allowed for the currently running script. +string GetScriptStringParameter(); + +// 832 +// AWD-OEI 6/29/2004 +// This function returns the personal space value of an object +float GetObjectPersonalSpace(object aObject); + +// 833 +// AWD-OEI 7/06/2004 +// This function adjusts a creatures stats. +// oObject is the creature that will have it's attribute adjusted +// The following constants are acceptable for the nAttribute parameter: +// ABILITY_STRENGTH +// ABILITY_DEXTERITY +// ABILITY_CONSTITUTION +// ABILITY_INTELLIGENCE +// ABILITY_WISDOM +// ABILITY_CHARISMA +// nAmount is the integer vlaue to adjust the stat by (negative values will work). +void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); + +// 834 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void SetCreatureAILevel(object oObject, int nPriority); + +// 835 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void ResetCreatureAILevel(object oObject); + +// 836 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// template. +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); + +// 837 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// creature ID +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByObject( int nPUP, object oPuppet ); + +// 838 +// RWT-OEI 07/17/04 +// This function assigns a PUPPET constant to a +// Party NPC. The party NPC -MUST- be in the game +// before calling this. +// Both the PUP and the NPC have +// to be available in their respective tables +// Returns 1 if successful, 0 if there was an error +int AssignPUP( int nPUP, int nNPC ); + +// 839 +// RWT-OEI 07/17/04 +// This function spawns a Party PUPPET. +// This must be used whenever you want a copy +// of the puppet around to manipulate in the game +// since the puppet is stored in the party table +// just like NPCs are. Once a puppet is assigned +// to a party NPC (see AssignPUP), it will spawn +// or disappear whenever its owner joins or leaves +// the party. +// This does not add it to the party automatically, +// just like SpawnNPC doesn't. You must call AddPuppet() +// to actually add it to the party +object SpawnAvailablePUP( int nPUP, location lLocation ); + +// 840 +// RWT-OEI 07/18/04 +// This adds an existing puppet object to the party. The +// puppet object must already exist via SpawnAvailablePUP +// and must already be available via AddAvailablePUP* +// functions. +int AddPartyPuppet(int nPUP, object oidCreature); + +// 841 +// RWT-OEI 07/19/04 +// This returns the object ID of the puppet's owner. +// The Puppet's owner must exist and must be in the party +// in order to be found. +// Returns invalid object Id if the owner cannot be found. +object GetPUPOwner(object oPUP = OBJECT_SELF); + +// 842 +// RWT-OEI 07/19/04 +// Returns 1 if the creature is a Puppet in the party. +// Otherwise returns 0. It is possible for a 'party puppet' +// to exist without actually being in the party table. +// such as when SpawnAvailablePUP is used without subsequently +// using AddPartyPuppet to add the newly spawned puppet to +// the party table. A puppet in that in-between state would +// return 0 from this function +int GetIsPuppet(object oPUP = OBJECT_SELF ); + +// 843 +// RWT-OEI 07/20/04 +// Similiar to ActionFollowLeader() except the creature +// follows its owner +//nRange is how close it should follow. Note that once this +//action is queued, it will be the only thing this creature +//does until a ClearAllActions() is used. +void ActionFollowOwner(float fRange = 2.5); + +// 844 +// RWT-OEI 07/21/04 +// Returns TRUE if the object ID passed is the character +// that the player is actively controlling at that point. +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +int GetIsPartyLeader(object oCharacter = OBJECT_SELF); + +// 845 +// RWT-OEI 07/21/04 +// Returns the object ID of the character that the player +// is actively controlling. This is the 'Party Leader'. +// Returns object Invalid on error +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +object GetPartyLeader(); + +// 846 +// JAB-OEI 07/22/04 +// Will remove the CNPC from the 3 person party, and remove +// him/her from the area, effectively sending the CNPC back +// to the base. The CNPC data is still stored in the +// party table, and calling this function will not destroy +// the CNPC in any way. +// Returns TRUE for success. +int RemoveNPCFromPartyToBase(int nNPC); + +// 847 +// AWD-OEI 7/22/2004 +// This causes a creature to flourish with it's currently equipped weapon. +void CreatureFlourishWeapon(object oObject); + +// 848 +// Create a Mind Trick effect +effect EffectMindTrick(); + +// 849 +// Create a Faction Modifier effect. +effect EffectFactionModifier( int nNewFaction ); + +// 850 +// ChangeObjectAppearance +// oObjectToChange = Object to change appearance of +// nAppearance = appearance to change to (from appearance.2da) +void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); + +// 851 +// GetIsXBox +// Returns TRUE if this script is being executed on the X-Box. Returns FALSE +// if this is the PC build. +int GetIsXBox(); + +// 852 +// Create a Droid Scramble effect +effect EffectDroidScramble(); + +// 853 +// ActionSwitchWeapons +// Forces the creature to switch between Config 1 and Config 2 +// of their equipment. Does not work in dialogs. Works with +// AssignCommand() +void ActionSwitchWeapons(); + +// 854 +// DJS-OEI 8/29/2004 +// PlayOverlayAnimation +// This function will play an overlay animation on a character +// even if the character is moving. This does not cause an action +// to be placed on the queue. The animation passed in must be +// designated as an overlay in Animations.2DA. +void PlayOverlayAnimation( object oTarget, int nAnimation ); + +// 855 +// RWT-OEI 08/30/04 +// UnlockAllSongs +// Calling this will set all songs as having been unlocked. +// It is INTENDED to be used in the end-game scripts to unlock +// any end-game songs as well as the KotOR1 sound track. +void UnlockAllSongs(); + +// 856 +// RWT-OEI 08/31/04 +// Passing TRUE into this function turns off the player's maps. +// Passing FALSE into this function re-enables them. This change +// is permanent once called, so it is important that there *is* +// a matching call to DisableMap(FALSE) somewhere or else the +// player is stuck without a map indefinitely. +void DisableMap(int nFlag = FALSE); + +// 857 +// RWT-OEI 08/31/04 +// This function schedules a mine to play its DETONATION +// animation once it is destroyed. Note that this detonates +// the mine immediately but has nothing to do with causing +// the mine to do any damage to anything around it. To +// get the mine to damage things around it when it detonates +// do: +// AssignCommand(,ExecuteScript( "k_trp_generic",)); +// right before you call DetonateMine(). By my experience so far +// you don't need any kind of delay between the two. +void DetonateMine(object oMine); + +// 858 +// RWT-OEI 09/06/04 +// This function turns off the innate health regeneration that all party +// members have. The health regen will *stay* off until it is turned back +// on by passing FALSE to this function. +void DisableHealthRegen(int nFlag = FALSE); + +// 859 +// DJS-OEI 9/7/2004 +// This function sets the current Jedi Form on the given creature. This +// call will do nothing if the target does not know the Form itself. +void SetCurrentForm( object oCreature, int nFormID ); + +// 860 +// RWT-OEI 09/09/04 +// This will disable or enable area transit +void SetDisableTransit(int nFlag = FALSE); + +// 861 +//RWT-OEI 09/09/04 +// This will set the specific input class. +// The valid options are: +// 0 - Normal PC control +// 1 - Mini game control +// 2 - GUI control +// 3 - Dialog Control +// 4 - Freelook control +void SetInputClass(int nClass); + +// 862 +//RWT-OEI 09/15/04 +// This script allows an object to recieve updates even if it is outside +//the normal range limit of 250.0f meters away from the player. This should +//ONLY be used for cutscenes that involve objects that are more than 250 +//meters away from the player. It needs to be used on a object by object +//basis. +//This flag should *always* be set to false once the cutscene it is needed +//for is over, or else the game will spend CPU time updating the object +//when it doesn't need to. +//For questions on use of this function, or what its purpose is, check +//with me. +void SetForceAlwaysUpdate(object oObject, int nFlag); + +//863 +//RWT-OEI 09/15/04 +//This function enables or disables rain +void EnableRain( int nFlag ); + +//864 +//RWT-OEI 09/27/04 +//This function displays the generic Message Box with the strref +//message in it +//sIcon is the resref for an icon you would like to display. +void DisplayMessageBox(int nStrRef, string sIcon = ""); + +//865 +//RWT-OEI 09/28/04 +//This function displays a datapad popup. Just pass it the +//object ID of a datapad. +void DisplayDatapad(object oDatapad); + +// 866 +// CTJ-OEI 09-29-04 +// Removes the heartbeat script on the placeable. Useful for +// placeables whose contents get populated in the heartbeat +// script and then the heartbeat no longer needs to be called. +void RemoveHeartbeat(object oPlaceable); + + +//867 +// JF-OEI 10-07-2004 +// Remove an effect by ID +void RemoveEffectByID( object oCreature, int nEffectID ); + +//868 +// RWT-OEI 10/07/04 +// This script removes an effect by an identical match +// based on: +// Must have matching EffectID types. +// Must have the same value in Integer(0) +// Must have the same value in Integer(1) +// I'm specifically using this function for Mandalore's implant swapping +// script and it will probably not be useful for anyone else. If you're +// not sure what this script function does, see me before using it. +void RemoveEffectByExactMatch( object oCreature, effect eEffect); + +// 869 +// DJS-OEI 10/9/2004 +// This function adjusts a creature's skills. +// oObject is the creature that will have its skill adjusted +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// nAmount is the integer value to adjust the stat by (negative values will work). +void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); + +// 870 +// DJS-OEI 10/10/2004 +// This function returns the base Skill Rank for the requested +// skill. It does not include modifiers from effects/items. +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// oObject is the creature that will have its skill base returned. +int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); + +// 871 +// DJS-OEI 10/15/2004 +// This function will allow the caller to modify the rendering behavior +// of the target object. +// oObject - The object to change rendering state on. +// bEnable - If 0, the object will stop rendering. Else, the object will render. +void EnableRendering( object oObject, int bEnable ); + +// 872 +// RWT-OEI 10/19/04 +// This function returns TRUE if the creature has actions in its +// Combat Action queue. +int GetCombatActionsPending(object oCreature); + +// 873 +// RWT-OEI 10/26/04 +// This function saves the party member at that index with the object +// that is passed in. +void SaveNPCByObject( int nNPC, object oidCharacter); + +// 874 +// RWT-OEI 10/26/04 +// This function saves the party puppet at that index with the object +// that is passed in. For the Remote, just use '0' for nPUP +void SavePUPByObject( int nPUP, object oidPuppet ); + +// 875 +// RWT-OEI 10/29/04 +// Returns TRUE if the object passed in is the character that the player +// made at the start of the game +int GetIsPlayerMadeCharacter(object oidCharacter); + +// 876 +// RWT-OEI 11/12/04 +// This repopulates the NPCObject table in CSWPartyTable. Do not use this +// unless you understand exactly what it is doing. +void RebuildPartyTable(); diff --git a/K1/nwnnsscomp/KTool/nwnnsscomp.exe b/K1/nwnnsscomp/KTool/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..ff8140fe25306725263b249f0f60656550b0749e GIT binary patch literal 266240 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

yHU#pT_#B(`_;`PmclN(P4A#>B)7^-l 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≈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 CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +effect EffectResurrection(); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: 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. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +void AdjustAlignment(object oSubject, int nAlignment, int nShift); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +int GetIsInCombat(object oCreature=OBJECT_SELF); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +void ShowUpgradeScreen(object oItem = OBJECT_INVALID); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef); + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 0 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 0 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 0 and 0 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 0 and 0 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); + +// 768. IsMoviePlaying +// Checks if a movie is currently playing. +int IsMoviePlaying(); + +// 769. QueueMovie +// Queues up a movie to be played using PlayMovieQueue. +// If bSkippable is TRUE, the player can cancel the movie by hitting escape. +// If bSkippable is FALSE, the player cannot cancel the movie and must wait +// for it to finish playing. +void QueueMovie( string sMovie, int bSkippable ); + +// 770. PlayMovieQueue +// Plays the movies that have been added to the queue by QueueMovie +// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only +// cancels out of the currently playing movie rather than the entire queue +// of movies (assuming the currently playing movie is flagged as skippable). +// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled +// if the player hits escape (assuming the currently playing movie is flagged +// as skippable). +void PlayMovieQueue( int bAllowSeparateSkips ); + +// 771. YavinHackCloseDoor +// This is an incredibly hacky function to allow the doors to be properly +// closed on Yavin without running into the problems we've had. It is too +// late in development to fix it correctly, so thus we do this. Life is +// hard. You'll get over it +void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/K1/nwnnsscomp/TSLPatcher/nwnnsscomp.exe b/K1/nwnnsscomp/TSLPatcher/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..b996f56cc93a21de0a72499b6d5a32a68be036d6 GIT binary patch literal 212992 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kl;;R$qi*)(f>Ozrk-I^2Ggyr+(F)&`UC5#8jY4?`6}-x zckmp?7O=hz>d)~NH?!#~IYolEh{9o0$Z9?`tV1SA$U59?$1S%_a)Tab)#0&P)-G2I zl`G=G6+-2P+Nm$2@336<*(|S+tErZc4mK4fxSbQRC^`U>L@e126NU?U&K{#7-laq+)b$ z!-L7Y_lZO~k0)M)IA z?>;=M>s}7_bquVUT8qoIV!E$7YxBDfHMXzQD+=yuy{!n|>J?Bg?(Mcc{^6)Vv7 z)>Jq>in-vw=~2i%voL#q7A3;!PA1w|2YP&AY+cN>FC%R7IpQ9Q7e{)SnC~Qayz9B* z&f(snWv-ztlP#7m4}4&V9%0}m63*?ydgTSOtFny z*>PtHZYbpz{%hQx_M;MxwIq)8gF`b z<|LPZVlAtU8@{R_pUR{;(L~V#E$a!mj}@0sX%9|kVxv#263aCCT&zNf6_%S(a>rJ2 zDf=>HlV^fvKKw>tLebL!sVKJ21UGk5=;cYTk(l_;mu|2N|7>)Kj`--=y!_6~>)2uD z?Y!)xk22`a%jEtvZ8_!t92m0mVtWE8a(tJ5pcs{ks3 z7Iqo2?L8JMJ*XB8f_C%{ZFK8xJxWHe6q)@AeK#&X0$dCb)l#rdbQoKIbJMYPK5P2L zzmia_L_$?CKb@t;!v0QIEXPRsx=Zh#L6R=qV1GUrx}kX6g}bC5@#aH7q$!6^tLeyP z)z`*>j$Bs8IUqZ$6nusL4BBR=BUgf4AcRI-mZ1aT@Ped0YBItqh+o~W9oTL@%0&MX ziM2*cgY-vTKtSE90lzvEt%K8coPV^}Af17dT)R37E@PgsQ7RPeKz9+!A)Q*L!?sih zkJC`m29J(X{4pw>)t^;Il#{k>@)J=Bzk2;sVJ6m{I_nNtR&_&^B>SN7>>8O)qTfL* z$vQlRRfc>Xmh@S5zoggKFPD#KVzW@Rpea#U537m-Gx4*^dZJm+V6R9D>siIRS;Ypr z^87$)X0s}OC@SRyQ8=ujrn!v5`TsQ6P}oWzSHrQNUH~`^c$$VjtIk70SDLnidH zc-AD>jhh>wu35Rm)^IV198&{A!+hkGhhxQ{$a1Wl#hz{Qiu}fi)ogg^nm(H7UTB@D zuYfuV&Kl9XTL7TdT?l?+(^$~1idhuQRz{n}%Yc$_DKgIZa6F)Wa7%uE zL%tSWosJ#Z=io=x&8YSRNkb<2$l+Rb7k{Mf0Y;k(1cVl&-K7?GjvS@O8*df>=uU$+ul&fTFq+2Rgokit2s| zX6TT?MRlwDIgTTW>Y9+54jEch*Bg7Owc|*<(Xg-MIJ&5gNA`8dn4-E*_k(%4Wr*W* zN>SZ!_IDhY7u6lv-*L<=s!PJ5k?lg{>;4X8wY#gh?-=a3yNUaQ0m%DMrHgK1Fjn*-)%aR>ZjXAlt2|{v}d^6N*LNiIEm4nAV0XX*iy?&WW52SZtkVF_gE4 zw_LU*5p0Ea6ssbX(-Kt8)m!uu&^8OT8i>_D`W*;@tOxzK6oQX8k6>mq>aXAHIt92` zKrBXOr}dZyEzGE8&^w*xA4rpY8nO!-fVrUo)OaR$_P1CH4PWLQl7xoM)_GPUNNWRY zd>ADW6Nc#WwOqELCD`0ty+PBk$wC_qM0|d`(ZT0fFAZO0Ee)Fm^wQ8~>E3w&X!x?T z(9pH0{!h9d07-vZ>)UvXWfd_TY@H_((F3gW2!?)*+0l5K0iOdZ`dj)!BH8OLAcUulyJ|+CNhBrB#Y8e_k$grY2}VB#$e4g9SsGu23SUk%W?SdE#N|fo ztYGNbaO(SQH_I)zEsMs0Ta5S>I&{qmx|}t`#y5cmmdG>e-98@F@7Q7ady9a=-)E4D|Fx($3Ft-rowuDdpY0FS-xgj|MgMHME}N;eXdG{m!^5%x)zdmp zCo^+U9!(f_jtA6T=ts6J8g5XJ!qqJI$~x%sRKDg~2t`{VDRa^7wF|oaExIF_W zWBb+)f78BYR1s;qA7)Cctfnpp>i+3U(iIl#nZ%kaS(=DzNYfDOgq#(tmFVj=AG|bh zx^HXie^-ya1$x{hdVD7eVT6T<&~n*|mf*VP$O^5;t1Z-IAWGNYNWIviX(b-&5Bbhk z)_wvSJ(l(CfmAC=b3D={hih8|>Ebj$dpkw-54nWJpkkU57#}P~S|u{zf}PoncM zIH62OG3G&lwNCdUv@X8p{vF?g%8WYkbs!)*`uu(#q<@pKNMA0XAl-GEAblMbO47_m zn&d53uh&=!W5>tn^(H8nMjE4(fclGdP9c^LSmy8=^6nAr5Z*14f(WZ_6U| z7DU;7jJ}dCM+Dzk58Om?Kkx0K=l=g#dhQg^XpGRa*oy5lNFzJWw6d?Xm4I{W4n2hy z<7uR)1rn{vyOadHZk^-k{4<=W1R>-6t<;`@2K5Gn#N-y^&GNT-B|{uC3N0Cjc*%J8 zTT8}T0lj22zu}PnWiODiO^~PJzo^Lo^ps1+$re#**Lqv0v}*;{DWY}X$NAMF)*uSc zmPKWTo(Q9?q|2e9Vx5D}CBVm8gMD2Z3U;BP#L_UBX$FMGb+iWGz~5SfP9!vr$wbr_ zRON9^C?Kv(8~K|6rSmAw;npdX9cZ1RG~Ytl9i{mKuvVHagtXGYO5#oNwT=SR7JDcg z`Hiie!v!=-Gl*$UvWhm2X$FLl8E9$B&ZH!s zYn`JgdKK1rI73TGgEZ^=0xHn0`sg(dAukqr2)Qb437IUQA!INKxq+f7+8;%lyRcnMxzeB*lnxMo2Nafry;D`DX4#9or3y|%~S?dnxOjx z0%P?7xHik*X1Pq*;dPy=k>m^xgY-IDLkT?&w|69cR(K9BGp8 z>i(0zsQxpJE}#|{-DjXJ!rG!bZl0#N-tKsXXR-dLTj#Zj;N#Lh4=&>x){}`~Bb<;B zaW3O-$BasX_3_~21qjo_#6F|}8E4ej2Qk_5_6SzLo@|dSS9juk0}M)gq_I7+EFN55 zfc(|(w5K&%7k_2z<`)7=-T0@8SpAY(B<0?Ka+9A6i5yTgYGMJ&s-D)`)zBy{MK1;;iMJgGk9k=abSKTLjK5#WZMVEta^Q%tL-@ADSFS<|u!%6cB(j>QAm0e|3 zmc1rpPWj%IM)wA)>=#fT?Yx3@|1ax2KM|}Gl|2uahT`&aARt}*FC#CjyKf*; z@&ep(s&$vg*L2_F_b$nYSfbEP3aI};RyE1eP1^+hJK<^;7b~XA&8V1d2y!ZhFe-*WL~HZk9a1g= zTDD?(x}@l>tzJ@kSyBct&45rv$BH3|wqka62E7fv_F6IHp_ZPC8ElS8qsu4ZwGDWk@0@>C3AR1ANJ)?Z$5NEzfMrKQ!9@|J*JQnp&T{HA>;D~1Ol^D2fU z+KSnLNXZMiz9f?-yKQ3*wG>GklYv}odZl7Mw@#^;m2m2cc@EIf^p1}Y`tKRi1K9k$ zL(N6R%;^F2bgAJC9@b#FJkxdB(d0lcOU(cxnzo%_(=|gIYrv$$9>V_7j9JQYJ26~iB*RcuL_x6?yP#a3G}#|h{q#oqPEOD zjXlhnW3W(;y;HWQIoi!<_%8WW+I-GuJ_ABLzMQ9>hk(^qJC8!7WMhxLYUgYyjg}PA z&I_$mwDU~s6zx0|POY8$0}``&k2aepKkIPi?>K*KxpEEW+6-5&5YTXCIQcZ)szE){ zB){3ab~bNy5Ebow$~r|mAGA)<&JpXVovWqFiq#;vn#Cnza0@E9$y33EQNjEnS~ou9 zkg^@OI$Kiyj9EED%Dn=5NqOAr$4f|)9Bj4oFOX8yGqjVo(e%3avB<)*1=Ob>JCvPC z(S6T4M``VBz?#3&&RGOixAPtCl)X6__3APQ<t5^HAAd z)bkPtDOWv*x?YZYmbzYAJtqJGsgQYos%MpU7Au?rg?ciyc@aIedLG>(FS#}^8fU%A zTI5OF=0!Eut9$g36+2O5sUB$)RE3c3P$5m15VF-eg^(BF)Py_*XoM!@!>1fVE+kS8 zAw66|+A(ux+n{4fNUyjYU-m8DyP8NFVDILbgNg zG$B;Lo|=$emXHL>vxHO%_R@kJ?lrri}tKkg=>bx%qzxdKS^uCCGDl$2>P88_S&5?~vy-ooA0oIr8il!K>KJ z3)^8znAJyU@{v`NGw*EUA_ueN$N?r+R~_p`9V_)4MCm3`y4fh*bQJa-h|?K1ikpjx za)XI7AjCUG^0ch47wyA|_H%mXc2~4d0+?EE--v0+WKOpuT_cAHANyH8;+$(nU8l3sQ%|QMKB|!SsN`k3k2lkUndxIX zQ_YJWo+?B&Wz>N>Q+YW=s*n}k)yC>NO=4xxbbBg#*IJZVZ|PW`iuTr`M0vtQVMY5z z7W`Hg{JN|L69w|wk+|WY$8xOVKOpXP(~OCHdWnP7XVl60XzwbY66=6n(DurwM9HAN z-*ZJvly^)NtbTMv`**<9q8x(e5aB(t6D8}4!(*i4wtE}CN2Tx62J9Tf_btBlH&*%FUb(f>_s8GjwU*zRmrwGysbbYF*HRg1!I=>a;?mhd2QF!uXm5DR+ukZW?{P+r zN#b~()Eo`6+sw;C=U{m3-M=~tgt_}y7r`YBq20fF6}s@+XP5n}-9UH8{j2|Z8OOwpbS0CV&&67Ky`J1?P&aKHmF@F8LNDm0@?GW0H7=xeI|!4({xOkEpVZle9hjn>IV+s+&j?aa_J z6YVrNT4x(=t%+8S@h7-j~4wr7j;ZmIXOXJy@(f(PNNK72o z!v_CWITU>JSi_aR)PZ2D++ZlIA!?)*Lwm z>TpP*Km4>zxp5R_52wxpn>7B_gdbyS@n4)BNgP28KeN>~X36fQV(<0A!WC zi}}daR-MC==0QnQ<)+z+Xg1B)Nu;@qDkYcGG{dq(kNQwo{_rGAhfD<2y#hANofSCE zzNLVN>v8J6l|{LNHb?N~@lh>qJRObt#~D!^ZO2n!%2#wJU&%xcql0ZlQQlAp@qqBP z!V9PLCFQ0#j_cp#?;OUR7@G(^~j>@n<{2Z0dKP$VeIKOfE1bNv8ZzLQ> zAIE?It$j{|*8`&l?XydR_b6(P4c;Z>{Nld|=fh(t=64$hHed$S!*J9Ph&#Y^4dhg} zhp=j7E_-|W3*As^PModt)~#a)oj(d;_9SS-l z)uRx+_2+}|B&wU#qjVO~8Aw!bQk+SfR!C=Y0#Elf2u1<*_G40OIn@VQU?3%;iV>B9 zs>d^VvdkYC1Hb-U!8^gkXa0UOTRkDI4Xg>$+i)yBL9&lP8mqRmKC^0j z5EKf%F=^lSLxo6X=Tv`ihEtBWfFvb9U-@X56nCh~WWN@O5xx}?R@ zW!9ONhVJix%3_r6Isa>kImi(6uI)N^CoxG%9nV$%7M*^#pDFF*6z#=(p*e@+OU;ri z7^wBr_1$n#z5`9Z!y)ndW`}q!k9D$vgi4en56}it3#bynHPenG_{E=48n3}Ql&-!E zAkc{bgqjG=y%#p9CxsD?FaJRS!+Fi6(zSxOoZ;>LDeOA4DRWK0`xsujt_Ltp+0k&^ z0YC6s*lDoef{dh!ac4l7S%67Y~wrL88H;q&xLPCr^K&Z z{K}2r{o*%J{017odic>wrqw&xAAwF!as*~XDOR#YZ}!TYz``S7IE(7;0*cx_Ox%xK z_mOai`{}TwC5&f6w0k(ij!v$J2V@65P5fjqwT_=GFV|fY+}?@D?gKn_-w^ydxmw4B zEHh>o9g}zM?h=!O8RUs}lQDrd^W;-RCWuuhQo* z>|`_wIim5hUr%m=VQSFNBBXZeSGq=V0icX|DB99TR3p}#n@)-rtZJzK%C)isF&q{l zK93LQ;hHU&bk&Y7222D7@8m5nrAdRi;igUYMST;K8e04KrRCvZBzkc=bTlS9|F;Hmxqf)u#IV`qV~^c~7c;XT*vH z8_9u2+z_9r-l*>S9-<1iz+IYRP%B#9f}Kp06&ayHMN%6V*%A zFW?4Wa6x0Z62IHQpRPjE2$!(mp%si~yN1g-WF6Jn4nGzEQPXiutEC^Y6-%pe5*eM@ z+lBAB-VqQV@I}gP#-Lr$%m}amppXfdmVY5G7m>_n=6s(_Je=tiV?LB4q0H@SfhxTFoWg+EC(0QJ$er2-isk747)o6AaLWQOSm)Xlz`)SWr`*_B6AtViFSjkrQ0>T%qgA7VU&L121~M3tMhf3rxN zgDV`4p%2i8WqV($uai4{uq#6bl@es7eJDD*T{Oc91SCGaPtpOk;U$nkKc~-RY=id^@T8maoix#bV5iP`mX!+H2)F_Og zBU;N5DLGC=3u1+P0j0wW(ekT_h$%fBznUbV+#x&z66IG%ibs}jRAe0{^j_StcI&`8 zA0JZaSi41a92dYp@8Ya)&SD0bYfy4=)`8NcED3FNWi|aibspM0EvM@ay&Y{^Y$h#S=IJ0R(4iiA%OG_rf#rL%MOXiGp|MwA8ca~d6pnU+C{*cvx$7`70kum zX6*WPj&wI!g$G*C!Z4OyOoT4fQUe#@-X+v@#?j+U>KSGiInBYQBs8kf8lQ5|hl)H1 zfr41?kaDY`Kmw__Sye*1@Vf%~#J2kY(?Dd^ocUVNvnu_8&~6R&yB(N$J@Rn1>3z8J zwdr9DC-$ICr=p9ZD?2WQ|z+*JS2skG^P z_kEPshB9=T0-dH>(loef?)0X4kZE|3jl!)>+^91|L<}ai2m{K;!P#!_RjigMZMX$a z21#wvrhv?1r}-{z8@1^`w0o%wbRN;xPRIcd{vrp?)1w=Z5eLS8&a~5*yAdDH`7nz7 zE!%Ch{SnPg^vR~3$jce+&q6&}Q_CJq;fSWx{~4mzgHB!Z2N<7wKXH7z;PNuuB!=d* z0ycmqvvX>&o9_`ARlwvs#T3xV$mid~^7IJG4Q8*~z1`qo{=b_3+Di8)C-lI_RZl;4jyI?K_yh<<5Xs} z)05%CbZ|Plgx9fRi84ojtU^qQVdtx{onlQXSn%Kyfyh*MF85%Mj64`k7B)`!EoeOo zK6o-)W^T7>3Sl5=4moYkw~y19#6}6*3@Trt=|3@;o^>JyE3WSs@HKPdiu32Vr!?FP zD~`DP5FBf3$3?ZRY!_R7si!n)PJTZ=CXCd~(0tft_;9V}1K74Lx+<(ry+>k#sc=qI z!?hDEhjWbTr=6$}ILlRUIBQvNbQY=tIE7i&+f?zP6s%o1rk{Ooyp~)kJ(^qzJ(R}v zZ6kt(peR;7FCLs1Z4|bLhhmU|sRkp0xCga?{%SDx2sm9iKR74P48^PG5&Lf*-~`5u zTbWB!xF%7(Tut~ZkOGbnV>-Dz5;>|jF(|!QB3vatm<3#}u37+9Qhm_d=3CRcw}>7z zrVB7TRV8jOfeT_&Ql45G6P^c&H67MY(ITsG@0FZX!V*v43l z7;(S)7+X6WBJtcd?m}MZ6myakvoOh9oKlOxO!RZ96tJ4t3Tw;3xsB=|p#yB)sCXYE ziJSoiAzL@967d0B0Sb|?V)}tZJ{g_$q%Yiotxw_}T&MIEcazBbl5?ORYlDw-5(0;- zaYgW1vFgX`n{NFjTvs*WtmeGLyiQbRH3NUdn1(C8RPPe+4%DneG9JSN$qSr9&y+$J zr1nq!Av$%w=sZy$F5dH9Nrs+{s4i5G_M?fE_iIhJ3KI}FmHUeBSv7an`qvt3Dc~mz zqks={1w4)QBXEiH&rhIxM6o2Cxl1g#U!8q`Lr3YF;Cr1kZitKUxxx36?|{tE5ST|M zT8<3(`=XP0A8+D!ZQ^Ss@w-XR8p<`%V^BSt)Gv|Tpfb(mbd8hKYdEW^*}4Ck;5#;_ zfs)fZscMVEaFcR`lQQN_xzVQlay|*znA)#)>f463o7DT_`L>s}X|nd5asYjCr*`~jF2HwcGNrm8(5iC7k6B4f|93Awdk1~LXfjASRhvBRqU>N~+8W%ek zH&g}kGv%X+VQ6Bm=!J>^tP8rExb&}39RZTDV&TOQEZCE>x6PzIo*dPG7PIf4x))89%d+d|_|YweM3s{bm= zA?De}gnY;_QI8HFJA@c)N?tc2FXI^(q?JrI%Ux%c7>n zTV?^vloNfS3KlCT`PAc0y5ypIpuogfLyyVvvbg+Rr8;|^F*zgS9E%a$cz`2Tk5N{; zPEn!bM<3Y;FFs*dPXNCB(T>p)eb#w8L9Bi?LfW6_UqkOA$+Jnk)S?Fl0q9 zRPX4yuAzEIUYV&sBrieu+~5veAx)io7Y(8qo^{l^n+JC=Jm{S?hBkn1wH$pu*nxG_ zzv!%WGB3MMjVWf`FJ}jAIe4=?7TiEBj|VrP$%zLWqfHZGOg5_59@^P%y9LsCCXs1q z0@%#pEpYI6Yg`(Iv^oy$rXDGbktVAt9&Ex}0MS{iP490tdw;9h`&-7sm%%K)Y8$ZY zkj>oStEoY>W%24p(@S^;rK}0QV$9e^RVC40@!BD2=UxG+jxIr&vg6|$)a-d^pD{50 zC4Ti3Ko3A-JF@CAWP|~clLi*Y7!}?wv8yk4V|jd`8Gs{E5N_Pb5xQi=E;d zk;dP7L>{`8jwaIWMhV zmOQXmNsnJM>L|$rL~9yzmPQ8?Klix&7KRy*1sA4H-i1KPmK|<#k=YIbG76IkGNHj| zTnnM@u=oiNf&uK(LXN`cjN;^;CXAyNT`ogMsO%>u87)?+#*7Ly*UsX@zR# zLQW+)vsZmM1qI7~fj=IY%RRo>F4sndZ1bg_)>#PcrbuKLtK{;!^ZWtT3k4$!j{uuT zX(s<@nkCti1{R~Fj3*jWWfaaH=(>Rpl|z6*R8|dUN-fFbS%Oj1Mrf?=;vFK*Syq)b zP^2BB6eOmhkN?Ov8|^L#s+gR|g<42)a~mrocvmDh5}SfTbYK&W}9=#_P<7 zIGqYiqs$qO{a@ zKzKI;mnUHw3$>sp!PpI}Ab%j92n56_psZSpo~cMyCOXO&#%65ztJlhrQka>Q3WGGG zucF7O+=U@kf*H35=3&1HBteLO4TA_UO4Y-2s1Pow6;J05iWoLlZj=@~J9J>xutvPlKdSc8yamUVfuvO}CHej$_Sa&zr=&~-$N^^Ats)t->&&q8? z|M#|j1}LgytA#DsJ&NXZM!OC)ahL9eFXI8pS-E`c$U5ju^~KtiJkl@a0<YeMq~O(IlB=sZF*2~`ma6FP;^)r3Y8 znnH+uyv9j{$_Y&%)Q8YGLIFZ!33VnkhENt#(KwROc0$7lZ6h?0(1(P|2yG-(LTC-4 z03q(lYAhu5ETJ5^_Bf#op$7@I5#p$`aT}qzgtic>CA0}p>UWJB_;X|9YW`f+xPm`Z z8kh6uvc@O*b7A9B{+!#mkUv$83;0vnIDtPWHO}MDh{ihp3~QXppFxdb{v6VHHGd9h z%%YN0#f?+w>fShsKb`qd$J33KzD9iiz_$V42l&o|c(>yBOMDr8JMsDdUg;~tHyGb= ze2jCF`5lYjU*MaF?+ScZiq7h;JLd?f4j; z#c$`ADt!TbeejjzqyG{39f|K0d{y+rHwoXb@m-JaW_)${?!n()1j zZxg=F_&&v##Fxgm1K&=3T~I~<-+uTG#Mcks$@s?NI|m@ zS)jMF>rC+}97r%4XNo`KsG|@*Xm!|C(M8G_ADt7P!;;|ydZ9q!KBAC6y&7#R)d@Kd zC5zbY*O#kS^r%n-9t0Zh3!f+5km1rpMel^&4O4q~<_?tHgoo&R;mKu$fYvOB6m6+q z3{izO>S?rLc&!i*xN(_9v1_9Mr!^n&Lq6b#e83O+fS=*M(78}Sba#mNe{S8`j`mgd zIO^_*o^;5n{vgmRO1+$!JdB>R>IQ^5^KDE=ws`6nP3k~Y&giPZ^szwqswONWXX9rL zDSB~iCp-%lhzy$s@qx&gpn}RFHLCPEkx>k!v3lqRqzY4y!9ZXJ%5226b0Z4!j@coK zKBj^Ip-92o^id%*@rvH7REey&XxAW&K+XD#rdRq9dn6Vjol^_CTViLom7>jZry+8& zghG!FJ%p>)kBZk5E~px=8er6Q|DgoMUez=zF3}1qhbR9BOi8+UNT)7VpFy&a4;gD; zR?PLYFx*VkXAx4PE)j(bXlJZG4NnJd1I%GMe=$twk9KGcJJC9*WMv-L(cyhPu9G5e z9?U-V6rQ&nDkaslKTn_b=ZU33`%(~Lkn2eL&aMvW5Y#-H83?FwK;#E@r~q?QVhh&0gB6Gr zr-Vm3Q^F7?R0CxP(=#xeMn*W5gh#>hp4VRMt868&CRzoH}}8?glludLib>94kr>F&5aosM;n`1e0YDTd%Tt~_(xlPD<(w5 z^fU^lCIVqS=2Ms12tt5~Ko}MZYqBz>A~`rzV@b|X4aiWPCTqMl=Jz*S8-v;R7*2X% zzWZ!Qlx?^+vE8u^SGQxElI-FF=g<-q&J{Jh=U85&BAk5Y6Mk@xtx+dp@C$U{7*nH$ zS;z1ib*OcWs!_eI14gEcb&RZ0)GnRDuo{)Jj;b2ca6b(j}<5 zqzot1xVz2U=HKqN#^9wYQ`4r(I0i6U6?GG=nqXp+ha96ADGZTt{=fS{X(jRH6v;T`n(7#vv_QH-|lbDUk22F`BYrZ1sd)z48{(H|=5!ft6Zikc8Cba~m} zbt>inPfk!`gN+-}F#yOYqJp`~=We>2@3I$(;Txt*+ztxm{xo|P~_^xIQ=`ggcxRkV;n0qxYN{1i}^%aFdjHg1_1)v zDkN~Eu*uAiEuf21Q5!;xwLhvnK0m(BMF~IuB2QT7_+nhq&we>^og-`h3An@bT!86` zhBP{<)pX;Um+b=kgfDXV#Det*^m$P!KCrHpjeTIjdLZ_py61ws>17|FEW#J&ZpVoWlw!UFu?!D7X;hTehSv0H;nnj zNmjQsVLrvUr)X9N(s7bYPQsY%oE4mPPBAOwz z($<-{3j>{9dwWEG*Oj`ykk+Lnvu~ATq9FY)y$lhok&v6v3SC7^Ab)z^$vGW)( zgC#klSxWM8Uvsr6424jf6Nns((?Nj6;yTSgM&*6bnbZF!SkZhko&G|mj zaFQ%K%Fg;Rt&SS#cm(+?eKl&6 zs9vohoE)S+Kmkgpt!BK5$2s$JV9kwK@##_y@-gUM>79vGw9!xlv|-GC0<9|s+BUf3 zoCw+zpez~=je|xAVATX#yxdw|E``Sti25{#kNq4#wzSvER<;88^s)Ovh~ZoMOMRr% zd=BaRJV-%^{1`=y;rm&>9vOWR1N{^hkIqEOVpPF71dc%~D=9Xaefudwo~NYo&yZ)t z``S4~fTMd65v&%O8`8HeF$EV;FuMR?Y8&V^g!!|TVzX~1)c1P{wc9X1jy8%7QOf%h zT0Veha23p~4A4TS6En>nQP(j#C&OeRL+~##9d)IVevxdB^o7wDpT6Lg)yV!bve&9< zFXLV9-%UYkckT)0py2vs)5_OOqRHgCx+y_DW;s^rWdk>J^wi4JlnzI{gm>eC3H1@9 zpxiVnXAk`g4=03dtwE!F4CSC%u~J<^eFTUTm<&)1M;5i^kp@57&3=O;CHjD8mxad6 zRS_lI#39>5IrG~iM`M4$ag9$UA+&?WU0Ch5bht)0i>|2ssqL7kL!Dsqnq+6VFF|?F zq6~{0@3{6eJ?FW{ju)BK&fim{(kE=RDZLg;7nr&mjun~ooX``9-i2pBK6m-??`8Z> z;5VncEwMGJt<>CFW^OA@K(Vc52}*}W>EwkU9V9vqzqV4#obJ{#i*lJ`?+VA>zfUNdV2h<0@2krR$`#%VtrJr2nvf1HKnr7i zcG;p_p`Nur<-;(YkOO7E3>bck-|P4t!tW@4r|~<7-xd6T>nz|p3(rhEGx2od>BQ54 zrvpzLo;Ey1JViVOJcS$k#=w!-jsC_j8^8JZ#c>R{fq@Bq!N1Yk3H@NCF~V->JIo=q zB!_fOmZ^{A2w1v5QMczfQs2f@kqUl+=>ry6Tlxcbc@;(|4Nqp4X11lbO)Kb@J#8z^ zZ8c`RxoB8paI*yY{WVwsx-gl5J}LLwzeu;MD@W9t5u|by{8hGv`yAnq9QaBo_$$!_ zrkmQ=C_Q?81TY*@r>gdXH{}nhmaKxy@;mf0r5P)sZfbsy{=2&6!w5tr#E!yVvmc5Q zxbku_#89j#7o;%Q7U}D6?cce6QUA``TDjr8N35(opOwR|;e1tITPrOqmkP@fS|iOq zXB9=9@-I2gKb9jR2+0~V8b#L2Dc>xuoab!JU`;&0q22GRVP|m+M%pvI+U@xIlkr7{ zzc$c2`cBR+5q&ivP}nOxGFn@^28PU40CsPFF*X=Fr>W6UNlvC0>tCji)!c*+9TeFJ;G|k|F@FhOvviMn@glOC*F4OuuQzoM%bP#yhK<8 zfUu_vOr|~kw3FP4x3lj>`pyg3GN_-`6*=P2LB1|7R1+RB%Xg==OSe7nWwU&1%0+2r zm^mION|2``aMA-`w#W|9*VqhFF3KlW7~My9-PGOIcP>PA1Yxp zGMyVb2nK>ldU3sq2rB;=LOZDZH&Ff`m2iUAO8r*_q;ci+k+mxMx-zMjwR`vzL}Q&z z{pyJN|B22-HXI6- z-p`;64$<;jl@zs1YTZcCwKm8rTT{;qMv2NL0YySwIg;P*^@5!Rj?K8TEgOB1dLNZbOBzE|B53?mweJlb_aPF9!1GGOt521Y78iJSnwxio~Q zQ0KaV;FHmKojstJjlw%UN2#-cR_>1l5`@$Irc$6ePtOQ=ib1F;>yDB*8k&D&lR&NO z30h*KRD}uL#!2Vs(MH{C;MNP!Y%wT< zPvqD__<19Z(;3~^TN@$OF%asY>stn;dCDUH@?w+4CuguyOn#7)J}Je^*5SRjwmyQ1 zwqQFF=ovOp#`ST661e?;L{Gka2BYQ+=*jjTPP@F0Xrd?G^gMyE5&W|8@js#`sc_I6 zV`*cw$>-=vO7&mUld&@PP$K+V@$=)i6~7JmHQ@I+exO1A573hw8#*=m5Pm1{yGUjK ze@;)9pG7SOJsJJ;e@RcSKot6d67PBp?|%ID;uog@zmT4!)c-Sjl9wAVYmDmp@94=` z*&~2KKs7e}ocLwomxJG3_$|f{ee-{So}|iDeHH#cj^76S0u&POoBy};B&|JRT4bc0 zHZurFyB!@dSxDhhiC zTbjP$8La6D7TFs}T3Z`AS_6Vw)c!8sS`K+l3_(-k2wD_JkgEUp_?QEH%rNkgK8}xV z5JHBwjcQ_O+h>|3w2cs8i`6l+Z4!0DNojrSG!XEyiaye;L3|1v_o_LDeHBS#_`iT0 z^8|;%&H5NPZd=6p+ZZHn(pZps@89Jj} zF}HbapW&<1T#zIYZ!baZ9KlHwnHHJAe%X{h)MGgWLZHR;ebwZRREDtcH1|=|Jo?vS zHj-V+?NSf5nAHm^5m{c&PS7))=r>Rq>7CXnh!1p+N$Jvw;^6x{1TP|y6p38jet8IL zyk0#ci|3IRhCB>L6H$a@8XzM=lKyx?2|eClXxM)#1Qw_?`0_%g~3uG#C6ZT>^jKC zV5u153gupQiGSKuuG$_fb%a_NLcB_c)5l66%7X7&wG;Q-k<@q%qkH4Npnacf-dv8h z|3BJxH-~<#Z6tM^&^E_^)3ydkqtLee_E_84UoOR(R#{1Gv?{d@C%7t>2kDX$HP>#O z?f;JX0r@7N7K8;{(pCA`i4soa_}3?xii^pm0iB{P{%nwiqRH`pe7XLnA>-js>-CArWk?Essv--iQG4ZBioG%)8ulQvgvaw5sJ+(;}%RSi2n9uI0c z)_6KofuoHDP%X99D981^Zpn&yp*^ryk>>l@FzWWHQPzQ{zS+T2@dO|(?M+rB)+Vc^ zStu#h%kCQl>epw1E!nB8x0&Jxe$3q}oNa9OUo|-hLt?Ngs=mvG4o84$41VYOp;DX8 zECB$J@FQ9h_^Y&Js4H#F7s%8@x+&5t1oMM{C-+@* zlc+6m)s1Xi0;FQka05_U<)0u@UA-dcMg zpB$2HTEDW=mW`g)F0;XMf<#U=R)kDsix3-uHY5IHPnHoNj!2^$L3ARuu}&-lXcjGi z7~zY4icKmu$n62zMwCT)_ajJ3R<7@~Km7xQ|ekl z2X8rb_k4udUlmr(=>RG>s~PmIM#52y^sd2@WoAFd_qtK6ZLOY>*1FGDY03U|pP5?g zM$``C83O<;yp5JhEVd)w8hrtQ#6oBq4%#R&$JHSx!hudy%YwbiaDIE+x@c-xvn$t& zwu{R3M?=NgI}+3gA8zrT#(0L7=&K`f5@T%+4%%(lt*X?Xa4(&JVtfxNqb&tIi-I%K z@xWoJGR6$iQhRF9i1!`7)E+hE0MR92C=cZy0he@GxvCS1ay-8Syb$oDK&8l8w{l_y ze1EgqEQ`$_0CRr%5IT>}w@XF}dZhb6#at;kC*6*n`$KS65R`$Sa|lXA&}r@es$XNk zykr#lBB3Rp8IKWqG-QK8rDxO&(U(71TDYJDomNA(a@f`i01_aZj|XuM+B}Zn0ypAcScre} z!zvdCpyoSv69XSAbgr;ARgJ+q7G~u_14^;!{e1-hV!xXp=}@BpB`F3b??+ zUh!W=)55u?UY-KrI;{jKO)&N{b_FOKaqUZ*827{`1_@61Ov#Q1z#|?UTTL4OL;y<| zpGR=ljCt*=X%uVs--TWYHT7Qm8J28p1hgY^zdilXS0Go384H0G@BqQaQWkjuOM+x& zi!qg`=h%T|5be-L0qmjoKr}XHHh57a>%!6b!1ocOcCw3Do`UO`IuLx&ha+ntYP=h!(xH)HG90#%a%j#oyCqWjWwCwM4CIb>`$2a!KM** z#7m1?lh}9@J4s!oXSjj7JuhNFu+T$bXqE$Lc41{Km1uM*`zPR%XG>;3qHJscJ3JUT zu1+b*%OHc*Yj@`$=bpLv=hYWv;h`_cq_Un~#!U#+{-AuWu<4?l=;P`~>^cA=r-_$9 zS|$f8dc2ja1099lflN)6VL1yo=tz7J>DYN9mdL!VBed=)TLCgH&Q2hHE4)YM2rVb2 zhm5tTMjci@6*k@jLimD3vgLNSCJ|@7&nyqBUDP#UdN}ZS6Kr_mqbFW_3E5MObRSVV zPJrXT5NUKYJWgZf$En0r1l}?FIP0p{<#9AkQ6afMrdK;Hpb9Zf;S%95ot}#{7YJS^ z;)Q2D=)|-|i=b!Bdi?k@uQ8l20xX4E`>_JXd+Qw zhy7O`2lmi-ZK-#V{sFJ5|8Jmw2N_Xq9Qp}-+hWXCgXYInwShJO7w%$B$m0Yd?jRFn zc$HcLh=MW;%Dt=`;&h@#2GyuEL$A2FRRr+CZV*$$xw1gt zI8hDfZBJ2#3wK(TzC6u>1C}zZOSX{U4+-!-mtLx!S3aFrFDDH37&Mu(h&FOF%HCmX z6us;Wh#KtXX=++*J1)P;@IrkEKqBn>#qB2}9j#cr{5ut5gVyTFzG2$aYlZWDY_NcPvPKmI+>ht%~i$70k7L zcLBl}^TFPtVT9%D%4o0syL5!EVz14`Bw#Hc*V+TS5D?=_l>4fx**{~&Z-dwbER*c%@Aytqc~*`a^3;z-Xj|1y+-7{c9}0Kwz%}hk$<*ujS!Rvnk>OJ z(7wZ=vlrVV>UH64IkLS`t+A~iItbtFVs4qhZ^TiP)Q3d1C-=bN0Y_b)zQ9xz-MmQa*#B=I>J$_^1-Z7RtvAu68^w4Sdxeu z8x32S0X8$%1l-^_Q!S%q-O`1_0qpz%iRcC=5Cx2Oa-y%&JPlgotE1FsU z7^H#&t60R)#E_=O3$X`&h>~Oa86O#iNJb>G4X&;?C=Jdl1cf5~#9$aE#uzHGcteGF6Y@{;Qn6m3TpLIiP(cExg3t(i z%NCj~F{nGuyFem9yAeu%6Q zYzW&yhh6PVq)+{RR^11S4KG`csgDJ$7CbU3MZe$6Di8p9eP=1L3dS_WuJY_gW(-=K z+Dk>8;kO7Z%_zq*p`0lQ_cDPO1V`d!0tzQxH;A&7ZGgy3AV|sjw*=-TkRxgl2}P~@ ze##+5v;K2pvu+=6*6v5J@M3?a4G8Bx08Y$PE==W1hr?&EE+3(_S{})VG(5wL_xyf6 zV@2#~;!n~d(=*B`oo685)1TiTT);KMQaY{lT={|f51?{z9|H*WpQeC5TZp$fOA}<& z?o|K<_nC&JS=<(#gw^^9NHalI_R$U<(>^1^WU*YDa$q|O>Gbq=CF9U`nnv@a1AFm~ zAd!MzLr`nQxds7QL)^!Ow^Gko1ptAXDGmKVO)QxG66e&~+7Q3hIUe>jG!<)=_EaUh zaPuAUz;7W??J>R-c8{f}(b8}U1y!-{at5HIimjx4p^`kPAy_cK*$#9kKV{YU*b>xp zfFV8JOYz=t4(~qZ!Yh{I`FJ2=9v+~VeJqDkII_*AhTrmJ;pMboEyN!7)2rCSjy7y4 zT4EZPVmctcbU=LR$nB-|9;RpOm>0r!>{%#~cz@_3Lx>!K{%lNp6pAFP4_AUzib*zS z5U0(@zLw3mVd8ngI4!w8;?p>>HNJa421Ih58LYRMYB06O##BVBZ&m);V37^(Xne(k zVMh(TDtpA_RYIr7@vOA$U9>>I>W%&V4}C zpj&iE7Ui~4yomI29WU52mD`5!l0Yw40;_n;yVO#P(r5a;eofbE!5eQrOlX3;QTiU@-@sllT}zlfRTZ%zDHoDZh%|Mnl(baNnmtv^RMY3Y ziEO|RuxPvkX~FdKZtwY77~Ncn1sYj^x5}4)R_zBhQM^}#o{!`V)Hx)3725%_u~zwD zsP81!3Uu<+L61WKS6*OijhO4)M{^)z5AD_;fjEC7;G3VX%3q{<^191;bZ94rj&DO)N1vbRyAIT z_1l7a3Pyw{!Nl+kD!q24%dtM_8Qf>Vg5~OJnw1+4)b&e=Ap8MB_mlmBx&cY>S6uUV zKRHk?zYhimRP6fWEj>RAGQVprgKOX*-oai1I8cNc`3$?(pa;Wr5?Yllr8Z`>T|DZ8 zEBWm$gZ1#>A5%7hSVo$>V+Mp~J2MRW>J~IHV!Y0#SFn8rOmU&ns!hfG=NlzPi_n;$ zC4z(#8ZE0LFj-J~6S{k2$9Y&t+TK_N9vpmoNbB87bmsQUsF%1Z66PD!cNi3npa#U% zgZiNuWH1$=ew58we>n|A=jifW@Do6yvtMDH6JLORkMraq=a7?qY#|nS<&bdR6U7#* z3U54y8nx%+S=qOd3A-uFK(h0mY|xShyJ3-3Pz<&lyofl@L-*-YCbSkEXD%DMi#F&k zA`{fV4VGq3T_jeZa~vmZ7K%pRn7yTPvA_9}AGnI|>$;pB4CGKq$OGL(!0=7JQ4-ua z%Gw})3I|@GU$^0D14h}MmOkll@ z968zyFPn|mPU!h@EM~KBVum9lm?JB4wv*}V!ftHo&~V~MLi7j}G1ZFn^L0_{D8>ma zN}4a&{kS(cjG;LS1ar*gpKJz4+SI>OPARO$ZK)tl>LNyvE+adiC>1ty_d0RepeNlS_4(JO zUjeO!`DFK_fJ$Q)4|2rWv^nEJaG|WL)#>4n1W?-84>5Y0KO)=^vg)EhNzidPQu(9v z+jC6z10^}onyRGtv+u>e2(v#r(}eRA8RO2WunnD<;~7bX`zYI)CvElvWV%&Z*@jcg zVAw3Bo}Jf#Me6KhIkq3snQYRJ-t9GlFf2_!!WW1NN+lr`4;lQC|k*!TM%$M%3NfNaX``vYM=J{yz5Q2~k! z@C0Z7?paVE(A$485oeEfrD6c|>>+r73(~!GSQw$8+0*wsq(N!8O;B8g8#R_$~4 zP^FPX7^*wh=fOL;&-VRCh(%gbbOI^*$ZIEQboSjIE92%H%NVeS(s&sIdLL<2;=DAm zfPp?zYVu!SD&6hB-XLZBuRkG8_Fvy(Z+V--D~83sV|YPJ9DQ#XFWG&sT<`k|M}uG0Mb{%-SOCVMs07W|g7*v7p5W>YIto z)HBhq*`F=N&{3l6>>=6}l;|q^vqXE?1GKX#tk@n<@rh1*6hEKBZ1$G(SZuKJMf0$% zQu|>I3AVIseGQ{?C*hVN9iVZkmtdu850L93>@ec)0H!y$TLqWD2TQ-H&yJ{0&mnsE zN3wxMH#xHp{m09I6IM|6P(NZijr)H3a*=Fe%{NpgeZ_vjJ>m_uP*yLy-OU#m*b!c8 zS`|~%)gDsVqtYszprk|P_7*1^LN&(jo>1$e`%Ql2ddD7^4X`j-RkK$ zL2d4lR$e}`5XeSlXi;AmVkeF(X`Wh6+>F}>Juodf0Hx)AY0~q#2fL&3mXkjz>bJf& zyzKTHnDO=zuTxIa?S9T2EA$NPus{>~z#fDZHVy2^#z?i+Aq7-k&lpRg z=d_eW`0dv$!6pzb4i(DeP_x2+I6yJ_V;_1RTl{Z*-eARV^$fB;06P@gGR+_QQL>cI zZxaw9gCz5VT7tv|t}q3VjY6&e!FjTXem9q*e|+rYw{gJk>i`%E!?-2+tHP}Iz<;2u za(m$W^pNUl#s^NJW6BZs3{Qh4;2)8z({ti>q|rP}*F$MbN_4wh4$IeaJ^kHL?kb9p zn;3Rr3ace8g#wLarBr`KDt@H~5QSq3aC~CW6ZNBSutQ)7=b|3?;T0-7JQwp?J&=p_ z0@bFzDF}}xq-^#;0s_#YguY=wNWF+yV3+VEC9j8t`g)uKt#}4;{N)PYeVx=`N*SSq z(&WL2TS}q<_`K$TQ;iXA2qDNXU&%j7aTzTqcTU<4HqfTjp&sR=Y3R>{!WQ_R>rp?I z6Cgjpuphr;brST?hi>S0HImvX!v{^TDI~vyp4Te|TH1FeQZQW_aq0Poy-;ZS2_#rb zI1e(TU|l;Ey~ARuIMJHEQac**yp-Efis6_*dxPAM>m`o)3-e@RO{M8@ic!(uVa{_S zQfWF0ZuVb*8cYcS{WvAiORF_Y)7eIU}>rO)_smazh3tMIj!2@F*t{?{ou&ddRJ4li2 zZu1h;D|(UXPxwtYEipZUUmbqW;rBJf?fxm`*)8q9MrXa8#Jf>TbagZ(sU3SLrV;GJ zHoy_9LpJ&Avp`04U9EH{G-wU6;(ih<0`{kf5c-^0kt%tsEwL@ljs2)Ky|gX8HL)$+ zmR=gbbcV?o4r^6yGbvKDK5#@za<_?y`D>f#hJMbSTB?6|on-S5d*U%y)Dz|Yf;{Qd zf=t<5-j?EC5;)u{f@95#I&T`MuFXU|#(AXBeu69pToLIeIt;TJi)ly4fe43TuwuyL zAsns}^MoxKj{=wGaHIvc)cq1PBWIi<*0IkrI>+t? zeB~d8O4m=q`6rcvd1}A?`v=uwOSMfs$Z%`5uEFaDoP!E*y|~OxlZjt6+3yP#o4uf# z9-N2MZma;y3Co+6>>9TPav}yG%R+}~p1bAjj!B`d<~Dn)XrNZ@Y!&kl7o-s^4FjOd za08sB%W|ZWZ35V&4v4mPNtO*o4`%%56Bqzr=)@Vz_%aX?1s>z8RmU*FXn2|7FFT=8yuD-#Z#G>5cG39x* z1PcSbn`PQjj9?#vf6B+02Wl{ar)99|uAz5gu*!*rQcl)(A&CEw2V^1rZAf3!m{-jn zd55|ZO{*i@JM<@rZ3y@E%>r}-e@Qk&xc;-wu{4-Q%|z1*=6TV!sy)Io3({LgC3H-G%?_N$Ck{5Zr!@@PVT0 zB3!Q{9y*hTpP}jz4|>2T8f*g?1)K2CY+|kGADqg73_7}7MH|j=I73=Z{Dqic=j7!@3QiQvZeoToiqrrhsNFQQKY*uh7Pel5D0FVsf zY)Qx~`X4ai7U74WBqqW7P^^5Il|YA)7DV}$!6c|p4JL}%p|EPGCNOjGX_k`rCP?C7 zVuEae@*Pci)f7`bp#bGpKagwcJB8y6bY=u3+z9Ufy&aR zV}s&8jJYkoQ99KL29bPG`vKRSfhoU;p&!Y!rBGP|G41`nu^9Qz_6{(roEy zIk`OzjxW^t_o}vZ%bS)kETh~Fk5dgxsRrms;7%JcSa*?#3$+X+`#F7cX2^5e%M!b= zZGwb8v3n~Z!vSyicK+-NE}#HVK6@yDfQn&Dm$NVsF_@h-Yyom(mVmiN3HtUBiGa-< z&Ho3r?zf@&zftQ2S7gT`SE;zO0P8L#t$tkUf$s@pUZAtUg9aivQlVLb$}Y06KoS{QqU|+sMAxpDL1cY`&BkDb+nA$!3^a6c zG&Da*dQkFx$__LquX%^jmfMx4Ufj7!>Pym1KrDL`JqN8hDV-evf}neoiYZJ=fnvi} z>XqL>9;jZ$Dy)7=1B8wd_P|o$!4H;$J+K&WYPksdH)YUm@!JD;Qvhg*tpZH(VKNCX z5oUc;CRm~i*dJXq!CTtx0Ua%BG}o}sv5=3cjm4S4q|i!{9R(JGNqz4ijHX&CQ^wN0 z5z84G3n5JbeX|pl)Udk!eEm^&I0bvlPpC*}aoPjV;Z6IwvLn+Z=d=4`Ii)6oz!U%a zCdxqFfPqz@dT$ML7=>w%LVMHzTv|q1Cda=P5(2a73kduYaw7j=q99EHUo@G@Kzt4R zbp)&5R2Bsj&ItG^1z6c%ESR&T6{kXr%UD4$U0y&aRzMuq(lBmC^)0rMcL-feif`HC z({LeZ7W)bc(eLLgFPw@z4@Npfzx+-DjCeP~!GOY|tS+}fzaCy}IA?V(;7o#M_~nDT zKE~A)n+s4Uy6$CQNm&%Y6f#M3bQug@uw21p#hUFvQC?Qe=?|#P+gtodiybQq>S$3= zyCYuILaEt@fQzi+M=;l1p6I4kRj&KDmta}jxmYc;sSi28HHEHW`2bp&NMlI89ilq& zmXi}&)sI5*4^OC6Wc_G8>Vd_JPFfZtN+%V&@t3Q|)Z%d7fbF&Dhc+MROYoVtgR;tW z712W4j3XAQ@-(|>GWcrjEi%TZ@*Rie0H4}x3%}!pLdJKpOmZz>RcN#@(`5maVVd9 z3}ezy_vfZSe~5)qA2}l+8A_c<;WR{yVZ|nNG8Eaqg;Jr4ubu3B0d2$h$JokL6Kifo zfwOp5LATb*{+-Z8qD5i7G)vimt?-*PFXXQ`!nq75LfEtX80FA>$_|@J^2XNnyU;D0 zZ|55q)+%YH{nhH6hk5I=jEsDMLrWbn%re3O>4Yfu_XdR6=s~m5>ex!F<8!^bzPlAO z1`}%vEq3~e8$99k{Q$fWB>o{KZlJ_-aYp*D68{{ny+K=t+g_8qfJ%&U!*v0gUyb=l z?4Tz{*xi_Iz8d`mPKD>|5LT^f&BLIjF#2A@;4@V+8&cHO!u5a+b6WtU338gU$blE@ zMt)Ku!4y=fLEALamDLTz&<44*)=#<+d&p#2x|5On9tgkokRpJ5b3+sh2FpbGG@R^l z!{*14B}NN1xBJX=F3mX_fGwm?rMX zZi)`s{JSYDy!yao2WI@aURyIJlf$$znFe2Y<435Lla0WO2v1iSJ+>NkG1pki-xZYjf;b_ZF#-xoy`gAI~KUZRFyT^@RCwgh-rSOna^4WRDPW`vga^6=jp&{7nK_gerHrHJHhZ>8}rkn1vR zm9P}D&{{wjeu}O?+XH^o0M1Rw)~(hewFqHH5cyZ)zli^?m7@H38_?BSVIK_xi>-Ly zbgRD!(yDazO^(x38sJHu&fht9OZJr{XKHuwL=K>JLaJH;-@m6;o%$#g;BY5{SQ`l@ z221j=S@i3oy=4gTyJ@h|(teHrOxubtoEkAG8%%D<@h;dc<+eW%x3#KLf6IvHSz=`; zdqw`Kx*bNO@*;QPX_Sl5(eh#=LAk@f4P!hR`e36x1Q&hi^4Cc<0uDCb;z97eF+MYF z0D=#4HG>av!H=60)GnSdw=1+_(xu8!xf4nCnjUYp^p~poN6y_dJ#A0poWQf|vYNLj0 zCzO?<4zbt{0TMQpua-I#5oQfg9mI65ti(_NX^o@tw;VP3XEjTAZ!zpHhSkW|+xc`3 z72+BfI+M=N7gB^`Q}% zl`nN&B~Mr?wB;PZx)J;LssR?5rS=vNUMy!^*X+-_@P-vAJS;3#h8M$+$>zky#kJ&# zd5z#&Bg)0faBP{IL6b5XT4Cnv+%8(@ZlhIWx;9G*W1Sn1{P8Yo-h`zN`oT~t#+vt# zpzaid+d!H*a*vrSxZ8UB_kM=dpf<3=gmvK|MPD3RanA^?wQJP6fl$`%V73G??6-ii3reHDAv6v(Yo3i{(Q)n?cK4F=d9xB;Yq8`_>d7LBk z(C5~W00$bu@#)SvW4K(W7+hfIY$VX;9A4JBdZ}2;w|EMElC<*uHWM zyN8q*$9MYpzOs__};?TTwHzf5MOp>P^Iw56NksBuwo!&yQ*#@R0hAp z@w*)V#n=W1v?j*Z=ux0Gk)xHb(Z>#;!~CbN&>CIH(Rz%~ia0dBcS7VgArwRF$_Z$N zPKza2k_m}0s3?$ye0V!i*n}le2~Sfl^jBez#>n(xjj6%#%nmJl3Ic_+gZC}S4qA;=a~FttQOSJn7u};SH6Q2 z614!(k$vzLYQb%2K{AgShrHj_Bd0SvG^^B}ma|ALWmd7@;j>ml(5L%rw5239e`~+U0!s5C&N=J5{?2lgdc;4Bs$~)U&6L+L1#}MIt1f zyu^IB}7snN!s|hP5us1WTDp$P*?VHdg;{V}n>qNPJi|4Uc3^oj%5rg1Lr#iOy9f!2p(Voj z*w4Y5E;e6&g4lPXrS@m8psmfLZTN40_I><^^?665@cinb>qLYt4DBie_ZPP4Cvmdx zXk1GXc%K}4no4;754+G+JR}iDm^;j6?EXCLMo*KZIvyEXsW+~Lz>O@~d(`mr@ZH=f z)aLetO7-W5hSloKV0EwBrFMM1{Ym7q9Jd_7X&vTfHaB$9LRnpEMb^*^ zDq<^@rfhTQ$Ep72>g_=pdL9>p73ZXx2-W48%A((r7MbJ>dCuX|hr9WSK}xjD+=t*b zV12`mtV@Sp+PoJnNOlVhb){(vOOtHn60uSD2?E4G`zG`Mf=KU^=)I=Vo!?%2z`eBC zbnT^I=C|)DSq9E`4nFr}Hd?P^PPAmwyp+d!by)igyPWd*q*0Mn};vHNly?a4?l8cUtL* zzCZ^_L@4Geqo3UvEHoq7sf>=u&fTvd@pu-p&*^t@WZDB?MIj(|0+rOUP$n&W#f<~F z^fh?cUb3hk6>R)CMTW&_u8;6%(22d@#ADM7#7v4e@ zTHB<+Nqd0wCG4*j!8x^|l{c}RknLe8qr*<>m!apq0HV#JUeoSq^O3il+c2Q)uYT(4 z+~QQLqiz3CfOv5i^_kn%x%sc9rEQ5AN~geZQ6e~RMTL!FBK2v&bXsZH6Rz0r(1D>} zmmn{n06+T~pA0|K9y9tzaJvp}9w;jEZ__cg>8OkgU_V6)2DQ+RQ` z0hb$DHEc89abrz}h@pyOM~dNpM`h4s`?!X^GY^$n{A=?B6O1#Z6KZ^`uzW;D4J0^e!1ArXft75+_Tf~P)R-z>6izt;8j&FgJL*Rdwz>N;}v!^a;+EIRDwX0opb@ zd|8tHSrXX_Do6A+$fK+mOuhyp{1dtiZLVriNirb8(E zmuP7%xePM29U-#LAIv|SuNQI^gB=xIjX)J%0b8s99L>S7BIQBE>M+Z8FZ)Ln$`L-Z zSerqiCV2`s6Y;XGu_!qqHCpQ8g>C;0&!|SAm=42f7Y{qt@+3_*ohSD`9^(8cYWUkbz>9bzq>uaIY(2{V#0Xc<&ZNSyU2Z zilV7iZ2Am?B?jN=Hfl6!jEd$O>B~T#`XIU7Nmo~9=0=yonaoOIM_P@yifu!6(00}G zl<*NNC=^-PWLpE3PO|j`R|Nj?5d*rhD;uq%UDvRFXugz%9W}llgBEwC(QK%qjk3nB zG-6<=VE{E|WT{@o#Ex5;v2jFetsYJ9UDm9d0Q&Z~;N6zz$c@rn-~HYijD=S5^JnkTsFRxq2tV1_;LE>=QgW@n+v!9~3I zskyjGV`fc!Eg3<|F&I@W>3bVByH42yf5sDP!bxBR$r*sX2DB$a(IU{XF9Q4S|GAM+zt z`|3X8mb7%q3sbwmqGw-`O3S5Og{6`jZlZkK;2ZGY0fQYk(%xTK7nPmxw+pCEa4>QJ z)X5x#!M5V0HX|N>jHgYdj0_o3OIcge0}*WFnDz}XA}_iO-6pcSJ2AexFbG{on!w~D zBPpk$*d5$p3$7A^nZZ?Ja20Hu9GpNWL%Bty1ckL~5H4-5?|{?#039=(&8|~WvRh(P zpdW?kBo@}#Grv#7P(f7{yx;g5UPKI+?^Wp;yNnSn1{Y8gEyEai zN_49XgGvelOB>ze+;I~Lr#+6P1(_0zosYas*-1wGkSBu)oTK}*%;K*%2w-au-I3?SUecm{xx zZ<8LPx%MGEHatSYeKC_q6}Taj$3xHtC+Vkl6W5(s$Jo!XV!}GGjt8qv7vc4!u+ zg}h!i2`Wqw{huZ1p_TO%|`^n4Lk>8L!h08zzfKVRVjw8 zXVGlJ)=04FbsxM+JoK7D*F?;U8Cvr_U za&>yT2yX}jMlc|cP6Qz6X?I1yjvmx*Gq4u&w8QTg$sZ4~C$U8WdbNM(otp-S-ob%h z-d9-HCC#Z}cY|!L)n*uZjDa<=Shc^f?kM5+C=)0pIpBGj9XSN~J@Kot$zqQ;1aR<% zJ?5H3TMZXG!y=Y!!|_S?V2RJ{uOIhW_E~Gi$SN&``z#}S2{%SF_fZzANHN@(8J^2P z&3rqXfQJlTPBGH+<=yB{=zgA0ufGh2yNCFQ6AAjBwq2$%fvaK(%ms zCI4g%7HZoY6 z9>ITmAd3Gn`|ts5*xrX*L5hr-h=*DzkQ<77*>``5u~2ISc|(7s81_}nKLD_>mJGys z0nCdaB30;1VXj7tCCUxNYuNhzG!Yy%Y#x&6udV>BaL=EOk5Gvv3zp`VS~3@Z=p__z zuEFFaqw>k96gt*7;n6^5<5kRoS0i&36DWAhKD>(UPNQLSmv-yJL?woJ70@*NBaLFO zeqZB&p7BGV8>bbbYeGLG{)a($u>1cPX&r-G8%La!hS7It3~BQ02ErF>K!)9~1GChj z@CV0TjIoCi%4u)h%)WaSh}f#vdeAsu;UsBNXuews+d}jIgF;-#HfkZk9THmjSJx&1 zNfMxsdKl&p=rpw!&T#Ajx>Q-YZk27ymqiQaZ=7ht%Ze;qQ_4_=3lfP_}hi=}Cl* zwz+wD7h>XJ%@p>P=3%l(kB0>)Y-RH>*{#RJS}5#+=HbwUu%{^Ow&vkyCxp@2Q=8m8 z48I&WDjM~+Ax!6xK;(9+HppLbB17A~`YEh7wY-_w&^4?{Ha+9V=sP0oVP#)9lTO;c z8mOUchU*}8K{*ftiuam4S<73vNHUlC*a0XU)I!W)ZcBV1B7YPT{s?j!1{^Q`3k_7) z^;)n1kW1z+HCGu$RBLzo*we_UGLQekMYYoOY9=AQD^eRwlJ19c(KdX+-mFuw{I%d_ z`J~QkW~V{B24@lw!C9Twy<=Q}TJj=~=}i@}U-3lrN^QDGYbvyNZ22c)30V`Ist$LO zlP7qyz%fPfh(fT?UvP_@j$v{V%CT;>``5SN_TogiTd}r@t@bkVgnGt3sBo5nWQ)aQ zw$3Vpo;M1X?gjVsb^ma-Wc3dx%m0py0i35`V#C(l7yc8x#rTS={5k4V#0%@D^EsmzD%28m;b|jS!3;EW#Eg+oW5_`6uDJl8)wjA!piP+&p+0 z+B~-&Ed?WjFNFKM&@s?9;fvsIa*_wB?}GUVl#+lFwFjoy?{Ej3Avv0VSdB0jts>B4 z#7%J@Bv?AUY}wCfWZ`%U8y-HYZl&}g+k-X8f($8?!81}`yC)OHV*F*{L0%vMVP)m+ z6M%&?Z5F+Zkxq2EE7F)yC(qO02Fvf7g!xKIXpCq#j}yho>Kl6~92N`oz}hc2VIqjJ zT-(+c-mG>=>6SOv7iP-C#^V!p5z$vwRaLniRozi&;8#@zOLFET4|8eKz13{Ti^ixg z$#F2G6sOvi_Vz55ePg&^#vp|$S7Cbt(Qsu9iWdP5RHIngPkM9+AU zLJ9o-f}5ojH%tt!)4##o4!6px*;LfSXCvqtT}uVeigln|AQ2`0l=6bpQMVd8n{;Ct zHJ-h{$I$fRlI{>f_K<%hT;_uR*+5RHm6E|R@Z(@?hB(_}iK3%BT)&=H9MCSIrqT5;f!)GH z#o&y#dQw^|QrD1X1*kkwg?9FM&Z;M(q>UQ zj6IUru-syXyzo`Bs=w0mjNLrugs&V<__!-{u6c%@6=D7ENbMp|QMf1tdSOEs;P9|& z=mO+Lh#gv+E@8r z9dbU$iJmUy7L#(&wp1PhMUhQKrH|1XZ^51_y+(fv)e<`w^-fWAG03ZiPBJ79R294q zlP)A@1ru9Uu?G&LcH*gq=?Qy0gW1?edYej@InFr+)A(aBFl%AONLKRDk_H=_IK?1{ zFp6z0aCjv^wG(r^QT5pd4?ZQ|5BIaM>#czpemJaK)rEiL%N6*e3y*8o1H>O~dr0tK zc*;Ng)EYUt`At(cMwidl44rR`Gua7;+~hI91}|=g8#VBu)bw&xWPjCM6ily=@af*` zP}&{IF_tfQq%;haOI-Ixbn%G{p6IVI2D$IKF`lTw5w&!*c?InEkXa)Izqki(fk|WM zxKuZIFhO25c(5E7nz^kDQ>3YIY>IpCETM|dNB3pPPZ$hqE1_EnfS7K{$!!&VH~l@27sj@@Qj2wo+P$AxK9Dnu;c!}ihWT3T2U z-2|>u6wc#QaIb+UnxKJi5Y_$;DGcy&!>C7(vtMHkh>1V2H)} zu+|7@@X~XSh(JtXL+N*q4PVgQoj;bxNqN#5vW$Q|4t(yWe*k+SIeU|4hAKuX8*Rk( zZZxBjlmWqsFkCgu(+wSBVPlHFVsf^22Pl~ZcoVc)yQyBJo2s86O%y48H&u-QYZZlH zWE&h6urUd2-U&yK`ik$(TUDHw$58-{zZz)CK%L1W4!QZoQudao&~S`0a5IfvC0IP7 zZnCN05$V>bFNbWKmF>?$A>8Au4t>L+Kk}?lSC0}>+ok-i3z4ddEqIQICIPYVEZ@jK zL}Y{54tF84j}f2>&jyQa$SWcPqSX1%YP(6k3t2faGr?)4!W-cV^-d#y9S@FQgjJ0_ zQ&jIzi?Y0G5pIRI#u9<0femGRq-`YC24kez_#jhyXW93c;M%)hHw^+b8y?T$lb#5~ zhao1zS}#vt4;2u2h|x`3?uF4MJh&8uD#S|Y2hipYD+Q1NA&(8BZ0_&gU=O-FBx|88 zN-?L9VB68j3X67J&D;m5oT=^bJBCdk?>K7>U5#z@V4dL7fwc&SJ_tQ6-C7ymiJpA~ zl0^^$-F@9>yFcpgNj)qN3|#|94a5ObfFvIJz|y@j-Gy{p#Eo{?X^NYZSLPz(rblv| z`DgJa;>|YnXBeRW*`&Uyo`UTc>ZvDMgG(;$zXA!}GFYR&gKKlROWQ4lF;{f*O~&mx zu9^IjowO?U@6fX+f3dZ4t}m{iYG|f%FS579{lHH5v0K5j1(QO4SxbjrZVfvO`WlOh zAuoi7bxZx2XtHF2X!1*gZt(llyzH5OLV6Mbo6D3@=k{qljXwVsb``Qp{-NZ&VycZx zBwwe3sq@9g>{_VUG|sBceN%Z;KlL6^E)1P)aW=!@YkNdl*ld!A+#n&h51@B>4nV{6 zaBq_RA>nsko*M$3Q|~0fR;~yzNd3_8p(^IO$DB6Wl#cGd!N83zabl` z06yhtwA9Xa{;=3}rYSkJ@Q1laxXhhjTL`)f4WO2ix1ZW;kX*_o5|aVU|IOaJz*kjV`{T3E$x8?(B1n|i0Ysq)hL?f?%!43U5+dQL z0*2&-BqTZUJb3i-2nN&`)7olVZEdSnTW{Oj+FMktRzWBrwHB>yQK?c(^~6|3MZk*Y z|NXAnbM`)Y5cKwU|G)qL7_oIq)`^W%M(x4O zA)-o@dk_VVg+WC%m_>Scn3k5 z`QmJ-M_AgY-hX@}!@RFW0|;G=5Z1WD)TUMGfBZXUU5>xh{~2V9QuRGw>bc}-!>8Gi zUR;_s{{$BKHlEem0}JpXIGiH2@m$H*ihA_S@RrnyLB1tIrS7b_(+#b+p;88Y%$zQ= zRMcbg!-C#q_I6QpF5bVWjL@=J6ulRDs5|>O%`5u#EwRN#rzVl+A`y-wQD{gs%};N- zGL>`}z`3o>a(IcbuW<0EN z;kvEdB-H<>c$}83K;%Zyy*pYGhO;uFzN5pIo6rPx2`>$AYfA&a@Yz|fg;SazQ&aGU z8u1kCX6umguiyhn@2o#!Ei}~D@atwdK5w=bG(Tnm4c}y%_U<yW>#Lo_l*@#|aL~ ze7)zE=eTS=9eNp3nu-#dUV8rZ9j$|V{?Yr)CTuW8-|^2__}-Wj{u`gQKa^u-yYuLz zn_`n?12V^qAzkzWWbop}6&ZNZDVi*~ZZ50}Y&!#(3Bh?T^NIG1?9u1mdkqU&Ns$RwAX~ zG!NQ15rv0P?)Bhg6xtR~2}#6Uc#4{z_UIoMH0^s*j^cc7;ZxX#u71O@LU;(i;9w#& z+y^#hH8554T%=deJ*{W-{B0}Zq9ZWuFX5h9e~P4n5RMoiJ&!uJ2L-uAh$kqKC_QXt zJ8~Ggc=F}mbdeXMqvJa%i-_3tyI)g=Vfz+5DPj!MACki7WIYFN`yyxeqNuH43Zcjp zGB*8=52F{Se*zh@M3Q>$ZuRthnq(8yQc8ny4*L{W70WSeOHM}rz{ehKJ&#&rlaCKb zJr6{=984d&hE}KwcRePu0vP~ zzGAoaeKrnGxvpyHH4m#=+ZuY!q{TPXRDNn6|4PNP=$mp`!@#2~^@;de#Az}dWIqsP zFlkWQ=Dx7+J%K<>rVYW~<*(kPUs?FH;|jrHX$!CjXz_yRb6?|=7u|K6%-k)$k5SV$ z^Smd_Tkin0%8Tw(Hspx@5xs(Y>7ugrU43p|}3Zt7DRV^zpbrud-|E^-rvV{ zu(u>l85K^MlDRH<%H)kuY4C3Sw96vXfOsbmS8ktTB@zo`UIZs&J>Qhf^&b+YKTsk- z=`5V99g>dAGFzO2lC|?buBJ`f%uin;>2yjul9JMeP7K6s`4FwM$rN-~uEDab#f<}* z)QXw-YwNooWq=M$+GhDKLReF;yYUYp(G@74Jn*aVH1=htOUkfv<-L{1rg(RY58C)S-xR-i8fOyk<|eF%xY!yqG}?15Ja|5uZ<58-&CA-JlEv0oOucMI zRRX&sJMTJw|obO=uBE7X|U@H0A3la-kQ@7F1+Pf}o)ZQ75 z5~w3JPUWL7<)%M8fE))s%k<*K^ri(ED&%GLCDTZ1R$pSLZGIo+IC(0or(U^HK6&aP zdLB)DN332^SkRW3__l4oMLW_Lki&2-WY8M~%`L_miMD&;!nq6KX4S^N2`rL^=R5GE zJ=*IISm`ufIDsbTeKq=0&*K%Liig5;V6M(0Qnp(j8=gd&l{Zvh=eZ0F)w`< zw!XTMSMl89VyI-qDWB0CAPTH1kpvbJ++$JnOA>!(Q(uJ8$Y3I^wmf_9QdIDMfe%8K??_}-WkN~W=G0lcY)H@@A|4EhGS(6V*_jcf$)DC)CayUJv_1%W4Cm}xeP(&AS(Rw0%JF5m%>_?*<{T^oX#~+(K zQDKH8GEvX(Ua?TtC}D#9fNtbd8mBV6-SQ-Y@Rn8g(jm)_-hwY{ciQIHVaxI(^ffS` zJwz2rk&M{NqYO?dbMgQyk0QRfl}8!&$|EfAIj{u{8~aTh?lcd$ylJPs_@p;p0bG1? zv@!A`#(fK-&wq>Mk}At~a2P5^Tv&nPI|D0FjuF-bQpY0wPzurN_t=YRIs$EsE6j2o zTNW-mvbm!Ne-@UEU;xfpAm#y1pKMrv5MRd@ME``Y9**cZ)LPrLWI)!d*jhV~qxvT5 zLWD=&c*W6MlJGV`(<}r3>Dcl^s3gNPH1(N&~V5l6K4kpHk>$rHTqdxZj9cH z!a2dee-=3R5wLUW695Iznz|2`#z7B6t-@Do2II>E6y)Hu6jljiq1+3P`B1Q;&acTr zo=k0ikX@$MURd{Op=}+BnQ!mAS-%aw+j{xm6&!t z$A>Atxt&k(HB33P4Tq)Zl^|5U(lFgK{WXq-4oP{%$H228h@!Lo34X4iv zr_73+T|~}B@5{d*A6^SoO0T!S6a%Z+~{=OP2(&8Hpzy2;rRTN zJvkZds-jNJN=<0a>4N}(*ic{xa6<_eo?Ft5asJ8Hex2nR zrbA+TLVq0{*y!3bu-$EUep@;Ymh-n^O{5&xxsBsFEQLMm*l)8V zDU%aZP%XkZ!?dlw%G9F0ScJljD>dZ*yp8O-Aw7nI|4d}?Gno&CH(a&f&kshAb zaKeW*^CvRHLmN(HhwTTM4`$;)7BLE-4Lb^qh&l8=KyAq zvR;d1#FZUJpZId#!q3@w8{kM%zQs@{+9F4!0YA(~{7BaEaBqBO*PnbN=fKI`9J-s~%)37;+??Nr`Y;pU zJQ5&0i8nyn$Tj%>p(1HOPQl_6{b3=+ zXYUvnHK>>f{uEmQvi~6@wm=V7{rXSOculN5;RVC?(uA+(rJgbsT>vRJki#dA8w9odYW zbPwg&GOUngI%SzJ(poNB01mY-Wg^aDKhcdKH8pPmRsuW~C1Z3w@X(F}5*DsFbg;Jp zuen3f8S8KQ1ING>A{T3+K_F*+IR%l_ZRu3*F z>lN`{(fVdp!cv@g-Eg93+D#Q`E^$VA?sd61zI*Jt)cTJx4N&E6Ndf#aIf)b>{S#X* zg*T1Il#i0b$IXVT6%v? z{l}xi!|OjD&2z#t!!znX&fBo9{^R@&J?cL$-SG4JkNq3}vnr{D(;suHdbT_Po1&co zI%!`m!3*BdDuWvo(zdJsO4HLVBj5+e$$k0d2`7DTI1|$+AHRSaGya9exvgg9Gc+xV zzUDy~%$^%c=XosoC+b@>+wzaxoPkr!@{b~OS|77h?{C`O!l@~ad_lZ%{((p@ta&dW z62<>8p53iovKt`m&H^uR)a*dz<_t1>99fdK`AkXA=(Np=aJ2jbOf_xrG^rWgCHeBE z-K`6ePt9{a#o-z{*QeV>_7yA>sbZ0B>4BW8N@-o$IR9X)*G|C+#7et$JlHXZzxE|K zu;v>%jsvzQZ#<*wj74)=eviQ(Q@azjPToz}M~wrRH2vl|ZD1MhgJY|={3q%}L&4#; zs^mp2cOnw)+i3S#GzX`srfq3}r-iFe?Pdp~8l#VMr#?7$*7IyB;`MPRprsigC(b|8 z9M0Ll>C+-imv2mD-fe&KD!4H&Yfs1OoKD*2nGk_7pMwfooGyk}eB-3F&EJAdRTvkG7f*ilTRt1#ZtyYT$tOUQ#o z(f?v)%s+(9O;FTVaCklRj(YR49N=KYi#e6a1qUMDQTYR=N&?1AeWv5^}*+n zT}9DPFoJ2CzpH7Y=YqdSMvR{IdvQsv+oNgWIY%1;%$R~^u`{TXr&e|?pwu*!b`D+`**0s z5FZ8CuX#oSz5?UJ;G;2^w{1oW!O#*1_z&8_Qvgo^9367f&>t$nKC|gLFTT94N!Zac zxG}SN!sR{R!zqtVf7$WY;OGC=bKkPYx&%!B>w}b=a9YjG1Wen0)b#%IEj!*A+>@UX zppfa!!Oyq!{KNBaEo&^ok;e8?n%Kt~d|pY%5t%&HFE#7w1q;y|EzCy!I=itr0mopi zn!_XFKWJY6_5%+TKM?gpz~bmK{PWvSar8JIp5o{n_|av6y88zI5m|79_E{tR83`Mx9BH7+2<)fi|QXICse9JQncjq5`c6a_?VP1uK4dxKc-(X&c`8&*En18^$@$v5b zH!rvQ>rMM{`gxvbbZY|sedSwTz!%*J77s(W47O3qw$}2jKS$PZ;X-}ZiE^%)#xfl) zRZct3?rwG@xgw!2CT3!W zpDAeGYNh`32`+JH%ztagr|D@=?LK}0>r41?v%GQs`;F`0iC%}10cvCUruFZ)T^>wl z*Mh+_qG=d=EXK*{8CKK!KIM($!@UvRi_iWW&)A)pklFGHQqs`Y7e|-$U6%G}PHfKKF9JqO4D=B=Zpr@uW6yg32Pz>GUl7{z z)A<^*B9Cx#_?DEJ^&d@a{&K>)9I7M58V!Cd%-Rw9045>3yv_Tm`qIveyf^20u|2cC zEF%GJ9aW4CxMW-RIZhx?LETJh0bpC`X+-uM}BsEW;WVIf}Kw?`8 zx^vO5V#~Jc*^pH(1G!Wf4@p`Bzvgt<|9ouv-UKYD!`Cfru*aZk_RG>z=^=aC=2pTz zfKQ0Q^{RcYbC3=00hx1X-g4qy9+?q+1^rby53D$Pu?UV6fm38xYSxMM*fd_GG10^v zdfIRbr;yUdms+7tn8WErZqP7OWjK)tBZ=bZ-=uD~X0M-yWnom#{6j2B!O50bM2~O0 z=m{T1kJIcq!^u!>5nGcO=iBsvQl?E9`$TcH46%``O}m#Fjjr}gimn5Az5Jj&*5HhA zWojz&68+X^%A3C2gCDO&@s8bNEpM991MT#$*%A%gH~z%1r#HRHCa!#H+s5WT78a4F zHE=}}mlxfys%6nj;=)RgdiD`b6v-hngc%Zglsi{1nf2HVSC&HVi+O|Mz-q%FI6i zJxL$2jZa}4FM*3UzApC0$!_TSQE0l3A4q%jfVCv$81%+a2`~8vjjuRDIhrIxMb;JZ~wbv$U%F4zZ zPVf3>>bc-}xWeio@9vw?uXAR~TJ7e=e&W%PVx|Yk!)CP}o-%%UixcFf#~Z7$BYifc;B4BKZ@|MY zyKH&pWDqAyPNF7I#8H!%>Rt2?S`pBQsSg-&V)zerEMM#CytJmxG9(IOS=&-*)|>juQE{Q)C~8& zS7E!I&z?NOxpCXGUQ63t$@YvBNd4^(PWN7~Cy;jGXn6U^G{8(5Jv+lIiW&kPF+Q(W~qy`|rOVfJj_Q8QZXqjbJiO#c8aV zNa4Nvd?#a#VG~k=5gaD-_~zt02s^mKv*hzwejj8G7xmr&41OM?n19tlSe+foK+swp z)R_Mex+iDg*mtsS-G<4Vru>H*^D}f>bRHYwPe6El^lJ-aV{Tto_{c-iUW_OEzVEl^ z#WI#*UTp7;viVs$Sgk`Ba?wnBbU5aJrDKF8a!I!&BxBd*031P-VR}gins$#$JRhlB zy5j@}uRGmd`PPAbjX0u-8@(GYN0wpzWDc}aMUEFYCp4px;-Zz0YA^!AhsniQB?f(* zXGD9Ti?z5Zx#_jmvx=g>XXSww_XO;CYVzWg`bg^#G~*{@XD{+o1x^K6un?aB!i%b= zGM{%MlB}}<&7RV&4%FEGb%B|uQq1rNRhJNiY^;5ieeMIn)A#FKeFgI7Y!?JgfLHoPTmL^)+BuN$WzMJACF9NIg0w zA7D=yj=U|7-oH*S5eiRg9n0O7X4Vp>0hVI~U~RCm(l%!!dCjTY>OMleUd~IRr*bc3g)GQ>o z?Y7}5cxoD^^5Zr(4!7Kj($>ql<)p2&N1)5;A83A>Fw>Td5#390FTP^SE7TH{ko8jd zRU8Vqbkq)>D1Yc|8F%8diG!DzT6>53X^XE6P8EAsuz{5x%4wws%H{1}qz~QG)aflAnOz|xAl->|A7UQgr z!~9bJYs_t+xKo<_`=j+3ok+={JA~c8b~d8??f@GuOUA?xv}7_De}I>S$;I3G!nlG% zT4WPLLdv(zmY z^f-J=a`-~<7zPfce=?Xf>ELRQ=Z#4x;5q=;?n%3FzG;gUc^-PCc7@M)49{Cz&~yBy zrX9kfx!}Q;+@F5ZwymfiHatCf9joz?mivG532iJFXz8&Jf$JD}uN`<30=GR&$kzaA zE_kBFB7p%JfUFnD=9YJX!;m+LdxE&75^{6PpX`v|Gvq;r%wkCMi)hSRatrA^iIGCf zrEqSWNtz=OzU^7M2E*0%a2W>w(bv$kUA(ioc^y10gO8I7F+N#FiMF?#|7S{cE+DOh zG>3_H;uw0#4~M}hdXGd0EqZRZX>Fzm`>y-6ZQCNo{3T*y0u?48-r9wc6M(b^adx)@{2*_J6q=3C?#|U(XT2_8& z``AxvSz>%tqS>$i(5W=8Oc3LE+?0g%l?+{38noumqg_)-%ShwHXDijx-}na5_d~?n zc96u8B%$y?!ke>Zy_rbM% z61KKniFnPZ5V^3oon**M67ph8CLz87fb0>-ww6JHd#Gj4rFi0IGvvPz!b-dU5AQd%8YSz1vNkofSg2!<+g#+s59k_PdI zs{JJ>GV+7JE~u$F{_2v|c37}x)$-~xNM!p%6(wbEUi2d&FN3VQv_f?iHgTX; zu5cAJc$ZFER=sLmrsPlQa=6EibKC}A=7Q7hh69~)l@flb?XGm;({1o8mX%kos0jOm zV|ASI%T|}HtqWAvh9?LO$3NEgFRu=iqL%8qT{>>r>e^66AQGOWWa%h5%fc)!OA*TUv*-0t~v^H1mI4j*JJ+)%}|XB8LZ%*&hU8||ADtXxr9TT<<-4%Dvj2Ya}~3jM2N zU^l#Y-kiDl%Zlga%**%Hl>|#_AV4tWE2}Io_Xm9?Vc+n~NsD^K^O;qcH!HX3)aY&= z)AK(YeqPbMIYr$uaHTu1X!@Lmh22DO;a^#J^{It-;WDkopE0eU4ZnEa-1&L)PAQN} zo-4Z%-JS1O7SBB;**M&SZW8H|p)&f;9e>P46%vCwlr>ptJGw05_ zV&*(lC1sq&GiT?|0AzOlRcbcuD`?;@%)e@W&TOS@OXbd)Gdrhny2@XaH;3;o6pGlh z=UgGSOSa*mQzuy=4oSJwo|89k)||p_;<9eu;_$Tg zyk=c2Ea#kxggXwOpHr7mT>AC%(@g{y{XkuKZJoc9Mj{TUG=SGY$A-k@Z5JQpA@*nofin>EtkK>Um6jf;mR7nZz?K{uSS@49>21- zUGmhN>M~!b@+&&-MLxbGUEbo7RS+sf!V|}gD<3{w@=~e2xiczjD?=3~kzlJ|@u7<- z0t+*O&heNYs$B-x1j-`FOr5t~hcVAjgZ@P*k}^qiWvHeEeRN lGe!l!X1hKv36) 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 z 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 K41+zuFnHUK67 literal 0 HcmV?d00001 diff --git a/K1/nwnnsscomp/TSLPatcher/nwscript.nss b/K1/nwnnsscomp/TSLPatcher/nwscript.nss new file mode 100644 index 000000000..7a9b4f12d --- /dev/null +++ b/K1/nwnnsscomp/TSLPatcher/nwscript.nss @@ -0,0 +1,5173 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 18; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_ENDAR_SPIRE = 0; +int PLANET_TARIS = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_DANTOOINE = 3; +int PLANET_TATOOINE = 4; +int PLANET_KASHYYYK = 5; +int PLANET_MANAAN = 6; +int PLANET_KORRIBAN = 7; +int PLANET_LEVIATHAN = 8; +int PLANET_UNKNOWN_WORLD = 9; +int PLANET_STAR_FORGE = 10; +int PLANET_LIVE_01 = 11; +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; + +int NPC_PLAYER = -1; +int NPC_BASTILA = 0; +int NPC_CANDEROUS = 1; +int NPC_CARTH = 2; +int NPC_HK_47 = 3; +int NPC_JOLEE = 4; +int NPC_JUHANI = 5; +int NPC_MISSION = 6; +int NPC_T3_M4 = 7; +int NPC_ZAALBAR = 8; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0; +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4; +int NPC_AISTYLE_JEDI_SUPPORT = 5; + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; + +int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; +int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +effect EffectResurrection(); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: 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. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +void AdjustAlignment(object oSubject, int nAlignment, int nShift); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +int GetIsInCombat(object oCreature=OBJECT_SELF); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +void ShowUpgradeScreen(object oItem = OBJECT_INVALID); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef); + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 0 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 0 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 0 and 0 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 0 and 0 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); + +// 768. IsMoviePlaying +// Checks if a movie is currently playing. +int IsMoviePlaying(); + +// 769. QueueMovie +// Queues up a movie to be played using PlayMovieQueue. +// If bSkippable is TRUE, the player can cancel the movie by hitting escape. +// If bSkippable is FALSE, the player cannot cancel the movie and must wait +// for it to finish playing. +void QueueMovie( string sMovie, int bSkippable ); + +// 770. PlayMovieQueue +// Plays the movies that have been added to the queue by QueueMovie +// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only +// cancels out of the currently playing movie rather than the entire queue +// of movies (assuming the currently playing movie is flagged as skippable). +// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled +// if the player hits escape (assuming the currently playing movie is flagged +// as skippable). +void PlayMovieQueue( int bAllowSeparateSkips ); + +// 771. YavinHackCloseDoor +// This is an incredibly hacky function to allow the doors to be properly +// closed on Yavin without running into the problems we've had. It is too +// late in development to fix it correctly, so thus we do this. Life is +// hard. You'll get over it +void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/K1/nwnnsscomp/V1/nwnnsscomp.exe b/K1/nwnnsscomp/V1/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..bef40b7784055700f73bacf914f2ee7da27b4727 GIT binary patch literal 462848 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

Ksy#d{!eNofyjh=yQbGYJFx`cNaUeaL7V&t17P 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 ^*V{oa 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 z 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

j{S0Wm8i3_` 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"VY&YEDr*rf? zeGiU20UkdAKULifT+DRyBl9%Wth2R)9M-jm+7s+A?4!;mD93DX4-VU74soXz#)kPx zMW$|EfCyrn$PQ?9Z)5%vc6R(I>xjV)9Ko#wp zCvTE>C=%Ns+5A+Gxwq5Uhw3|z-YWwyve=mF9By-t;f!XYOIDgqtZvpM61-bhfBPk} zr4w+h`EDC;iuVwtr>U=yLo|mScJ#aWJ^j8U)`MWpqx`WD+klj3agq!DkD)OD*-_-iVgqv99~ zudL9J?>iBlbck%MITJ9SBBT0PgW`>E%`+#m+*6dGr-DB=&E}tVkiwm=}$H{X4VfkSOv_IS_ zj0?H>9Uhh4y#3x`{Mt#f$@BD;%XF6O zki-h?h{pQ~e&RnlTq=Y}!HGD$p@8VV@r> zjYm1;vT?Qo?XW)FohX!chTkC`&YG;HXq(J@GtXXcZz2yq43jJkXKTc%;8b!Fog^pK z5gf;9?kKK7G8Swnq`8sHcb=n_)E2(dQ%Z(2wPM$!1TQgzo|BF8DZn8Gf1xn=8;~90 zG84sx)WcHPOc9$VCE`iyB97hJcu9c&87Q5A(hQNNN;5*GvtG*QbDqa}T#Q}NKqp2*SH^1N*+QMF&CqgT zuq(_wa~&I(!E+awg)rG7ZbvD(SUk_0686aK4=iws;Ko;+h?~gHn84HbB$pcN zPIY&ZOx8g1!U2sLLA9+qG*V%;9VKwaB(yz zo6C;jPW1N`CRJ2;ripYMft0Z)r`(4E zQXUVdS{I(^NzOB(M3LIWD~a4fMM*;+jiwG3vW;D+l%Rx4*#N$!M6u16s2XZVcE5V7 z8Em@p97$zEUPn^Sr>Vp{PLNW_R|M72TA68127GZi=QR3X?0N=ie-;^Q4rya9x&I0; zkJDSv`Q>wh|69F9{3t(;v;Ci|u9e@G&Y0$Ri%%*EVxh(H*|%R7uHlhgkmRjsYE@kma13a)KOXm zEnZ8cx>Cts9HvS~m{G9RHH7;(mb*AZ%hGb_T`RO;YtQ&EJA2*qbiF_Re7&*B7;8>6 zXP8-N!d!0cI&N$Mw{<^s_jI^jb&E}LfxYQUs6ig)?tgbr;O+_BJ%PI?aQ6i6p1|D` ZxO)P3PvGte+&zK2Cvf)!{vV&fe*i+5gg*cP literal 0 HcmV?d00001 diff --git a/K1/nwnnsscomp/V1/nwscript.nss b/K1/nwnnsscomp/V1/nwscript.nss new file mode 100644 index 000000000..7a9b4f12d --- /dev/null +++ b/K1/nwnnsscomp/V1/nwscript.nss @@ -0,0 +1,5173 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 18; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_ENDAR_SPIRE = 0; +int PLANET_TARIS = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_DANTOOINE = 3; +int PLANET_TATOOINE = 4; +int PLANET_KASHYYYK = 5; +int PLANET_MANAAN = 6; +int PLANET_KORRIBAN = 7; +int PLANET_LEVIATHAN = 8; +int PLANET_UNKNOWN_WORLD = 9; +int PLANET_STAR_FORGE = 10; +int PLANET_LIVE_01 = 11; +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; + +int NPC_PLAYER = -1; +int NPC_BASTILA = 0; +int NPC_CANDEROUS = 1; +int NPC_CARTH = 2; +int NPC_HK_47 = 3; +int NPC_JOLEE = 4; +int NPC_JUHANI = 5; +int NPC_MISSION = 6; +int NPC_T3_M4 = 7; +int NPC_ZAALBAR = 8; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0; +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4; +int NPC_AISTYLE_JEDI_SUPPORT = 5; + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; + +int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; +int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +effect EffectResurrection(); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: 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. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +void AdjustAlignment(object oSubject, int nAlignment, int nShift); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +int GetIsInCombat(object oCreature=OBJECT_SELF); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +void ShowUpgradeScreen(object oItem = OBJECT_INVALID); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef); + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 0 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 0 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 0 and 0 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 0 and 0 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); + +// 768. IsMoviePlaying +// Checks if a movie is currently playing. +int IsMoviePlaying(); + +// 769. QueueMovie +// Queues up a movie to be played using PlayMovieQueue. +// If bSkippable is TRUE, the player can cancel the movie by hitting escape. +// If bSkippable is FALSE, the player cannot cancel the movie and must wait +// for it to finish playing. +void QueueMovie( string sMovie, int bSkippable ); + +// 770. PlayMovieQueue +// Plays the movies that have been added to the queue by QueueMovie +// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only +// cancels out of the currently playing movie rather than the entire queue +// of movies (assuming the currently playing movie is flagged as skippable). +// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled +// if the player hits escape (assuming the currently playing movie is flagged +// as skippable). +void PlayMovieQueue( int bAllowSeparateSkips ); + +// 771. YavinHackCloseDoor +// This is an incredibly hacky function to allow the doors to be properly +// closed on Yavin without running into the problems we've had. It is too +// late in development to fix it correctly, so thus we do this. Life is +// hard. You'll get over it +void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/TSL/nwnnsscomp/KScript/nwnnsscomp.exe b/TSL/nwnnsscomp/KScript/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..668bbeddcbc2eaa83e475838d8f53166caee3043 GIT binary patch literal 266240 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 literal 0 HcmV?d00001 diff --git a/TSL/nwnnsscomp/KScript/nwscript-kotor.nss b/TSL/nwnnsscomp/KScript/nwscript-kotor.nss new file mode 100644 index 000000000..7a9b4f12d --- /dev/null +++ b/TSL/nwnnsscomp/KScript/nwscript-kotor.nss @@ -0,0 +1,5173 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 18; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_ENDAR_SPIRE = 0; +int PLANET_TARIS = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_DANTOOINE = 3; +int PLANET_TATOOINE = 4; +int PLANET_KASHYYYK = 5; +int PLANET_MANAAN = 6; +int PLANET_KORRIBAN = 7; +int PLANET_LEVIATHAN = 8; +int PLANET_UNKNOWN_WORLD = 9; +int PLANET_STAR_FORGE = 10; +int PLANET_LIVE_01 = 11; +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; + +int NPC_PLAYER = -1; +int NPC_BASTILA = 0; +int NPC_CANDEROUS = 1; +int NPC_CARTH = 2; +int NPC_HK_47 = 3; +int NPC_JOLEE = 4; +int NPC_JUHANI = 5; +int NPC_MISSION = 6; +int NPC_T3_M4 = 7; +int NPC_ZAALBAR = 8; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0; +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4; +int NPC_AISTYLE_JEDI_SUPPORT = 5; + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; + +int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; +int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +effect EffectResurrection(); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: 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. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +void AdjustAlignment(object oSubject, int nAlignment, int nShift); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +int GetIsInCombat(object oCreature=OBJECT_SELF); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +void ShowUpgradeScreen(object oItem = OBJECT_INVALID); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef); + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 0 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 0 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 0 and 0 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 0 and 0 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); + +// 768. IsMoviePlaying +// Checks if a movie is currently playing. +int IsMoviePlaying(); + +// 769. QueueMovie +// Queues up a movie to be played using PlayMovieQueue. +// If bSkippable is TRUE, the player can cancel the movie by hitting escape. +// If bSkippable is FALSE, the player cannot cancel the movie and must wait +// for it to finish playing. +void QueueMovie( string sMovie, int bSkippable ); + +// 770. PlayMovieQueue +// Plays the movies that have been added to the queue by QueueMovie +// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only +// cancels out of the currently playing movie rather than the entire queue +// of movies (assuming the currently playing movie is flagged as skippable). +// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled +// if the player hits escape (assuming the currently playing movie is flagged +// as skippable). +void PlayMovieQueue( int bAllowSeparateSkips ); + +// 771. YavinHackCloseDoor +// This is an incredibly hacky function to allow the doors to be properly +// closed on Yavin without running into the problems we've had. It is too +// late in development to fix it correctly, so thus we do this. Life is +// hard. You'll get over it +void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/TSL/nwnnsscomp/KScript/nwscript-tsl.nss b/TSL/nwnnsscomp/KScript/nwscript-tsl.nss new file mode 100644 index 000000000..94e753a63 --- /dev/null +++ b/TSL/nwnnsscomp/KScript/nwscript-tsl.nss @@ -0,0 +1,6325 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 20; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; +int INVENTORY_SLOT_RIGHTWEAPON2= 18; +int INVENTORY_SLOT_LEFTWEAPON2 = 19; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; +int IMMUNITY_TYPE_DROID_CONFUSED = 33; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; +int EFFECT_TYPE_DROID_CONFUSED = 79; +int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 +int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; +int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code +int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; +int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; +int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; +int ITEM_PROPERTY_DAMPEN_SOUND = 63; +int ITEM_PROPERTY_DOORCUTTING = 64; +int ITEM_PROPERTY_DOORSABERING = 65; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; +int BASE_ITEM_WRIST_LAUNCHER = 91; +int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; +int VFX_DUR_ELECTRICAL_SPARK = 2067; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + +int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/28/2004 +// These masks are used in Spells.2DA to indicate which spells +// can be affected by which Forms. Unfortunately, the script compiler +// won't let me make a constant with a Hex value, so I've had to use +// decimal. +int FORM_MASK_FORCE_FOCUS = 1; +int FORM_MASK_ENDURING_FORCE = 2; +int FORM_MASK_FORCE_AMPLIFICATION = 4; +int FORM_MASK_FORCE_POTENCY = 8; +int FORM_MASK_REGENERATION = 16; +int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; +*/ + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// DJS-OEI 12/9/2003 +// New Force Powers +int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; +int FORCE_POWER_MASTER_HEAL = 134; +int FORCE_POWER_FORCE_BARRIER = 135; +int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; +int FORCE_POWER_MASTER_FORCE_BARRIER = 137; +int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast +int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. +int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // +int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast +int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. +int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // +int FORCE_POWER_CRUSH_OPPOSITION_I = 144; +int FORCE_POWER_CRUSH_OPPOSITION_II = 145; +int FORCE_POWER_CRUSH_OPPOSITION_III = 146; +int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; +int FORCE_POWER_CRUSH_OPPOSITION_V = 148; +int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; +int FORCE_POWER_FORCE_BODY = 150; +int FORCE_POWER_IMPROVED_FORCE_BODY = 151; +int FORCE_POWER_MASTER_FORCE_BODY = 152; +int FORCE_POWER_DRAIN_FORCE = 153; +int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; +int FORCE_POWER_MASTER_DRAIN_FORCE = 155; +int FORCE_POWER_FORCE_CAMOUFLAGE = 156; +int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; +int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; +int FORCE_POWER_FORCE_SCREAM = 159; +int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; +int FORCE_POWER_MASTER_FORCE_SCREAM = 161; +int FORCE_POWER_FORCE_REPULSION = 162; +int FORCE_POWER_FORCE_REDIRECTION = 163; +int FORCE_POWER_FURY = 164; +int FORCE_POWER_IMPROVED_FURY = 165; +int FORCE_POWER_MASTER_FURY = 166; +int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; +int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; +int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; +int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; +int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; +int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; +int FORCE_POWER_REVITALIZE = 173; +int FORCE_POWER_IMPROVED_REVITALIZE = 174; +int FORCE_POWER_MASTER_REVITALIZE = 175; +int FORCE_POWER_FORCE_SIGHT = 176; +int FORCE_POWER_FORCE_CRUSH = 177; +int FORCE_POWER_PRECOGNITION = 178; +int FORCE_POWER_BATTLE_PRECOGNITION = 179; +int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; +int FORCE_POWER_MIND_TRICK = 181; +int FORCE_POWER_CONFUSION = 200; +int FORCE_POWER_BEAST_TRICK = 182; +int FORCE_POWER_BEAST_CONFUSION = 184; +int FORCE_POWER_DROID_TRICK = 201; +int FORCE_POWER_DROID_CONFUSION = 269; +int FORCE_POWER_BREATH_CONTROL = 270; +int FORCE_POWER_WOOKIEE_RAGE_I = 271; +int FORCE_POWER_WOOKIEE_RAGE_II = 272; +int FORCE_POWER_WOOKIEE_RAGE_III = 273; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/25/2004 +int FORM_LIGHTSABER_PADAWAN_I = 205; +int FORM_LIGHTSABER_PADAWAN_II = 206; +int FORM_LIGHTSABER_PADAWAN_III = 207; +int FORM_LIGHTSABER_DAKLEAN_I = 208; +int FORM_LIGHTSABER_DAKLEAN_II = 209; +int FORM_LIGHTSABER_DAKLEAN_III = 210; +int FORM_LIGHTSABER_SENTINEL_I = 211; +int FORM_LIGHTSABER_SENTINEL_II = 212; +int FORM_LIGHTSABER_SENTINEL_III = 213; +int FORM_LIGHTSABER_SODAK_I = 214; +int FORM_LIGHTSABER_SODAK_II = 215; +int FORM_LIGHTSABER_SODAK_III = 216; +int FORM_LIGHTSABER_ANCIENT_I = 217; +int FORM_LIGHTSABER_ANCIENT_II = 218; +int FORM_LIGHTSABER_ANCIENT_III = 219; +int FORM_LIGHTSABER_MASTER_I = 220; +int FORM_LIGHTSABER_MASTER_II = 221; +int FORM_LIGHTSABER_MASTER_III = 222; +int FORM_CONSULAR_FORCE_FOCUS_I = 223; +int FORM_CONSULAR_FORCE_FOCUS_II = 224; +int FORM_CONSULAR_FORCE_FOCUS_III = 225; +int FORM_CONSULAR_ENDURING_FORCE_I = 226; +int FORM_CONSULAR_ENDURING_FORCE_II = 227; +int FORM_CONSULAR_ENDURING_FORCE_III = 228; +int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; +int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; +int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; +int FORM_CONSULAR_FORCE_SHELL_I = 232; +int FORM_CONSULAR_FORCE_SHELL_II = 233; +int FORM_CONSULAR_FORCE_SHELL_III = 234; +int FORM_CONSULAR_FORCE_POTENCY_I = 235; +int FORM_CONSULAR_FORCE_POTENCY_II = 236; +int FORM_CONSULAR_FORCE_POTENCY_III = 237; +int FORM_CONSULAR_REGENERATION_I = 238; +int FORM_CONSULAR_REGENERATION_II = 239; +int FORM_CONSULAR_REGENERATION_III = 240; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; +*/ + +int FORM_SABER_I_SHII_CHO = 258; +int FORM_SABER_II_MAKASHI = 259; +int FORM_SABER_III_SORESU = 260; +int FORM_SABER_IV_ATARU = 261; +int FORM_SABER_V_SHIEN = 262; +int FORM_SABER_VI_NIMAN = 263; +int FORM_SABER_VII_JUYO = 264; +int FORM_FORCE_I_FOCUS = 265; +int FORM_FORCE_II_POTENCY = 266; +int FORM_FORCE_III_AFFINITY = 267; +int FORM_FORCE_IV_MASTERY = 268; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; +int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; +int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; +int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 +int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +// DJS-OEI 2/11/2004 +int CLASS_TYPE_TECHSPECIALIST = 9; +int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe +int CLASS_TYPE_JEDIWEAPONMASTER = 11; +int CLASS_TYPE_JEDIMASTER = 12; +int CLASS_TYPE_JEDIWATCHMAN = 13; +int CLASS_TYPE_SITHMARAUDER = 14; +int CLASS_TYPE_SITHLORD = 15; +int CLASS_TYPE_SITHASSASSIN = 16; + + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; +// DJS-OEI 2/25/2004 +int STANDARD_FACTION_SELF_LOATHING = 21; +int STANDARD_FACTION_ONE_ON_ONE = 22; +int STANDARD_FACTION_PARTYPUPPET = 23; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; +// DJS-OEI 11/12/2003 +int FEAT_EVASION = 125; +int FEAT_TARGETING_1 = 126; +int FEAT_TARGETING_2 = 127; +int FEAT_TARGETING_3 = 128; +int FEAT_TARGETING_4 = 129; +int FEAT_TARGETING_5 = 130; +int FEAT_TARGETING_6 = 131; +int FEAT_TARGETING_7 = 132; +int FEAT_TARGETING_8 = 133; +int FEAT_TARGETING_9 = 134; +int FEAT_TARGETING_10 = 135; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT = 136; +int FEAT_IMPROVED_PRECISE_SHOT = 137; +int FEAT_MASTER_PRECISE_SHOT = 138; +*/ +int FEAT_CLOSE_COMBAT = 139; +int FEAT_IMPROVED_CLOSE_COMBAT = 140; +int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; +int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; +int FEAT_REGENERATE_FORCE_POINTS = 143; +int FEAT_DARK_SIDE_CORRUPTION = 149; +int FEAT_IGNORE_PAIN_1 = 150; +int FEAT_IGNORE_PAIN_2 = 151; +int FEAT_IGNORE_PAIN_3 = 152; +int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; +int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; +int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; +int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; +int FEAT_DEFLECT = 168; +int FEAT_INNER_STRENGTH_1 = 169; +int FEAT_INNER_STRENGTH_2 = 170; +int FEAT_INNER_STRENGTH_3 = 171; +int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; +int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; +int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; +int FEAT_CRAFT = 175; +int FEAT_MASTERCRAFT_WEAPONS_1 = 176; +int FEAT_MASTERCRAFT_WEAPONS_2 = 177; +int FEAT_MASTERCRAFT_WEAPONS_3 = 178; +int FEAT_MASTERCRAFT_ARMOR_1 = 179; +int FEAT_MASTERCRAFT_ARMOR_2 = 180; +int FEAT_MASTERCRAFT_ARMOR_3 = 181; +int FEAT_DROID_INTERFACE = 182; +int FEAT_CLASS_SKILL_AWARENESS = 183; +int FEAT_CLASS_SKILL_COMPUTER_USE = 184; +int FEAT_CLASS_SKILL_DEMOLITIONS = 185; +int FEAT_CLASS_SKILL_REPAIR = 186; +int FEAT_CLASS_SKILL_SECURITY = 187; +int FEAT_CLASS_SKILL_STEALTH = 188; +int FEAT_CLASS_SKILL_TREAT_INJURY = 189; +int FEAT_DUAL_STRIKE = 190; +int FEAT_IMPROVED_DUAL_STRIKE = 191; +int FEAT_MASTER_DUAL_STRIKE = 192; +int FEAT_FINESSE_LIGHTSABERS = 193; +int FEAT_FINESSE_MELEE_WEAPONS = 194; +int FEAT_MOBILITY = 195; +int FEAT_REGENERATE_VITALITY_POINTS = 196; +int FEAT_STEALTH_RUN = 197; +int FEAT_KINETIC_COMBAT = 198; +int FEAT_SURVIVAL = 199; +int FEAT_MANDALORIAN_COURAGE = 200; +int FEAT_PERSONAL_CLOAKING_SHIELD = 201; +int FEAT_MENTOR = 202; +int FEAT_IMPLANT_SWITCHING = 203; +int FEAT_SPIRIT = 204; +int FEAT_FORCE_CHAIN = 205; +int FEAT_WAR_VETERAN = 206; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT_IV = 226; +int FEAT_PRECISE_SHOT_V = 227; +*/ +int FEAT_FIGHTING_SPIRIT = 236; +int FEAT_HEROIC_RESOLVE = 237; +int FEAT_PRECISE_SHOT = 240; +int FEAT_IMPROVED_PRECISE_SHOT = 241; +int FEAT_MASTER_PRECISE_SHOT = 242; +int FEAT_PRECISE_SHOT_IV = 243; +int FEAT_PRECISE_SHOT_V = 244; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; +int ANIMATION_LOOPING_CHECK_BODY = 33; +int ANIMATION_LOOPING_UNLOCK_DOOR = 34; +int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; + +int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 + +int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 +//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 +int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 +int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 +int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 +int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; +int ANIMATION_FIREFORGET_FORCE_CAST = 121; +int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 +int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 +int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; +int ACTION_FOLLOWOWNER = 43; + + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; +int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; +int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; +// DJS-OEI 1/20/2004 +int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; +int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; +int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; +int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; +int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; +int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; +int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_DANTOOINE = 0; +int PLANET_DXUN = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_KORRIBAN = 3; +int PLANET_M4_78 = 4; +int PLANET_MALACHOR_V = 5; +int PLANET_NAR_SHADDAA = 6; +int PLANET_ONDERON = 7; +int PLANET_PERAGUS = 8; +int PLANET_TELOS = 9; +int PLANET_HARBINGER = 10; +int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; +int PLANET_LIVE_06 = 16; + +int NPC_PLAYER =-1; +int NPC_ATTON = 0; +int NPC_BAO_DUR = 1; +int NPC_CANDEROUS = 2; +int NPC_G0T0 = 3; +int NPC_HANDMAIDEN = 4; +int NPC_HK_47 = 5; +int NPC_KREIA = 6; +int NPC_MIRA = 7; +int NPC_T3_M4 = 8; +int NPC_VISAS = 9; +int NPC_HANHARR = 10; +int NPC_DISCIPLE = 11; + +int PUP_SENSORBALL = 0; +int PUP_OTHER1 = 1; +int PUP_OTHER2 = 2; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals +int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots +int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack +int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member +int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. +int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. +int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. +int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff +int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. +int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; +int SHIELD_PLOT_MAN_M28AA = 18; +int SHIELD_HEAT = 19; +int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 + + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; +int VIDEO_EFFECT_CLAIRVOYANCE = 3; +int VIDEO_EFFECT_FORCESIGHT = 4; +int VIDEO_EFFECT_VISAS_FREELOOK = 5; +int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; +int VIDEO_EFFECT_FURY_1 = 7; +int VIDEO_EFFECT_FURY_2 = 8; +int VIDEO_EFFECT_FURY_3 = 9; +int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. + +// DJS-OEI 1/14/2004 +// Modified the way these work. The values +// listed here are now direct references to +// rows in Tutorial.2DA. Originally these +// would have to be converted to .2DA ids +// in the code. +int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; +// DJS-OEI 11/21/2003 +int TUTORIAL_WINDOW_TEMP1 = 42; +int TUTORIAL_WINDOW_TEMP2 = 43; +int TUTORIAL_WINDOW_TEMP3 = 44; +int TUTORIAL_WINDOW_TEMP4 = 45; +int TUTORIAL_WINDOW_TEMP5 = 46; +int TUTORIAL_WINDOW_TEMP6 = 47; +int TUTORIAL_WINDOW_TEMP7 = 48; +int TUTORIAL_WINDOW_TEMP8 = 49; +int TUTORIAL_WINDOW_TEMP9 = 50; +int TUTORIAL_WINDOW_TEMP10 = 51; +int TUTORIAL_WINDOW_TEMP11 = 52; +int TUTORIAL_WINDOW_TEMP12 = 53; +int TUTORIAL_WINDOW_TEMP13 = 54; +int TUTORIAL_WINDOW_TEMP14 = 55; +int TUTORIAL_WINDOW_TEMP15 = 56; + +int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 +int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 +int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 +int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 +int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + +//RWT-OEI 12/16/03 +// These constants are for the Implant Swapping support in a_swapimplant +// They correspond directly with the ACTIONIDs in the game for each of the +// implant swapping actions. +int IMPLANT_NONE = 0; +int IMPLANT_REGEN = 1; +int IMPLANT_STR = 2; +int IMPLANT_END = 3; +int IMPLANT_AGI = 4; + +// DJS-OEI 6/12/2004 +// These constants can be OR'ed together and sent to SetForfeitConditions() +// in order to set up flagging situations that will alert the area script that +// the player has violated them. This is usually used for Battle Arena restrictions. +int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers +int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) +int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. +int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start + // of one of the Dxun Battle Circle fights, or no weapon at all. +int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. +int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. +int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. +int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +//RWT-OEI 12/16/03 - Added the bHideMessage parameter +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +// DJS-OEI 8/26/2004 +// Added a parameter for the percentage of HP the target +// should receive when they are revived. +effect EffectResurrection( int nHPPercent=0 ); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). +// This can be called by a creature or by an Area of Effect object. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature +// dies. Note that NO XP will be awarded if the creature is killed with this parameter. +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust +// the playercharacter's alignment without impacting the rest of the NPCs +void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. +// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the feat due to daily limits or +// other restrictions. Use GetFeatAcquired() if you just want to +// know if they've got it or not. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then +//this function will only return true if the character is in REAL combat. +//If you don't know what that means, don't pass in TRUE. +int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. +// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* +// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen +// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able +// to access Item Upgrading. +void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the spell due to lack of sufficient +// Force Points. Use GetSpellAcquired() if you just want to +// know if they've got it or not. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// nWindow - A row index from Tutorial.2DA specifying the message to display. +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); + + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 20 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 20 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 12 and 28 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 12 and 28 +// the value range is 0 to 255 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +// nNPC - NPC_ +// returns 1 if in current party, 0 if selectable as a party member +// -1 if not in party at all +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE +// to this parameter makes it possible for the player to cancel out +// of the party selection GUI, so be careful that you are okay with +// them cancelling out of it before you pass TRUE. +// Also, in the sExitScript that gets called after the Party Select +// GUI exits, you can use GetRunScriptVar to find out if they +// cancelled. If it returns TRUE, they didn't cancel. If it returns +// FALSE, they cancelled. See me if there's questions. +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(int nNPC, object oidNPC); + +// DJS-OEI +// 768. GetScriptParameter +// This function will take the index of a script parameter +// and return the value associated with it. The index +// of the first parameter is 1. +int GetScriptParameter( int nIndex ); + +//RWT-OEI 12/10/03 +// 769. SetFadeUntilScript +// This script function will make it so that the fade cannot be lifted under any circumstances +// other than a call to the SetGlobalFadeIn() script. +// This function should be called AFTER the fade has already been called. For example, you would +// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() +// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new +// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript +// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. +void SetFadeUntilScript(); + +// DJS-OEI 12/15/2003 +// 770: Create a Force Body effect +// - nLevel: The level of the Force Body effect. +// 0 = Force Body +// 1 = Improved Force Body +// 2 = Master Force Body +effect EffectForceBody(int nLevel); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item +int GetItemComponent( ); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item in pieces +int GetItemComponentPieceValue( ); + +// FAK-OEI 12/15/2003 +// 773: Start the GUI for Chemical Workshop +void ShowChemicalUpgradeScreen(object oCharacter ); + +// FAK-OEI 12/15/2003 +// 774: Get the number of chemicals for an item +int GetChemicals( ); + +// FAK-OEI 12/15/2003 +// 775: Get the number of chemicals for an item in pieces +int GetChemicalPieceValue( ); + +// DJS-OEI 12/30/2003 +// 776: Get the number of Force Points that were required to +// cast this spell. This includes modifiers such as Room Force +// Ratings and the Force Body power. +// * Return value on error: 0 +int GetSpellForcePointCost( ); + +// DJS-OEI 1/2/2004 +// 777: Create a Fury effect. +effect EffectFury(); + +// DJS-OEI 1/3/2004 +// 778: Create a Blind effect. +effect EffectBlind(); + +// DJS-OEI 1/4/2004 +// 779: Create an FP regeneration modifier effect. +effect EffectFPRegenModifier( int nPercent ); + +// DJS-OEI 1/4/2004 +// 780: Create a VP regeneration modifier effect. +effect EffectVPRegenModifier( int nPercent ); + +// DJS-OEI 1/9/2004 +// 781: Create a Force Crush effect. +effect EffectCrush(); + +// FAK - OEI 1/12/04 +// 782: Minigame grabs a swoop bike upgrade +int SWMG_GetSwoopUpgrade( int nSlot ); + +// DJS-OEI 1/12/2004 +// 783: Returns whether or not the target has access to a feat, +// even if they can't use it right now due to daily limits or +// other restrictions. +int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); + +// DJS-OEI 1/12/2004 +// 784: Returns whether or not the target has access to a spell, +// even if they can't use it right now due to lack of Force Points. +int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); + +// FAK-OEI 1/12/2004 +// 785: Displays the Swoop Bike upgrade screen. +void ShowSwoopUpgradeScreen( ); + +// DJS-OEI 1/13/2004 +// 786: Grants the target a feat without regard for prerequisites. +void GrantFeat( int nFeat, object oCreature ); + +// DJS-OEI 1/13/2004 +// 787: Grants the target a spell without regard for prerequisites. +void GrantSpell( int nSpell, object oCreature ); + +// DJS-OEI 1/13/2004 +// 788: Places an active mine on the map. +// nMineType - Mine Type from Traps.2DA +// lPoint - The location in the world to place the mine. +// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA +// results in the final DC for creatures to detect this mine. +// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA +// results in the final DC for creatures to disarm this mine. +// oCreator - The object that should be considered the owner of the mine. +// If oCreator is set to OBJECT_INVALID, the faction of the mine will be +// considered Hostile1, meaning the party will be vulnerable to it. +void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); + +// FAK - OEI 1/15/04 +// 789: Yet another minigame function. Returns the object's track's position. +vector SWMG_GetTrackPosition(object oFollower); + +// FAK - OEI 1/15/04 +// 790: minigame function that lets you psuedo-set the position of a follower object +vector SWMG_SetFollowerPosition(vector vPos); + +//RWT-OEI 01/16/04 +// 791: A function to put the character into a true combat state but the reason set to +// not real combat. This should help us control animations in cutscenes with a bit +// more precision. -- Not totally sure this is doing anything just yet. Seems +// the combat condition gets cleared shortly after anyway. +// If nEnable is 1, it enables fake combat mode. If 0, it disables it. +// WARNING: Whenever using this function to enable fake combat mode, you should +// have a matching call to it to disable it. (pass 0 for nEnable). +void SetFakeCombatState( object oObject, int nEnable ); + +// FAK - OEI 1/23/04 +// 792: minigame function that deletes a minigame object +void SWMG_DestroyMiniGameObject(object oObject); + +// DJS-OEI 1/26/2004 +// 793: Returns the Demolitions skill of the creature that +// placed this mine. This will often be 0. This function accepts +// the object that the mine is attached to (Door, Placeable, or Trigger) +// and will determine which one it actually is at runtime. +int GetOwnerDemolitionsSkill( object oObject ); + +// RWT-OEI 01/29/04 +// 794: Disables or Enables the Orient On Click behavior in creatures. If +// disabled, they will not orient to face the player when clicked on +// for dialogue. The default behavior is TRUE. +void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); + +// DJS-OEI 1/29/2004 +// 795: Gets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, the return +// value with be 0. If the character is in the party, but has an +// attitude of Ambivalent, this will be -1. +int GetInfluence( int nNPC ); + +// DJS-OEI 1/29/2004 +// 796: Sets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nInfluence - The new value for the influence on this CNPC. +void SetInfluence( int nNPC, int nInfluence ); + +// DJS-OEI 1/29/2004 +// 797: Modifies the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nModifier - The modifier to the current influence on this CNPC. +// This may be a negative value to reduce the influence. +void ModifyInfluence( int nNPC, int nModifier ); + +// FAK - OEI 2/3/04 +// 798: returns the racial sub-type of the oTarget object +int GetRacialSubType(object oTarget); + +// DJS-OEI 2/3/2004 +// 799: Increases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is greater than the max +// of 127. +void IncrementGlobalNumber( string sIdentifier, int nAmount ); + +// DJS-OEI 2/3/2004 +// 800: Decreases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is less than the minimum +// of -128. +void DecrementGlobalNumber( string sIdentifier, int nAmount ); + +// RWT-OEI 02/06/04 +// 801: SetBonusForcePoints - This sets the number of bonus force points +// that will always be added to that character's total calculated +// force points. +void SetBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 802: AddBonusForcePoints - This adds nBonusFP to the current total +// bonus that the player has. The Bonus Force Points are a pool +// of force points that will always be added after the player's +// total force points are calculated (based on level, force dice, +// etc.) +void AddBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 803: GetBonusForcePoints - This returns the total number of bonus +// force points a player has. Bonus Force Points are a pool of +// points that are always added to a player's Max Force Points. +// ST: Please explain how a function returning VOID could return a +// numerical value? Hope it works changing the return type... +// void GetBonusForcePoints( object oCreature ); +int GetBonusForcePoints( object oCreature ); + +// FAK - OEI 2/11/04 +// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop +// bike races. Gravity will act upon this velocity. +void SWMG_SetJumpSpeed(float fSpeed); + +// PC CODE MERGER +// 805. IsMoviePlaying--dummy func so we can compile +int IsMoviePlaying(); + +// 806 QueueMovie +void QueueMovie(string sMovie, int nSkippable = TRUE); + +// 807 +void PlayMovieQueue(int nAllowSkips = TRUE); + +// 808 +void YavinHackDoorClose(object oCreature); + +// 809 +// new function for droid confusion so inherint mind immunity can be +// avoided. +effect EffectDroidConfused(); +// END PC CODE MERGER + +// 810 +// DJS-OEI 3/8/2004 +// Determines if the given creature is in Stealth mode or not. +// 0 = Creature is not stealthed. +// 1 = Creature is stealthed. +// This function will return 0 for any non-creature. +int IsStealthed( object oCreature ); + +// 811 +// DJS-OEI 3/12/2004 +// Determines if the given creature is using any Meditation Tree +// Force Power. +// 0 = Creature is not meditating. +// 1 = Creature is meditating. +// This function will return 0 for any non-creature. +int IsMeditating( object oCreature ); + +// 812 +// DJS-OEI 3/16/2004 +// Determines if the given creature is using the Total Defense +// Stance. +// 0 = Creature is not in Total Defense. +// 1 = Creature is in Total Defense. +// This function will return 0 for any non-creature. +int IsInTotalDefense( object oCreature ); + +// 813 +// RWT-OEI 03/19/04 +// Stores a Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +void SetHealTarget( object oidHealer, object oidTarget ); + +// 814 +// RWT-OEI 03/19/04 +// Retrieves the Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +object GetHealTarget( object oidHealer ); + +// 815 +// RWT-OEI 03/23/04 +// Returns a vector containing a random destination that the +// given creature can walk to that's within the range of the +// passed parameter. +vector GetRandomDestination( object oCreature, int rangeLimit ); + +// 816 +// DJS-OEI 3/25/2004 +// Returns whether the given creature is currently in the +// requested Lightsaber/Consular Form and can make use of +// its benefits. This function will perform trumping checks +// and lightsaber-wielding checks for those Forms that require +// them. +int IsFormActive( object oCreature, int nFormID ); + +// 817 +// DJS-OEI 3/28/2004 +// Returns the Form Mask of the requested spell. This is used +// to determine if a spell is affected by various Forms, usually +// Consular forms that modify duration/range. +int GetSpellFormMask( int nSpellID ); + +// 818 +// DJS-OEI 3/29/2004 +// Return the base number of Force Points required to cast +// the given spell. This does not take into account modifiers +// of any kind. +int GetSpellBaseForcePointCost( int nSpellID ); + +// 819 +// RWT-OEI 04/05/04 +// Setting this to TRUE makes it so that the Stealth status is +// left on characters even when entering cutscenes. By default, +// stealth is removed from anyone taking part in a cutscene. +// ALWAYS set this back to FALSE on every End Dialog node in +// the cutscene you wanted to stay stealthed in. This isn't a +// flag that should be left on indefinitely. In fact, it isn't +// saved, so needs to be set/unset on a case by case basis. +void SetKeepStealthInDialog( int nStealthState ); + +// 820 +// RWT-OEI 04/06/04 +// This returns TRUE or FALSE if there is a clear line of sight from +// the source vector to the target vector. This is used in the AI to +// help the creatures using ranged weapons find better places to shoot +// when the player moves out of sight. +int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); + +// 821 +// FAK - OEI 5/3/04 +// ShowDemoScreen, displays a texture, timeout, string and xy for string +int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); + +// 822 +// DJS-OEI 5/4/2004 +// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES +// AT THE MOMENT. This heartbeat should force perception updates to occur. +void ForceHeartbeat( object oCreature ); + +// 823 +// DJS-OEI 5/5/2004 +// Creates a Force Sight effect. +effect EffectForceSight(); + +// 824 +// FAK - OEI 5/7/04 +// gets the walk state of the creature: 0 walk or standing, 1 is running +int IsRunning( object oCreature ); + +// 825 +// FAK - OEI 5/24/04 +// applies a velocity to the player object +void SWMG_PlayerApplyForce(vector vForce); + +// 826 +// DJS-OEI 6/12/2004 +// This function allows a script to set the conditions which constitute +// a combat forfeit by a member of the player's party. This is typically +// used to handle Battle Circle behavior or other challenge-based combats. +// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. +void SetForfeitConditions( int nForfeitFlags ); + +// 827 +// DJS-OEI 6/12/2004 +// This function returns the last FORFEIT_* condition that the player +// has violated. +int GetLastForfeitViolation(); + +// 828 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the REFLEX saving throw for aObject +void ModifyReflexSavingThrowBase(object aObject, int aModValue); + +// 829 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the FORTITUDE saving throw for aObject +void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); + +// 830 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the WILL saving throw for aObject +void ModifyWillSavingThrowBase(object aObject, int aModValue); + +// DJS-OEI 6/21/2004 +// 831 +// This function will return the one CExoString parameter +// allowed for the currently running script. +string GetScriptStringParameter(); + +// 832 +// AWD-OEI 6/29/2004 +// This function returns the personal space value of an object +float GetObjectPersonalSpace(object aObject); + +// 833 +// AWD-OEI 7/06/2004 +// This function adjusts a creatures stats. +// oObject is the creature that will have it's attribute adjusted +// The following constants are acceptable for the nAttribute parameter: +// ABILITY_STRENGTH +// ABILITY_DEXTERITY +// ABILITY_CONSTITUTION +// ABILITY_INTELLIGENCE +// ABILITY_WISDOM +// ABILITY_CHARISMA +// nAmount is the integer vlaue to adjust the stat by (negative values will work). +void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); + +// 834 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void SetCreatureAILevel(object oObject, int nPriority); + +// 835 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void ResetCreatureAILevel(object oObject); + +// 836 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// template. +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); + +// 837 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// creature ID +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByObject( int nPUP, object oPuppet ); + +// 838 +// RWT-OEI 07/17/04 +// This function assigns a PUPPET constant to a +// Party NPC. The party NPC -MUST- be in the game +// before calling this. +// Both the PUP and the NPC have +// to be available in their respective tables +// Returns 1 if successful, 0 if there was an error +int AssignPUP( int nPUP, int nNPC ); + +// 839 +// RWT-OEI 07/17/04 +// This function spawns a Party PUPPET. +// This must be used whenever you want a copy +// of the puppet around to manipulate in the game +// since the puppet is stored in the party table +// just like NPCs are. Once a puppet is assigned +// to a party NPC (see AssignPUP), it will spawn +// or disappear whenever its owner joins or leaves +// the party. +// This does not add it to the party automatically, +// just like SpawnNPC doesn't. You must call AddPuppet() +// to actually add it to the party +object SpawnAvailablePUP( int nPUP, location lLocation ); + +// 840 +// RWT-OEI 07/18/04 +// This adds an existing puppet object to the party. The +// puppet object must already exist via SpawnAvailablePUP +// and must already be available via AddAvailablePUP* +// functions. +int AddPartyPuppet(int nPUP, object oidCreature); + +// 841 +// RWT-OEI 07/19/04 +// This returns the object ID of the puppet's owner. +// The Puppet's owner must exist and must be in the party +// in order to be found. +// Returns invalid object Id if the owner cannot be found. +object GetPUPOwner(object oPUP = OBJECT_SELF); + +// 842 +// RWT-OEI 07/19/04 +// Returns 1 if the creature is a Puppet in the party. +// Otherwise returns 0. It is possible for a 'party puppet' +// to exist without actually being in the party table. +// such as when SpawnAvailablePUP is used without subsequently +// using AddPartyPuppet to add the newly spawned puppet to +// the party table. A puppet in that in-between state would +// return 0 from this function +int GetIsPuppet(object oPUP = OBJECT_SELF ); + +// 843 +// RWT-OEI 07/20/04 +// Similiar to ActionFollowLeader() except the creature +// follows its owner +//nRange is how close it should follow. Note that once this +//action is queued, it will be the only thing this creature +//does until a ClearAllActions() is used. +void ActionFollowOwner(float fRange = 2.5); + +// 844 +// RWT-OEI 07/21/04 +// Returns TRUE if the object ID passed is the character +// that the player is actively controlling at that point. +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +int GetIsPartyLeader(object oCharacter = OBJECT_SELF); + +// 845 +// RWT-OEI 07/21/04 +// Returns the object ID of the character that the player +// is actively controlling. This is the 'Party Leader'. +// Returns object Invalid on error +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +object GetPartyLeader(); + +// 846 +// JAB-OEI 07/22/04 +// Will remove the CNPC from the 3 person party, and remove +// him/her from the area, effectively sending the CNPC back +// to the base. The CNPC data is still stored in the +// party table, and calling this function will not destroy +// the CNPC in any way. +// Returns TRUE for success. +int RemoveNPCFromPartyToBase(int nNPC); + +// 847 +// AWD-OEI 7/22/2004 +// This causes a creature to flourish with it's currently equipped weapon. +void CreatureFlourishWeapon(object oObject); + +// 848 +// Create a Mind Trick effect +effect EffectMindTrick(); + +// 849 +// Create a Faction Modifier effect. +effect EffectFactionModifier( int nNewFaction ); + +// 850 +// ChangeObjectAppearance +// oObjectToChange = Object to change appearance of +// nAppearance = appearance to change to (from appearance.2da) +void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); + +// 851 +// GetIsXBox +// Returns TRUE if this script is being executed on the X-Box. Returns FALSE +// if this is the PC build. +int GetIsXBox(); + +// 852 +// Create a Droid Scramble effect +effect EffectDroidScramble(); + +// 853 +// ActionSwitchWeapons +// Forces the creature to switch between Config 1 and Config 2 +// of their equipment. Does not work in dialogs. Works with +// AssignCommand() +void ActionSwitchWeapons(); + +// 854 +// DJS-OEI 8/29/2004 +// PlayOverlayAnimation +// This function will play an overlay animation on a character +// even if the character is moving. This does not cause an action +// to be placed on the queue. The animation passed in must be +// designated as an overlay in Animations.2DA. +void PlayOverlayAnimation( object oTarget, int nAnimation ); + +// 855 +// RWT-OEI 08/30/04 +// UnlockAllSongs +// Calling this will set all songs as having been unlocked. +// It is INTENDED to be used in the end-game scripts to unlock +// any end-game songs as well as the KotOR1 sound track. +void UnlockAllSongs(); + +// 856 +// RWT-OEI 08/31/04 +// Passing TRUE into this function turns off the player's maps. +// Passing FALSE into this function re-enables them. This change +// is permanent once called, so it is important that there *is* +// a matching call to DisableMap(FALSE) somewhere or else the +// player is stuck without a map indefinitely. +void DisableMap(int nFlag = FALSE); + +// 857 +// RWT-OEI 08/31/04 +// This function schedules a mine to play its DETONATION +// animation once it is destroyed. Note that this detonates +// the mine immediately but has nothing to do with causing +// the mine to do any damage to anything around it. To +// get the mine to damage things around it when it detonates +// do: +// AssignCommand(,ExecuteScript( "k_trp_generic",)); +// right before you call DetonateMine(). By my experience so far +// you don't need any kind of delay between the two. +void DetonateMine(object oMine); + +// 858 +// RWT-OEI 09/06/04 +// This function turns off the innate health regeneration that all party +// members have. The health regen will *stay* off until it is turned back +// on by passing FALSE to this function. +void DisableHealthRegen(int nFlag = FALSE); + +// 859 +// DJS-OEI 9/7/2004 +// This function sets the current Jedi Form on the given creature. This +// call will do nothing if the target does not know the Form itself. +void SetCurrentForm( object oCreature, int nFormID ); + +// 860 +// RWT-OEI 09/09/04 +// This will disable or enable area transit +void SetDisableTransit(int nFlag = FALSE); + +// 861 +//RWT-OEI 09/09/04 +// This will set the specific input class. +// The valid options are: +// 0 - Normal PC control +// 1 - Mini game control +// 2 - GUI control +// 3 - Dialog Control +// 4 - Freelook control +void SetInputClass(int nClass); + +// 862 +//RWT-OEI 09/15/04 +// This script allows an object to recieve updates even if it is outside +//the normal range limit of 250.0f meters away from the player. This should +//ONLY be used for cutscenes that involve objects that are more than 250 +//meters away from the player. It needs to be used on a object by object +//basis. +//This flag should *always* be set to false once the cutscene it is needed +//for is over, or else the game will spend CPU time updating the object +//when it doesn't need to. +//For questions on use of this function, or what its purpose is, check +//with me. +void SetForceAlwaysUpdate(object oObject, int nFlag); + +//863 +//RWT-OEI 09/15/04 +//This function enables or disables rain +void EnableRain( int nFlag ); + +//864 +//RWT-OEI 09/27/04 +//This function displays the generic Message Box with the strref +//message in it +//sIcon is the resref for an icon you would like to display. +void DisplayMessageBox(int nStrRef, string sIcon = ""); + +//865 +//RWT-OEI 09/28/04 +//This function displays a datapad popup. Just pass it the +//object ID of a datapad. +void DisplayDatapad(object oDatapad); + +// 866 +// CTJ-OEI 09-29-04 +// Removes the heartbeat script on the placeable. Useful for +// placeables whose contents get populated in the heartbeat +// script and then the heartbeat no longer needs to be called. +void RemoveHeartbeat(object oPlaceable); + + +//867 +// JF-OEI 10-07-2004 +// Remove an effect by ID +void RemoveEffectByID( object oCreature, int nEffectID ); + +//868 +// RWT-OEI 10/07/04 +// This script removes an effect by an identical match +// based on: +// Must have matching EffectID types. +// Must have the same value in Integer(0) +// Must have the same value in Integer(1) +// I'm specifically using this function for Mandalore's implant swapping +// script and it will probably not be useful for anyone else. If you're +// not sure what this script function does, see me before using it. +void RemoveEffectByExactMatch( object oCreature, effect eEffect); + +// 869 +// DJS-OEI 10/9/2004 +// This function adjusts a creature's skills. +// oObject is the creature that will have its skill adjusted +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// nAmount is the integer value to adjust the stat by (negative values will work). +void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); + +// 870 +// DJS-OEI 10/10/2004 +// This function returns the base Skill Rank for the requested +// skill. It does not include modifiers from effects/items. +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// oObject is the creature that will have its skill base returned. +int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); + +// 871 +// DJS-OEI 10/15/2004 +// This function will allow the caller to modify the rendering behavior +// of the target object. +// oObject - The object to change rendering state on. +// bEnable - If 0, the object will stop rendering. Else, the object will render. +void EnableRendering( object oObject, int bEnable ); + +// 872 +// RWT-OEI 10/19/04 +// This function returns TRUE if the creature has actions in its +// Combat Action queue. +int GetCombatActionsPending(object oCreature); + +// 873 +// RWT-OEI 10/26/04 +// This function saves the party member at that index with the object +// that is passed in. +void SaveNPCByObject( int nNPC, object oidCharacter); + +// 874 +// RWT-OEI 10/26/04 +// This function saves the party puppet at that index with the object +// that is passed in. For the Remote, just use '0' for nPUP +void SavePUPByObject( int nPUP, object oidPuppet ); + +// 875 +// RWT-OEI 10/29/04 +// Returns TRUE if the object passed in is the character that the player +// made at the start of the game +int GetIsPlayerMadeCharacter(object oidCharacter); + +// 876 +// RWT-OEI 11/12/04 +// This repopulates the NPCObject table in CSWPartyTable. Do not use this +// unless you understand exactly what it is doing. +void RebuildPartyTable(); diff --git a/TSL/nwnnsscomp/KTool/nwnnsscomp.exe b/TSL/nwnnsscomp/KTool/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..ff8140fe25306725263b249f0f60656550b0749e GIT binary patch literal 266240 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

yHU#pT_#B(`_;`PmclN(P4A#>B)7^-l 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≈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 CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +// DJS-OEI 8/26/2004 +// Added a parameter for the percentage of HP the target +// should receive when they are revived. +effect EffectResurrection( int nHPPercent=0 ); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). +// This can be called by a creature or by an Area of Effect object. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature +// dies. Note that NO XP will be awarded if the creature is killed with this parameter. +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust +// the playercharacter's alignment without impacting the rest of the NPCs +void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. +// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the feat due to daily limits or +// other restrictions. Use GetFeatAcquired() if you just want to +// know if they've got it or not. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then +//this function will only return true if the character is in REAL combat. +//If you don't know what that means, don't pass in TRUE. +int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. +// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* +// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen +// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able +// to access Item Upgrading. +void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the spell due to lack of sufficient +// Force Points. Use GetSpellAcquired() if you just want to +// know if they've got it or not. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// nWindow - A row index from Tutorial.2DA specifying the message to display. +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); + + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 20 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 20 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 12 and 28 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 12 and 28 +// the value range is 0 to 255 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +// nNPC - NPC_ +// returns 1 if in current party, 0 if selectable as a party member +// -1 if not in party at all +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE +// to this parameter makes it possible for the player to cancel out +// of the party selection GUI, so be careful that you are okay with +// them cancelling out of it before you pass TRUE. +// Also, in the sExitScript that gets called after the Party Select +// GUI exits, you can use GetRunScriptVar to find out if they +// cancelled. If it returns TRUE, they didn't cancel. If it returns +// FALSE, they cancelled. See me if there's questions. +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(int nNPC, object oidNPC); + +// DJS-OEI +// 768. GetScriptParameter +// This function will take the index of a script parameter +// and return the value associated with it. The index +// of the first parameter is 1. +int GetScriptParameter( int nIndex ); + +//RWT-OEI 12/10/03 +// 769. SetFadeUntilScript +// This script function will make it so that the fade cannot be lifted under any circumstances +// other than a call to the SetGlobalFadeIn() script. +// This function should be called AFTER the fade has already been called. For example, you would +// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() +// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new +// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript +// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. +void SetFadeUntilScript(); + +// DJS-OEI 12/15/2003 +// 770: Create a Force Body effect +// - nLevel: The level of the Force Body effect. +// 0 = Force Body +// 1 = Improved Force Body +// 2 = Master Force Body +effect EffectForceBody(int nLevel); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item +int GetItemComponent( ); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item in pieces +int GetItemComponentPieceValue( ); + +// FAK-OEI 12/15/2003 +// 773: Start the GUI for Chemical Workshop +void ShowChemicalUpgradeScreen(object oCharacter ); + +// FAK-OEI 12/15/2003 +// 774: Get the number of chemicals for an item +int GetChemicals( ); + +// FAK-OEI 12/15/2003 +// 775: Get the number of chemicals for an item in pieces +int GetChemicalPieceValue( ); + +// DJS-OEI 12/30/2003 +// 776: Get the number of Force Points that were required to +// cast this spell. This includes modifiers such as Room Force +// Ratings and the Force Body power. +// * Return value on error: 0 +int GetSpellForcePointCost( ); + +// DJS-OEI 1/2/2004 +// 777: Create a Fury effect. +effect EffectFury(); + +// DJS-OEI 1/3/2004 +// 778: Create a Blind effect. +effect EffectBlind(); + +// DJS-OEI 1/4/2004 +// 779: Create an FP regeneration modifier effect. +effect EffectFPRegenModifier( int nPercent ); + +// DJS-OEI 1/4/2004 +// 780: Create a VP regeneration modifier effect. +effect EffectVPRegenModifier( int nPercent ); + +// DJS-OEI 1/9/2004 +// 781: Create a Force Crush effect. +effect EffectCrush(); + +// FAK - OEI 1/12/04 +// 782: Minigame grabs a swoop bike upgrade +int SWMG_GetSwoopUpgrade( int nSlot ); + +// DJS-OEI 1/12/2004 +// 783: Returns whether or not the target has access to a feat, +// even if they can't use it right now due to daily limits or +// other restrictions. +int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); + +// DJS-OEI 1/12/2004 +// 784: Returns whether or not the target has access to a spell, +// even if they can't use it right now due to lack of Force Points. +int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); + +// FAK-OEI 1/12/2004 +// 785: Displays the Swoop Bike upgrade screen. +void ShowSwoopUpgradeScreen( ); + +// DJS-OEI 1/13/2004 +// 786: Grants the target a feat without regard for prerequisites. +void GrantFeat( int nFeat, object oCreature ); + +// DJS-OEI 1/13/2004 +// 787: Grants the target a spell without regard for prerequisites. +void GrantSpell( int nSpell, object oCreature ); + +// DJS-OEI 1/13/2004 +// 788: Places an active mine on the map. +// nMineType - Mine Type from Traps.2DA +// lPoint - The location in the world to place the mine. +// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA +// results in the final DC for creatures to detect this mine. +// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA +// results in the final DC for creatures to disarm this mine. +// oCreator - The object that should be considered the owner of the mine. +// If oCreator is set to OBJECT_INVALID, the faction of the mine will be +// considered Hostile1, meaning the party will be vulnerable to it. +void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); + +// FAK - OEI 1/15/04 +// 789: Yet another minigame function. Returns the object's track's position. +vector SWMG_GetTrackPosition(object oFollower); + +// FAK - OEI 1/15/04 +// 790: minigame function that lets you psuedo-set the position of a follower object +vector SWMG_SetFollowerPosition(vector vPos); + +//RWT-OEI 01/16/04 +// 791: A function to put the character into a true combat state but the reason set to +// not real combat. This should help us control animations in cutscenes with a bit +// more precision. -- Not totally sure this is doing anything just yet. Seems +// the combat condition gets cleared shortly after anyway. +// If nEnable is 1, it enables fake combat mode. If 0, it disables it. +// WARNING: Whenever using this function to enable fake combat mode, you should +// have a matching call to it to disable it. (pass 0 for nEnable). +void SetFakeCombatState( object oObject, int nEnable ); + +// FAK - OEI 1/23/04 +// 792: minigame function that deletes a minigame object +void SWMG_DestroyMiniGameObject(object oObject); + +// DJS-OEI 1/26/2004 +// 793: Returns the Demolitions skill of the creature that +// placed this mine. This will often be 0. This function accepts +// the object that the mine is attached to (Door, Placeable, or Trigger) +// and will determine which one it actually is at runtime. +int GetOwnerDemolitionsSkill( object oObject ); + +// RWT-OEI 01/29/04 +// 794: Disables or Enables the Orient On Click behavior in creatures. If +// disabled, they will not orient to face the player when clicked on +// for dialogue. The default behavior is TRUE. +void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); + +// DJS-OEI 1/29/2004 +// 795: Gets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, the return +// value with be 0. If the character is in the party, but has an +// attitude of Ambivalent, this will be -1. +int GetInfluence( int nNPC ); + +// DJS-OEI 1/29/2004 +// 796: Sets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nInfluence - The new value for the influence on this CNPC. +void SetInfluence( int nNPC, int nInfluence ); + +// DJS-OEI 1/29/2004 +// 797: Modifies the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nModifier - The modifier to the current influence on this CNPC. +// This may be a negative value to reduce the influence. +void ModifyInfluence( int nNPC, int nModifier ); + +// FAK - OEI 2/3/04 +// 798: returns the racial sub-type of the oTarget object +int GetRacialSubType(object oTarget); + +// DJS-OEI 2/3/2004 +// 799: Increases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is greater than the max +// of 127. +void IncrementGlobalNumber( string sIdentifier, int nAmount ); + +// DJS-OEI 2/3/2004 +// 800: Decreases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is less than the minimum +// of -128. +void DecrementGlobalNumber( string sIdentifier, int nAmount ); + +// RWT-OEI 02/06/04 +// 801: SetBonusForcePoints - This sets the number of bonus force points +// that will always be added to that character's total calculated +// force points. +void SetBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 802: AddBonusForcePoints - This adds nBonusFP to the current total +// bonus that the player has. The Bonus Force Points are a pool +// of force points that will always be added after the player's +// total force points are calculated (based on level, force dice, +// etc.) +void AddBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 803: GetBonusForcePoints - This returns the total number of bonus +// force points a player has. Bonus Force Points are a pool of +// points that are always added to a player's Max Force Points. +// ST: Please explain how a function returning VOID could return a +// numerical value? Hope it works changing the return type... +// void GetBonusForcePoints( object oCreature ); +int GetBonusForcePoints( object oCreature ); + +// FAK - OEI 2/11/04 +// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop +// bike races. Gravity will act upon this velocity. +void SWMG_SetJumpSpeed(float fSpeed); + +// PC CODE MERGER +// 805. IsMoviePlaying--dummy func so we can compile +int IsMoviePlaying(); + +// 806 QueueMovie +void QueueMovie(string sMovie, int nSkippable = TRUE); + +// 807 +void PlayMovieQueue(int nAllowSkips = TRUE); + +// 808 +void YavinHackDoorClose(object oCreature); + +// 809 +// new function for droid confusion so inherint mind immunity can be +// avoided. +effect EffectDroidConfused(); +// END PC CODE MERGER + +// 810 +// DJS-OEI 3/8/2004 +// Determines if the given creature is in Stealth mode or not. +// 0 = Creature is not stealthed. +// 1 = Creature is stealthed. +// This function will return 0 for any non-creature. +int IsStealthed( object oCreature ); + +// 811 +// DJS-OEI 3/12/2004 +// Determines if the given creature is using any Meditation Tree +// Force Power. +// 0 = Creature is not meditating. +// 1 = Creature is meditating. +// This function will return 0 for any non-creature. +int IsMeditating( object oCreature ); + +// 812 +// DJS-OEI 3/16/2004 +// Determines if the given creature is using the Total Defense +// Stance. +// 0 = Creature is not in Total Defense. +// 1 = Creature is in Total Defense. +// This function will return 0 for any non-creature. +int IsInTotalDefense( object oCreature ); + +// 813 +// RWT-OEI 03/19/04 +// Stores a Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +void SetHealTarget( object oidHealer, object oidTarget ); + +// 814 +// RWT-OEI 03/19/04 +// Retrieves the Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +object GetHealTarget( object oidHealer ); + +// 815 +// RWT-OEI 03/23/04 +// Returns a vector containing a random destination that the +// given creature can walk to that's within the range of the +// passed parameter. +vector GetRandomDestination( object oCreature, int rangeLimit ); + +// 816 +// DJS-OEI 3/25/2004 +// Returns whether the given creature is currently in the +// requested Lightsaber/Consular Form and can make use of +// its benefits. This function will perform trumping checks +// and lightsaber-wielding checks for those Forms that require +// them. +int IsFormActive( object oCreature, int nFormID ); + +// 817 +// DJS-OEI 3/28/2004 +// Returns the Form Mask of the requested spell. This is used +// to determine if a spell is affected by various Forms, usually +// Consular forms that modify duration/range. +int GetSpellFormMask( int nSpellID ); + +// 818 +// DJS-OEI 3/29/2004 +// Return the base number of Force Points required to cast +// the given spell. This does not take into account modifiers +// of any kind. +int GetSpellBaseForcePointCost( int nSpellID ); + +// 819 +// RWT-OEI 04/05/04 +// Setting this to TRUE makes it so that the Stealth status is +// left on characters even when entering cutscenes. By default, +// stealth is removed from anyone taking part in a cutscene. +// ALWAYS set this back to FALSE on every End Dialog node in +// the cutscene you wanted to stay stealthed in. This isn't a +// flag that should be left on indefinitely. In fact, it isn't +// saved, so needs to be set/unset on a case by case basis. +void SetKeepStealthInDialog( int nStealthState ); + +// 820 +// RWT-OEI 04/06/04 +// This returns TRUE or FALSE if there is a clear line of sight from +// the source vector to the target vector. This is used in the AI to +// help the creatures using ranged weapons find better places to shoot +// when the player moves out of sight. +int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); + +// 821 +// FAK - OEI 5/3/04 +// ShowDemoScreen, displays a texture, timeout, string and xy for string +int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); + +// 822 +// DJS-OEI 5/4/2004 +// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES +// AT THE MOMENT. This heartbeat should force perception updates to occur. +void ForceHeartbeat( object oCreature ); + +// 823 +// DJS-OEI 5/5/2004 +// Creates a Force Sight effect. +effect EffectForceSight(); + +// 824 +// FAK - OEI 5/7/04 +// gets the walk state of the creature: 0 walk or standing, 1 is running +int IsRunning( object oCreature ); + +// 825 +// FAK - OEI 5/24/04 +// applies a velocity to the player object +void SWMG_PlayerApplyForce(vector vForce); + +// 826 +// DJS-OEI 6/12/2004 +// This function allows a script to set the conditions which constitute +// a combat forfeit by a member of the player's party. This is typically +// used to handle Battle Circle behavior or other challenge-based combats. +// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. +void SetForfeitConditions( int nForfeitFlags ); + +// 827 +// DJS-OEI 6/12/2004 +// This function returns the last FORFEIT_* condition that the player +// has violated. +int GetLastForfeitViolation(); + +// 828 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the REFLEX saving throw for aObject +void ModifyReflexSavingThrowBase(object aObject, int aModValue); + +// 829 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the FORTITUDE saving throw for aObject +void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); + +// 830 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the WILL saving throw for aObject +void ModifyWillSavingThrowBase(object aObject, int aModValue); + +// DJS-OEI 6/21/2004 +// 831 +// This function will return the one CExoString parameter +// allowed for the currently running script. +string GetScriptStringParameter(); + +// 832 +// AWD-OEI 6/29/2004 +// This function returns the personal space value of an object +float GetObjectPersonalSpace(object aObject); + +// 833 +// AWD-OEI 7/06/2004 +// This function adjusts a creatures stats. +// oObject is the creature that will have it's attribute adjusted +// The following constants are acceptable for the nAttribute parameter: +// ABILITY_STRENGTH +// ABILITY_DEXTERITY +// ABILITY_CONSTITUTION +// ABILITY_INTELLIGENCE +// ABILITY_WISDOM +// ABILITY_CHARISMA +// nAmount is the integer vlaue to adjust the stat by (negative values will work). +void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); + +// 834 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void SetCreatureAILevel(object oObject, int nPriority); + +// 835 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void ResetCreatureAILevel(object oObject); + +// 836 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// template. +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); + +// 837 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// creature ID +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByObject( int nPUP, object oPuppet ); + +// 838 +// RWT-OEI 07/17/04 +// This function assigns a PUPPET constant to a +// Party NPC. The party NPC -MUST- be in the game +// before calling this. +// Both the PUP and the NPC have +// to be available in their respective tables +// Returns 1 if successful, 0 if there was an error +int AssignPUP( int nPUP, int nNPC ); + +// 839 +// RWT-OEI 07/17/04 +// This function spawns a Party PUPPET. +// This must be used whenever you want a copy +// of the puppet around to manipulate in the game +// since the puppet is stored in the party table +// just like NPCs are. Once a puppet is assigned +// to a party NPC (see AssignPUP), it will spawn +// or disappear whenever its owner joins or leaves +// the party. +// This does not add it to the party automatically, +// just like SpawnNPC doesn't. You must call AddPuppet() +// to actually add it to the party +object SpawnAvailablePUP( int nPUP, location lLocation ); + +// 840 +// RWT-OEI 07/18/04 +// This adds an existing puppet object to the party. The +// puppet object must already exist via SpawnAvailablePUP +// and must already be available via AddAvailablePUP* +// functions. +int AddPartyPuppet(int nPUP, object oidCreature); + +// 841 +// RWT-OEI 07/19/04 +// This returns the object ID of the puppet's owner. +// The Puppet's owner must exist and must be in the party +// in order to be found. +// Returns invalid object Id if the owner cannot be found. +object GetPUPOwner(object oPUP = OBJECT_SELF); + +// 842 +// RWT-OEI 07/19/04 +// Returns 1 if the creature is a Puppet in the party. +// Otherwise returns 0. It is possible for a 'party puppet' +// to exist without actually being in the party table. +// such as when SpawnAvailablePUP is used without subsequently +// using AddPartyPuppet to add the newly spawned puppet to +// the party table. A puppet in that in-between state would +// return 0 from this function +int GetIsPuppet(object oPUP = OBJECT_SELF ); + +// 843 +// RWT-OEI 07/20/04 +// Similiar to ActionFollowLeader() except the creature +// follows its owner +//nRange is how close it should follow. Note that once this +//action is queued, it will be the only thing this creature +//does until a ClearAllActions() is used. +void ActionFollowOwner(float fRange = 2.5); + +// 844 +// RWT-OEI 07/21/04 +// Returns TRUE if the object ID passed is the character +// that the player is actively controlling at that point. +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +int GetIsPartyLeader(object oCharacter = OBJECT_SELF); + +// 845 +// RWT-OEI 07/21/04 +// Returns the object ID of the character that the player +// is actively controlling. This is the 'Party Leader'. +// Returns object Invalid on error +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +object GetPartyLeader(); + +// 846 +// JAB-OEI 07/22/04 +// Will remove the CNPC from the 3 person party, and remove +// him/her from the area, effectively sending the CNPC back +// to the base. The CNPC data is still stored in the +// party table, and calling this function will not destroy +// the CNPC in any way. +// Returns TRUE for success. +int RemoveNPCFromPartyToBase(int nNPC); + +// 847 +// AWD-OEI 7/22/2004 +// This causes a creature to flourish with it's currently equipped weapon. +void CreatureFlourishWeapon(object oObject); + +// 848 +// Create a Mind Trick effect +effect EffectMindTrick(); + +// 849 +// Create a Faction Modifier effect. +effect EffectFactionModifier( int nNewFaction ); + +// 850 +// ChangeObjectAppearance +// oObjectToChange = Object to change appearance of +// nAppearance = appearance to change to (from appearance.2da) +void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); + +// 851 +// GetIsXBox +// Returns TRUE if this script is being executed on the X-Box. Returns FALSE +// if this is the PC build. +int GetIsXBox(); + +// 852 +// Create a Droid Scramble effect +effect EffectDroidScramble(); + +// 853 +// ActionSwitchWeapons +// Forces the creature to switch between Config 1 and Config 2 +// of their equipment. Does not work in dialogs. Works with +// AssignCommand() +void ActionSwitchWeapons(); + +// 854 +// DJS-OEI 8/29/2004 +// PlayOverlayAnimation +// This function will play an overlay animation on a character +// even if the character is moving. This does not cause an action +// to be placed on the queue. The animation passed in must be +// designated as an overlay in Animations.2DA. +void PlayOverlayAnimation( object oTarget, int nAnimation ); + +// 855 +// RWT-OEI 08/30/04 +// UnlockAllSongs +// Calling this will set all songs as having been unlocked. +// It is INTENDED to be used in the end-game scripts to unlock +// any end-game songs as well as the KotOR1 sound track. +void UnlockAllSongs(); + +// 856 +// RWT-OEI 08/31/04 +// Passing TRUE into this function turns off the player's maps. +// Passing FALSE into this function re-enables them. This change +// is permanent once called, so it is important that there *is* +// a matching call to DisableMap(FALSE) somewhere or else the +// player is stuck without a map indefinitely. +void DisableMap(int nFlag = FALSE); + +// 857 +// RWT-OEI 08/31/04 +// This function schedules a mine to play its DETONATION +// animation once it is destroyed. Note that this detonates +// the mine immediately but has nothing to do with causing +// the mine to do any damage to anything around it. To +// get the mine to damage things around it when it detonates +// do: +// AssignCommand(,ExecuteScript( "k_trp_generic",)); +// right before you call DetonateMine(). By my experience so far +// you don't need any kind of delay between the two. +void DetonateMine(object oMine); + +// 858 +// RWT-OEI 09/06/04 +// This function turns off the innate health regeneration that all party +// members have. The health regen will *stay* off until it is turned back +// on by passing FALSE to this function. +void DisableHealthRegen(int nFlag = FALSE); + +// 859 +// DJS-OEI 9/7/2004 +// This function sets the current Jedi Form on the given creature. This +// call will do nothing if the target does not know the Form itself. +void SetCurrentForm( object oCreature, int nFormID ); + +// 860 +// RWT-OEI 09/09/04 +// This will disable or enable area transit +void SetDisableTransit(int nFlag = FALSE); + +// 861 +//RWT-OEI 09/09/04 +// This will set the specific input class. +// The valid options are: +// 0 - Normal PC control +// 1 - Mini game control +// 2 - GUI control +// 3 - Dialog Control +// 4 - Freelook control +void SetInputClass(int nClass); + +// 862 +//RWT-OEI 09/15/04 +// This script allows an object to recieve updates even if it is outside +//the normal range limit of 250.0f meters away from the player. This should +//ONLY be used for cutscenes that involve objects that are more than 250 +//meters away from the player. It needs to be used on a object by object +//basis. +//This flag should *always* be set to false once the cutscene it is needed +//for is over, or else the game will spend CPU time updating the object +//when it doesn't need to. +//For questions on use of this function, or what its purpose is, check +//with me. +void SetForceAlwaysUpdate(object oObject, int nFlag); + +//863 +//RWT-OEI 09/15/04 +//This function enables or disables rain +void EnableRain( int nFlag ); + +//864 +//RWT-OEI 09/27/04 +//This function displays the generic Message Box with the strref +//message in it +//sIcon is the resref for an icon you would like to display. +void DisplayMessageBox(int nStrRef, string sIcon = ""); + +//865 +//RWT-OEI 09/28/04 +//This function displays a datapad popup. Just pass it the +//object ID of a datapad. +void DisplayDatapad(object oDatapad); + +// 866 +// CTJ-OEI 09-29-04 +// Removes the heartbeat script on the placeable. Useful for +// placeables whose contents get populated in the heartbeat +// script and then the heartbeat no longer needs to be called. +void RemoveHeartbeat(object oPlaceable); + + +//867 +// JF-OEI 10-07-2004 +// Remove an effect by ID +void RemoveEffectByID( object oCreature, int nEffectID ); + +//868 +// RWT-OEI 10/07/04 +// This script removes an effect by an identical match +// based on: +// Must have matching EffectID types. +// Must have the same value in Integer(0) +// Must have the same value in Integer(1) +// I'm specifically using this function for Mandalore's implant swapping +// script and it will probably not be useful for anyone else. If you're +// not sure what this script function does, see me before using it. +void RemoveEffectByExactMatch( object oCreature, effect eEffect); + +// 869 +// DJS-OEI 10/9/2004 +// This function adjusts a creature's skills. +// oObject is the creature that will have its skill adjusted +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// nAmount is the integer value to adjust the stat by (negative values will work). +void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); + +// 870 +// DJS-OEI 10/10/2004 +// This function returns the base Skill Rank for the requested +// skill. It does not include modifiers from effects/items. +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// oObject is the creature that will have its skill base returned. +int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); + +// 871 +// DJS-OEI 10/15/2004 +// This function will allow the caller to modify the rendering behavior +// of the target object. +// oObject - The object to change rendering state on. +// bEnable - If 0, the object will stop rendering. Else, the object will render. +void EnableRendering( object oObject, int bEnable ); + +// 872 +// RWT-OEI 10/19/04 +// This function returns TRUE if the creature has actions in its +// Combat Action queue. +int GetCombatActionsPending(object oCreature); + +// 873 +// RWT-OEI 10/26/04 +// This function saves the party member at that index with the object +// that is passed in. +void SaveNPCByObject( int nNPC, object oidCharacter); + +// 874 +// RWT-OEI 10/26/04 +// This function saves the party puppet at that index with the object +// that is passed in. For the Remote, just use '0' for nPUP +void SavePUPByObject( int nPUP, object oidPuppet ); + +// 875 +// RWT-OEI 10/29/04 +// Returns TRUE if the object passed in is the character that the player +// made at the start of the game +int GetIsPlayerMadeCharacter(object oidCharacter); + +// 876 +// RWT-OEI 11/12/04 +// This repopulates the NPCObject table in CSWPartyTable. Do not use this +// unless you understand exactly what it is doing. +void RebuildPartyTable(); diff --git a/TSL/nwnnsscomp/TSLPatcher/nwnnsscomp.exe b/TSL/nwnnsscomp/TSLPatcher/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..b996f56cc93a21de0a72499b6d5a32a68be036d6 GIT binary patch literal 212992 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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 lGe!l!X1hKv36) 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 z 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 K41+zuFnHUK67 literal 0 HcmV?d00001 diff --git a/TSL/nwnnsscomp/TSLPatcher/nwscript.nss b/TSL/nwnnsscomp/TSLPatcher/nwscript.nss new file mode 100644 index 000000000..94e753a63 --- /dev/null +++ b/TSL/nwnnsscomp/TSLPatcher/nwscript.nss @@ -0,0 +1,6325 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 20; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; +int INVENTORY_SLOT_RIGHTWEAPON2= 18; +int INVENTORY_SLOT_LEFTWEAPON2 = 19; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; +int IMMUNITY_TYPE_DROID_CONFUSED = 33; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; +int EFFECT_TYPE_DROID_CONFUSED = 79; +int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 +int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; +int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code +int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; +int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; +int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; +int ITEM_PROPERTY_DAMPEN_SOUND = 63; +int ITEM_PROPERTY_DOORCUTTING = 64; +int ITEM_PROPERTY_DOORSABERING = 65; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; +int BASE_ITEM_WRIST_LAUNCHER = 91; +int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; +int VFX_DUR_ELECTRICAL_SPARK = 2067; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + +int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/28/2004 +// These masks are used in Spells.2DA to indicate which spells +// can be affected by which Forms. Unfortunately, the script compiler +// won't let me make a constant with a Hex value, so I've had to use +// decimal. +int FORM_MASK_FORCE_FOCUS = 1; +int FORM_MASK_ENDURING_FORCE = 2; +int FORM_MASK_FORCE_AMPLIFICATION = 4; +int FORM_MASK_FORCE_POTENCY = 8; +int FORM_MASK_REGENERATION = 16; +int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; +*/ + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// DJS-OEI 12/9/2003 +// New Force Powers +int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; +int FORCE_POWER_MASTER_HEAL = 134; +int FORCE_POWER_FORCE_BARRIER = 135; +int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; +int FORCE_POWER_MASTER_FORCE_BARRIER = 137; +int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast +int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. +int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // +int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast +int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. +int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // +int FORCE_POWER_CRUSH_OPPOSITION_I = 144; +int FORCE_POWER_CRUSH_OPPOSITION_II = 145; +int FORCE_POWER_CRUSH_OPPOSITION_III = 146; +int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; +int FORCE_POWER_CRUSH_OPPOSITION_V = 148; +int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; +int FORCE_POWER_FORCE_BODY = 150; +int FORCE_POWER_IMPROVED_FORCE_BODY = 151; +int FORCE_POWER_MASTER_FORCE_BODY = 152; +int FORCE_POWER_DRAIN_FORCE = 153; +int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; +int FORCE_POWER_MASTER_DRAIN_FORCE = 155; +int FORCE_POWER_FORCE_CAMOUFLAGE = 156; +int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; +int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; +int FORCE_POWER_FORCE_SCREAM = 159; +int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; +int FORCE_POWER_MASTER_FORCE_SCREAM = 161; +int FORCE_POWER_FORCE_REPULSION = 162; +int FORCE_POWER_FORCE_REDIRECTION = 163; +int FORCE_POWER_FURY = 164; +int FORCE_POWER_IMPROVED_FURY = 165; +int FORCE_POWER_MASTER_FURY = 166; +int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; +int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; +int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; +int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; +int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; +int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; +int FORCE_POWER_REVITALIZE = 173; +int FORCE_POWER_IMPROVED_REVITALIZE = 174; +int FORCE_POWER_MASTER_REVITALIZE = 175; +int FORCE_POWER_FORCE_SIGHT = 176; +int FORCE_POWER_FORCE_CRUSH = 177; +int FORCE_POWER_PRECOGNITION = 178; +int FORCE_POWER_BATTLE_PRECOGNITION = 179; +int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; +int FORCE_POWER_MIND_TRICK = 181; +int FORCE_POWER_CONFUSION = 200; +int FORCE_POWER_BEAST_TRICK = 182; +int FORCE_POWER_BEAST_CONFUSION = 184; +int FORCE_POWER_DROID_TRICK = 201; +int FORCE_POWER_DROID_CONFUSION = 269; +int FORCE_POWER_BREATH_CONTROL = 270; +int FORCE_POWER_WOOKIEE_RAGE_I = 271; +int FORCE_POWER_WOOKIEE_RAGE_II = 272; +int FORCE_POWER_WOOKIEE_RAGE_III = 273; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/25/2004 +int FORM_LIGHTSABER_PADAWAN_I = 205; +int FORM_LIGHTSABER_PADAWAN_II = 206; +int FORM_LIGHTSABER_PADAWAN_III = 207; +int FORM_LIGHTSABER_DAKLEAN_I = 208; +int FORM_LIGHTSABER_DAKLEAN_II = 209; +int FORM_LIGHTSABER_DAKLEAN_III = 210; +int FORM_LIGHTSABER_SENTINEL_I = 211; +int FORM_LIGHTSABER_SENTINEL_II = 212; +int FORM_LIGHTSABER_SENTINEL_III = 213; +int FORM_LIGHTSABER_SODAK_I = 214; +int FORM_LIGHTSABER_SODAK_II = 215; +int FORM_LIGHTSABER_SODAK_III = 216; +int FORM_LIGHTSABER_ANCIENT_I = 217; +int FORM_LIGHTSABER_ANCIENT_II = 218; +int FORM_LIGHTSABER_ANCIENT_III = 219; +int FORM_LIGHTSABER_MASTER_I = 220; +int FORM_LIGHTSABER_MASTER_II = 221; +int FORM_LIGHTSABER_MASTER_III = 222; +int FORM_CONSULAR_FORCE_FOCUS_I = 223; +int FORM_CONSULAR_FORCE_FOCUS_II = 224; +int FORM_CONSULAR_FORCE_FOCUS_III = 225; +int FORM_CONSULAR_ENDURING_FORCE_I = 226; +int FORM_CONSULAR_ENDURING_FORCE_II = 227; +int FORM_CONSULAR_ENDURING_FORCE_III = 228; +int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; +int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; +int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; +int FORM_CONSULAR_FORCE_SHELL_I = 232; +int FORM_CONSULAR_FORCE_SHELL_II = 233; +int FORM_CONSULAR_FORCE_SHELL_III = 234; +int FORM_CONSULAR_FORCE_POTENCY_I = 235; +int FORM_CONSULAR_FORCE_POTENCY_II = 236; +int FORM_CONSULAR_FORCE_POTENCY_III = 237; +int FORM_CONSULAR_REGENERATION_I = 238; +int FORM_CONSULAR_REGENERATION_II = 239; +int FORM_CONSULAR_REGENERATION_III = 240; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; +*/ + +int FORM_SABER_I_SHII_CHO = 258; +int FORM_SABER_II_MAKASHI = 259; +int FORM_SABER_III_SORESU = 260; +int FORM_SABER_IV_ATARU = 261; +int FORM_SABER_V_SHIEN = 262; +int FORM_SABER_VI_NIMAN = 263; +int FORM_SABER_VII_JUYO = 264; +int FORM_FORCE_I_FOCUS = 265; +int FORM_FORCE_II_POTENCY = 266; +int FORM_FORCE_III_AFFINITY = 267; +int FORM_FORCE_IV_MASTERY = 268; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; +int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; +int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; +int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 +int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +// DJS-OEI 2/11/2004 +int CLASS_TYPE_TECHSPECIALIST = 9; +int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe +int CLASS_TYPE_JEDIWEAPONMASTER = 11; +int CLASS_TYPE_JEDIMASTER = 12; +int CLASS_TYPE_JEDIWATCHMAN = 13; +int CLASS_TYPE_SITHMARAUDER = 14; +int CLASS_TYPE_SITHLORD = 15; +int CLASS_TYPE_SITHASSASSIN = 16; + + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; +// DJS-OEI 2/25/2004 +int STANDARD_FACTION_SELF_LOATHING = 21; +int STANDARD_FACTION_ONE_ON_ONE = 22; +int STANDARD_FACTION_PARTYPUPPET = 23; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; +// DJS-OEI 11/12/2003 +int FEAT_EVASION = 125; +int FEAT_TARGETING_1 = 126; +int FEAT_TARGETING_2 = 127; +int FEAT_TARGETING_3 = 128; +int FEAT_TARGETING_4 = 129; +int FEAT_TARGETING_5 = 130; +int FEAT_TARGETING_6 = 131; +int FEAT_TARGETING_7 = 132; +int FEAT_TARGETING_8 = 133; +int FEAT_TARGETING_9 = 134; +int FEAT_TARGETING_10 = 135; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT = 136; +int FEAT_IMPROVED_PRECISE_SHOT = 137; +int FEAT_MASTER_PRECISE_SHOT = 138; +*/ +int FEAT_CLOSE_COMBAT = 139; +int FEAT_IMPROVED_CLOSE_COMBAT = 140; +int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; +int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; +int FEAT_REGENERATE_FORCE_POINTS = 143; +int FEAT_DARK_SIDE_CORRUPTION = 149; +int FEAT_IGNORE_PAIN_1 = 150; +int FEAT_IGNORE_PAIN_2 = 151; +int FEAT_IGNORE_PAIN_3 = 152; +int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; +int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; +int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; +int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; +int FEAT_DEFLECT = 168; +int FEAT_INNER_STRENGTH_1 = 169; +int FEAT_INNER_STRENGTH_2 = 170; +int FEAT_INNER_STRENGTH_3 = 171; +int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; +int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; +int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; +int FEAT_CRAFT = 175; +int FEAT_MASTERCRAFT_WEAPONS_1 = 176; +int FEAT_MASTERCRAFT_WEAPONS_2 = 177; +int FEAT_MASTERCRAFT_WEAPONS_3 = 178; +int FEAT_MASTERCRAFT_ARMOR_1 = 179; +int FEAT_MASTERCRAFT_ARMOR_2 = 180; +int FEAT_MASTERCRAFT_ARMOR_3 = 181; +int FEAT_DROID_INTERFACE = 182; +int FEAT_CLASS_SKILL_AWARENESS = 183; +int FEAT_CLASS_SKILL_COMPUTER_USE = 184; +int FEAT_CLASS_SKILL_DEMOLITIONS = 185; +int FEAT_CLASS_SKILL_REPAIR = 186; +int FEAT_CLASS_SKILL_SECURITY = 187; +int FEAT_CLASS_SKILL_STEALTH = 188; +int FEAT_CLASS_SKILL_TREAT_INJURY = 189; +int FEAT_DUAL_STRIKE = 190; +int FEAT_IMPROVED_DUAL_STRIKE = 191; +int FEAT_MASTER_DUAL_STRIKE = 192; +int FEAT_FINESSE_LIGHTSABERS = 193; +int FEAT_FINESSE_MELEE_WEAPONS = 194; +int FEAT_MOBILITY = 195; +int FEAT_REGENERATE_VITALITY_POINTS = 196; +int FEAT_STEALTH_RUN = 197; +int FEAT_KINETIC_COMBAT = 198; +int FEAT_SURVIVAL = 199; +int FEAT_MANDALORIAN_COURAGE = 200; +int FEAT_PERSONAL_CLOAKING_SHIELD = 201; +int FEAT_MENTOR = 202; +int FEAT_IMPLANT_SWITCHING = 203; +int FEAT_SPIRIT = 204; +int FEAT_FORCE_CHAIN = 205; +int FEAT_WAR_VETERAN = 206; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT_IV = 226; +int FEAT_PRECISE_SHOT_V = 227; +*/ +int FEAT_FIGHTING_SPIRIT = 236; +int FEAT_HEROIC_RESOLVE = 237; +int FEAT_PRECISE_SHOT = 240; +int FEAT_IMPROVED_PRECISE_SHOT = 241; +int FEAT_MASTER_PRECISE_SHOT = 242; +int FEAT_PRECISE_SHOT_IV = 243; +int FEAT_PRECISE_SHOT_V = 244; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; +int ANIMATION_LOOPING_CHECK_BODY = 33; +int ANIMATION_LOOPING_UNLOCK_DOOR = 34; +int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; + +int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 + +int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 +//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 +int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 +int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 +int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 +int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; +int ANIMATION_FIREFORGET_FORCE_CAST = 121; +int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 +int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 +int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; +int ACTION_FOLLOWOWNER = 43; + + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; +int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; +int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; +// DJS-OEI 1/20/2004 +int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; +int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; +int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; +int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; +int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; +int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; +int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_DANTOOINE = 0; +int PLANET_DXUN = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_KORRIBAN = 3; +int PLANET_M4_78 = 4; +int PLANET_MALACHOR_V = 5; +int PLANET_NAR_SHADDAA = 6; +int PLANET_ONDERON = 7; +int PLANET_PERAGUS = 8; +int PLANET_TELOS = 9; +int PLANET_HARBINGER = 10; +int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; +int PLANET_LIVE_06 = 16; + +int NPC_PLAYER =-1; +int NPC_ATTON = 0; +int NPC_BAO_DUR = 1; +int NPC_CANDEROUS = 2; +int NPC_G0T0 = 3; +int NPC_HANDMAIDEN = 4; +int NPC_HK_47 = 5; +int NPC_KREIA = 6; +int NPC_MIRA = 7; +int NPC_T3_M4 = 8; +int NPC_VISAS = 9; +int NPC_HANHARR = 10; +int NPC_DISCIPLE = 11; + +int PUP_SENSORBALL = 0; +int PUP_OTHER1 = 1; +int PUP_OTHER2 = 2; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals +int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots +int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack +int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member +int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. +int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. +int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. +int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff +int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. +int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; +int SHIELD_PLOT_MAN_M28AA = 18; +int SHIELD_HEAT = 19; +int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 + + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; +int VIDEO_EFFECT_CLAIRVOYANCE = 3; +int VIDEO_EFFECT_FORCESIGHT = 4; +int VIDEO_EFFECT_VISAS_FREELOOK = 5; +int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; +int VIDEO_EFFECT_FURY_1 = 7; +int VIDEO_EFFECT_FURY_2 = 8; +int VIDEO_EFFECT_FURY_3 = 9; +int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. + +// DJS-OEI 1/14/2004 +// Modified the way these work. The values +// listed here are now direct references to +// rows in Tutorial.2DA. Originally these +// would have to be converted to .2DA ids +// in the code. +int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; +// DJS-OEI 11/21/2003 +int TUTORIAL_WINDOW_TEMP1 = 42; +int TUTORIAL_WINDOW_TEMP2 = 43; +int TUTORIAL_WINDOW_TEMP3 = 44; +int TUTORIAL_WINDOW_TEMP4 = 45; +int TUTORIAL_WINDOW_TEMP5 = 46; +int TUTORIAL_WINDOW_TEMP6 = 47; +int TUTORIAL_WINDOW_TEMP7 = 48; +int TUTORIAL_WINDOW_TEMP8 = 49; +int TUTORIAL_WINDOW_TEMP9 = 50; +int TUTORIAL_WINDOW_TEMP10 = 51; +int TUTORIAL_WINDOW_TEMP11 = 52; +int TUTORIAL_WINDOW_TEMP12 = 53; +int TUTORIAL_WINDOW_TEMP13 = 54; +int TUTORIAL_WINDOW_TEMP14 = 55; +int TUTORIAL_WINDOW_TEMP15 = 56; + +int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 +int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 +int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 +int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 +int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + +//RWT-OEI 12/16/03 +// These constants are for the Implant Swapping support in a_swapimplant +// They correspond directly with the ACTIONIDs in the game for each of the +// implant swapping actions. +int IMPLANT_NONE = 0; +int IMPLANT_REGEN = 1; +int IMPLANT_STR = 2; +int IMPLANT_END = 3; +int IMPLANT_AGI = 4; + +// DJS-OEI 6/12/2004 +// These constants can be OR'ed together and sent to SetForfeitConditions() +// in order to set up flagging situations that will alert the area script that +// the player has violated them. This is usually used for Battle Arena restrictions. +int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers +int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) +int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. +int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start + // of one of the Dxun Battle Circle fights, or no weapon at all. +int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. +int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. +int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. +int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +//RWT-OEI 12/16/03 - Added the bHideMessage parameter +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +// DJS-OEI 8/26/2004 +// Added a parameter for the percentage of HP the target +// should receive when they are revived. +effect EffectResurrection( int nHPPercent=0 ); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). +// This can be called by a creature or by an Area of Effect object. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature +// dies. Note that NO XP will be awarded if the creature is killed with this parameter. +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust +// the playercharacter's alignment without impacting the rest of the NPCs +void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. +// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the feat due to daily limits or +// other restrictions. Use GetFeatAcquired() if you just want to +// know if they've got it or not. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then +//this function will only return true if the character is in REAL combat. +//If you don't know what that means, don't pass in TRUE. +int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. +// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* +// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen +// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able +// to access Item Upgrading. +void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the spell due to lack of sufficient +// Force Points. Use GetSpellAcquired() if you just want to +// know if they've got it or not. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// nWindow - A row index from Tutorial.2DA specifying the message to display. +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); + + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 20 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 20 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 12 and 28 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 12 and 28 +// the value range is 0 to 255 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +// nNPC - NPC_ +// returns 1 if in current party, 0 if selectable as a party member +// -1 if not in party at all +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE +// to this parameter makes it possible for the player to cancel out +// of the party selection GUI, so be careful that you are okay with +// them cancelling out of it before you pass TRUE. +// Also, in the sExitScript that gets called after the Party Select +// GUI exits, you can use GetRunScriptVar to find out if they +// cancelled. If it returns TRUE, they didn't cancel. If it returns +// FALSE, they cancelled. See me if there's questions. +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(int nNPC, object oidNPC); + +// DJS-OEI +// 768. GetScriptParameter +// This function will take the index of a script parameter +// and return the value associated with it. The index +// of the first parameter is 1. +int GetScriptParameter( int nIndex ); + +//RWT-OEI 12/10/03 +// 769. SetFadeUntilScript +// This script function will make it so that the fade cannot be lifted under any circumstances +// other than a call to the SetGlobalFadeIn() script. +// This function should be called AFTER the fade has already been called. For example, you would +// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() +// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new +// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript +// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. +void SetFadeUntilScript(); + +// DJS-OEI 12/15/2003 +// 770: Create a Force Body effect +// - nLevel: The level of the Force Body effect. +// 0 = Force Body +// 1 = Improved Force Body +// 2 = Master Force Body +effect EffectForceBody(int nLevel); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item +int GetItemComponent( ); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item in pieces +int GetItemComponentPieceValue( ); + +// FAK-OEI 12/15/2003 +// 773: Start the GUI for Chemical Workshop +void ShowChemicalUpgradeScreen(object oCharacter ); + +// FAK-OEI 12/15/2003 +// 774: Get the number of chemicals for an item +int GetChemicals( ); + +// FAK-OEI 12/15/2003 +// 775: Get the number of chemicals for an item in pieces +int GetChemicalPieceValue( ); + +// DJS-OEI 12/30/2003 +// 776: Get the number of Force Points that were required to +// cast this spell. This includes modifiers such as Room Force +// Ratings and the Force Body power. +// * Return value on error: 0 +int GetSpellForcePointCost( ); + +// DJS-OEI 1/2/2004 +// 777: Create a Fury effect. +effect EffectFury(); + +// DJS-OEI 1/3/2004 +// 778: Create a Blind effect. +effect EffectBlind(); + +// DJS-OEI 1/4/2004 +// 779: Create an FP regeneration modifier effect. +effect EffectFPRegenModifier( int nPercent ); + +// DJS-OEI 1/4/2004 +// 780: Create a VP regeneration modifier effect. +effect EffectVPRegenModifier( int nPercent ); + +// DJS-OEI 1/9/2004 +// 781: Create a Force Crush effect. +effect EffectCrush(); + +// FAK - OEI 1/12/04 +// 782: Minigame grabs a swoop bike upgrade +int SWMG_GetSwoopUpgrade( int nSlot ); + +// DJS-OEI 1/12/2004 +// 783: Returns whether or not the target has access to a feat, +// even if they can't use it right now due to daily limits or +// other restrictions. +int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); + +// DJS-OEI 1/12/2004 +// 784: Returns whether or not the target has access to a spell, +// even if they can't use it right now due to lack of Force Points. +int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); + +// FAK-OEI 1/12/2004 +// 785: Displays the Swoop Bike upgrade screen. +void ShowSwoopUpgradeScreen( ); + +// DJS-OEI 1/13/2004 +// 786: Grants the target a feat without regard for prerequisites. +void GrantFeat( int nFeat, object oCreature ); + +// DJS-OEI 1/13/2004 +// 787: Grants the target a spell without regard for prerequisites. +void GrantSpell( int nSpell, object oCreature ); + +// DJS-OEI 1/13/2004 +// 788: Places an active mine on the map. +// nMineType - Mine Type from Traps.2DA +// lPoint - The location in the world to place the mine. +// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA +// results in the final DC for creatures to detect this mine. +// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA +// results in the final DC for creatures to disarm this mine. +// oCreator - The object that should be considered the owner of the mine. +// If oCreator is set to OBJECT_INVALID, the faction of the mine will be +// considered Hostile1, meaning the party will be vulnerable to it. +void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); + +// FAK - OEI 1/15/04 +// 789: Yet another minigame function. Returns the object's track's position. +vector SWMG_GetTrackPosition(object oFollower); + +// FAK - OEI 1/15/04 +// 790: minigame function that lets you psuedo-set the position of a follower object +vector SWMG_SetFollowerPosition(vector vPos); + +//RWT-OEI 01/16/04 +// 791: A function to put the character into a true combat state but the reason set to +// not real combat. This should help us control animations in cutscenes with a bit +// more precision. -- Not totally sure this is doing anything just yet. Seems +// the combat condition gets cleared shortly after anyway. +// If nEnable is 1, it enables fake combat mode. If 0, it disables it. +// WARNING: Whenever using this function to enable fake combat mode, you should +// have a matching call to it to disable it. (pass 0 for nEnable). +void SetFakeCombatState( object oObject, int nEnable ); + +// FAK - OEI 1/23/04 +// 792: minigame function that deletes a minigame object +void SWMG_DestroyMiniGameObject(object oObject); + +// DJS-OEI 1/26/2004 +// 793: Returns the Demolitions skill of the creature that +// placed this mine. This will often be 0. This function accepts +// the object that the mine is attached to (Door, Placeable, or Trigger) +// and will determine which one it actually is at runtime. +int GetOwnerDemolitionsSkill( object oObject ); + +// RWT-OEI 01/29/04 +// 794: Disables or Enables the Orient On Click behavior in creatures. If +// disabled, they will not orient to face the player when clicked on +// for dialogue. The default behavior is TRUE. +void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); + +// DJS-OEI 1/29/2004 +// 795: Gets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, the return +// value with be 0. If the character is in the party, but has an +// attitude of Ambivalent, this will be -1. +int GetInfluence( int nNPC ); + +// DJS-OEI 1/29/2004 +// 796: Sets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nInfluence - The new value for the influence on this CNPC. +void SetInfluence( int nNPC, int nInfluence ); + +// DJS-OEI 1/29/2004 +// 797: Modifies the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nModifier - The modifier to the current influence on this CNPC. +// This may be a negative value to reduce the influence. +void ModifyInfluence( int nNPC, int nModifier ); + +// FAK - OEI 2/3/04 +// 798: returns the racial sub-type of the oTarget object +int GetRacialSubType(object oTarget); + +// DJS-OEI 2/3/2004 +// 799: Increases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is greater than the max +// of 127. +void IncrementGlobalNumber( string sIdentifier, int nAmount ); + +// DJS-OEI 2/3/2004 +// 800: Decreases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is less than the minimum +// of -128. +void DecrementGlobalNumber( string sIdentifier, int nAmount ); + +// RWT-OEI 02/06/04 +// 801: SetBonusForcePoints - This sets the number of bonus force points +// that will always be added to that character's total calculated +// force points. +void SetBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 802: AddBonusForcePoints - This adds nBonusFP to the current total +// bonus that the player has. The Bonus Force Points are a pool +// of force points that will always be added after the player's +// total force points are calculated (based on level, force dice, +// etc.) +void AddBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 803: GetBonusForcePoints - This returns the total number of bonus +// force points a player has. Bonus Force Points are a pool of +// points that are always added to a player's Max Force Points. +// ST: Please explain how a function returning VOID could return a +// numerical value? Hope it works changing the return type... +// void GetBonusForcePoints( object oCreature ); +int GetBonusForcePoints( object oCreature ); + +// FAK - OEI 2/11/04 +// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop +// bike races. Gravity will act upon this velocity. +void SWMG_SetJumpSpeed(float fSpeed); + +// PC CODE MERGER +// 805. IsMoviePlaying--dummy func so we can compile +int IsMoviePlaying(); + +// 806 QueueMovie +void QueueMovie(string sMovie, int nSkippable = TRUE); + +// 807 +void PlayMovieQueue(int nAllowSkips = TRUE); + +// 808 +void YavinHackDoorClose(object oCreature); + +// 809 +// new function for droid confusion so inherint mind immunity can be +// avoided. +effect EffectDroidConfused(); +// END PC CODE MERGER + +// 810 +// DJS-OEI 3/8/2004 +// Determines if the given creature is in Stealth mode or not. +// 0 = Creature is not stealthed. +// 1 = Creature is stealthed. +// This function will return 0 for any non-creature. +int IsStealthed( object oCreature ); + +// 811 +// DJS-OEI 3/12/2004 +// Determines if the given creature is using any Meditation Tree +// Force Power. +// 0 = Creature is not meditating. +// 1 = Creature is meditating. +// This function will return 0 for any non-creature. +int IsMeditating( object oCreature ); + +// 812 +// DJS-OEI 3/16/2004 +// Determines if the given creature is using the Total Defense +// Stance. +// 0 = Creature is not in Total Defense. +// 1 = Creature is in Total Defense. +// This function will return 0 for any non-creature. +int IsInTotalDefense( object oCreature ); + +// 813 +// RWT-OEI 03/19/04 +// Stores a Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +void SetHealTarget( object oidHealer, object oidTarget ); + +// 814 +// RWT-OEI 03/19/04 +// Retrieves the Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +object GetHealTarget( object oidHealer ); + +// 815 +// RWT-OEI 03/23/04 +// Returns a vector containing a random destination that the +// given creature can walk to that's within the range of the +// passed parameter. +vector GetRandomDestination( object oCreature, int rangeLimit ); + +// 816 +// DJS-OEI 3/25/2004 +// Returns whether the given creature is currently in the +// requested Lightsaber/Consular Form and can make use of +// its benefits. This function will perform trumping checks +// and lightsaber-wielding checks for those Forms that require +// them. +int IsFormActive( object oCreature, int nFormID ); + +// 817 +// DJS-OEI 3/28/2004 +// Returns the Form Mask of the requested spell. This is used +// to determine if a spell is affected by various Forms, usually +// Consular forms that modify duration/range. +int GetSpellFormMask( int nSpellID ); + +// 818 +// DJS-OEI 3/29/2004 +// Return the base number of Force Points required to cast +// the given spell. This does not take into account modifiers +// of any kind. +int GetSpellBaseForcePointCost( int nSpellID ); + +// 819 +// RWT-OEI 04/05/04 +// Setting this to TRUE makes it so that the Stealth status is +// left on characters even when entering cutscenes. By default, +// stealth is removed from anyone taking part in a cutscene. +// ALWAYS set this back to FALSE on every End Dialog node in +// the cutscene you wanted to stay stealthed in. This isn't a +// flag that should be left on indefinitely. In fact, it isn't +// saved, so needs to be set/unset on a case by case basis. +void SetKeepStealthInDialog( int nStealthState ); + +// 820 +// RWT-OEI 04/06/04 +// This returns TRUE or FALSE if there is a clear line of sight from +// the source vector to the target vector. This is used in the AI to +// help the creatures using ranged weapons find better places to shoot +// when the player moves out of sight. +int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); + +// 821 +// FAK - OEI 5/3/04 +// ShowDemoScreen, displays a texture, timeout, string and xy for string +int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); + +// 822 +// DJS-OEI 5/4/2004 +// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES +// AT THE MOMENT. This heartbeat should force perception updates to occur. +void ForceHeartbeat( object oCreature ); + +// 823 +// DJS-OEI 5/5/2004 +// Creates a Force Sight effect. +effect EffectForceSight(); + +// 824 +// FAK - OEI 5/7/04 +// gets the walk state of the creature: 0 walk or standing, 1 is running +int IsRunning( object oCreature ); + +// 825 +// FAK - OEI 5/24/04 +// applies a velocity to the player object +void SWMG_PlayerApplyForce(vector vForce); + +// 826 +// DJS-OEI 6/12/2004 +// This function allows a script to set the conditions which constitute +// a combat forfeit by a member of the player's party. This is typically +// used to handle Battle Circle behavior or other challenge-based combats. +// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. +void SetForfeitConditions( int nForfeitFlags ); + +// 827 +// DJS-OEI 6/12/2004 +// This function returns the last FORFEIT_* condition that the player +// has violated. +int GetLastForfeitViolation(); + +// 828 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the REFLEX saving throw for aObject +void ModifyReflexSavingThrowBase(object aObject, int aModValue); + +// 829 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the FORTITUDE saving throw for aObject +void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); + +// 830 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the WILL saving throw for aObject +void ModifyWillSavingThrowBase(object aObject, int aModValue); + +// DJS-OEI 6/21/2004 +// 831 +// This function will return the one CExoString parameter +// allowed for the currently running script. +string GetScriptStringParameter(); + +// 832 +// AWD-OEI 6/29/2004 +// This function returns the personal space value of an object +float GetObjectPersonalSpace(object aObject); + +// 833 +// AWD-OEI 7/06/2004 +// This function adjusts a creatures stats. +// oObject is the creature that will have it's attribute adjusted +// The following constants are acceptable for the nAttribute parameter: +// ABILITY_STRENGTH +// ABILITY_DEXTERITY +// ABILITY_CONSTITUTION +// ABILITY_INTELLIGENCE +// ABILITY_WISDOM +// ABILITY_CHARISMA +// nAmount is the integer vlaue to adjust the stat by (negative values will work). +void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); + +// 834 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void SetCreatureAILevel(object oObject, int nPriority); + +// 835 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void ResetCreatureAILevel(object oObject); + +// 836 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// template. +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); + +// 837 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// creature ID +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByObject( int nPUP, object oPuppet ); + +// 838 +// RWT-OEI 07/17/04 +// This function assigns a PUPPET constant to a +// Party NPC. The party NPC -MUST- be in the game +// before calling this. +// Both the PUP and the NPC have +// to be available in their respective tables +// Returns 1 if successful, 0 if there was an error +int AssignPUP( int nPUP, int nNPC ); + +// 839 +// RWT-OEI 07/17/04 +// This function spawns a Party PUPPET. +// This must be used whenever you want a copy +// of the puppet around to manipulate in the game +// since the puppet is stored in the party table +// just like NPCs are. Once a puppet is assigned +// to a party NPC (see AssignPUP), it will spawn +// or disappear whenever its owner joins or leaves +// the party. +// This does not add it to the party automatically, +// just like SpawnNPC doesn't. You must call AddPuppet() +// to actually add it to the party +object SpawnAvailablePUP( int nPUP, location lLocation ); + +// 840 +// RWT-OEI 07/18/04 +// This adds an existing puppet object to the party. The +// puppet object must already exist via SpawnAvailablePUP +// and must already be available via AddAvailablePUP* +// functions. +int AddPartyPuppet(int nPUP, object oidCreature); + +// 841 +// RWT-OEI 07/19/04 +// This returns the object ID of the puppet's owner. +// The Puppet's owner must exist and must be in the party +// in order to be found. +// Returns invalid object Id if the owner cannot be found. +object GetPUPOwner(object oPUP = OBJECT_SELF); + +// 842 +// RWT-OEI 07/19/04 +// Returns 1 if the creature is a Puppet in the party. +// Otherwise returns 0. It is possible for a 'party puppet' +// to exist without actually being in the party table. +// such as when SpawnAvailablePUP is used without subsequently +// using AddPartyPuppet to add the newly spawned puppet to +// the party table. A puppet in that in-between state would +// return 0 from this function +int GetIsPuppet(object oPUP = OBJECT_SELF ); + +// 843 +// RWT-OEI 07/20/04 +// Similiar to ActionFollowLeader() except the creature +// follows its owner +//nRange is how close it should follow. Note that once this +//action is queued, it will be the only thing this creature +//does until a ClearAllActions() is used. +void ActionFollowOwner(float fRange = 2.5); + +// 844 +// RWT-OEI 07/21/04 +// Returns TRUE if the object ID passed is the character +// that the player is actively controlling at that point. +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +int GetIsPartyLeader(object oCharacter = OBJECT_SELF); + +// 845 +// RWT-OEI 07/21/04 +// Returns the object ID of the character that the player +// is actively controlling. This is the 'Party Leader'. +// Returns object Invalid on error +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +object GetPartyLeader(); + +// 846 +// JAB-OEI 07/22/04 +// Will remove the CNPC from the 3 person party, and remove +// him/her from the area, effectively sending the CNPC back +// to the base. The CNPC data is still stored in the +// party table, and calling this function will not destroy +// the CNPC in any way. +// Returns TRUE for success. +int RemoveNPCFromPartyToBase(int nNPC); + +// 847 +// AWD-OEI 7/22/2004 +// This causes a creature to flourish with it's currently equipped weapon. +void CreatureFlourishWeapon(object oObject); + +// 848 +// Create a Mind Trick effect +effect EffectMindTrick(); + +// 849 +// Create a Faction Modifier effect. +effect EffectFactionModifier( int nNewFaction ); + +// 850 +// ChangeObjectAppearance +// oObjectToChange = Object to change appearance of +// nAppearance = appearance to change to (from appearance.2da) +void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); + +// 851 +// GetIsXBox +// Returns TRUE if this script is being executed on the X-Box. Returns FALSE +// if this is the PC build. +int GetIsXBox(); + +// 852 +// Create a Droid Scramble effect +effect EffectDroidScramble(); + +// 853 +// ActionSwitchWeapons +// Forces the creature to switch between Config 1 and Config 2 +// of their equipment. Does not work in dialogs. Works with +// AssignCommand() +void ActionSwitchWeapons(); + +// 854 +// DJS-OEI 8/29/2004 +// PlayOverlayAnimation +// This function will play an overlay animation on a character +// even if the character is moving. This does not cause an action +// to be placed on the queue. The animation passed in must be +// designated as an overlay in Animations.2DA. +void PlayOverlayAnimation( object oTarget, int nAnimation ); + +// 855 +// RWT-OEI 08/30/04 +// UnlockAllSongs +// Calling this will set all songs as having been unlocked. +// It is INTENDED to be used in the end-game scripts to unlock +// any end-game songs as well as the KotOR1 sound track. +void UnlockAllSongs(); + +// 856 +// RWT-OEI 08/31/04 +// Passing TRUE into this function turns off the player's maps. +// Passing FALSE into this function re-enables them. This change +// is permanent once called, so it is important that there *is* +// a matching call to DisableMap(FALSE) somewhere or else the +// player is stuck without a map indefinitely. +void DisableMap(int nFlag = FALSE); + +// 857 +// RWT-OEI 08/31/04 +// This function schedules a mine to play its DETONATION +// animation once it is destroyed. Note that this detonates +// the mine immediately but has nothing to do with causing +// the mine to do any damage to anything around it. To +// get the mine to damage things around it when it detonates +// do: +// AssignCommand(,ExecuteScript( "k_trp_generic",)); +// right before you call DetonateMine(). By my experience so far +// you don't need any kind of delay between the two. +void DetonateMine(object oMine); + +// 858 +// RWT-OEI 09/06/04 +// This function turns off the innate health regeneration that all party +// members have. The health regen will *stay* off until it is turned back +// on by passing FALSE to this function. +void DisableHealthRegen(int nFlag = FALSE); + +// 859 +// DJS-OEI 9/7/2004 +// This function sets the current Jedi Form on the given creature. This +// call will do nothing if the target does not know the Form itself. +void SetCurrentForm( object oCreature, int nFormID ); + +// 860 +// RWT-OEI 09/09/04 +// This will disable or enable area transit +void SetDisableTransit(int nFlag = FALSE); + +// 861 +//RWT-OEI 09/09/04 +// This will set the specific input class. +// The valid options are: +// 0 - Normal PC control +// 1 - Mini game control +// 2 - GUI control +// 3 - Dialog Control +// 4 - Freelook control +void SetInputClass(int nClass); + +// 862 +//RWT-OEI 09/15/04 +// This script allows an object to recieve updates even if it is outside +//the normal range limit of 250.0f meters away from the player. This should +//ONLY be used for cutscenes that involve objects that are more than 250 +//meters away from the player. It needs to be used on a object by object +//basis. +//This flag should *always* be set to false once the cutscene it is needed +//for is over, or else the game will spend CPU time updating the object +//when it doesn't need to. +//For questions on use of this function, or what its purpose is, check +//with me. +void SetForceAlwaysUpdate(object oObject, int nFlag); + +//863 +//RWT-OEI 09/15/04 +//This function enables or disables rain +void EnableRain( int nFlag ); + +//864 +//RWT-OEI 09/27/04 +//This function displays the generic Message Box with the strref +//message in it +//sIcon is the resref for an icon you would like to display. +void DisplayMessageBox(int nStrRef, string sIcon = ""); + +//865 +//RWT-OEI 09/28/04 +//This function displays a datapad popup. Just pass it the +//object ID of a datapad. +void DisplayDatapad(object oDatapad); + +// 866 +// CTJ-OEI 09-29-04 +// Removes the heartbeat script on the placeable. Useful for +// placeables whose contents get populated in the heartbeat +// script and then the heartbeat no longer needs to be called. +void RemoveHeartbeat(object oPlaceable); + + +//867 +// JF-OEI 10-07-2004 +// Remove an effect by ID +void RemoveEffectByID( object oCreature, int nEffectID ); + +//868 +// RWT-OEI 10/07/04 +// This script removes an effect by an identical match +// based on: +// Must have matching EffectID types. +// Must have the same value in Integer(0) +// Must have the same value in Integer(1) +// I'm specifically using this function for Mandalore's implant swapping +// script and it will probably not be useful for anyone else. If you're +// not sure what this script function does, see me before using it. +void RemoveEffectByExactMatch( object oCreature, effect eEffect); + +// 869 +// DJS-OEI 10/9/2004 +// This function adjusts a creature's skills. +// oObject is the creature that will have its skill adjusted +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// nAmount is the integer value to adjust the stat by (negative values will work). +void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); + +// 870 +// DJS-OEI 10/10/2004 +// This function returns the base Skill Rank for the requested +// skill. It does not include modifiers from effects/items. +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// oObject is the creature that will have its skill base returned. +int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); + +// 871 +// DJS-OEI 10/15/2004 +// This function will allow the caller to modify the rendering behavior +// of the target object. +// oObject - The object to change rendering state on. +// bEnable - If 0, the object will stop rendering. Else, the object will render. +void EnableRendering( object oObject, int bEnable ); + +// 872 +// RWT-OEI 10/19/04 +// This function returns TRUE if the creature has actions in its +// Combat Action queue. +int GetCombatActionsPending(object oCreature); + +// 873 +// RWT-OEI 10/26/04 +// This function saves the party member at that index with the object +// that is passed in. +void SaveNPCByObject( int nNPC, object oidCharacter); + +// 874 +// RWT-OEI 10/26/04 +// This function saves the party puppet at that index with the object +// that is passed in. For the Remote, just use '0' for nPUP +void SavePUPByObject( int nPUP, object oidPuppet ); + +// 875 +// RWT-OEI 10/29/04 +// Returns TRUE if the object passed in is the character that the player +// made at the start of the game +int GetIsPlayerMadeCharacter(object oidCharacter); + +// 876 +// RWT-OEI 11/12/04 +// This repopulates the NPCObject table in CSWPartyTable. Do not use this +// unless you understand exactly what it is doing. +void RebuildPartyTable(); diff --git a/TSL/nwnnsscomp/V1/nwnnsscomp.exe b/TSL/nwnnsscomp/V1/nwnnsscomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..bef40b7784055700f73bacf914f2ee7da27b4727 GIT binary patch literal 462848 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

Ksy#d{!eNofyjh=yQbGYJFx`cNaUeaL7V&t17P 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 ^*V{oa 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 z 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

j{S0Wm8i3_` z9a1o@!|uvLO6mL%j28a@<3B(S#3pQ<`o_)0U*-x-G#9S@vMGsEr1!sTx_O|4R!!26 zaSn`UGR@5UgdOoGJeXhSJH(YzSj-(hzjAMTCUodI<~da(>rZq3EStBxt`^<~WjJie zkKb#TBO->Gx39jA@k@GJ=k>ow$uJ{qGjA3PNV)s+>7g#}Un;{uOhm_xt8hetcV* zLj_h%#J8QdPd_$XT`1cu7w^^@7z^^Z^_TD+d`gsHesZg0o3a-f{ysL-bQA0w=EM13 zu-7a{LyOGP&J?7IthfAh%cnD;OwlKp^ZX9m`jUQ}8DlN_#|AV1D@wjvn7C8is_eL> zWyQ>OrMOg*oQQRVEL-PG;Ez zqD563$=#JMf!>%c2&pO=NkOe-{NlPexo$dtT$4R(eH3`Q!vltN0@#d!hi{tUTdtV3 zsoAn%H9S;ZT8S%EH1ijN8<$({;C8>{MfVT^aGg?gd{I(5ywSiXn{UAP878+t_fNS3 z>5_YhVIf8r?s#a#-8-s)ox|CMh6Wetgj8x3m9?0uBvIL#faqxTwccsD3dBeZ3U+;U zd{|q?e_B2Dsto@&@+_83C7fm-j2l}eIb^pUoY!_dI`KWdAVKY;Tazv%{WZhq(3 zT)8P0)}rvX@|NZ@zN$- zR9J39V_eMR?3cD9Es`w(yH(5?DW4_ILCZkix2y|s7HwszIIFYF4vK$ZrgfLCT;c>rK4dR*mACAUu#8;&9OJD)xJm-2=h~E>Vp)Z{ zDW_V=za<`!A#ZL89;2Ffz-4koFKa#(7`68l7pwmQn-PFicw@F}w1DOm<1cvC;iBfHTvd9l}HeRK7 zc;geK(4XYOMHdPS&Ni=4pEovpv%Dh+9jT~LM`mTuaI&VegedYFH7A_k7@>+hf3y>d z+Ur-g?s(br*AE44&vEzU$W~MI%w2c|CE(fdrL=$FDU-C{Fr(f}1nnPXEnboCR(ylr z0d|;%^ey4k=VpZ!!u}pc3CbR=Z#dn zO)oQ7(7%i6-{ldWE9*1yb+z8FKn`4)mFAsf1#v@O18N3CJwN%Re(I8F%A_ym&L-+I zcwbS*Z;pMJb1m2=WvchK7~e1}J2P#S)Oy=bQ2m6i5#%qgBqXpk7^q61)}*ULCCOwscKf^1y-QZp5!`=_@Ky4G%N& zRQwSY8Vkp>9UQ-7Xz$?ogVSuxW8rvV0LOFFSDX#pW&t;KUVg6SAR*m5Hm+J@8P?>haH_B zMsSgt+G%yLO_p$d#=-ERAD_N&3B74Q2+u_?xV!t%)IDMeE~B-QG`}NnV5@2iS%I|`3)*_7Cur*RaZObQO$F_|5wzny6mv)2_>eQs)MdzG>G!}$ zGhjqXL+(m(tfqiuNwS0f(>lD!Q1V~|NW!DjdB=;;b$Ah~(iG*YQfS1Ws!Cv&s|p#H ztBQfl4l%)SZ7oEaXVO=n=07OjF0to7rl0U5O&`c!u17MXHCUwHPEYO;08_E-x$ft| z;p84`GsXqPmO&|oA+ans>8i*YfxZ>D4gEz6MHEtBOG3VLorCNc$^yfxTz@XXK~BW_-VE9tt*0BKoJ_VeHY zzuUEz!gbh%sl~B$eK=KDrs|j7nB1-C!Kuq`^nV)F7)_~}fh4`QHvO@1YT1?Eosh>2 zf@kOIs92ziJ!fr2+F!uiP0Ikep&{BEV%+Go(6GI)$eadw=`idyX?WB!wy*7;(3{x> zj)ukvu}TC-A^9^ejIH&>yjsUr`5(C|sg4T^Imz}HttJ|LKR0a^|Bp-HF@+N&FO7_p zYOXE20(Fn3f+Q|=c7Cc@R`r%p7rDHnZCUS+#~&FrhH>RyK~p8qg-st4E*UPU&6Yiy zcpF*v?6K)^lrBBM9p(37FvDO}3#{s|l=lvXmUn&glF(=QyMn)k{7t}T{4VL(AYl8$ zQg9T%O;bCHKtfJ%((#EpGGp&hscl^F*U6qkWa|rSCNaJ|5YFY5%UH$Au=j(!yss&5 zmu6Ra&1d!t$T6&L$Xs;&jr>{}@%|zx6Z0unPYa3#QLMB4ho;Y)s$rIXf{xMkf62zx zC&hwNK<4QB4y7o_Fu3)6LHE1vdtq7VKYCu?u^8=CdC&P$LUnEK)i=TPr#@e-r005` zzrIVj*wCdTRyVs@-!^TDlUC8`SFvAJ4ER-aS{0qDVn0=6*G^PknNtlNn+L56d-J={ zVdXniey_?CvE}d~xbkg&`5pP~w^{i%mEWNa8S%M}!oz)^G-$I?61XM0{`d6D-|VC7 z7xBv%t=RN%eYfs8A0k9j0{z&sj?5eI3RdJ1yA%X?#ZvMUje^@x-1~Ul$9~>ms8wAkmBfdlQOVyv@gF4 zA%F6KHe#a2db{$ny+}5^ICVM2y=`wwR&s1B_`g>!qbHS+Zo(KdtDGEy0HU7+$?QT< zls_Ijxzu7c&UJi-`KeW!pV=(X)*Ut)&aU^S9Vd84GUyh)?@cq+coh9t`?*n_c z5O@+_0L_%@gUcmXNb<~4X~eslK_M=&{$U5_`RaxUgXCBk{+GS{%!af3ClNFF{d4is zrS(CS6w2b@0^=n z+WZ@vD@y~+NCqMHE!*FqcGdxldfM#hIzS{bN_c8J%lqZ$$vG*+G(Iaea2I^vP?!S4 z(Wh#LTl!QbB!OSR=}6`Ci$|a8pg)=Q(+eRTqGbpGIB{3n{xgxX)5c@x6a>K<4`XP+ zP1^<$k8u>4+PNat@CH~oVJ9fxf?O~(a95(#B+7n}nrmDt;Y0jXn~^2f*CB?wP#;9J zv015t0#0i=prn>p1PH8v8%o*_mZG{g^;gsJW+!&6`UXgIWRwIiz4J8Lk?=1kZ?_5W zdx@kR@GzQd{U;ItLi>S|*4+tNOtI^3wsONF#batU!tMox-6I!-T~3s$(P(CZlSRoh z2TWneMH^&T2bE?~a310auSKr6u>QXKHoL=m^Wummo=UjUqiLFfW_M_vA;UB|E&BS# z<%lJ0cN)l^Lvk?HAI>G`h6Y-J7Y?JCU=W0*mnu9WUcObTD}4UO^UafDt={wcCkH1% zYln~Dc&=GTt(k|s&(oMWhLo+KBSe(QGI80df*n7j`1v^1NKse+TZ=;x=B z5}Jo_R4EP-v2ofbL@YHKJ&w8dV0D(vw&+J~79;t)%ETf4qRbqG`Ju$ME3fzaWC5+b zJ%`jWtZaq|m#Qo}pI_AKGM^*%s~t52N(3ke)(C|2FeRGeX=t63g43t1_z$XaXh(?^ zRssD+5253(Zr!R-s3uY*ztNK_D{0wNNK7|jX>EzgXD6gRd0>9akHSaIP7{%0BLz)o zH9oAV2{lR#A52rrt7E1qaH?0t1k<&s-(bpx^u5lz)lHoLYJ`wpB%A2N1}o^u7ft^R zOdJB(giaq@6|{k>X8Tng3!Vi4U_34TPXPMSSfG1%#kgw1a zFeVQ~Q<+avnWDn!+nU;>r_`o4HPULI8TBT*?cVlI3bnr)PHj>`+B%tPy@u!HllnY9 z`qdL?Je|=Gj{KKwl?~ybYK=Z>y*~V&qieZ`l-$U@Beff?(_Br)d_g%OD;o^prJf7D)kArhkjbcK+h8|ZEw$b>S99MVOx0$y-^N?B z9~T{+zr+=KaErOksFP6;+1>`w_d$yIU`=JNq~i1@eI{S1Ou2_A^)t45dAd~((MLC| zW%xj01z$Qe>`@RV@jL^zy$mS!(|`$x2NW=Spk>cG`lCEDJwzmj60}b~F1g8kf8y+n zZeAR+QNY-m#G{!*7uop+?TUA5)O|Nv#Rkme ztM5;ofkwC1`&LkKXR^67)XeF_KtOdhoww|!I?JC~I=wR$@9cZmXx~zqT7!r_lP`QM zwaFfy)aM7HU;PCQrd#y`sBCdi`Qrd8aN`4gKTr-f6J1bweuCIfJT56n4xN{PA!O>2 zqJs{ANc*e`wB!|-mzbF=@F6&p`~n9@?gE*CDfef(>Thbgz;YKRhd$dhhs;rh<@!T( z>VAeq6P944lHm@{Y<`Aouv?CfuFJkzjD~3w^bdmAi0D^jgnsbxhvqp!NmrVhU9y*q590F}Cv&D}PmUA7aw$I5;me;il#A#!ib z=yO9xB_T=5=c<8m?psbrt<0BQnN;h8WJ^A&PhHNCv7frD^|W;P95!h?oT38%ivxcj@rnncAeEX-iDC-p_Le6`=P3Cv)p2JNzh!Z`QFn5!pOf17cfn zz0!t}`KD^wr1EL2MMi-3z|5SHw%5_ebaU(UbgS~})>nJT?sjjhYKEVAh5Hn<*I6Sc zmBQa1sNUXIu{p=P`|jloWdnR#dj#{) zdY@{B9v!Ttb0?tJ&Ram znbr;}v7;)~1FokNqzPq_^>-2yKPdLfXT%V7+VsX+c*SP8R-{G`{N6&DwdXfVR_l{> zX02trLgCeW&-~IDAFd-YaUAST5A8`#V&x8$m8!p<;UpRxDI(dRS8@Op-#>*xY-Cd4ltM_@jTCGApsANEOVa_BQ6O`x;O8|1pk z<${GUT6PXM0T|h$^8kosr~Nnfq4}j?W%T`$q36H|w+LkoWxp6aG%`9C4Q#=~j6$wz z+OYNfUZuvhAJ`&T$2W}5DLdo+bGb^K49WJo4K=^Ox|jw+Syt1KDpH>gT4s|<4U`J> zwtr}S@`Ay?%eI>D(i6j)bySwxw4P71fDqxcE7C3j2+0GBgq2p{ldeGYskX1DT1N|I zXBhGLi2wGnac@7GtL1d7CwF1e)SpkNw7P(2z*|gd{VzdcgF&GCDz2vn%dw-FH_kolyf*t-FBw z%W&*p$B%uJ3fH@uYQ0x+QkI zzGisiCM7DAsBhuicQaI!4nn!?9@w0P^}uW)5SaHq5Zm_CxsnTX%N!{v%$uDBbGf6) zqDZkFb%mm>=5s7mT0~)?66nW7FvL=D_#EFVp6e?#zoyzExhhD;h?`1srJoEF zR8`Ym#ih@gCi-th;gSr#RY|iMUH<^fOc02EO^O1bkZQeEy{YL=Wj?2eP4?NUPun{500MtL zol(9O>FFy{n=Y}ZR(;iGGB@&7=l#u#q8gD@Ya>6?o0K`Zy)fk-o>XG!uEOkl@&~j@ zsZcsqQ0u+lb+hkICNq0_9+Qmv0pM`1iMSlWaGNHE+@G@Z0v@Bo33Do4+w$UwIB-{-gZB3P+QRK0}e= zzrQ4O@57gb*8C&S{Jx97Yk5BDA1(SsK=sd z;UJ~>xZ{sMe%f*R898Cfv}sePl}wvf8k_}x_x(Ev{0;*DcOfA85+^^|x)>LO;cH3q zPRxR_fQe!Jp%|JmtV3?KOksQu$Y3@_B?^$W<~Wg$PF9SYU zzKv=1T!gkrZ{qBD&go}koW193=1W9IKh7UzgKj)^Yy-CO$ttHEvoABr;YWJ$a4?9` z_ee5F-{Wtb%aS)b(}y8?8du+nyb8zUw)~AD&L(^mguI{rZ=1}Zaq`lBvVR7AHv8W? zR9GV;mo9b!r8Z8FYYS=@Bi8Ru40YEGb$@;Ujjw5=w-Wr*nF_!;+68br()4N*O>+U+ z5m3R}i!|Pg{42O}&zv&2FSv;`*g)SY(vD@^&Tu?;XW(8?>=pQX@wfqw`|0WjM4V^p zyjOpr@#3m*vjxd>0YOK@Jz{C+^8Luc1%)c%9yL*jQ&6BD^ikh>nAipy;3n4quNv7{ zdIu*bxyt1NXhx8D)?mUE0dqDKZmfA@Lk-NFYRaJxeDl8_2{_}%qMwXM`c!vzp5f|? zZnM^_+Y$E!?Pq`Na^(_&7|^-GXSu?H1<~E95iwF+N`61yY4(4SYLp;i-hWc!*`aVQ zi=JjU&~u603obRfty}=8-lOpFx-85*7IUjaVtl}XMBa_x_fCZKmH+J#&|?A!j7{?4 z@qB1hA6KCB`C(p!leA*^f$ISh`brTQMV0bC;HDp<2mZ;J0Zl}hqZPtSnQ(Xy`0qtL z1~D2r!T_xP7%<^@$~;|!t^-#5yma||o=k18yC3JD6TP>c=8B&2jU8g4=(pM&H+z|J zvk~1HIe@gOHa(@zyXrrEOhh}Z%UoknYH|+}QG5YaZHJf@ZKqz`Jfh!fFKVy#PWh=y z&|i5$<8(rkY!PE!5tV)InM@Vw8|w<>06Kc!-)IxOVS3~Jwk(H>;xT_bW)7-0{^4hS zuh<&!WIYbS!_GqPe8^QIH!2fM&W*1BThWFfz%f_Y$V8-h8t|64E2`o#PLjO5Y0dj| zCVc!R${l(ox~-FXLB}F&Q-?vU(O1+(k}YleF*L<5$BBHha_&`rIkq}=fi+R2b_9uu z-A%_L~!zWo@VwF0IPag~Li5L_^u;xWS3DzI6PO(FQNZZRIvFL>9s`x8{kaG8V=Y}+afALBrbhgr0`U^rgyUv4nqSaLL}r%&1jDM zvCWxfm9cqW!2&~#=r^}-C|?>>;@+g}4Gs|`53k`eL&Kz*#i=@5 z4RWd$h#k8WD@jz;`J@}w&yu)v$s26&_)i431>ds5Z|h0}esw#Gg%DuSIIrTcA-FsN zT@E^P1WOpVxX09&*Y)i-A@brsa$TCw=Ge^&2NH`Tg3YA$}kn?MVyJ73Suxn_d z>Qr9$*;b@=Ru~yMv*ne_;y*hTPQ2K=?>VF+&b6Uu1+)A?`f0&UXC#|vgc2vOj>l-QK!g^ax4{;=B6g~w!GE_oYPrxrD=bLf zK_jwT^I@ErW-Zf5vA0vXgNcZ?Uah9ogBUkxT&5olk(N8HYthyV`7OC)h7cj5Fm6gJ zxOLo?8TN{Ucx)nqlz;GmSP(gf;v!8biT-HvXEtOa2vx_2EwVm!RM&;qTEHaStD)Du zwmGrJJStM`A5Mr~x}i6@9VIMRC3$QX=FTjSff;fb*^bV-n*q3=it*E>yRHREKrw2F_5E+arD-E-?5!Q?oox=r#Hr5PniP5%wg6KER)1oOQMA5{)|rd~ONfgO z`DvO3F&6W%U6*dKQo?8;>%0zDKI{*$R|v1`lpUuS=_(}skgt;9uz>Ab9!7X3kPhkh z{czwkW6GoJPBr<;6BxxZ{cqMN_6Qiuc=6ADkTc0d{<(HPI`_ZZz*yV8>GE0-PbA15 zI49B@=B~FoUKU-CZyidH-jTJX>VHEo^v9_4Q~N{)5h4M$-gNjG$cTT!R6gBN)|*^I z!0M*i2H75N#Az%Nd1Q&_a-^4U57&9K|Lrx56RcHP&2UlKKdaH)HS?}JD203bR)8U7 z<#WV?1ckDvCKsyrp|#O;sSN`HXb(@TuMK6k37=$rg>UWEH8XF?$M^`~KJ1mPZ}F#- z+;1P9>n>mtlVt&ldTI=nD zn=n5**5jOd?`eLrK<&zffQoYJ$j}Ap#2RLC7VyQJizAIv+NH6V$E%q|?-O3}1nx2# z?<$)k{9m1HN)BqgL{e~f=Wj`a9sYJqhQA#yel(N>izVOA&ekgtf_e)_fZZ=jR-a)`O@d7n_0a42M15kL2(tP~Op>P1-fCR$SUM`OQ?78Sw=J{vOO{ZZS4c%cFxF zT|i$F=o(m_NI-gPz31?=VI=9Aj#R0DmTuUaDi?qNtj~L*(=~P{u@ETwtWM%wQw^J0 z2rFJR6E5d@Yh4z-Cweb~6}7@lufpIMc^Yl_JHHkWTb##`0RCye2v)Dp7c#10;|pi7 z1OmR0Rl{8-@P)n!{xJo`bNKB|hTnq$e#dObf__3z{T)l8&|)6PO z`_6|PDyN)emA0=53IxUI#pTr}$R(NOF$`%jhIAC(R1-bg&#p1PI9*p!?_KyKA%GGW zXgdcbW;_$55T6Ks6YtUrbQy$3VN(?GM-2SFKnT%`W~A8r>%Fgy^ks~IaE+@o3%_Hu zjej#FQyZV~+t>#REFft&42P({-rMl3-m+(aN_11acqTMWaE&2d(8MjQ3u>$H&KV#%)-nH(t(~Rp;_zh2h`0u$0 zk71n#S=@RWnq)l%@kmUbjpP+j&9D>rg4{X)quJwh<&SW?*84&puukHtff7F$vmiE; z+5Igc=ID!f#v+}4;Ujh1>zeo4jsasGNr$J{h6b-PTvWm-PkA6eMb5DDXc8IfM;Ph& zqUff>qlNK4*0j5RKG;zk1DA%(|#n3oxr)2-9LfH0mD#DRn3YmV963ZdapS7Pb zat13)uhMly;lKb!XLs*$tX`l%ELGGLW7uUA>m#;s8Cj4N^0+$nRTXf899-@GcoJ8; z0EOSyZ<}BC`~hGAxWzV_pb=z~Zp0)2Fm0%JRr%tzz%qh_qu#WslL41%7d5F**0uW>b%EncVZ(%a%2G4 z98CAwxVIo2VLV%9jvB~5`OWz<(m(O}GN88sb*(8GAu5c&^97xp0tK^w&fL_t`fzM!&DHO>^O2<|B35%Z!eiJ?1UTd*+&^~a^WXgTcM`+_<$cN z*Y5!EhlSko{=EIIZe$wo!W&U-qt6^E*MnEOlMw`$LAn0UKWcw(vMNUVtKXCN_itG$ zZwgIvG?o6;ZN3R$K&9Xl%NaPlrWWVKJE`(RA9`*VeTeI6HM9%KQL1I_Eo>u+hb=XUMCe-F;OHk}~8)?4zl4;Lp2nCrs^9;Uj~hQc1=^fe|RxXrR_GesS)xQfzq zCq86AWKi;%)V7suiza&p%xPER2Lj~8HfuN-zdXTkGz;$;TgKO!9hPsBdCnooQ66mk zZ1F5@+cp!^8Cjk8R}LHcKA@9<5P%~Y$J?onBm<~&y>RmyZT(wDmBX2mp6FLUCniZ) z72fVcZ$M#S0K1jU4mt9HUYQ0PC+>yhS2JPu}&dnJH zX|Ot8vI>TBP&!`V4%^f(Vk{(+wAQn6Os!>2>ivmT5$C)-<7{uKizi~Dv7+A zT8)<~lbeT_2D7|TPTl}faG97F46>Z_d}{F5$Gj4cf|&2nYokXx9TeinmHRmSV}JNaR_0HSCGS6uCY)7sQeD9V9RosDF(egI+D;I(f5E-NocY8o74!o^Vfky zmcFF|w4%EFKHfH8-WXbhKUau>q){XzBOWQ=OAi`D>kx-PvoIqmVPHxV2U-^!j{s6l zm7$u-Zcdl0!SV0&$2AEok3KrbpZR!m{ATS(<6>H9{QmnHEzJ>uceR4$ZBbs^3A4)p z>r$7gAhAG`cKf^_>-)6|ye~RV9;%F3Dv~N!*4RL;x+>&gl@=uvb}^;cSH@b+2WNw!Yg~fxW~GF`t@D0X8rkIRGTRTbNb>*s0Nk;}~2A+N4&^|WuG#y{svUKKl!c3*PMRVy! zBCzc*;<}1u;dOn86!#Z33~aazb6zDzw=F}~n5Yrm-XMP`9(* zKfQe8(y0NCF284K_A^JX`gBxY0NfgIwJ!_%!B^?LUioWb%u2|$608J9wnHKFwCF+D z)G|b2U8q1j6eeA0O&YqA7lxv(HvqikLZj3!Xx`?BAhPW}Xt9-8w73Me+23E+vBF@` z-A3w$TB_WP)-p49Q#&`Sm{yCQ6tfCO|2s^$zjV1(ds*1hl6OQ#qOCF;3AT8@mJ+{nK}|%0&K&{7>5bn?T(!yVWmS9X zT+MCRzgcB<-Zvh1=MZBuWKnMqOm}s$I&(X$2$UAKA(FrC@qUX9N%wLII>$u$C))vk zm;T#8!1mMmSB;-_lRhJ%IK?Cs9qD*SKz#QmoA*|7hxQ%>JbRygf&CPPHH`U4wtQFI z1K-$U_Ob%Gmf=|srGL6qoQ`dw*mw-CnuSshqB0Y5(~DMl=92K#4j6($Y?&qA2UmKt zZ0pJ!ZT$(=`Rpx)daJE2s!&mHCh}@F=FXXQ;i=o<LGYyXd2?TK>lr;p&(O|{$|W;&W5!$eZ5-uv$N z>;$G>*2QqcVBpJQ$ps^p>k*gBF@o-ui-RL8KSk~xX_{%|t4l)_hahscde8e{P zsXJk+xbUyvU@oQt%Rg`Cl`Tt+!*DrUL{g^y8>9kL@qRO1?9Yk?`D~jpNNfoA78rxn zK+KQ5hgD?)AEXFGh}&DqTfb_6ey>&SzhA>Sa`+jneo$WQHFJr**`LER$s}=kCrTZ0 ziRr?sctvB6ec=suP``DY~bGo#F z_)Jb$iVXxf6xHkvcGxcX5!+#v=A30+IEJpGhP}oyDADH_;H1XY1_Fe|we^a15)Z{HkO9BNY?X1mOH5tH>3l!p zrD@u?rRnL;lyq9~OxXFJVC&a&Y6)9(549*XvTbKc%j#ifasLnQ{>SCRP6PKk+^_^^wVR2P=nCKy2oF{p=7*vj+DLV(J%dIHZ)%I}s z9yi>$V=+f}n3FsisEQLIUbaFpcX+>jWw5ETr-z@JmDTyDoPA30yguvVuSDUfS z6p{!`O!LFpg&jr_>n@^A)B1#U*cKh&X_<|}=~#~@=QY0`o#Jpy|B5$${ciEQF1u>6z1zSc>Zp*+r$#x$_OzSrrH*H)WZLYMvsy8D` zHzVUBPd-WFigPyShOYL565ABjN*p2hBJnUzm9q@8DM6U+%`SI3*NEU?%l6Q%9OTXW z4`H`Ftp-}!RnB>XRW}TC$1<13E;7jSc2~8xwz{n=fH&HsYo8lB*ro#*R`r@VU2kf|8M; z+P1f%yio34OYd1~$e?|@XO|;yRL<7d1AV@jMA&~3=N=e;2$j1Nf@?KM;=Y2gPpG@x zR>&a{i3=dLWB709lsXymyoGebx4GDSB->6g4H0}CUB%&n!zQqCLL@kweiI_;_#WU{ zcMi{bkntqFurnLME?cg<40WI=-f1kyu!J?h6f5Y?=+_<=`%u&6j=-=zoka~@3mSUY zias=$l&33TW~Bo&S;LT%-f#dM4$iurwj72=r3XV!dVt4AcObn%H`48-H{C_?p@0|Y zE@~JuUOpsw^8D#^k7_VKs!%* z1BGEBLaUtg0KWkCUL_jZbQZyF^Q`W}paTY}qw+5q#2sKMrm}>>iUW zc&gjP2PRq2vn>aun`D8e;8S>J?(?DTBnv7|8;#6b_A(EDVWp zF%bHa1%sb2SvXqN@F)UbjuC-O=1CUvAUkH3Bv}|UOM;ao3&X%uvII#MaPwgl17b=z z=dgwcB-pxaxKGhYeca7B-1XnyRvd}2TRY4G(lVp(4Fkr05AcdSw$}|XYr*lw zvETbESHXUR#`_)n4Vl>Qv)_6g%YN?{7Gvin2ASBwKKs327#|QIamE1w68n9WnnCUT zqjbiou(98)d`N&^<*?pb7-he$k>Jq7xH`pngNbyl6UN*06u;w&-@@kj4ipjpoD)`_ z!qWeLMOc~mbaJ7X;DWW+<^-OH=@?DTh3AFowu+t!gS^7lL&39hSs+}7-aol$tTrzD0=r7k$(B?{y_c!q~h<}XQDAIqqw)zB#Js;cy_+< z@RE&0Gw(CLq$}Bu004(ta_)DksZ{2E zxGO89H17y8>a|n0Vii2ncZo{Y^czt6vmZrc;PXIvWBuq_!hve6 zw(;6i`feMw_Ib;gx_gtLkZj%&ldNoqQ;D8HW9m4Ky`sjRGtLzrWe3JU)z&>mpbKRC zwi%NEiQhp~Sy-g%n$GA~-p3n8U)|6dWcv%t)>UlBqIg%|4viDHqv_QR{p2~Ms#aN^ zC*Zt>jhDX_AAuP{w#-x{nhavoI`)3TJLkUrl%j%Bvo6d z0gJ9|c2^}as=7#ZLpO<7k&pCUstS=L3FZ$O5iVygc()R{1yk{O+xp(6f)bl=g=wgU8>Tk@=Ww-Ch;fMsb1{5LXHf&u&P!_$ZwJGil`x=>-%;DH~;;gnilR4p-d1}2N|=sTO7M>Q;X zlXUiX*&PJfZ(tCijSHp!zWt2GD>3E8z-oTuGCdS}z4vJw4DQe%!ot@1Y$cC{Yq>mR z0<$AKuOqq0Rk<3WC;~FS)Mb?FO9`{$k@lg;Y!Q#>qaCB~XA5so#=M(S?XURp_%_rG zZfuBbX!y;}_{$KJA@C`bwV-|R!JYBnD2dL?EvxhnEdJQSH}Hk8ygX)ya1b5j!bR`E zUuh(`)0=7D@m$|BOmBWm#?!_-=c=n2&pDqX;4E>!uo${z4Wv0DYtFSMf|?~VAm7Va zQCVhvHTo=xp(3-{9M*lQcv-SzcoE%_fF=m=B;_nWi&f{>AHRq4hh8BqihW|?+R=Nf zfl{*XlF#n`yc(csui)#+gGEK#(*x~qAaJ&Xr*5JjheoP6Z$yf#$oTcAtiF*V96E-J zp2;jd`Ndn>DvETamXs^E?7pa|roujFAjJDW?0pSjRMnaGB$?m{6DDY)QL{Q#qG-TI z@dpg4A!H;d14$rgEfx`iL*&n7Mzkf6IEl?LPQ_iYw$c?A+GV%wS8J)nUBHCW{7|$( z*)}R`BTelcCv9WRSE9~3-}AiZ-kC`V7=N~P`vskwd(Z!Q&pGdT&wJhsy5l@ykuZ}L8VTsn! zS**Q)0-+LsQ3en0SW-#@%LTX4aSUSf|3h?@vEJ2q#hiC=_7`g{7zngT8Ewl=Svnt_ zW3qdWVy21w^*HUvW(eZV0s9BR|Bhf~B9IEcu-!$I9^`2x+q~0cB>L}b%JDaBf{=SI zOv{PTkFKM`3^5OMbT?Rq<m- zC~y%Il^HeLb2M^12SK*y3h0|>1~9elIdHagj}*F{D}kS9PW|@EUt(#HbGGCfw4N3^TqJ03+1Elw&)ZmY>KX8U%Zh@$CSAlQe zpJ1ye19zCvDp#1d+_RU$Qub%L;hgsG0+wHXM6uLlAMEbhcxl6KS*zJeXma{!KfsXS+TcP+ zt5W#cJyxTE9Bs1-PQtZ1$WhvI{@2H_tpA5so3ZNta(}VDTa%^d00)-thn{oPH%BIt z-ib3*2-*jh{~j2=0&@*8tG0wa<6`Nza~laI0Ywb4(?$1B=mLp?37yLA#B2tu6GL;( z+DX8!SXDnhcP6}o)IW_sjpKksLgzP{E%=k#cn-hLZZz|cu1sEyRCW0I@%wxHzKtL4 zVbkb!^j~7q@Zkw~81l=U__~=nc(x+usRsTHx6~S#Cz*?y|Kes{bQ#6wA8xjY@7T#v z)!4H*|710z8z(;Qj6(ZrdnN#_#!zxNP~VBO6Ar#?Pdp;{0`YEr4uKK6Epvcdk?<&1AHp9P^jX7 zS$$H_DK#4LMF~?S!P->Sq?WpLsVVe}&^Ac+5)~QU32f=7HFq(&5s>y2gEnzIA+!mu z|5T?{^p<{{X9pxzmO4^cV2Snv$z__{HRRICEqQph({{D1kD%BoPnFfGS zU?n_*fnc6*E!59931QE9D{chOEPZg)KZQPu~PBd()K?_4) z*0b$>)FEYwQJfnU%=8Ti{&-YQwF#*>eKa3UX5Sh%N?9p7s2}E+DR?8#EUlcp@e}0q zJ==<;UYRh{E2pWKJJ(Lu`)c6#R8_G;@hZ;SY*!WQ%_voQ7aN6q4TVUpQP@P&$6({t zqMaP7FAi?H&M>jGdE?(AmX6^s(qnnD$GOiEqGBj{{e{ah!k)B>|JGjlhLDa>>_8Av z`s6_>@5FZsAM3?>ptc^fg{SQn+S3~RFAhJ=!`A%}Z%87t#<;e(V)HkKPHZ%k^Nw5m zw~fY|pgw*JJITr-VDi^#X_+1|LG%<(uSpK$@Cpu+71ojY2K;eqPF%>Ud>@)ZUkptc zPzjoVB8BuoPMC2+k;?vBa&RW+25d1IEe4@C4w+jLh5jdvX9@ipNcrO;;@FT3cq2R) zpbxpp4JEToRhOV$&F>|%J0~vjn*&`4v>kwmmbxv?R2nyD1Efj|2QMa&9Kr7r$kdp- zd6NvFw?E>}!*-iMLy(q4&xOE&<5iTu7pKk)^`6@cBPb-$E$SN@CdaXZqt7&P%)&!w zE6pFd$AxOf&+Dap)Ybexv=c0FOYXOBVKZ9_o6Q(Zb{NlJNO(#vx)A#oDyTnFmuz zr9R31i8u7vw=HC>2~Z&lB5w{0eLUjdX^E8qBdb2x-kvnkdW-tcT;}RlP1XcN(I)HK z8h)~mdvUOq9z2W+(E}=hNDuPS0~q$AJ`hnk+2d&r&dtoZzuw4bP*l)8~J(vd*YALPrV*}%3$>6#KiX2 zzDW&Kti`KqtNXjIon><4;NCA@KYu#A zgiY%K8k*xGY;Zz?a_Dy+VOzkZ?+e`m>AZ*=UM_oO+QY4mG417Ay@&d5Ju9YSZ+7(X z_R#yL9pjW*kqF{}-CU=NVi$@mA;VT zNeJjsadti<95lqV{mg`s`TxEW5;hS$uC!VrlkhSmx zX)-dwl8Nfyyu_bYuaIfsVY63UbDhJ{!T3<)Y`Gv0OvzKwn(e^+X0zc9%vN_B*8{Yd z>w8dHYkjxTgaE&@p=s<)wRy>o3T){`h;IuFbiv0DpMd~FvYYcv0EaD5!?E8Y*~+ZB zWvNw_plgtTj!a?92-hF{Qp7i2;8=~J-u}^^EBpcJD(?dL;+INV5>r$?LTF000X{cw zVLrI2l14-$gZE;it1txuux|+`pi%_rWqjbaPBj%%@)U6R)0&~6uuW|e6a6voEkFY#GZtKwh!{L%Fvx~|Nv|>^9_CVQ zfP){h#uxA1FH^%-Uk@02_sbx;uU9Y0o{ZQg>fgdRUpf_9c~aq5vG#{r!9hTO;;8*J z`!NwQ%mXTe^A`%wGfS16iCPD2&ya-^;AGd!a4E`j0Noq)Ek>H}#HUfzVOdvAb=P9| zwRl##EqJbVr-g2asx%s&X5lfdF9DndV13=;>;(uBduQM!9tH!jH$=1AHF2XQ;igIeH@weq z2-_E=2W}LZC8>nGGg3MGVCX5IY?Z#?uaJs%j$@^qiy=gBxQn4MCM)X=@=khSvU7}N za5Wlv0ZR%kBYU2fpkjr=j#7^lhAy?+$zff7ngoEyVaOo%g^Hxnsp#6NjYcTT$P(z~ zgGh?@9h?|IFP}R%HfHH*@Kzuk*G`U%pc=Zh0O9-l^<3*9xI_!TnpR3mPH{gDOTS7w zwAWVzu=ckWn9(=D6T+(ULQ+c+iHzj>XC&weUl9%{{oJQ-7(dhG&YEe;!OwN5+{hs1l3g4vmm1s2!8O=tX_UpC3sNpdk+&9D^=SfuXn8{{ z7YCMF+#G7nPep#5N@Nm!`jG&CIa~=C&t~1X4wUYXZ}gA3*8) z9<}*fTa%fHO%A2U%tL^s&R}3lEdDgpdPq|!w+PzwQ3#@~pfpu{qB}*e$5ua9VODlu zmvqYd>@R=&MhyR(}4VD~nr8J5F*l%-7-!cg}M1`JP12xO0jp5qpd=G=8de-p)>*2(^)*&#MHY@|C{yI}#B!tqq(HRW5=-%3kHhtS zz{8a(lMh0U#oC`9km;w(|B9brf-JNlu9^+18o7i4w*ohgU1)wMIz7-m#lY?Wb@Gg5 z3SDQoIS8Oa$i^ZsEukNWUD9;|FdWsQiGf@@H~~cKXDrUuNU!})_F+rt3v`1pl#Ozu zW@wUk;{t`pacJW`qq0F}F}Mq}K}`+ZPJLUZMjIQa8~tr{?BUnIxu8gS$qdA1TIfP}qePvBU4A^GOomNK^ zTcO8#tD9g-$3?Dxbihz#v39dZA2PHFNk~StBN6nOh5vNOU$zfGYC;oL+i}T`*{K=} zP$vf|tfo3gYs5`RtekSFh3JD6M|B&gVOHd zf=!>$M@*ipU3B6Qg%64>)-G}D@Hqm-Rhr4cT;3y~fy_}OT6zR69jfO5PGYE3JbzqC z_y~;j96Z%=#Jgm~6@(H)S)t2RB4b)M0su!K#Hb)1O}s}KYfPvE4lKwpQ+v4Q3vEs*wO z+CvEAY>CG9lq+Yx5XTKBf1GNb#>V9>1J^2DN|~b{_mq8 zulD!ik80meORRm}qyMt)1KkbhKH`an22ttMfi7a8)dqQb!#ZlRHj0Qd?@8?RCilhL z`L|fxCwsOo*+Llx2Fs1cLGzI29!~)m;N!~KT>vts7r0>u^AEV<;CM@2DuFTV(Q*(E zey$uH#&MUTP>UQL+_-HBi#2gF1wbtHq5NPakunlIXi0{=ku$6x6J*qbWrDGx$7o4V znskD~!K$PipI(R`qj7TbuG|L`@`NO39o|dy`BNB{lv0T2RA*l` zBnbQNd)eCha0ezZ|AmfipUqrUMi19cg*yreMYSd~jO1^y0S}O~wKr{I3O8;3&R2_#y`!wjA%g*+A){0M`&Vr!?u6b5{Vs4B%w zUpgxQiFqRaly3V7s-pSwfxRDqMtx>8Qve&QTyA zG5p&mnV+zrrmpmowFN7=6U*sndlR@^`fOG6Z8|5Qfi5{Z;(s#_Q`wNYLRhiZcRx2l zKsX$jpFqik(BTS?>u%r}x;5_)SnEM?;J$qR3VkbwLQ0=6y#dvE^Y{eG&bx${k;-TU zg?Pd+Y9t7p?%V1ismxh|;1ca&RioSi_5v8<)G^O}w~Hx^n#rPn^FFDP^`R;7I%)FQ z(Wn>B6;xma&%BWN8GllBG8n<$3r8|pAjSf?)N=_Oo#Mz2Pp5)^>08$MF1jH%#o^F{ zIMqPTol1fkzR|pLaO0Spie9K2X}U{=lQi{R_Abhm07xr2-!)|0PQV5eJlGAlAfbp+ zK-s&_j`=%Ruek!ijJ zGF1V2o%xHhWEC%zeNc5LX7c3C80;Zl&@=gE-td@CzJpG{LLitYcFA9m;O)PZ!tA;P zB)NNHo-X<_aNv55YHCumCJGMpVBU`xP(ZLMwZ*g$0FkzU?~|c79S%7{M^tkGnoL&j zfpXpu07?%2Gp90)_1WsMt>Fzbp_Ew%$v9j|2P1}y;#8SM{8qC9LcP$L=EY zf@g5RP;Xi2sv$~*-5Y&u227zrA9@YJ`@#FvdyNT@fYlIfMBGFU_E7$aOXM6Z5n}-j zHMD1N0^;@lxq6!a3qIp+s4#2C!^tTKY9 z@h(3&ug)7#gm4GGg#v&Y73bf!mnWHvxwTQEmX`q%L^s%a5FA`P`?8(=N8gi)40EXJ zKTLUSa|($YCt*dYUR<%*^`JuH+-$$QR7c+$dHOKOT-Fcr)r6jbSHVjV*#<<`UjqUk zTq@4t>E!%qCED*-tNm8DGZihz@6dux(f$kHPatTk-z9)RtpG$=4(qBBWRuWa8gk+) z0jD8gCk2R@KVbzFUx!ES_n*m|(+0J(6I(FFt-{64mD zw;?$Ss*uB5Be#5(Ce`j4TTG zzL!WPwyp3FX~tz7>S~y74&lWAOzjDYe?JL*cOV|}GVP$owxT!GOVdO0^$?I&5>ne< z!zN3zU>aH~Qv)rt2&(!VF3#a^Gp9|7^*w}qIpme{tFI*)G)+VV;cuB-^srye^?r@W^Y!$t1yjj(VYYg}k)QpdSyuxH!kPO)BmbK9W%t%CGGi51bd1kLp>V^9q5Z3>pyw zeohrQWZ-sMa?@UX5F7(=zY{}mAO-klxz?XC$X5RYlmyKuSdj^GNC+>{UQ$CA*uqcIZ^eFGrD_C%_4ZGD zV4{(Bp$dj*LZC45XP^@*l3c~F6alM&GjQ2*_75i#NYzc&6ZR5X)}OJ-CECR*Fi3~?x_zRzX(Gs=S>X6<@Ojul1k(>TOFAn>!eX0t*jC|3b-P?6v{ zdb(75g2^>sT89I*_bbx6!1p>?n^G8h2w|U%Qe%g^2wH*K>hh3IM>b_>jGiLb;Y17*J2<-}>79*kqBZa0s`itug|Xk}2xnn}(H zW*BBgS{5mE2uc%=We~0f@r=+^EaKZ`b|W1J29Tz=XvH5lM?5*w1T*~rdb_|XA)f?| zrX`)Qh!=yuONOEdw(}IKnw-TA2>4@8ssY#FvOiFJO{CL#9b#y3 zOBzo8sDB)I9Qu60Sq7a-9D)K4e3BQWga$;Yjf33@g);z_q4k_s}5AszI^j zihoCn>od7;RB`4?1(_Pxo_Lj(cIsioMmkN-X$^2= z9{fjzwS*6u!iC<0C5F=u&OJRc!u(d;v!Do6(h9ycP&himOO=_@wvq$_iiSUhbpkS} zrzIg)KqwP@MkG`mTirS)z7_W%NTLO3Kq?FC%Fz@e>Vr06!1=*P&XlOyjN#Shn zR;aSY1SGB7s}c8K17M(3Y4lMk0up!F4mdub&^Pv*f$hI?P+>!qv$5=h2CSP9)L(kw zvdVLz?SS(G?|Uq)tfwUrs7&v72##_qK!@N;IH)bSdl2VS_#?> z0z|`9$sOQfeF#QOnr$yu{0V3mQIhx+|2Lr=IHrPeg@pCz!X&Y1&B`R2h?)4Y>!`a2nWa_RWAB=z=Y(kov< z)R|_yz;|NounF$~odA~3Go~n%1=>hGu<3HVRJ%yFtW40##G+l4yU2uyALPZcCBYiL zju(wPnA_ByA4CN&QHLHOn!`ePdVm3sCGbShS$nt!6^cPv6befk5|@ZLDH@2EhW68Q zV6_BxG09Ns$%bf%1b{-{E)lpnhG;c5(Bd>bK%+YE^>aR@QiZ^03iuz56r%@nU zy@lk4)nA?A_gK`Wh_Ad4mnb-Gl%osTT&9}emS`gSv-u*27%jilPMV1m{+?O>R#?j$LMyat@5U0tC4izB~6 zRGLIJ7&%=X(U=UxxGViB%?naPuHsTC_5~m{=xVu|9Zo0IyoctBYjLK?4SX_csJq$z!L#STQT;vfb&8W-e0<4=Ivl?5SU`#$X0hV%PH#*;8aw> zDhN>U8d!wT4URBhd3X{=M<#GE3TWg-0#23vw3~E$i4QI$;&c8N=f&Q$Cch4#-PLFN z=6*sl;xByKY}=bQC8;&w-ee9~e~Gm*xxN17^_hXEkig`>t9NSVOKV5vE_})SK>GCD z!|Q(UNAA66&B*OUG3#EyWp!Z#if~U!L>cp+fgSAQ-k(PxZZ`Sl`aiF~op&a)H<@#P zQDyeO=6|ms_m}H>>R(@XGemxEd#!iyMi)}d)v3PG8&fB@*S(Cn;IU@+=KiAkoQQJY!BXEE3+eMAA9A_~GaV zd^n}#BW?z4IukDYTZ{w#sqIPSeMm|X;8EWWROD}l?f{IydMvrWTstQFPq}L>wnu)* zHI>gTtlNKoCg$M)Sl9pA|B_Ei@VvR*%7TDqe#iNex0^_1^T{GploHSOuAVXEV;PwF(OO=syf(!F!A9_Ts|LtrDU*zRqccIrU-{8~azr{*qOz9>9`)*tVZM02ps%v+T4J82{8)r{R z$ggYnoXn4F3dY5EONOoPTBOD;?t+YsnNtGRDGiya8^;lM{oemTX8oUS^)6m2=}>@I zwp;N@bLg_}&ceF8-|~RfKPwZYq81F1aoaqgOBB)lTf|9c>XXn*Y1{9XsRLZ)*|7aO z5^mQM%@jim77`jGd_A(qZRc$S4yz_t6M|is5;c*sJ}icFFV5b$~D0 zEvnFclf}viwhjsGn+#y@BCg2r%m^gQ-z%5j`a62SUXx^lfQE!QTCRCb%zbt*2e- zzW0j2qVKZHpYCIv7_gqe7?X<02bx7^pGOR}3ti9rr(Cp=3Q5pr7jQf?U?9?yaHIvU z=R~|Xu%!+8fl-Yu*tou}XLzw@E0kFf2=Eg}6+ON7BYh$@jZrtadh+k6U>y9h?f(KS z0pkXjW=t2$j3QS69-;MwW!<>yg>5L&wakBo_qF?26Lj_J6OK`8Fz{}ES6|LQ~^ps5(%Ex6UenL6MWN1(1lw9Bv`K}h`Y~4svqaE-`0vG zZ6)FZ-+Km4z{zTRx&4^L?V4>ibs)u)pz2*?VM(0@`!Oyyq^IZaei}p*K@nvNeVa$icuUk&E6H}646 zyqi2%!UC~1j}j2;b;NxYW5M6N3w3NPvo?&A^%R<;uREU0!2wGllaCC37&Q)HDKdx( z$5@YDKq!jy3Na5F4RQ}E8M+!DPf?rjf9k)gVY!u>7XJty5|6+!l*4#LzkWg`s2-dE z@!p=)r(QKmIL-yX@c?V8~v%i6Yg6G~lQ9zq*oA{BiXSo{Tb{ z)~rb6Bn(E9!C50SJ!-I1>bGncRV7FG_1|cdrefd;nQK5Ik$O(dvVZ~vg=SX)-h-LS zoPusm3m6?*QMBZ9hGs;YCG}B<8vO*jga*iHi&rj}+fzY-frks*X%wy(>6tdLVi86Y zK-77VUFv<}J6u-c$Rny1^jBGZ!|$+~f1s#fxBZf& zgAh(2RqU{4U1HKr!*}IBk9Six2}tpp-1o|flP}AB1Nm$LaeG-=7!!<}(=}1T8Zt$`%i> zLApL1dgXNU4CNc^6(y40!A%XL&7KJMZ8h_f^>n7C&yZh)sDQnvZ8XW^7}k`R{$@aA zBz}V9u5`eH^g(=w{>wGB5&;t9cq=W99dBjnIipkkGDn}Nd+9Tu1waCbUoxWld>%tt z7QXw^YM-~GMCgn_oPjeb9NG!+1NG`>XfZ0ljbR;x^80h0z3XUtGn)?nq%aTA!xJbb zB<49`Gt^uwE&SHv&=iSyrWnMov#UhALJl)#5<$kaJ2z0)RjTdI5%OIJMsPOp z4DG@2j!m2JMOjo-X)EAmG0I7rrmr&+SkR@#ti>Wpr7~Nw8TLA-mi1L%!UD8;M#092 z64=2WJVf)Y4<2eZKxHBoGMU-VKA-bQpbX{+ne#_it7>7ELz?&xs!mC3Q9Xf(orr31gE;#&?~xuP@iKZn_lr@6sz=MRld1F*T5XVS`Gns`AVA$`Ax;iPWTG zm;{4ZP(Sf6b_E2N^(B=s5Cwo*j%*lIz;9L4bSSH$0jEYg3djaR>ji!iM2`I8Qv2kq z7qyd!G1ZJ|rh6l3?0qdYA9#$)tH$-U%;UH*$Lx$9Ax?vN z{yM>!&#pqb*;hOc?a0j>)~Kr+#xIPI-+fBFx5v=O8?Y>Nf-AZrKuuxst0loRsVoVA z8EZx@iN1<_N;+t_@WgV+f<*vhcbtheLULhrNOqAr%j2^1P@I(GO<@2?#L-VGhN9Pp z0?RZe8`FWPWx6NjPY8cm?`bg>Q9n-G@*gV0S_@-J_mpZ6U(Y6IqE{lUq5ben`r7Cx zpCM<`>4hLpS3b7;xbiO@RQ{nGjJPa&@SgVzmgf1f&30>`rbYd)%c%yJ&< z)GAUM+AXFWgNVTHW;Ly!4n!?x1;m7|?Ew6=kU~;yQ8M}Za%3#S8_W7&9M#wvF@i!N zSwqibMYbeDkke{f_a)>MVZ`g#O-8T~PFU$-37blBIwZ|uAxhi28*M?Am_i7HjdJ*? zp?38(NGYfdxCsjy!YrZ7(G|3*SbIz%M!q9Ckr$?FsrKq*Lh93cQHrf~8UNJS{DLMA z=TL8nHePD7xLjZWVakp3_E`PLK;2LPrw>iVDWiWGr0TV=%jC$|@hB474y06&d6ZJe zj~CLJ8I~XLY)#&T=L-B983%xHXt!K-`l%CZWZavy7xZGktV^LAF_W+vj;ejL7poH9 zb=AU0SivaS3bF7(4qCx`fNWUA#={q~Kx@v4RZ6b07<}XDxjO>U9h{zT!}+u~vLUpH z=WEXuq6Yf~3`~?m5iP*CfVg^>VRo{z&`*GqdeEF+_#7(33A(`Y7uXaq zUQp2(EBNA6?w`7E!A>lA6c_B)V9lJir6`~D?7;kYe8T(|Tq;b# zjldb|W`AJsX=r}F_fUty!QYBGZt_eCK$4|G*-NZQz(u_(9Gc;bXQKychBKJth&NB( zXc19LveoZFs4ie8HqOpgzSn%tOmB4teIketHXp1OI5La1#}&ZijUc{&>Od*vIy2nY zatjHRrQ!fYkRJzX$tcyn3^WT4KL`~uXh`;{TqiiXeB9WSIXacYf*hH+r=N!Yi1EQL zWe$yWS^qU^Z-6&Tl8LGV&~eYhhi=5N)zOCD0F_F^g_-JeX0TDfg3_qT?X>1++tM7c zzDO`h3k{2X$}$|=7ZRZ8ljKO$BHfMufs26hCf))#n#6_Zk)v-yJ^|i9OSRQk3I@fb z;YC}#*~OQzPex4&>Q?FwL9JhzUChCl^OEaGF(&l6H?R=6U^@gCp(Zi*d=Cud$+-|~ z`3O332#{4ata*0Mz|>Oq20Ogf9VR!tWDuZmgewU->p3|fAxZOn$_OGF`vchpK*1hU zw&nJKz|b!dK5sV%aY*_Muf*SZ^PzkU8yd#TIoiKm@j+xeL$TfM;NKxQ`>Igp?}6Q5 zaLXXoqwIc$VI_(s;vWq0z}p`O)}O*RU&<6bUAr)L+E&@na84ExeD_%3Mj;4n^|X8B z%`0XZ?u#(SDSR!_u2u(|)?|r6>8@>9o{*ElK*6Dgt&W0+s&39ve>$V@dwH5qJonl5 zCclMm;F9zGDSeD-pXQesxI#5j+=Pmd;wo=mk<|W$)?|9_lj2eslx<{%nmQsvX)1y0 zD?|8?LWx*CH*ZfxXN!TKcA`2=caVqbjsjJj!(%ICYSWpfrQl{0jQq$evWw6oA_aE=+#V5P!nB3MmaUF(=}HJPtrk zXR=bQ9g7Z0TsB0zw(4sPI-ZY7R3~lseXA+CguO z$SfpYwj1_VID5SPIqS|dN}9R>26hbN6UU6un{4$@V2q+M2rtn-5F}~7ugRDa9coG# z6|hvj0+wnt3!Y~5(3?Dk(NKhyYX722^rx_$No_En#P)tfBY!Oy2xC>Ildr~S+QE5f z_>r^&r~+x3Alk2F%&gmG`16xE71XqVoaZMz=bQm$e6FKNf9OyW^{!{J5`<(+%N5i^ ziw7Xs(sBhc+3IM`#hWMS%2rp158K|9DVWwE?dIC{rr*Lf0nAZ|zr~0uz~2&t=QF$l ziIb=4F<;VSh(WN4fJjWE98`k#HrL{ziJ_SvRU8UqA-K)4 zVoz^j5AdJ3?*I%yKI535hU;4N;&lT2(8K{rk}DKhEf6zlWXvOpKYbcdMs9i$p4G6( z0gz_qrZ8+B_6ooyGdG!W>q&Xw-VewJ)nw*Mw)LR9R0hdDTA2O8ok&INhq25kDn8d) zk`6X*<1(*TQwFuMZZSc>NHUqRw=kh4>97=OQJ5*IZF#$f^93)@;>z}%2f8^oIiKy< ztI5DcL>hL5+?3fYSr7eu8nPMYsuy}7ZNcq0mV?Hei;={MIt$Pk=;t>z&d)DyHBtxp z`K9BIG#JYeSHW-+0F}Hne_EgzP?FQ4+8)SYhb%JU8@oze%&Rih}yTAS{1Wh zQa2^+kOr}xBt!q_{VWf2xqR$o+~0t6l$4@6j$^miujepy;Yn4OVE~XM*ZiLy=&I7C zPkZqg-hJuRMGO^$UcwlkTL}`>GJY)%zYHZ;Jv0G|ef#iInT{8tR3jEV6%)PjGUa)A zA2wMb_<#l+c?Qt=2Lms<@@)aq*X)B~EN3-)piJd}2xR|o!w3ElZd8o$WagRb=&QN` zk+uU+^FIM80}t4BeTG4(aPymR)CW-XWvjB9`;)kc`(c;m-#~pw+{r;PaJ#|fMVDN= zh1gZ*xvo54C|uMo6dCL(g(-fRCfeF!*T~ys-$6@OXKo#im3^?_gf-FEnkdI0cx=yy zovOnq5$$7Zl7qjeG}`~noq#@Hly&iRjjc4w9#t>cio10HNAg4X_#|?m5 z-z|;^u)WnQ7CA;ki#-DWK@Co5q0=x&K2()ncEb&mBa%{s0cvpI?ij8I`3?ynq%Vtj z52rSiVG)q!r_7d#;DhIUr4wDOy_YVBKg<&)L|EMqjZ{@rK57c3@~+vVmt{d&+BeVn z0Dg|RfFqs@)SRPc&p^*#H?m4B(h{xfTvmXK05&E;8q+7XGT`3H@J_eU5ov(644{-x zG+E=|X1sF#igaYuU)I&GMnObc#d&Oy;Vdy_0?hPPwS$&6U~hd<5&*N z;+u}UMj9>$|AgFH+_utyTiACiu4WALC}LER)@axv-Li|f83YcJfy2dQAn1vhiA4*< zA*EsZBB?`4;h9X6WE6rc|0AybG;brUp%eu!Je6Z}RE2??G6e zo@s7OhGF~__*nw%FsM^VI6=IGM617m@`d^>2ZpSqBA>XLvs?QYX@2UEVJVV5+>fQ20VP$*J>Wgpy;c!Ll%-3Lc9Icu+n0~ff~es{}EdZGU{{^$meLpS1u z-C->>31ea{JtzjZL~7ccTFaBHMY@g?1Kh9FR*N3`h8y)4_icPZVH7r%7x#QGUfh%U ziQ3$gLuGtLIqn&uTlt!d*UR|=JAUegw_a(XNpRjHt;xp=Bp6L>vAFYLi#w1_THGN` zKW&TOLNp8k)gZMRCNu)rI1m1oe2yc2=MkAgN5CUDrqB^21)04RJM+n-n6{T4HQa0R zid}h|Bd*UUqZBt|lxHq@TD6R?v^`XJ-0B1-l+6pe7M)H(mGFqdRSe;iQ5s%*KQ?PpQ9h6LdtA-U$ z@swj&?Vy{*k`Q;8*}~fAJ!2%c!+gsosDnGqkC31ChK#*PkbwtwZn}XksEcXrN=ssS zs*wj)g=ANPNtm|$2FC~7m3n1Yf?bz(7%9iJ@5Z9Uwaon~tPR@@V-h5$OGu`!nD1I; zAI2;uX1a=~p!X8MAj?SKJZ*I(*9B6E^l|uq@CCjLHd0ja&(b)UQsbpa#B*tFo>)La z65hE(EJ(X3+T#}x8mek>{2ZL7K-te#8^1q>@$|g?MO6B8?|T=5z{Z`8l>Ubcqyu2Q zF;NntoWtlcQJlf;Ab)q{FgBB)0{ZyJ82kbcqGX%At3w9 z(ng{$E$3-o18#-6Sa3QjG6T+CSdzV1QFmZDVv>=MH<~NYvD@d^7H}TI`kOC@i8f`( z2)vz>9bkN4)|TzmX!t6fNCx-mym1Gi30HhDj+_dvw__U_GuR<}a-IEEEci!gfkH|N z?ka!THecCJG{Lb8m|-XCiEF|)kW$Pc??DbW6su)EDTbCKgnnYD3{g_h7U^Pe(@FE$P$l`NQT_Phvr*a-g(`Y)M1BN-GSK!xe<=o#RSKxbm4$P%a z{R+IJR9i7x@T>vdIM0JWAImH74t8CS>0C+9 zV=}#tDgC()w46rtQo)KRWoUS@v(+6%1-$-ue^L7A%tR`>q3cAB4!NnP%Ot8-VV}la zrc^?3t7HOTvY1I_q(8zATs)99VCZ8BaNPI1wj;gKY$y%lGGL)P;^-m{?m1G1_(JSL z#iuRHb3X1Xx#eVzlRZeEBOy?cGK^vq#g`cKdI+i5cTy!O_K86GF5nRT)*b{9<(|Hq z{P|P;8y1GedaCVd1Ylze=Mb=(&#@IUQ`gr9zd z&@}+`bw(TT_(wjkoCbjyYYO$Z_nn@6)+L)tJn4NcWg6sm34th*S*%~Rg@ zrfx__YH4IN^~1=^WDwAkb~Z~ph03pB`+Zy7XrjNKPp_8kQ!o4ZdDGe{{s3QW&prNI zfFv@0%YWhzs*rZWS@vc$#T2>}@Ky4T2pPkWXrm2S1-}8v37#*l`}HkLiru;mUEUbCOiZ1*JfGRd8$UO4?PMYVEUayedr zczYiBOg;Q6IP$$4s_INaJB$%a%ZF7)!QQjNF7yG{kO+Au6p2)0P>)CmFgArS`@ylPE7oq4#cqXeZyiL)p)B=?-2HEa zfGfhji7+j60e0tZ*`qbgbLe@9*-EquZ2umUXZ*lu9vVAA3QIZ1g)MbFG>;H=XCb8) z*`PR}HM%^b$_;^BZ#!_r@z4aiKz3g`u+X?VB_-f@97h9)<99EkY(DtzeZCS%BH(z@ z=_?wgYolzVHVUM^OCb7k9Nwl$g`WSx`*I7`^xc`Jum0mq)45O2G_A+4e%nmb_qT)i z`KOttKK!1*Z|07frtj>WX}STw9;AH@zu(~ZA%5U4CM6{#o%$~^@zk*Rki^8VqN+0d z*5C&|X5x_l5)y_Cjs_+qY(Q%t!0&PVK1DIZB7sK|jX>aY3jyJ;WW)|(2^doWA=~zhQq0I4DW?%nfB( zOC?Yfq@Ap=@@kM9IN>3TE;&wfTP5XDzYCj!)jtj_0?5CWXqQU!mDdhjo96%ldJmcv zn*r)FC0c@!0NVm=Z$Q2aGI-RiLU-l1Qqpt#Lu!dM7i&jkgGQ;m#APOm(;*?57ciKJ zPl$yewG~C7J&Y{XzNIpKLcW=Tm-I^M_>fTtNn9R#(PDEJcCH$_#?ZGuDE%Bg!RDk& z{pO=5#!%!0%~Mj376#ygQrbHVR$i?BBAD3F*@Uc9uKCyk7*t{X(hzm)iEbZ#Td#sZ zFdu!}s8bp-j^EO#q3;0WXOGk$uiuExE<7h6H>|B_1&NE)R^|NzY$VaO!cKk;#!biy z5HD1X^Wh1#ya(J!LpO6h{#$WB)ax&WTm^K!Qj4|C*y+GrBO^^~Q16`c5_cyiHHdtP zTcM|eR_Fm16lF{Fu`yH+6<*yHDoc>3Vw3@Q-mp^2xm;pyejB&VsWMyS^8`Qruu`5n z=BPxl5&m(_67GYEOHzGex+L@yHow3kN^4+G!*&Z=``Y``a%ggebxp2t=vOF6nII_| zt*^}4?|#(EjEDLsf0yxkFos_`F^o=1xh;++*a>UK?;w6Z z#qSV)Kf|vDzgGO(@N38K@CUdDx*1G05@n!c01b-g!_@={8#tVU;##kv%D0CaY)bJR z6j?8*n>}ER1EXZNUR zWtqf9+PNpyykhxDqja8Okeo1dVGnL4aYxIdnmkuY`^LNa!D2OX|EE4HC3mvHal~D& zs@=%a%Pi0VYX;8yCq0YwE1Km}m&P=XOxTEkxiVw214^+*(Y!eO+x$K)>ueKvN6<73 z1dct&n}ZpEbt6*jWR&fP9q7S6yl%7our28*J~rc{Q9iQEo}>>&=ho);IIH_GaeGnb zvs6TP{2#w_lh66Dm?yh%ZITz#mE((lZ>`%T%M| z6-XoMwa9QKE=$H$8HU6ME*X3pn=umMhJ?_UQM7R?jb^TdWU^xOk{R*qXn0ljum_dO z)SUGwD4VKzXhg%U&<@Ikhsh+4e&J|(^z6bpiKn5n|L~VVp`RT2{x8U>=!xwOxF^LK z+?!VjkMioGYA4nXX)({G-n>nSh7P3G9(q553m#q{)gv0x*~}*(Y+XKuLabG|!83E~gXdn<#aH-m>40r!|clzbFie|ZI7)aafW+i zP^!h+pEYS^sF-opx3V)HymdT#)feH0Zv#SlaA+$h2J z0=Dc8xQap=GLyLoq6Y{|E9e|pYxu2@I}Qz);3m+~Fp0=7U!o+#w}6J3#c!6$(d@DZO%_q(34S(e8n95UclVDB>!fSf&8? zNpn=g$}Fw)5hDOrhn?VT6sz+Bbv&VVU3KqL9Zt3dC|3d;ca(O{z{g}!jkxJDWz*ne z8G}uJ^duax%MPIdNsc2vM-x^_V15dCl8sP3x9tVOY=Q+G&~85G9>22@ zQ+W@TOd}EIzCX&+fQ%zV8!5yEddy##eq8P2AifGyK%oP7CW=t(5wC_b(~;mqTzFKW z028w>I1OJIKiEFf^ z6Z5SzkF$3JZbCXaY@qMoGu0%RJPWx}qE;g<=BA)A89dGahy*Ysy8^Okw zhUIgD27=IF5I53ba*$8xQ|bgsn>U2F{RVO2YjVr-8k*g!=Ks1cqO=}eo(RVZ$P;m* z8~ldBQ#Uk;bI|X6ZJ7@Phox}bSD<*lUA_{qdO@6H-53Twa5(HH9{S>MKX-WO6QZwA zolWpxW(@!JH`e4qq)WS7u)Ng-z4Glc-q>QXp;*a^vHpA4mnimiH?EcG))J&H5rLk} z?FJp;ZJsYI8weDhr9@1j`~$NYVmc-f2X?1+UpvjOLfwq+D7&%nIMJ|MLVc=x2&Tm! zgu(F#upHzrf>NB=#!CLAwy{U_V}IFiKIO;)9?%CspD0U~w|(jSStjhg%5DWt;&``E z^eDZn6k5F6@7`kd;2LsA1XK{vYo`(`Lz5q_K}8KSZwS4E!7E(DKgQS`pa7EwA~XiG`rP+~oFk*l%h0P&N(U027^&fT_ZvjpH314()I$=3N+cQ+uojFi zOdHP)sAWjks#zP*d<>gNt-_XWywqxFF0o*ygR9QFSh(#=~_P@RK8 zzO7;oHbo-IY}c?R!N*v|fG6bl8Zh8P%J1!pt>it1>76<%0C@7EW_Mf@ey{A_|hBjTaJR>3#MgW+X7JH-t zw)zy5uk&qmx=IvpqK13Gv$V$JTk5rNo?HMfzrQzQt}b-}h7Zwp>QZPX}+B()E$ zNIKolz-b$~DVt|F%~o0-k@UL(OffKo>OoDbAt0AI45t1s+Q!HpMM9Mai--uGd-glIYPlHEU`K>VZE+vKS93J_>DJH zFays(**596A&V&@zY%0-(d6J|Cb%czJwe`Kec3fl4ppwVP=YH*ovTU(#prrbGBH+q ztG6Xq>GeE=;sRyg2R+3NzEPaZHiD3{JvR=F$tei3Jy%5j)FiNXZO>u1W>oIMbRLMCT%wv_#?}H^r@}g1bFHmzRhc?Zp=q2J{ zJqcrv%2ZVDQB+xmZ`Fj7gxrHhmDEc?l~Oplu!2DK0k1$6b_ip}SuYYWGPQA-b#z1p zPyge75xN$^)2$#kkp%c?fSsjfn1ij3CiH{_FqS$wp2@B+phz9+5Cet0sy6Ppj^3Lj z3711Y68X#8gr;iqJ1Aq?gc+*V1hy)t9RkE`EJ*m|;7L>>z0p@JdJ|2c)3r!NQ3W&w zB?I&Ai}vM@YuJ}3*%xv(j}6h6?_dLt9-j2RK)mW|7mw0LUsz? zVMwZ}RJ%uo!F-i6Bn7r^OeA#=iNw)p-v3UUQXgYG`P?NHdIE ze>Y%BIlDc=2>LHz80;Cg0|j#Vm(N>ZVb0~IJPOhcqC4qi)s<=!vC)8IvV&jVJU)S} ze=Jp5QI)~!J5PJ#SHkL((l?;=AZb35$HM(vNj#^rdv0_+hA7ug!M+t{Eu~Y|O?(xq zkyDUKIF0J`tk>n4;(B60{ufa*tw)jOG}1^j$n*E7Fqn4)c$YrOQMNlHBmxHPnERnR@U@fxCS!0>- zw=kjlcwyYg;3J5Q zhA}~S%8+%1+jH*hhZ%$khh|{ifClaptj9j!ia#9sjjMs1sxhs?0rM74%VI6`iaw)y zv8(CV2cFRtXKPQ${G>@#5d`St&B0e(G#qD?!s<%3OJ8LH)V+bv9aR`h!i`Zc!3M4D zKJdfvg>$KvD~W+F!QsMr5sL-Fi?}`L4Sg3AOW`7{l;J|efXvW;Ii7|mbD$30NcK)a zi5Bq@N)nJVDn70m%QDb_U}eHgwK%Dm58?K(?YV}<^ML!rg9`MMW2uE;l%szxGc=!I z5eOV}bZVJZ*c{l0LYIWZX$pf9Aqcw(Y^Ly3ht-pe#H1!ZO;00Pbln-rnlDcpZjEHo z{A(oZZh0=1r%RqI7O=|^{6~I$#b(jpOoiTd2W;EPI>N< zCw(zSvYwIW9(gv(bDun$QeJDq=?D8Bh&k6FRv%5$Z9pFW>u9N2!dD2R2 zBr9K@h4Q4ylt>n}k^z5t&X*^(5&?gC-Yrkkmys-D*hp5Iv@=zn8F+HWs`YHR*g7XV zLw|dWE6NgDfa!)42iCH%Yl1@0V`)>o$(XcO%sAn`L&vYpNB|-Te%)Y{5j-?Vc#%B= z)k^m>L^~g2ap~;?hs##?2#|%*QW!@gb4$Mi3jKnuwT70f=`V}AuT;x58be_wX$+cy z*1~o;IQ=lxaG{X^v>P1^fLDk^p6D(>6FU_fkKTCN)#`U|SB?KPYX&|R!$=@{Q(36!_R4o-iK(-Ox2_676c za@}8Tc_!kIjBavYyK$7aC1K+g-qwUEhunXdIDOiM7q-{DX-{l6Pk*Fqz~_`M_e&Qx zWkzfVn!fVYMeRQwde4au)$4Pnj%jy0;rZBKZQVQl$9Fzw55Twb<)gbdp5?v*ZMY0A zVEy6BQB#huO-y`iNDXEVfX|#+*%pZSl z0E6&cjnlOb|1F4+S9@@y@j5NI!FatR=r&&6!R2^$ZTn$?slr@w9oWIin{W~=*6s!f ze%iQ#)ifZ*z~MgSi}n98Zv2hn?ZMH;>$G6xu->XWf_=uTI~c_45cPKfT0cdxwaqRZ zh=bh+0geu~=6$3;rT)PI0cTrq6A}gjorG(>yzb%a*W`5*UsucP3cfCt*CM`tSzgEU zbq-z|b8M)T1q`ku{yX5@7ql}Y=0yf`EoH8`(OhhgiQ$hj{KjawQAWVIGuYM6{Er5E znQkA`*`nzP-%a}w-p%lnNNMC$fBp5{XmGLC0x*5~r)6t zb|s?x^%lH}KW|$duPt!p5S)*QpEedU`^F)%Lq|f^`6R?Ou3)OA15^3yd!;@19$Mms)C?I+d?Ym&`?rJvm{RQuEN?LGe%iQ;#auqP805dN zX*@%Vb8{ZAR?Nc{ohOX~NbC$ajU z{`dI$A2+_Fey{OGJ3GNN;>1VUn*WQp!EHFxx4%9|=HvHYkomZeW&9|v41Ya`rC57J z#dkCQ@%VVo_X)v{LwZvmBu;wkdHt)7U!BGmZJY!T8(&-b^(68&PCOTdPKzrvuEBr? z%U?5~{6~y3r2GesFDbvm_>%Icu>1#E{&9ddu3Y1l`*#hZ8YiY9(cV)Mf!h}R7oynt zjQ`e<@jk|{WBl47DpM$SP=70AG&);1* z3y!M6TXN-$hRf=QcayVbhM-aHA!f?$(Yp75w{vdfW4;A{i^xeb-v^slJIJ_eOI zPp#yKKRzSShTR|6uH6MD*WQ1^okVIyrYoPlyW&|?yoMDYLlXw|?uKDk9M^`C*AWPe zKwty{BM=yYzz76JATR=f5eSSxU<3jq5Ey~L2n7DNA#i4XhvE!?uCt)qe8wgx_=TmVxD6^U2E-*3P?64=nG^?Vq&2!oP{JZqomGV8IP% zC|I9%famiWPOyER`_}uB;W(`S+n%l?y&HkR2n0qTFam)Q2#i2r1Og)v7=geD1V$h* z0)Y_-{C@@ki06#_8-c(G1V$h*2m? z3B=;~PrmQdBQT`wk$v2vX|Ch6=>bugteA(h9EE?Zvw|n*K6-;e> zSFI^uv7##Wy=KMgSUZs3RlaJ8YvtkreZRMSRe9xd_Fk2F?fuuS@KoKWCqmfLYZfhY zyH;1Zm#>KSc`4fOy7!vN%U9hyh1D@{ENsQpxG*HSK|b{~%(8Yl@(xI&XVKGCE?!bD z-H88Q#UVjGfES>e7mT5c@tx@Z{2ddZ5__bqWPUL7q9VfR*6xd3}kBK$*n z2wSBDRGu}JM#;waip6W=%B)=Zz&$ILqNQSx6$MNgL?+AW}@N2|xH-7Q|=0CKi zeD?BtBxv61W$v|$D`gVR`|`Z`4ktvG9W%;GXU+dI6U>|LG&z^Al=vcG7$fbhRe&AV zIU{btqGOp%KLhAt^{Vn!Zu^YI?(%zAS1#8V3FBtZn^lOv)7Pw#zjPeOUt#%*ayN3% zSzTJba`gjJ&Mm7emz2joO$!#UFcly<^P`ETdH7uhm3;ndlBekw{_(Hvc=p@7@0k6) zw%=9GnRnh#7`AKw^;2J+vvAfU#a)*)|7PQD4C}q~D+TYAA079^IFqUW;uJc2Gp#x6 z-zuN3I67`$kLhm9V})}VR$_nqxsB$d;~swA)HL_`%~vz5c!;pv24WANV&}4@=g+&HA@l z|4!Gx>GqWA)Aa8&{rg<~`&|7yN&hC8nf{~V&(YH*=BxDF2bpi2{++7-1;{0w!_PD@ zP$2*8cruK6*k&Ux{vE+4Qx1M(G49NmkDndCAu`q=I3GVdenUhf)MVm@ZO3n@_?3&+ z6akx-SK7ajXP;9xdp6P;|6DgMTvNIF-pa)*S1vEFEMK+ofh9LCym#@+a&C833-4Qv z?RMd+wX5WF(lu9KyKoV{RxH1Vf%la^v zv*yg7eC?HXJ$#xy)~HEe@~kK=ubQ#ivr5oHv=Ha4dCuwcXB62d+2>X+zjyhn#VhP9 zRU$zWjS?soFW9-Y{vXyH8ifBw+^#w@#A*uywYJ+Ga!$1n81i@n{)1h;eotiUwAu+UUCuc&m^%%b^R2yw4?pY6B>p|c$&rrG#AlRv!Aag>xz$HLeD zmsaM%qP%1v7zr3k6A%6mpk8=(ew3WnZy;Rk=ND=}`Dm&qMMF z)R=u~`8}R{?c5~npvB#bm#?a_V=J*QBd$g%RqA~3zZICA_}RW!VA}9(!T)3LJpkh<&c5+k$qi$J>878H zT)-B0r<1OzSyr)yZP{3|O)-d*bh3n{yW{TULW^k$Ng$X2p@h(T51}O?!PJn18b}~O zfPg6pZvuoKApZY;Q+D@GC&@tG{J-yuW;HuA&pd6O>9ea_vCpM*#ofq14*71^_~W@^ zSKtlg-8|elSv=B_Abf3jB0b)1Z$yL1Dj%Z+7pd?bP*-yEDv^i ziIgd&TK{+VL^C+N@I>1ZsZ6ZHv$i|a<%vr}OjOe~#I%>u_zo>kpzbQ33c)~Q`pWF;N>m2g3uM2&VI zqu8XA*noP{vI0D*SQ5=Gm#Z>ff8G3FO1FGmR2h9+!Dnt`gQ@Z?MNpx$Q{1B>Pu zW(k-AHchkZBsyhM+04Ce2MzJ-*JW`2l+kQGovB2xr)fo#rz4t)_Ol>p5}?th!=M5| znlsvBq7OT5TQA_o$X|^m@kD&~-0lQ7{T|F=u{f2>svO{V0N-?3#ay*-&y4nHe0s*y z7W4FB98@(kyM3lDixms{cF@<##*s~}56~QZj|XFv?DDfcaco75m0Tm2s~3@XcRUZe z)6ren*p*>~rd2$L&2I0ACDt8|NM;J}YjD?`4$~SOJ~pcqLM%(;Brc+WdaP=}d@bkM zXlhkoFV+FZaQ0Z1!a#?EvSVNzEJRrElZ)D&kvboq>^bqi-ZodG(0GmUHPN2#4y;dB zb!VWk-I#LF#i9iEZ`}~uw%#*8dJIl=JTtmv*t%}cs@`?Q@mOZ2tAMqMJ&%GqJT1kZ=3b2NZgaFnS=}hjbU8?@a19da=^j0M=^9TRU^gAt?o{=8 z-lsQbqAAacXeu4?EQnKyw5fIu%S&U)zP6t3_AkX2|BSz7s5AMOMmsvF-jDMptapOf ztF=y7boBwmPIoF3@IiVo+T zBDS)(yFHai*!8+SmE*jBbw>y?QCDEXZV#!vM%$TQ*Ka1CPp`vU+Z!59vq$q~5h<7#Cmsj76wPd2Bb$)d9!tQj2V3U^dVi=ea z*SSYukL#%8Ypn>GqUm!_EL~($;EBm@}WX8=6?xq>z4Id9AB&O(rE<`B>7lJ6!&H1gNb6y<}!U$ zsz<|D$*?V>!sJ@Tr$dK*T5g*T+tvEHxLvKci&yn^OZrvv@sTL*$SAp3?P|U%?90fu zS=^?>KAuQJuQnaxtXuKvRP;TWluY+!?ACHRdX)Zs8O5hfhgha+ zIYv)q&&)cN&h)7A`a7Z$Z*4-Q+jM!lI};L)mLNm)NtNzV>7G7C*QpK(i!)tHkKPVt zU+hgKezHf7FU6U4imo@Q?cUob^Rb@Pcq)IbuBXf@#lKgb+ZVU>Dtlr{OMEsDHVqDg zY!Yk^Yzk}!?BZ+&Yyzx)Rz0h|4^_?TW>vGAS;eegRxPWQRm$pQRk9k};8}gFI#wI2 zjMcRYRmEyz6|s6)HLMm^39Exu!D?U?w83NA6f`?cPIJ@LG&4<1^U|~&!nj4_b}kJQ z)4Vh-%}SHfoHQlPNE5cfd^BAWxHK8fMN`pCG*JqBt6yC<*Nk&pd+s~8yVEro($H`> zUaR)pE3tQIH{2{+1f4`1CTT}zU|O470dLc@ZgpsA~r)J){~Zfv;#d? zFLDh%)&lCGeLLn|0^3qCIT2#9kM*GtYhvwqvVbtrEyt^LCe_D>?Fdm^A&j0pp-i+L z1#HOdNkrLc@hAapF(Y!yi)JYI09iZCW%1SV#M*d`7Attp?8I4Sb_ z4@Ok9$fp1*t)rr8@e<*FctBk2cfm#7Nk>OG!16{3K#=gI^^$t-5~P}Ime(_)A1K&3 z`ayx6HV*)dlz?I->;wLs3?ASoIy+kp1ARDel7jqkq-dw5n%)u{(6qP(IQoFS$QzJF zGj~}ET|Tc5Gy#@Q-QL9u(J%dOyS%IqJ4Zhba z$=z^y0t~i1wV)i$Qr0t!faXdl*19~brg%B4y3$%tH=S-8s84lB%(74!qbJKjo;D5Q zOPhJ>55DGrIEP5$%KDM5&#)3piaJEYav_$ZYcEGw-_U?RoU1gV9U^RLLAz{5e_IR~ z()fia(SipB3m4al`sL_oa3nysd@zk{QH1gNIE?j==skov`|P?^?I{+bt7GG|1Y4f= z)oPhHqbNNK=Y;mqCCnxduUqf{AeQn>FT(C;hIbuHGSkzEr-2>Z{HZ=|pU+VrIhJ|ws1q-{;4Pn399p@THM|%mo7eZYC3-N~ z#1Z4009=4JrQ3C?wI#7ShOx`-zRLKYZkNwb)9pMG$8kjd`6ljCfYDYxlqu<7OKvjF znnCGPc~-(gU_XYpUgWY#oiRcrYmObKVkjkP@d>Nb0L=3r-N zUI8PSsBfCr*u>t>Cwj~9TvkGDc+;{)P9B=3bVf#cJ)R=yu|dORzB3odb7me5xzBg) z{!8R3I*0KYPNnztH1tGq06I-qIa96kdJ=8Xo|$s<=Q-{;&rtZaoI9i3X4%_Gipg@0 z$hbWJa&L27dHLJm@@T4?N9rz)Sew-LrMQP}z&mFur!l>x3sbM(Jb9Ru1F#QuRNcw` zg9(@?xU=v;1xF$5LKr+;Zh(CyHk9#ZIep7fOA&mn_G$V>o^{cIV!_wE$~AqJs6osx zN<@VSi82uuK~b5PcfFX0_bVF29K5yj)uabNSBm$3z8duc(I{%gd=dG|^j}r(|9Nyi zG%pKp)D+^)nvr6Z7>&1Vw!!GME#4j)kC$n-#~Uy^h#kdFVrQ|7*j4N%CW_s~9%4_i zm)KkEBlg8xGLyt)F-1%jMPizmE@p_CVn4CJm?dV5Vw_v4^^4Q&x3w7mmjf6uwjDH} z{Bh8T8tedlav|?(>QbvPhfk@L;{Z>T(UTm29otoWfKt)zYW0^uc#$>3nrh9oibX3* zRe~~3vknlYmU;(I2(FNX_?|dZY?QHlx4mJviFrzJskqF=|F9hXi^URgkXS0N7T1Us z;(T#|xKNDDDVY$rLg3!wpWr_qZF>^(FBX@$lxP-Qc)a0)IMKJoG9<8+k&ffRLcB@$ zd>&2j7JqSRDsnXK65Rs(Yq3hiMXyL`U5^s0g*;Hu{2A;GpU)D^b1eO<9R9x*$BQ$F z;&RF!TWp9LUI*g8pLLsyf3E(<(qwjyI9Kxgt~g!uK0=2K_7*p5OFO`y=%})^N_@x3 z*0Fq+{v?m3@s7Al(~om3;b!}xJJB!x5FkTa`uZIHhloRQwtTpF6XUpQ)5^~M*o%Sq z-z&ygPEC%pvipp&w9{X9)GgZN7)h!o*`{~s*XC(y<|yZ;WX>|w5!>`}@TN@@^G4m; z6{X2h!uv49e!i0`j=ElJf#A8&))_Hwyi_z){fAvDVL%)lw3Dtm+Nn~ zZ53udo~A#O(r{AP?z<@$MTDzY8h5VTQeRKH`|$V z5$f<9SO=-8=dw+!YefN_`s!c5LOdbu;E=mpG@;AH z?+54$%7XcL8r%L3l*Mv(c63lYUmBFB(V@RxmWdZYshq=;It)CADs0136A#&L$+N%w zf!hq_=WEeMUT(OPw97=xTw?@dW98kz@`t&cc*2o;P1Agco6W__NuMCo>Yk0cGfq5q zmbn(rMRG6VI zwk-|!N=Q{ah<^Z5Y$jy!Y$^9*o&$S0Cx13pFyF~3K`qYzYH5IJZeRdeSrCJR-AkNQWRJY zY+F~H(15vNHNk%FFF9eKo7IxNF@&xlCeUrqD;f#@&;X>|8g2FWND1%<%8hM5%p`H3Nu-7C{rpR4M zV5qK%7V#DCDx7ihV#>O;K?p=bLA20;P&Dym=`Gt zC54i}P+dj_F%+(n=Ex&7uCFmx?nUlO0z-9elGtOU{t28$^P(JbVfbr#KOSewyp#sa zrB}E{p2;JWxIe@-(K<<}i@Ai7yOO|AU5ZjkAhyDE%OmuA`cl|W0?S;apy%btBff&2 ziRTTxm~x;@ZNzg3UJ8%7^a?jy-b9N~2lpJDee=2j7op^?B>a!0H}WWhp16*@ABi6! zHPIsUTzwfGoRAds*NN*Sz2ZT9g>ych9q?kxfiiUgo`3K%yhw4b#x?TDmHFi0;9iL5 zCcF%n^TlIYg2FWNDB~{BDcoFngkG#Kqk|KYyOO|AT@x+hE1XMkzRHU!2g=l?IML;$ z@NSV5JpUkWt~^4C`?SQq3}-LACR#5`C@GW#hU!vW$(<)P#LbpB(IWI}ef=Hz+1F+G z#2Tr1DQQd*U%{@y851w294J%QI^;YEs@HEymvav-+C z{fSW5ACM-L-05$Zp(BsE^u+EjkI*~xWpr>tQqc1<@`Ocv1^c;B7gG+Dse6UG6drTw ziLEf**n|>W;XWeNWw?-no|ju5WzZA5zdS-8)t91m-$_Bw%aKQX1$!K4fxMVf&@CeO zQkbN8RO1?XTO{2U34H>)eqO{<6y{FuN&-V8PvH{hDV+TBVy**a&T}|};AJ=|2?|%m zDNkL5I=Ii{X)G_pMM-#7rd6EsOzv|UH&-4xY}VH}EBA6FOte&-@`yi9a{f@Li&6+x z@^~MmF9TuTW{IsZ-Pq(o{PF!RLO%p0JugSzcqxN&R8FouBiDq)pNO-AZN%+coNFXf zW3nJBZ?uF(%T5J9 zLe4DAA5*P@f-^ARt_S|URvDnRmbYM8L8{;z1s4_E2a0zAGuKN6y+~aK4&N77;C=+& zEVzBkHj?k(#M=d93TGD{Sh%7vQ+Pq)orMn+zEU`H#N-i%x_@}Ui0w4@g*jMLz@698 zBfdA{hdS@>5q}zSsr9(^&k>_XP93?!h`S0d8PPbhb7Xqt#*ycVzlo=<+JZYq{%+*i z1<#LodF1sYJ|FpD!K6{4kyWEUvKEZ$8g;;^Ge+IMW$MV=w;Tt5{iug=f5^IP)L#l6 z&1kV_Mtv$FpN@KC#IB>uNBc$`Jo@%6hXVWdEn#qojXq191jv07(kAamj4mv^X7rij zY_0b-*N-&_PH22`e^XHAGueHaRpBS;~gpe4(qJZ zOdV42N96so@I6g+`xdsC-K{;Wa;w6sw5pJ*hM!~ASaYpftIn#o8mxKNe83v51Fb!+ z1=d1qFKcgWk=0}^ww9n>EVY`g7Hb(W=$2dipzb{~wF39a))Z^HOdV_;g78oo-`_gS zT4^0_9bvUvM_N&<&1$zgteDj)a}_5cR#{zEw{?`Y+Ul`-WlkLTgp4KS{b<}%R@%zQ zl%aEnebyRlt+mctZyjSDYaM4DZ=GO$!`fh-C@D^|W?3gAHrqPII@S87^)2f(>)S|w z$NH{yy5@-%ZJjCO8?Cc6?EBW));T&Z#JScFtn;k%W%>f^LWDnrzX<+E@E5}?cZqeW zbs18ZOUM-(ex-Glb+vVkb**)sb-je$VBM(m6x~fo-E7^0`>h)OV}!R^Kf(QW>kbVg z?w!_M*4;?|6#i%MKez6|{TJ3Rt$Pt}vhKtEe(M420E7=(UfhLv$nsf!#2$wKl~rN| ztVgV0%bYTK|Bbwdt=}Sy$T+D6b9~2hTluR+#Bx%*;5{ql_?q`Tq;?YxI03A~nG}AF z1UubaHv;F3BgK2-AIKPuH?^4J?;sT+wJqMd;@eoeS=n!6l}RSM$ve+-{4&P#Ga*l* zm@LA{9O*v;y~uf+YbbhZ^FHXC#9vVcA)+|5bILFWZ}?T={l5y)1}U_|H1SqmDPJIG z>$H3|FFlxVCHhw$1KZL_J9fafWH62y5@Y?480&__SUV)f znjtazhQ!DWiGlxb8=!9)d!&ZMIC@BoKj*}N!gSVV-88D|Br_K3zk&5HzUC6zCEBlNog_=X09(pHu+%qJPO+#Y* zdPs~v4vF#PkQjd$665J1FX# zw)6b1aI4lGq}?V9b33F)_hV^RA?}P3GQqdP@f(-&o_kvaz^U-3;K|N|cn?Im_r*?F zGYQdd%N=+vN(!zrPq)s5% z0ApuW(PH9=i|ul``B;2lE}c^yh^aq=C?Bd@Kt%=#WW;2u5O8McM83Q%3>TguB1o|y z9}`nNCB!`2HyUSYp%TE;?Cc1+DrwFg0EMrzh%3`BBBiaolg_gEqaj87M9)H8cZD zG5`(OQLq-KC1^>+p+E$bKu^6?XqS>uGLp<>kz`6Ks`W*Xml@H?G>e(Sl$s%%%!oi1 zKtmv%jF6fP-~l8v1li1_E|Lqg>4+&=XiLi4l8h8H3Ntlml%tVkDHR9FMnVrR=pKYU4KZZ@t4 z*ixlzQyP=V(#Wu&ylggZg=CJMos}|B6WR=25lYrljS@1~B>ue`xdi8rN^yf~gt8lJ z*b(qT8MBMIl{RwJ$R;;%%D^S1YUSMR2vV7AWZRK{i$+EVCxj%WkJL#@l_CkJGl`)z zGU!=GlDrika?UA>&M<+r2qkJvVr!{J35jYFLuo{b}!m{CTELbgmtVS z3~Uu-#73lWX3{YZr->Mme=5`5C5FSp5V^o4QwW+T6H*1<4R;dS#42I(B(BL*oXFld zGNIFH!_XvErW-@$NPI&?kYYhTCZ>2wh*8*ZC!tL&6RZUZq1mx|CrgfLGGIbGIdHfK zGKr}(-Q$?kZkZ`lZjfRj$4NOVN>U;M$r;EL9q%Szu>uB>BtCN(gHxPTT-}N2M$im3 ziptBvFk}b~SAu{e?@mk!Qy7Vg7@=cCX6P(~L@+>#LgPt9B?=HpCqsR6X=}5WS(>$jOKp`PsW+r( z%_z}ajL`9}Vs=83%ar1RC~&e6B}6h-tcl>TQTPx?l)8$wBvO(kGnJ?A+2ug?AnHn`r5sB9lIo)9rX-A*gi=Ub&>%QEP(8Q08bbw= zhntZqqf|~xBPCHK#3;OV*0t5eU@R+~d=QZeIqI_cu`X1jBhLTN>MFh6MxlPvQFZEv z%jHy_x=S#MA~A`@im;0Y9Dt-Pb&Q7*F6#mt8H&3^HDXl4Fa zF_2msVg+Wkuo{?2hbZe4NmZ@HmZDX*!cah&Vc#^22uhGbC7Hy*UFN7<2}6`XLn#xI z9I*o8nWbt0k>pL|BC|j`ohG)+sk|%J|c}pimd3ka;E{VFgZ-gf4239pxETS5tZ_53!a|ltLLgFJywOQi8M70>lX)6XWh$Nqks-3BLsW9NNQ9U& zoXWE?NT6IH5tMAzX@P?rsazo+9+8HfRzfI6P?9E*sFIQ9qVl9nD1dC$Yq!V}D^-9_ zWSJp*vFh9smw9d{S@Wg`6H^=ocVpVTnWf}wBo#=Qjl_tffF8{NAg1_!WApY z4ji>i%GN0fvN;egGvsmPS5Q?;cj+o2QUGF(G%BEx3D7*NX8Xw z#g2KJC&5w$-Wid|M36BZ(Rl{fRVoQZ3MTvHjojeiVLK)%crhXz^K85qSjg%04OCS&+6AD z1vqL6reVN#TT$h?FtiZ8K65cr%Q3F=OiZo$B!p`&Uc6B)V3`HENyt3O4@gFeM05!O z^IQY64@oC!Y(fK-6=Y1ARo~J++DOt=Dwnnd7b%7jI&DcEH&B_>m_{pwZE~_w8b|_3 zgfyun4k6}J!n6{K$RxD3q%=xMN|R97O80Dybe$?`8qEp*O&Uq=_b&c?u$Pv^oxBi7r*qHwjR6L=$W}&1{?F4$7L9dB z)l?-iZfh$uR35Wsmdchiq%f|(jZB^liSIZUo#tVX$&LcGMk?3NWW;bH4|3$)rjiLw z%N!zUCwZC#Lq{FSh1l9@ekQqfp)HkiH7hBf8MY!yl*-l`XG_|M4ut%t2At=IA9`}@}R1v?e&UEnXMD40{Qvf#*q6ADf$IK5!5_^x$!!A}b6 z3!g3Q9`V_TGe+(^>c^vMM_*C!kI|QnS+dQRZEhZW__pK5{e0X}<9FZgk?q!QKW)PA zC!DfF$&Rn?c-BsHc7A8)i+5SH>*u@Pu-l;%kJ;{&i6eJEVE0>he}4DF_BeHqQG0s# z{PCVI?74EUZ|*gEZ{ObY#~eEHTRTk~f6};fC;WcohFve*^*1}dGU36|2aSAX@3RV5 zkDD>NWY<4VDA*~m%OexsFL-sQS1s>^Gxw?5_iy`NOucaGtfKU&Rokui{IY1tv{$EPri;n9O?zOUm-iYqO8|M>9HJ|o90ANR%N-F8{J`;EI?Q}EpA*^|B}LK7!W{paYH_u0JfwVs6a=gGH> zduGqKMf2o$C!Mt2efyN}*tgfmBTpBJvELfoJ#+bPO=Ett!>uzPEcn-iM<@QX;IJKw z3MP(DjQ^}~m)(=omyY=7*bDZIO!?;MIaAKv@$~5nr*;*6xbNqMzb^QE&kuL{?LN2c z*1GrQ<5%x}-1wTYUyT1^mkX!)#~--+M|-T={&?}}HWzI7%P}|w8g|1L7`DK$1%@p! zY=L153|nB>0>c&;=9Lb4?f(!Cf1%&<`hNk4vn^kG>Q9W^l7S_>sjtAmLE86 zZclY5GoDN$;pvH{R>g?pl$~Ye$G5c&@Qq-66F8l5if@;H08ArNB>6S%#mU-4hxwTH z62@EWV(pL{&H6Glz9U?}E?E~#X1eT8B7e>A2zSI*#o{r@Nu=_9WgB&`iYQx0Q^GU3 zH`*Pa%r96^Zq7tg8GHsCUv%z}U$Bn$Oje&Iw+n|z3qCYG0IF#?y?yD72TiUo757Br zFl)xeAdeK8EBPvA>=u~C$g?KV-Qh4IDpQU8CVD*D!|$6X@yYX)>U#Koy8a?}Up$Hd zBaxKt*`as7M6G^zaY#OG`0jc>Mq8sphg11EYKYEgPnwM}(b?I`Pux>O*Eg{jcXp;@ z8M}2jd6V#=_GJqf5?xeRSBp%MH$d~miaJEb3x{|Do)z5*Kcl<8C)SHkW_$Mc#C0@1 z(^FB2uUYr?)Z**&PAx4?sutwISL|nc;)#q0qepj#8g-Mg_U_JZd|{qFK@T$EzcALB z@pMJ;CHizXnm)dz9mRL&SH-1BvWS9-`jR()Xw!CItGy?qsWeC0KD66dI&XuoHO&HF z2S=lfws%o=G-CUk-#)KbwHbT}Jld9!eZW>vMw;a}*cFl|n#uaMy8cK#1{Qo@9@w$? zD(Ets#*wtMXXDpA_s4fm@uAac(}bw16ruut5_~0mRTUu&@mrk8KpGx66`(=RH25Rn zi{KA{-w%E^{QmH1Oj_|(X!+_B>{4DQ#`a7$NT3H|SV(0-QAzO(D^g7ZVp$whD27>B zCx%Ky{dJ-@NtU9~#+60)VA@kP3I)_R)D<4@>ci;xth$Zb7uTO$w~>;K9sF9n-F}%d zIVxwJ$sR{BPa@v4UN=3A&8#&2p>(P@IleY6$MoWOI_(;$!Ap+8EgaG-Atl|;Xlnxv zqf{7ZjK;`^iPz}}7@zB+nP_wOF_KdnAq39=M>(b&bjf+9VlD5W8$>#Odsue_Wg_!I z`rf{tOn0&;=E-#T#?qXPSmJcF7q|9=Zcero*L;FOwgc!Gv(Za25~8#AfeXvu+nw%> zX4<=C*ERhwtNj{=O^Nty(~vZWwB6OY+_Ez#7rD*7G#YPaq zRjqN@aA7o^VJVu|_qHW^*dV;?I<<3Fv5$sy3oAmS~*1|y0y+2Q%OMnU+;CJ?%-_8g?XN>G<@FM^!rQ;xd&Xm!ZwWDb(8TOc#byjMUk7X^)a+ zXM*KGpNx5kn2Y7EUn6L6dn8=;(5nSn*$^X4*2goLa%Wfdwk8{5@phAE>(26fqCFVa zJJw_JNkgf&1fsbE4tOla82!qc| zEPCXizYx=Nri*&HUEcXZQQBy3c~zBIErjvf#55n_9VZypGNZI!UcZES}6P0yp2=&wuoXc>RvM(b?C)$q4c|7b23ET;)Gor! zR97Mxe|h#eZ$NRd7w$_-V@k`KG1?R7Vm*7%%)vKi%EHopt}~Y6B1evhW;uV1JTc<& zrXCR7_Qe>_!AG8HCE}}O)`M1~c=!6b;`}S-%Jk<*ue{AkW8{wMe)aaa9ww%xShhrVrO4mTr3uKx2F>61P%n2cc-xy z_SEjbzh@~<7_hPNEbMMe;UGmShue%LESLvP1uH#FIUTXKJ`@Qn*Jv`?)2&2%W_u27 zY*8aAdS)yhZR?43@z;fA>-t1ritFT6*c@Pb;}pjlL&R#JOnPpsQ_aQXvz#L zj54y#=+jj$y5N>5Jtbj{QO`s5VjWyJI_}+S#*=6UnNC#)s^r<*>yEZn9kCwgc%*gi z!o{@1@vTkipH^x+~XII4&DXeR2m$qP> zgN1RV+>naNWqCahyd&m(-f1-v4_lEwwr`VD16TRQ?n5BcM;t1-zKVE?8v8Jf;Z)v1 zFM`RHKB(8kYFGP|215NgxP#;IB!_1lo+4}rdQd%{q7H|ac7@%#V$q~DY-?>QQ`;45 zU%f~^ftX>;gPjSdG&SjA8Jt|)(;*XN0N0x295!IK=v*3;#r7O`oM*-)JH@H7DYmvh zosp}!qwbA7R2|zGk31UZH7#CR-@34|soq0I4oVM~eK8!*I#^5V`~8eO%i5S;&T#^b zBDo~NbxCSQ60IV|0};0lE$AmoOPJHUt|;kQ%LSDhHS{W^2j_r@nsd5Ya`0>gdxBdr zUK884s41BcHTKw}#yFna^Qbx=TZMkO2K^{c0|B|a-czyJS{b>TQeE6t%|qf2-Aqu& zIckUR zj+rbc>(6BygWndzsG|DG-~>6g@5I=U+bh3*dm-2UjYW21&Qxe|8$>1RZc2^wnwBh=jOep+1S$nNr=soRStECOn>e$3QM^noy zwQ-o_8VvK%w9c=uSu(e#Zb{2hTeHFN>YM7e3a@E#UA>J6jR)g7w|-t@lM8un?x^00 zM+mm*9Yl^L7&7J1DF>2>Joi;w5>HYMEe^WS_;uZ#dO0)%{^GWyus8B_^z|mO>*~e% zX~v!b+EbbAio(?1*T(6`Q?zc@z-@z-hnWuZTQ2#4%}KP&IWiZ2tHp_9i+Vba_u#yx zE6o<@QL6?#uj7KjBWKqs?ud1>}6Z1TQ33fO+ zQ8<(NjLCTF#m8H6i;RUG4;F#W!xb#|y=I=7FXd>H7l9f@+gYoQJN%Pp*{Gr} z+8f0zp@%FrA$4`*1bnDz$<+s8D*2pK4R&TUAp`l?!#%f|SuAIA8+cCR`1jTM<{$ey z+j|n}m|Fi~U7xl1+pm{TqH(z1+A?GMO7C=IQv)^+VfK?tq5gQC*fqu#Yhh3fO>H7o zkHtTht311+)o|X2XB8MAi#znI7VYWYSNKah#uXys8F}{ZCT&9gXWrvY4dO5GbWAhs zJIF~-TiPH>;OR{Mq-K?N*2xWWolG38-%?4vHz_jRiVH}%@$e3fT3eew$1$j`ZPn6P z5>Epop62Xr7FQsRi&dADtmLgZ#xoyJEgpfk$2<;arA@>myKxa7G0KU&sKedd)~3}8 zz6PAop;9G&+kE-=Qgw2Zl(Umkx~QxobnCJ9Hliq9WwzyV zf>w=sEc*ss4Hiu}n#CeTJ-C-+C`WuVymn_K$Udxyb=b6|ZB)w}Cx(VpUlL0+ z2dxG>ag6BL`A0o?R@uWhI65$esppq`rXzRiSXn?BbwJMSVvnbh5B{*kBV%q*aJ-Pf ziy*VO*Eh#_z0ve)xs^|2|BrsD567iQ`4o%Wd>k~S5~voe9X)N`8Pb3~n{RAglq-se z$1`^PHtk(eJO%Ys;t16<4NK*QhMDDK$FsxZiN89sXy;gq2~6v?9upc4(&eOqg#}=IRd~jx;Oz|)teU}!WYCfvCSSoWXydb6c=n_kIfrDvpnzQu4wm$MU<}N8 z<*IcJ;yQRbrdO}1$Qn8H>k8_8(=J)gn4wK$M#5S>QkZc< zuH-p9&;ahyp&vg}BRLF#*Ig1STZuhdEUnIY{@?949+y>yj?Rmjb=`{Yct>I_+NC`s zA&(QP+IlrQhpk+{&>^3PUNv~5XH9HLBH5R;;R>c$N}!&V=O)%E>Q2}Eh^@hzwmx;R z*~-PIYf@#uOr6sp*1^-Y;v7074>n{{wDu%cwGqBP4)25a3ap;jQI$?Ceu>rEwLY1^ zxn^s7w2iC6o(`3d>`vx)DzLyiRr2lA_E@)ki5Bk&iS|TVpxue|(JA>>5$2>g-y~#6 z+9(ki5(y4q`P>;`83HUrsOjUodI$w}G(u@W3dgmkJ2S=(ojuW2JSXzT5MHR`gq!?-J+1O95gw@HCjY%> z8^p)(CcV!e8^la_lkRz`L9B;2=}!?K^|F(G9r3qa>2qIc5I=;c>rS`JbM1D-XY}D! zbe?U_oY9Uq4}9`9OMj{QU^ntxxs5XwiZs@mF+7&YT5Haj+#ScHm&O|@7+|sCn2W>e z7}lNG7%TkQRjo;E_GUZDHayz&;Bl+78wPW@*3O=^5!aftpOcRtT#^-U)zPA@z54W9 z@!_3z-haP&!Uxazi~G+Lufj9_`K)=OVD>x*S;jmf_nINhm79|p$HNtP}0a`GumvW2PP%o@6-} zerJ8FE<@kH^j{V-R6n4kopBk7OgZrh{2axXaJl$fS6T;af^gz0CVx=*|GDPRanI|W zC(7XIn0^xRKj?HigSUs)sI?{HI6Yk>2iIsTz_V zH%MIW5o7U0->NRW0TacZ8P9&OxL(`sB9==*hn5UTUp62;O1>5JrKC@CYqq94mEns6 z_D+%ez$}537Z^}pt9mWr0Bq@TKZDgtJ};f*@5 zaPh{=#_7H!k43=+20!XNuN_} z?p@6KYfv_edaQiEg8#%OU)__3Z!!1VN^JA# zXlD$^aO{|TZ4PIXv3C656P`=+wKzUO8ym-qPIxqCck!IpSxnKh!nxVn8>J^1q#C>p z)!vut#(|}pl5qTIo?)wZs93N83Ov?6+sZC5h6^aURRso%0SkD7FGMB6+(OH%WDv=uufJ#W)SobN9`cAmHvp02qsz95Hw1b+mN#HKe+m z<-Z*r7>zf?+7?AqHObVX==uZu;s^Hi)by=tjwKhjXPOdg>SEkFX1UBUI04bJS`Nj& zI^D@}Rzg}=#q2Wym}pHZ)2cV;A26#H(l!KaTniw|9Cu|J)mV$3evxK*I z@u{m4#+ckkB7bcrfd{?zQbj~t+k1_m_VzCMkAuF-N-tkDGHHKhrH{uGCXIYwPCk!3 zvK;jt`_Mcw0iN+cAbb&?4py)=fc1OUx+;LUzNhDjApEc!w!p9j{(CL3w7IT%!QbCI z=+^U^=H51D-l`v5Jnussg$n$SF_tWxYkToed9nD)<+Z_;^YE@Vmni9#3-JGaOIOC% z#_=L`PkOem*v|z1tCa5(t(1>CT!7+a2hWv| z;d>3jb3SnL@$AUMlYEjIUV->P?cyTf24r~i8`@IKzb`Lh1M*IL6RAGSb#3!I96^ksd1PQ%duRts>RKl0^y^4(+3 z>2Gb@e@>@uh_?ZFbf;;2x&9e9F#fGBzH9(rj|cF|a2A<2&gikbf!S#DB$whh&zMy8Kz$atuQ9-3cM-_CZL# zGZB(s0O3f4)d(qLG-2E2w;{4r`vWfBX$Z;tY=q=}F+%db4k3Bpj*z_XMK}uKvj{1J z@9JzEL%KGJG-!f7)jQa2cMaX{dk8_W8?Ayh}A6 z%X`Woc$+leM_hbw90dOr7vC2L!4t13eYZo%GE(0W69(3|9C&nI7k*$6{G`TX`8o!{ z+vvhOeGt4`U3j+-g7>5g@5Mpz-US}(;a?hGmVbwV%kSB&?8Nc}2Em&HJh}xsJVb}9 zG(Fq#$^qy}N1ZlmT*|t109@id>B4(t5Ipg^(rFAr^4t|6%R3bz`I}IUu{{SI*Ux|>sZ$n7ln-G%s;|SSzUqop7?!q1O+Z|}qv8Ez1Jh8-rqtyHS@ z>rI5@^&vvTYsnzIfGW(H68SPcjxhW$gmFB#p)>h25TB&~_knPp2hq9nPrOXgQC2!m=`O8WEJcFV$@>nmg-=O3bARYj%+oosh-=k<5 zgeUn8yI~6qTVU7%!xk8}z_0~|Eii0>VG9gf;D6TwyWoGx|J&V!Pv(gv{44NtKAk6S zg&%gq78tgGvcQelzwd_gg1_pslmB+RoQmJ=7yGh2IFj0lo)*CH#E&0K5l&9Q@~#=8OM_`Bh+ zgx?5%9DEo2!SHq32M|t$-x+=c{0E--Vl(`c@b|#q2!9d$>F~$F_rR}&pAY|4-F8@G zz8IV@#_WXO;e@{fj821p6c6k^gFhAVBk>S5Fj|N!#^9MSektoA_?;h^Z$FPZ5QhJ5 z0e{Hb`5`BV7&z~deGy}@S*{7LY?fnT$Y5C?9DXO{4jwin_O z_-iKMJ(3-SI2isc_}U%uEhp%=?ao4+2>%rPbFa>q#V)R{S#JN1+nhNP=FY?Ky>z#? z%73Ywga3}!7}@ka@@pk|kigB&3%|G0n&@mz;g`r_SfGs9qCc+@)NzaKtY26_Tg`Q}i?LH~9@EUH zA9lkQ_`k&hO>fNkId#R*D>nXhzStY#=?M2gcpAbz5pF=ZFT!;QF2 zMN`~cx@2>%D+WQ1=aoPuyO!l?*fL0E+FIfT;?K7#P8 zxp%*z=sr;c;g)xF+8!h}K&&&K z;NNq_&veB%y5eWK;@@}0&vwOO9)abP;BV5L4nLS<Qx8V!0(U z2${X<1J(adN63EDf{^`g7DD#lPu^Gk=x&7UU#B5tf1i(#{e28V_P-bZF<*Y`>=A_P zk-i%tzkzlwLN=Z&5pF@a5#iRlw-)37(>`+W&tb=ev8~UyY$-*Qbub5h3kK-UE;3BHMNfA$4Urh`#}z zI-jV+lMpihWO(ME0#82Z(_$w4#X5Z%Lh5%VJmp;jPrSR}so&%9%zqZ1`4eFj+UMWy zE-jd2^L%8a6aVKJJ3i;4adv#k1KZp2sUPfU;v0T&{;nqOx#yR=tN4g}f4%4T0*qhw zw?`k}^Zuus=6K${_>ScM*WUEdkGkhPdH5GaukZ1_#k;?K@|>f8@a(y@+l@S9<}DY` z`SjjP>;87)j%S{D(og5yTk-p=pV-p4@4EY+o|Aa^mDB&S;n(wicJ{S3_nf+V+4S%k zA17ZqZtgvQ`rb>Q{^+x}Pq_Y|+RNTp^V*~Tn0de{Cr+!IF=4msKe>6rYY#p6&$_p- zdFK6(-~RJ~$DI2_eeBU+oweQ7H($E@YgaUkkL@A~nzUwrq_?><*___sfOVb%5Le)9hG zdoO?F@IP&cFZ}fn&+~kzVCj($7WJXL;;}~`dsMm4s*kQ5`|K4--ae^5w4?mx#b=xs z-|^%Rs~>oJR&4iI58myrr{1f6a{DQ#%-eI`jSpS(_v$%U-`U-B%gA2@zxj4`N##9r zk9qy~=iK{;H>>ae;)}ct|6p@@U)^In|MJ3H zs$W|5vvb1rH|_J|C(fy!I_2S4@A+A|FZ$hMs-w#ex$lG@Hy^j-&s(dX{rdrDjQZvG zPu=CSy6UObSN$b?)%3r9 z`!VfBwZ2U^R!sW#Q=yaQop-nR;@R>SPdj+boatxc|l+Bh2lub z(R=-F$_xI#H*P#MeD$|}xoO4oSDkeA<#+gB?YeD;YnEP8cgS56W)(GVo?RAL+Qg3k+Le*aE{A7`DK$1%@r~e}M%uNuH7^ zH$StDn4j7P-{y8;SFYbiOaLsO+km_j{6_dMY4DfB-wuC2{4?;c!2bh&#JX+7 zj_}jq=fE$A?}7g&{14!-h5s4+Gw_??{{cS&w%ZwgDtrLG0sdh4vC!*-G;9k!HY5B` zx#2qff3Hp-vG9xL%VViDel457d_UQ>&M`NN4X zKVBB&FQDV-{-=br$Y1YQaPdnC>26;we*qc4Z()A3Tz>d8#$5IL==|ne6MkzHTz*`z zG}E&zz7`+U68Ig-G`^v{0>7*sTarnM9aMTLeiNNZvBkpAqbJSJw&OX9)Cn)A$RDW3 z`%a<(Y~(MtQv$d@E+PC)cLlglrqvI~-;H=rjNia(Ni?s=Cxv<$=PADfmjyFP;VW!0 zUkcDa_s(Z8C{=A=3O}K0J`N^s5bjUFew!G?=kL+WZ^Eu}EHNKHR4z3=xnOCuJB?pi zw?A|F1#MrO=++Pe@XT^8?>wZrb9zC8-tqK}BVg#%`Z*942;`gMLKBV8k^ zsd@hlv3UTB6{03T1@!wTYeJP<_q8R&l`R!7Q;Cb1!sqGm#gL@xt{V&3jb!5x?~$6( zCF)b-cq@?jx=pi>;dd*fR_1fMFNlVozH}F9)Q{t*g*c%=ejH#)EG0j4flvHORbU@K zx#>Qk28hNEKG}4jS`@%HN=@zVSCf`yU`O0e_5NCX_fz)%OC+Xjvn?ni+Ue!l5ZL8D zLfDND#m7!qaQ*!aJfCBYx_ZljLbW}Ls}YBp76--nJ#ah^cl46&?r?)43yt?uXv6w= z$Kpt^Nj3!9{YBB(pYm9)zad*A9TrxpXla)vE1Y=L153|rv;T?=d~5G^R(6=e^X{jTh#vbW1VFWWb`fAGTKr@=i! zt3oG)E(_fhIw<_T@QdLs;cX))MZOg&C?8!uyWC%XUB%eSg_RFfwp9JF>ZPix>U8zV z)gM-a*^>prV+nDQ_b%^f-(=tZzJRaN*XUd3i~4$f>wTyC&hq`pcb)GJ-+jKve1G)4 z?wjpD#s7leU-CssOW=k;LFw70Q_GHpKJCF1p~-E*-v|F3{2MeH8QLMVcW7p)G*lB> z6gngn3mqLgKJ@L-xl+rYh8_w%75Y=?FQE@ZR(O1P_i$0z7p@F9hL?q-;ok82@TuXm z!aoXM7rrBWU-+@`AH%PQ-wS^c-X^k3WKv{yBpj)a927Y`a!L6W<=2$oP<~7KPs;Bq z|9SbnmR~%4LQW2~uuc)r5t(aG_pki@FbH$2^!z#op1@isYt9_e&yO+!@ zIkn`|l4${d;G;lA>BO>+g0n-Xmy34`#N9CE4BsWbzxu}eclV#~|B=6|q_<>a$+;yT zm6Qfr0@1)X17`=W4BQxaIq;Xj^wRrF{be;}jb(?Fb(Qs%9ba~ptkJ)geNYVihV1Cm5VC>QQ2J8R&`X>F;(BL`a#vjRgYHvPt_+?BdRB$ z_6x;n(EF#p7kzK}KJW?uIR8ZdRR2yTlS>XQ$&{R2a$3pHN}erwyQDL4e&Dl!uQXV? zpmbH~O{IS=eW!GE+5Tl0mR(YISJ?|?CkL+x-V*$I@XpX%p^4$W!=>To@NdJPghxa+ zmS0w0T5)hiM@6#YxQf#%&Z)Sx;>L=y>I#1}7AXPY~Sfy~F!+@2|X1 zdtdgx?fuw03oUW6@B6-6e82FG^OyK5{Pq6B{9XP&|4IHc{TKPK^WW)z!2hKGPyWC9 zKlYC(*{fuBNlnT8lBSZQO423kOTJlhM#(uP7na;q@?6O~C1V3S2lfpV1;T+jfq8*N zft7(10@npL1zrfe9(Wh^Ikt3%(%nj@mhM+tQ98GDQE5x*p{3oW-z`0_^m5eIYShsw zW#273tL)OUAD8VITo*hSbzc)&96Btt4z0K#e17=q@NMCb!qX#xNL^%Q)X{g#=pNmh;r;vGOc8G z=<3SVRl-{+-<5mU`;qr^Z-H-&Z#&;KUytt|^u;&)dzai_a%W(l(lbjhDgC0fz3kUz z2cQQ&9c&2og-#4vk(x+DWKHDQ$QhBVB9BC#iM$fotK!0n%POv~c%j0o98Nl&!l0q>9Jg)UV>wV4p zj`ucSOX(q{FPCjD8xhp7c39f2Nwqq3AP7&gKJUl@1i~~30@ccN$?lJUj?5E zz7Tvp_zp&)!qE88ZlOt`{V@(zhZ;l8p~Ep!9vwP1bZY3#&;_9@Fk;>nx-axd=!wuD zFdl6Vy&d{T=+lr0j}C7a-X*+OcuIIbj7*{MyzqkXVzlcO;lskM;r8&V@ak|PoDQ!I z9~=Hg_~h`n&`Zw@pB+9g{KN1i;VZ(|gl`Dn68=f}uJF&p_l6$`{|Y_giSX0mXTvXq zUk<+(elz@b_?__k;g7?gVYDucjE-y@**>yUWVgtkk$odmBGV)LM-GUTM1qm>NOhz( zGB2_qvN+NlSrIub(u%&nDzZ9~h@>NHBd=jp+oz(kVr9j#sNtVhJXi5?#jcg5l`WO& z%I{bHxbn%$cPh85nq9T9YIW6js;;Ygr0UJ8QPoA&b=B?FCskioy{Y=;>VL5gl7*rR z!QS2q?_u6!ycc-yMy-A1-34<(voD32;8x!gzQ1FHo8@2NKg$1Y|F!;K`QPx5ESXwT zThdl?V#%c?_m;ebnPK-pY2cthZ(vK=-Jz?)e+oZbesAT2m2<1-RsWK5HmG)gLg0$P zErF$_D@u)sE8KrE?4H2=aP;3PHAG|9{jwpGc>W5baBSdPn4>PitbSMEfxr_O8Q%=NAJ`Ju7USZS(gRA%OXrm~m$sI!E?rxC zGRB=BmR?i(lhS)je_Q%&>1&t~KEs@FW!bf5H%F9x}oa6s%NYIR#k`=a6ol^^<-Xpwi z-cIjPXd9hq6JtsbF8u+~LIYL+F&yX`$0Y8$;)WCRa_bx(T&2 zLbmbQsF~Tm1ASNfF7np|4hg&ws4RV`bWvFmN`59r*1Ir{?GdU7%@4JN?uIMP7@%6*;Hk zf{MejVmzbzw`@fo`#lY{qSd|nbdIP_TP_n`yBOEE4!5w43YjNBLbb)>4i zq5P@xKbFtK`s*hZKd<-@R(}Dl`+%w-W~TG1CRNYGi1nT7zgK@meY_*&yWoqxE4;U2 ztlG;r)pwe2qwi7QGrq;p>31d1W35&kNCl1we2jLy0Il~DwAuI3QsOr1kXd=y&Zf%SRI-dIy>~k(3_!mLUrMVnAI;0{|{!VIg$BTO`jRr5*b~7Z28IM z<12QlSW|IA#hVrHVBBh|ys+}}%D-2BRM}m1bk%08uv)8ERX<<-YPFa%LYxCtmw6BO zKIwhVy8t8U!@kFTHU38bJ^ly%!IJ8dTT1RK*)gz3U_;a2=a{kiHdRV%AIs-LNT5p(hgxvp5~ZSg+nebig+o9DY1BSXYL z*MEcmC;mN4rj(qIvHXBQFz|Tb4}s>=!(g>rO8-?l3jO*XX|LyluLeV*Iau$#8#)tn z-n2+D);W(wR+e{Qm0gIn-YFGz*m1m8`F3TpY8}StFRB()H&?$^{cbh?AsWZT!jE2f z6V`lleDkq#zQ*@2-zco_+Wk-Y|LC7rvbf|IB@bckTp742a7SRy|JUBRhWS{pd;G8F zI*DyK9o zl^i1N&+}N<+WT79-uv~wuB|uos+s@udw%zQf4`saJwt69o=F$27fSi4)=BT77w9{w zww6X@IQNo1w@lxqAE91;*8kAU8dZ(K#xP@q@iMc1objeH#hA{-pKZ+J?S9DIUt%mb zRvBxV{u?>ZuZ?evZ_xnX8HbEwgq#wcJ`|t+oDUZL~I9Ut8Z; z-&%XD@2o>sv2}v#KWF`9{logzx@O(v*58YdEN|a$SK*%hyOOnS-+sh?)b7A+>Kf?U z%&73!@Omgcw6$ol6M7jV#%N$XVjQ5dUvek7lhGt4?kU&zJNRjSWMNdKC;wYzAyG&X z=!kMVb*`%7i!!z4c-^sjoDpw4Xrvjhn6XwiYPy(DS865NhW)ZV)}Cn>*$3=1_BLmw z`vx=cf_K%sC+H9PQK9xM78^@1ORq}fq&KB0(saDTY-ygPLRQS6r#lm1|r1T2iv@SY*uX;@VUX5Ii3g=66 zxue`!Uau4=+m(DL)~kY|?(X&T26~y^(tqme!*qwBW5@aNev+T+8>p}}zqg;^kMzg; zGyH5n*Ut++JHP!C^o_PcMSYZs+Ku>opgVv ze}JwTX&xP!N5p7K`V^ zU&TMg@=|rFp49ALdTuapK1cdg+8}MEuN;$plzx$J;uY_ctI2ib6j_ulwCl6-aCsEo zK1-f2uaOVPr{s%hqTlfPf5>H&Xr-)jpYniGRe4aUrPRekHdLA@A{y7EJGD?+EA8-; zot5s)?>;#F0m^e|-xrjZlvkA3lnKftZwcX}!zPk^9_q$ugGrTnBzzFXRFB|RrrMKNX=AB15#rl=~>S!m+ZxgDg z+5Tex^E>lCEjm)dYpO5mVh`~-9Kg%sJK{VsM_ehc=e#e8)ulu!P3kU3`_=7-Q(!ne^aN!!+BPeW=P=<_Bh$HQy?4$J;gRQ4pQ$_HDbO^C0Y|von~P zx4>EBeB=BWK7Tp4ikpD@ndjE?8lvJmd0inO3%vsGJO8JkzS5&3IeeK;_3Y=4C5aoE zfIGzj(llwlv{K4v+MHK^Q={lXbF@7DE4*Y)Bgv4BH<%sy#x`ce&qh_|fPyRRZN6Ym zHeaJ*WPJLjP60rmjI#?$ZzHH}!}SJdw}& zcH#+!n$vI~Tg)BkvG4Jwm(8Xq!g1DQYoV243(gTI+kL|O#k=O+_5^=;aE9ZfBfa_3 zL^vzd7QYZDNnc7T_0$6T5>Krp;eLKsHsInK>s^f`2w$q%*Nj0YOtf_;$}Q_wa$CCl z-6QTvw}scndyG?AOSdic=KGP%=+KLH6P~2+%|fI6PIbpfhIB?+C@+>*;4`NyZQxN| z)QPGHP1va46MFXM=0!8#8f|ZO3Y>4zk8g7e=DXjzPkHIyv)+8Kq2JV3QIS(PcRu{W z=uktp5jx-l%F$`6(O)v?Fu}ddsb{DZ7*-kffiLKX8Rr)w*gE)l^%noz*^2q?zg*b-ubl{fM{m3H)re`kA^x{Zie6 z*59t~QunF{)FaH2Q|cM@NA)63@i+AbD!q&rt??Q2q9dF5vPSxwv`;!j|BCSDljMD{ zxnJaKa!pR!hH5>dWZ*Ot)Y@vQ>OrrD@pIop@vc!fs`+YJ?IBIlT5FxOuG*X0`*^9% z`fj}#;&B0b6>kb~*AwP>^OAYXtY|fYIjlen++&Nds=oGXXv;J9B`B)n40T3A7iT+p z&SvLvuP3*9i1)hpp0^4&e$+d`^bI;n8)iF`EI&GAqZRPpH3Wsp(Nbt2HbJG&5%)1G zeh_O(4@tw|rE8?doT|m0>5mdVrVPSa7OK0|67`Z=POGCS+H5Ub`xY-b8P=1lfBrA6 z7l$HiZgsJSSTDi5W?O^pk@gsSs{J1QVLC))m6PtifEqsGo<|Sgaw~h1_o&w!r9K&N zbB<~JFf(`zB&5(k?O*hN3GPKvbYv%A%HbD#3&F%0Nw=%Toyfp9JIwik@~iOOMQGH$ zIOrdl7G?fzD%`InXtl$x*Gv0eJEzHb+Nbr8@UY+NMY>LBZ;KBaXuM~vKzSA$d(6Y; zaoomjvxc<*4R+Itzzmb^w)SIoANy&05^Q@9bmzEJ>fCm^y1m_g?lAW#&vo7X!#zPa zzr?dt^c(RsL-4_i{pJ3#z=NEOjvVG$9uTSt20r9Z;evQed|1+?byBuGN_iIwb6u&X zHdn8z4`@Sh=rQ>3$vC3TD6dpwsZrfbHk+6dTDJwg;wf_}l%lOw*H-QMu=mw=34}cs zM4V;5M!E*ZZ4r_658t9_Vs(_`AZDg#?si zl8`L47kiRh3}RAEMjPactI-CB#f!YTBx$siiwY=`GjKF@p%=O8ar)si+B>+w^*H^r z+5l8;1-q_o+U@Lj?5+0pFhw|G9}6>ti}uf9f>58Q{MgO(`q8xy@hM`$8M$8ENwWaq z`UcLtkhHiR_kf)Wd1uSJH?R((}1q>hhhKSFiO>(${tDk@+$H?F=R z8Vjk1AQhSdD=jfknPsdPcxVc2qCM1ei1i+Rq&#QfQWIG)!E<&avYLq~fEiAvGXU2+ zmpiu9J;0N8qc`m)?Wjjp*nUetk`xnq-!j4h;goQnSXtDl?6Oi5$&|K8+ob2^ib@s5 zQRd=&Zzwg@{_1!VfbD7$Z>zIbUC+?B=$G{I#w>hfEz?Aqj5A9hCAY1I?51`rGN*&w z`2^_e0D8_8ce(pFcbEIRw;A7kE4Z^lOk^Qn9z?0wusT=M%UFuH2iO$ zoL(1(_N+csAE}SmXXp*!-_49=aPDvE^=0v~HSw=o%&q2jxX&ZZ_-yM9`-Xdu7ik_7 z{vCtYsG!B@yzO-9pP9Y2r9$p?MfnN1zy`So`l3H`Z6Xt9uG(7bLXPzpI>%^jf;LTi z7sa#y4!9b2@iqMKAiOV@PxCzdXALfs%{&% zgF7AFw#Z$Hdfn#kaf{IhKhn8nG;B+{!#mz=rp-s*V*0?D;7rqE!v5Ash!M-^%h(6icb?G^1K%?m4V z7b#{jwRa2W8f(;{2RdXukD^I)jXX5zb)y0qR~O#>RC6C)`@9*kDq9ImP20+V%D+PD zGLQaU#(n_5>_M}ha;7mckC4gPP{e_B!x>cO3ilg`-Vg3=_!yv17P!)8NEg4Xr0p0o$p4|^L>x4XQZeq?w|sBJsq z{Z@!K=t|kJrt2h!uAL#o44C&@%N>p0x*Q)`ujIH%XDVn~By; z>!|g;b-}Xi7Id2Kb}J{{83y-S?36eUx^>-#uH?3$+KQM$Kae6_b3N~IZ#DVRKCcAk zbJL6Xv3^CUo#(fwx9~9IVCO%P{@*(A9| z+uYk2vz*z3gk}Nid)K}Or*nukE!yP@vjJ~No z5WbPdx~{u=8-0j=RZlS5z}t6Nhsijnx(EH@;7p2Q!oNpSMkpt2=0x@iBgDDV`=lPF zR6;~fz{ihb4sD|&9x@*#RZAx){mc@W{u3Ky1cj?Y;+LauzmtwieIct|=|zXx z1GuD^Xs*ZA+IZridyasVZ)YwBS;9ZG;OQnq17>pTmf}CRhZIaAo%)OMJh{Ro<89J} z_t>U5V_Y<%*`R2|?!;51kBcC~pOPefO%3m1bK(cHx|Kwl_zKC`JLK+bxjkFCJqO8W z!yS;zF%ecPnN5|r#mRy#v?dqnfl_>07%YqsUgvq{L6<%ezF=krXW3Kg#{~LS`crBu z|3w~5U)d-3B#RxapMjeGN_rZ{j7c$@q8J?#t|#z)lgLDunMHKVbHN|Z;V;$%e=jE3 zrLb{Q>3EkHQA=+sS;`{l$d@p*y|{q0II8O~@mRH@T7z_6QZ3GGnYs>7vkNU%mFZF! z)zi`$?PNPA;qh;}4!k)Fu2J8Ao+M~1Iwm$!$j=J+Vvzs&LR+5h4PlzF94>Ymf8Cb3 z`_9a&@`B+*E#%eS#0=zsgJG{`ylPNG}i9qhhLFTLf~2>WK5-wUO=E4XJ#v5{=Pl;F1$*^GFSe)%yP;ROA$ z9226RoGL$x4jatwMq|!(8=2#SS}i7AeXSu=PSjM*)Le3^5A;vmgdQ9aSd$B^(s z>h%Zi(G4RCWgwV6&4J{$UGabq)A?VtbL=Rm9W}AuNoIPz<8E{d$P&)pVJX6$^Nkg% z2$O~B!V+PvkcN&Kh5}#4_C|sDtyoU#NFp;xdY$c|InqL$$8HqNEp|;B!3#Q|TV9uA z+0STz2Xx6na+uQP(TjD_8B@?0+i=L|)eQRf1nn&p#%ygqy=^7R{Rd5A8z9-JVD+`m zLWOSIH&YdOaK{9P%dHdYmsVy;?* zcaLSh{6=mauXiQ0e2h*Rq`S-6(%EN~SQSz3UG3p)E$u=rp0Y37x9k?q%dn#5&Nfn; zhg_FATE;8ywP1%Lk`^0DfQ8l+1e|k6sxede5bb(d7%RRlX7TQqNbTjP2KC1QilB`3s=!cQDh47Y{Y2xvrx>h>}x!KK!xhL zBHJmg-LCE+b^;clpigolN!|v!*2z0MIz2X$&MS)%9wIZy51`R~#_Q1S+H zGkC5~m3}I(mAA-yYc4BLJb)%gsxce0&H zF8quAfK$t9<)pFeGK`#a8Z_jhQ^Bo{7R`0n!nvb73#O9`Mf}<;@}~O>{WTB+h)!l~ zsMF$wdQ|sN;YG;6F7Y}{u_4^Y>gF>7{|c*1?3U=-Y3kR"VY&YEDr*rf? zeGiU20UkdAKULifT+DRyBl9%Wth2R)9M-jm+7s+A?4!;mD93DX4-VU74soXz#)kPx zMW$|EfCyrn$PQ?9Z)5%vc6R(I>xjV)9Ko#wp zCvTE>C=%Ns+5A+Gxwq5Uhw3|z-YWwyve=mF9By-t;f!XYOIDgqtZvpM61-bhfBPk} zr4w+h`EDC;iuVwtr>U=yLo|mScJ#aWJ^j8U)`MWpqx`WD+klj3agq!DkD)OD*-_-iVgqv99~ zudL9J?>iBlbck%MITJ9SBBT0PgW`>E%`+#m+*6dGr-DB=&E}tVkiwm=}$H{X4VfkSOv_IS_ zj0?H>9Uhh4y#3x`{Mt#f$@BD;%XF6O zki-h?h{pQ~e&RnlTq=Y}!HGD$p@8VV@r> zjYm1;vT?Qo?XW)FohX!chTkC`&YG;HXq(J@GtXXcZz2yq43jJkXKTc%;8b!Fog^pK z5gf;9?kKK7G8Swnq`8sHcb=n_)E2(dQ%Z(2wPM$!1TQgzo|BF8DZn8Gf1xn=8;~90 zG84sx)WcHPOc9$VCE`iyB97hJcu9c&87Q5A(hQNNN;5*GvtG*QbDqa}T#Q}NKqp2*SH^1N*+QMF&CqgT zuq(_wa~&I(!E+awg)rG7ZbvD(SUk_0686aK4=iws;Ko;+h?~gHn84HbB$pcN zPIY&ZOx8g1!U2sLLA9+qG*V%;9VKwaB(yz zo6C;jPW1N`CRJ2;ripYMft0Z)r`(4E zQXUVdS{I(^NzOB(M3LIWD~a4fMM*;+jiwG3vW;D+l%Rx4*#N$!M6u16s2XZVcE5V7 z8Em@p97$zEUPn^Sr>Vp{PLNW_R|M72TA68127GZi=QR3X?0N=ie-;^Q4rya9x&I0; zkJDSv`Q>wh|69F9{3t(;v;Ci|u9e@G&Y0$Ri%%*EVxh(H*|%R7uHlhgkmRjsYE@kma13a)KOXm zEnZ8cx>Cts9HvS~m{G9RHH7;(mb*AZ%hGb_T`RO;YtQ&EJA2*qbiF_Re7&*B7;8>6 zXP8-N!d!0cI&N$Mw{<^s_jI^jb&E}LfxYQUs6ig)?tgbr;O+_BJ%PI?aQ6i6p1|D` ZxO)P3PvGte+&zK2Cvf)!{vV&fe*i+5gg*cP literal 0 HcmV?d00001 diff --git a/TSL/nwnnsscomp/V1/nwscript.nss b/TSL/nwnnsscomp/V1/nwscript.nss new file mode 100644 index 000000000..94e753a63 --- /dev/null +++ b/TSL/nwnnsscomp/V1/nwscript.nss @@ -0,0 +1,6325 @@ +//////////////////////////////////////////////////////// +// +// NWScript +// +// The list of actions and pre-defined constants. +// +// (c) BioWare Corp, 1999 +// +//////////////////////////////////////////////////////// + +#define ENGINE_NUM_STRUCTURES 4 +#define ENGINE_STRUCTURE_0 effect +#define ENGINE_STRUCTURE_1 event +#define ENGINE_STRUCTURE_2 location +#define ENGINE_STRUCTURE_3 talent + +// Constants + +int NUM_INVENTORY_SLOTS = 20; + +int TRUE = 1; +int FALSE = 0; + +float DIRECTION_EAST = 0.0; +float DIRECTION_NORTH = 90.0; +float DIRECTION_WEST = 180.0; +float DIRECTION_SOUTH = 270.0; +float PI = 3.141592; + +int ATTITUDE_NEUTRAL = 0; +int ATTITUDE_AGGRESSIVE = 1; +int ATTITUDE_DEFENSIVE = 2; +int ATTITUDE_SPECIAL = 3; + +int TALKVOLUME_TALK = 0; +int TALKVOLUME_WHISPER = 1; +int TALKVOLUME_SHOUT = 2; +int TALKVOLUME_SILENT_TALK = 3; +int TALKVOLUME_SILENT_SHOUT = 4; + +int INVENTORY_SLOT_HEAD = 0; +int INVENTORY_SLOT_BODY = 1; +int INVENTORY_SLOT_HANDS = 3; +int INVENTORY_SLOT_RIGHTWEAPON = 4; +int INVENTORY_SLOT_LEFTWEAPON = 5; +int INVENTORY_SLOT_LEFTARM = 7; +int INVENTORY_SLOT_RIGHTARM = 8; +int INVENTORY_SLOT_IMPLANT = 9; +int INVENTORY_SLOT_BELT = 10; +int INVENTORY_SLOT_CWEAPON_L = 14; +int INVENTORY_SLOT_CWEAPON_R = 15; +int INVENTORY_SLOT_CWEAPON_B = 16; +int INVENTORY_SLOT_CARMOUR = 17; +int INVENTORY_SLOT_RIGHTWEAPON2= 18; +int INVENTORY_SLOT_LEFTWEAPON2 = 19; + +//Effect type constants +int DURATION_TYPE_INSTANT = 0; +int DURATION_TYPE_TEMPORARY = 1; +int DURATION_TYPE_PERMANENT = 2; + +int SUBTYPE_MAGICAL = 8; +int SUBTYPE_SUPERNATURAL = 16; +int SUBTYPE_EXTRAORDINARY = 24; + +int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp +int ABILITY_DEXTERITY = 1; +int ABILITY_CONSTITUTION = 2; +int ABILITY_INTELLIGENCE = 3; +int ABILITY_WISDOM = 4; +int ABILITY_CHARISMA = 5; + +int SHAPE_SPELLCYLINDER = 0; +int SHAPE_CONE = 1; +int SHAPE_CUBE = 2; +int SHAPE_SPELLCONE = 3; +int SHAPE_SPHERE = 4; + +int OBJECT_TYPE_CREATURE = 1; +int OBJECT_TYPE_ITEM = 2; +int OBJECT_TYPE_TRIGGER = 4; +int OBJECT_TYPE_DOOR = 8; +int OBJECT_TYPE_AREA_OF_EFFECT = 16; +int OBJECT_TYPE_WAYPOINT = 32; +int OBJECT_TYPE_PLACEABLE = 64; +int OBJECT_TYPE_STORE = 128; +int OBJECT_TYPE_ENCOUNTER = 256; +int OBJECT_TYPE_SOUND = 512; +int OBJECT_TYPE_ALL = 32767; + +int OBJECT_TYPE_INVALID = 32767; + +int GENDER_MALE = 0; +int GENDER_FEMALE = 1; +int GENDER_BOTH = 2; +int GENDER_OTHER = 3; +int GENDER_NONE = 4; + +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_UNIVERSAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_LIGHT_SIDE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_DARK_SIDE = 512; +int DAMAGE_TYPE_SONIC = 1024; +int DAMAGE_TYPE_ION = 2048; +int DAMAGE_TYPE_BLASTER = 4096; + +// Special versus flag just for AC effects +int AC_VS_DAMAGE_TYPE_ALL = 8199; + +int DAMAGE_BONUS_1 = 1; +int DAMAGE_BONUS_2 = 2; +int DAMAGE_BONUS_3 = 3; +int DAMAGE_BONUS_4 = 4; +int DAMAGE_BONUS_5 = 5; +int DAMAGE_BONUS_1d4 = 6; +int DAMAGE_BONUS_1d6 = 7; +int DAMAGE_BONUS_1d8 = 8; +int DAMAGE_BONUS_1d10 = 9; +int DAMAGE_BONUS_2d6 = 10; + +int DAMAGE_POWER_NORMAL = 0; +int DAMAGE_POWER_PLUS_ONE = 1; +int DAMAGE_POWER_PLUS_TWO = 2; +int DAMAGE_POWER_PLUS_THREE = 3; +int DAMAGE_POWER_PLUS_FOUR = 4; +int DAMAGE_POWER_PLUS_FIVE = 5; +int DAMAGE_POWER_ENERGY = 6; + +int ATTACK_BONUS_MISC = 0; +int ATTACK_BONUS_ONHAND = 1; +int ATTACK_BONUS_OFFHAND = 2; + +int AC_DODGE_BONUS = 0; +int AC_NATURAL_BONUS = 1; +int AC_ARMOUR_ENCHANTMENT_BONUS = 2; +int AC_SHIELD_ENCHANTMENT_BONUS = 3; +int AC_DEFLECTION_BONUS = 4; + +int DOOR_ACTION_OPEN = 0; +int DOOR_ACTION_UNLOCK = 1; +int DOOR_ACTION_BASH = 2; +int DOOR_ACTION_IGNORE = 3; +int DOOR_ACTION_KNOCK = 4; + +int PLACEABLE_ACTION_USE = 0; +int PLACEABLE_ACTION_UNLOCK = 1; +int PLACEABLE_ACTION_BASH = 2; +int PLACEABLE_ACTION_KNOCK = 4; + + +int RACIAL_TYPE_UNKNOWN = 0; +int RACIAL_TYPE_ELF = 1; +int RACIAL_TYPE_GNOME = 2; +int RACIAL_TYPE_HALFLING = 3; +int RACIAL_TYPE_HALFELF = 4; +int RACIAL_TYPE_DROID = 5; +int RACIAL_TYPE_HUMAN = 6; +int RACIAL_TYPE_ALL = 7; +int RACIAL_TYPE_INVALID = 8; + +int ALIGNMENT_ALL = 0; +int ALIGNMENT_NEUTRAL = 1; +int ALIGNMENT_LIGHT_SIDE = 2; +int ALIGNMENT_DARK_SIDE = 3; + +int SAVING_THROW_ALL = 0; +int SAVING_THROW_FORT = 1; +int SAVING_THROW_REFLEX = 2; +int SAVING_THROW_WILL = 3; + +int SAVING_THROW_TYPE_ALL = 0; +int SAVING_THROW_TYPE_NONE = 0; +int SAVING_THROW_TYPE_ACID = 1; +int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; +int SAVING_THROW_TYPE_COLD = 3; +int SAVING_THROW_TYPE_DEATH = 4; +int SAVING_THROW_TYPE_DISEASE = 5; +int SAVING_THROW_TYPE_LIGHT_SIDE = 6; +int SAVING_THROW_TYPE_ELECTRICAL = 7; +int SAVING_THROW_TYPE_FEAR = 8; +int SAVING_THROW_TYPE_FIRE = 9; +int SAVING_THROW_TYPE_MIND_AFFECTING = 10; +int SAVING_THROW_TYPE_DARK_SIDE = 11; +int SAVING_THROW_TYPE_POISON = 12; +int SAVING_THROW_TYPE_SONIC = 13; +int SAVING_THROW_TYPE_TRAP = 14; +int SAVING_THROW_TYPE_FORCE_POWER = 15; +int SAVING_THROW_TYPE_ION = 16; +int SAVING_THROW_TYPE_BLASTER = 17; +int SAVING_THROW_TYPE_PARALYSIS = 18; + +int IMMUNITY_TYPE_NONE = 0; +int IMMUNITY_TYPE_MIND_SPELLS = 1; +int IMMUNITY_TYPE_POISON = 2; +int IMMUNITY_TYPE_DISEASE = 3; +int IMMUNITY_TYPE_FEAR = 4; +int IMMUNITY_TYPE_TRAP = 5; +int IMMUNITY_TYPE_PARALYSIS = 6; +int IMMUNITY_TYPE_BLINDNESS = 7; +int IMMUNITY_TYPE_DEAFNESS = 8; +int IMMUNITY_TYPE_SLOW = 9; +int IMMUNITY_TYPE_ENTANGLE = 10; +int IMMUNITY_TYPE_SILENCE = 11; +int IMMUNITY_TYPE_STUN = 12; +int IMMUNITY_TYPE_SLEEP = 13; +int IMMUNITY_TYPE_CHARM = 14; +int IMMUNITY_TYPE_DOMINATE = 15; +int IMMUNITY_TYPE_CONFUSED = 16; +int IMMUNITY_TYPE_CURSED = 17; +int IMMUNITY_TYPE_DAZED = 18; +int IMMUNITY_TYPE_ABILITY_DECREASE = 19; +int IMMUNITY_TYPE_ATTACK_DECREASE = 20; +int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; +int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; +int IMMUNITY_TYPE_AC_DECREASE = 23; +int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; +int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; +int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; +int IMMUNITY_TYPE_SKILL_DECREASE = 27; +int IMMUNITY_TYPE_KNOCKDOWN = 28; +int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; +int IMMUNITY_TYPE_SNEAK_ATTACK = 30; +int IMMUNITY_TYPE_CRITICAL_HIT = 31; +int IMMUNITY_TYPE_DEATH = 32; +int IMMUNITY_TYPE_DROID_CONFUSED = 33; + +int AREA_TRANSITION_RANDOM = 0; +int AREA_TRANSITION_USER_DEFINED = 1; +int AREA_TRANSITION_CITY_01 = 2; +int AREA_TRANSITION_CITY_02 = 3; +int AREA_TRANSITION_CITY_03 = 4; +int AREA_TRANSITION_CITY_04 = 5; +int AREA_TRANSITION_CITY_05 = 6; +int AREA_TRANSITION_CRYPT_01 = 7; +int AREA_TRANSITION_CRYPT_02 = 8; +int AREA_TRANSITION_CRYPT_03 = 9; +int AREA_TRANSITION_CRYPT_04 = 10; +int AREA_TRANSITION_CRYPT_05 = 11; +int AREA_TRANSITION_DUNGEON_01 = 12; +int AREA_TRANSITION_DUNGEON_02 = 13; +int AREA_TRANSITION_DUNGEON_03 = 14; +int AREA_TRANSITION_DUNGEON_04 = 15; +int AREA_TRANSITION_DUNGEON_05 = 16; +int AREA_TRANSITION_DUNGEON_06 = 17; +int AREA_TRANSITION_DUNGEON_07 = 18; +int AREA_TRANSITION_DUNGEON_08 = 19; +int AREA_TRANSITION_MINES_01 = 20; +int AREA_TRANSITION_MINES_02 = 21; +int AREA_TRANSITION_MINES_03 = 22; +int AREA_TRANSITION_MINES_04 = 23; +int AREA_TRANSITION_MINES_05 = 24; +int AREA_TRANSITION_MINES_06 = 25; +int AREA_TRANSITION_MINES_07 = 26; +int AREA_TRANSITION_MINES_08 = 27; +int AREA_TRANSITION_MINES_09 = 28; +int AREA_TRANSITION_SEWER_01 = 29; +int AREA_TRANSITION_SEWER_02 = 30; +int AREA_TRANSITION_SEWER_03 = 31; +int AREA_TRANSITION_SEWER_04 = 32; +int AREA_TRANSITION_SEWER_05 = 33; +int AREA_TRANSITION_CASTLE_01 = 34; +int AREA_TRANSITION_CASTLE_02 = 35; +int AREA_TRANSITION_CASTLE_03 = 36; +int AREA_TRANSITION_CASTLE_04 = 37; +int AREA_TRANSITION_CASTLE_05 = 38; +int AREA_TRANSITION_CASTLE_06 = 39; +int AREA_TRANSITION_CASTLE_07 = 40; +int AREA_TRANSITION_CASTLE_08 = 41; +int AREA_TRANSITION_INTERIOR_01 = 42; +int AREA_TRANSITION_INTERIOR_02 = 43; +int AREA_TRANSITION_INTERIOR_03 = 44; +int AREA_TRANSITION_INTERIOR_04 = 45; +int AREA_TRANSITION_INTERIOR_05 = 46; +int AREA_TRANSITION_INTERIOR_06 = 47; +int AREA_TRANSITION_INTERIOR_07 = 48; +int AREA_TRANSITION_INTERIOR_08 = 49; +int AREA_TRANSITION_INTERIOR_09 = 50; +int AREA_TRANSITION_INTERIOR_10 = 51; +int AREA_TRANSITION_INTERIOR_11 = 52; +int AREA_TRANSITION_INTERIOR_12 = 53; +int AREA_TRANSITION_INTERIOR_13 = 54; +int AREA_TRANSITION_INTERIOR_14 = 55; +int AREA_TRANSITION_INTERIOR_15 = 56; +int AREA_TRANSITION_INTERIOR_16 = 57; +int AREA_TRANSITION_FOREST_01 = 58; +int AREA_TRANSITION_FOREST_02 = 59; +int AREA_TRANSITION_FOREST_03 = 60; +int AREA_TRANSITION_FOREST_04 = 61; +int AREA_TRANSITION_FOREST_05 = 62; +int AREA_TRANSITION_RURAL_01 = 63; +int AREA_TRANSITION_RURAL_02 = 64; +int AREA_TRANSITION_RURAL_03 = 65; +int AREA_TRANSITION_RURAL_04 = 66; +int AREA_TRANSITION_RURAL_05 = 67; + +// Legacy area-transition constants. Do not delete these. +int AREA_TRANSITION_CITY = 2; +int AREA_TRANSITION_CRYPT = 7; +int AREA_TRANSITION_FOREST = 58; +int AREA_TRANSITION_RURAL = 63; + +// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. +int BODY_NODE_HAND = 0; +int BODY_NODE_CHEST = 1; +int BODY_NODE_HEAD = 2; +// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The +// nodes used with be 'lhand' and 'rhand'. +int BODY_NODE_HAND_LEFT = 3; +int BODY_NODE_HAND_RIGHT = 4; + +float RADIUS_SIZE_SMALL = 1.67f; +float RADIUS_SIZE_MEDIUM = 3.33f; +float RADIUS_SIZE_LARGE = 5.0f; +float RADIUS_SIZE_HUGE = 6.67f; +float RADIUS_SIZE_GARGANTUAN = 8.33f; +float RADIUS_SIZE_COLOSSAL = 10.0f; + +// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType +int EFFECT_TYPE_INVALIDEFFECT = 0; +int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; +//int EFFECT_TYPE_ABILITY_BONUS = 2; +int EFFECT_TYPE_REGENERATE = 3; +//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; +//int EFFECT_TYPE_MODIFY_AC = 5; +//int EFFECT_TYPE_ATTACK_BONUS = 6; +int EFFECT_TYPE_DAMAGE_REDUCTION = 7; +//int EFFECT_TYPE_DAMAGE_BONUS = 8; +int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; +//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; +int EFFECT_TYPE_ENTANGLE = 11; +int EFFECT_TYPE_INVULNERABLE = 12; +int EFFECT_TYPE_DEAF = 13; +int EFFECT_TYPE_RESURRECTION = 14; +int EFFECT_TYPE_IMMUNITY = 15; +//int EFFECT_TYPE_BLIND = 16; +int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; +int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; +//int EFFECT_TYPE_MOVEMENT_SPEED = 19; +int EFFECT_TYPE_AREA_OF_EFFECT = 20; +int EFFECT_TYPE_BEAM = 21; +//int EFFECT_TYPE_FORCE_RESISTANCE = 22; +int EFFECT_TYPE_CHARMED = 23; +int EFFECT_TYPE_CONFUSED = 24; +int EFFECT_TYPE_FRIGHTENED = 25; +int EFFECT_TYPE_DOMINATED = 26; +int EFFECT_TYPE_PARALYZE = 27; +int EFFECT_TYPE_DAZED = 28; +int EFFECT_TYPE_STUNNED = 29; +int EFFECT_TYPE_SLEEP = 30; +int EFFECT_TYPE_POISON = 31; +int EFFECT_TYPE_DISEASE = 32; +int EFFECT_TYPE_CURSE = 33; +int EFFECT_TYPE_SILENCE = 34; +int EFFECT_TYPE_TURNED = 35; +int EFFECT_TYPE_HASTE = 36; +int EFFECT_TYPE_SLOW = 37; +int EFFECT_TYPE_ABILITY_INCREASE = 38; +int EFFECT_TYPE_ABILITY_DECREASE = 39; +int EFFECT_TYPE_ATTACK_INCREASE = 40; +int EFFECT_TYPE_ATTACK_DECREASE = 41; +int EFFECT_TYPE_DAMAGE_INCREASE = 42; +int EFFECT_TYPE_DAMAGE_DECREASE = 43; +int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; +int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; +int EFFECT_TYPE_AC_INCREASE = 46; +int EFFECT_TYPE_AC_DECREASE = 47; +int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; +int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; +int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; +int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; +int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; +int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; +int EFFECT_TYPE_SKILL_INCREASE = 54; +int EFFECT_TYPE_SKILL_DECREASE = 55; +int EFFECT_TYPE_INVISIBILITY = 56; +int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; +int EFFECT_TYPE_DARKNESS = 58; +int EFFECT_TYPE_DISPELMAGICALL = 59; +int EFFECT_TYPE_ELEMENTALSHIELD = 60; +int EFFECT_TYPE_NEGATIVELEVEL = 61; +int EFFECT_TYPE_DISGUISE = 62; +int EFFECT_TYPE_SANCTUARY = 63; +int EFFECT_TYPE_TRUESEEING = 64; +int EFFECT_TYPE_SEEINVISIBLE = 65; +int EFFECT_TYPE_TIMESTOP = 66; +int EFFECT_TYPE_BLINDNESS = 67; +int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; +int EFFECT_TYPE_DISPELMAGICBEST = 69; +int EFFECT_TYPE_ULTRAVISION = 70; +int EFFECT_TYPE_MISS_CHANCE = 71; +int EFFECT_TYPE_CONCEALMENT = 72; +int EFFECT_TYPE_SPELL_IMMUNITY = 73; +int EFFECT_TYPE_ASSUREDHIT = 74; +int EFFECT_TYPE_VISUAL = 75; +int EFFECT_TYPE_LIGHTSABERTHROW = 76; +int EFFECT_TYPE_FORCEJUMP = 77; +int EFFECT_TYPE_ASSUREDDEFLECTION = 78; +int EFFECT_TYPE_DROID_CONFUSED = 79; +int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 +int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 + + +int ITEM_PROPERTY_ABILITY_BONUS = 0 ; +int ITEM_PROPERTY_AC_BONUS = 1 ; +int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; +int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; +int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; +int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; +int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; +int ITEM_PROPERTY_BONUS_FEAT = 9 ; +int ITEM_PROPERTY_ACTIVATE_ITEM = 10; +int ITEM_PROPERTY_DAMAGE_BONUS = 11; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; +int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; +int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; +int ITEM_PROPERTY_DECREASED_DAMAGE = 15; +int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; +int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; +int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; +int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; +int ITEM_PROPERTY_DECREASED_AC = 20; +int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; +int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; +int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; +int ITEM_PROPERTY_IMMUNITY = 24; +int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; +int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; +int ITEM_PROPERTY_KEEN = 28; +int ITEM_PROPERTY_LIGHT = 29; +int ITEM_PROPERTY_MIGHTY = 30; +int ITEM_PROPERTY_NO_DAMAGE = 31; +int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; +int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; +int ITEM_PROPERTY_REGENERATION = 35; +int ITEM_PROPERTY_SKILL_BONUS = 36; +int ITEM_PROPERTY_SECURITY_SPIKE = 37; +int ITEM_PROPERTY_ATTACK_BONUS = 38; +int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; +int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; +int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; +int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; +int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; +int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; +int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; +int ITEM_PROPERTY_TRAP = 46; +int ITEM_PROPERTY_TRUE_SEEING = 47; +int ITEM_PROPERTY_ON_MONSTER_HIT = 48; +int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; +int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; +int ITEM_PROPERTY_MONSTER_DAMAGE = 51; +int ITEM_PROPERTY_SPECIAL_WALK = 52; +int ITEM_PROPERTY_COMPUTER_SPIKE = 53; +int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; +int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; +int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; +int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; +int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code +int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; +int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; +int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; +int ITEM_PROPERTY_DAMPEN_SOUND = 63; +int ITEM_PROPERTY_DOORCUTTING = 64; +int ITEM_PROPERTY_DOORSABERING = 65; + +int BASE_ITEM_QUARTER_STAFF = 0; +int BASE_ITEM_STUN_BATON = 1; +int BASE_ITEM_LONG_SWORD = 2; +int BASE_ITEM_VIBRO_SWORD = 3; +int BASE_ITEM_SHORT_SWORD = 4; +int BASE_ITEM_VIBRO_BLADE = 5; +int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; +int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; +int BASE_ITEM_LIGHTSABER = 8; +int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; +int BASE_ITEM_SHORT_LIGHTSABER = 10; +int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; +int BASE_ITEM_BLASTER_PISTOL = 12; +int BASE_ITEM_HEAVY_BLASTER = 13; +int BASE_ITEM_HOLD_OUT_BLASTER = 14; +int BASE_ITEM_ION_BLASTER = 15; +int BASE_ITEM_DISRUPTER_PISTOL = 16; +int BASE_ITEM_SONIC_PISTOL = 17; +int BASE_ITEM_ION_RIFLE = 18; +int BASE_ITEM_BOWCASTER = 19; +int BASE_ITEM_BLASTER_CARBINE = 20; +int BASE_ITEM_DISRUPTER_RIFLE = 21; +int BASE_ITEM_SONIC_RIFLE = 22; +int BASE_ITEM_REPEATING_BLASTER = 23; +int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; +int BASE_ITEM_FRAGMENTATION_GRENADES = 25; +int BASE_ITEM_STUN_GRENADES = 26; +int BASE_ITEM_THERMAL_DETONATOR = 27; +int BASE_ITEM_POISON_GRENADE = 28; +int BASE_ITEM_FLASH_GRENADE = 29; +int BASE_ITEM_SONIC_GRENADE = 30; +int BASE_ITEM_ADHESIVE_GRENADE = 31; +int BASE_ITEM_CRYOBAN_GRENADE = 32; +int BASE_ITEM_FIRE_GRENADE = 33; +int BASE_ITEM_ION_GRENADE = 34; +int BASE_ITEM_JEDI_ROBE = 35; +int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; +int BASE_ITEM_JEDI_MASTER_ROBE = 37; +int BASE_ITEM_ARMOR_CLASS_4 = 38; +int BASE_ITEM_ARMOR_CLASS_5 = 39; +int BASE_ITEM_ARMOR_CLASS_6 = 40; +int BASE_ITEM_ARMOR_CLASS_7 = 41; +int BASE_ITEM_ARMOR_CLASS_8 = 42; +int BASE_ITEM_ARMOR_CLASS_9 = 43; +int BASE_ITEM_MASK = 44; +int BASE_ITEM_GAUNTLETS = 45; +int BASE_ITEM_FOREARM_BANDS = 46; +int BASE_ITEM_BELT = 47; +int BASE_ITEM_IMPLANT_1 = 48; +int BASE_ITEM_IMPLANT_2 = 49; +int BASE_ITEM_IMPLANT_3 = 50; +int BASE_ITEM_DATA_PAD = 52; +int BASE_ITEM_ADRENALINE = 53; +int BASE_ITEM_COMBAT_SHOTS = 54; +int BASE_ITEM_MEDICAL_EQUIPMENT = 55; +int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; +int BASE_ITEM_CREDITS = 57; +int BASE_ITEM_TRAP_KIT = 58; +int BASE_ITEM_SECURITY_SPIKES = 59; +int BASE_ITEM_PROGRAMMING_SPIKES = 60; +int BASE_ITEM_GLOW_ROD = 61; +int BASE_ITEM_COLLAR_LIGHT = 62; +int BASE_ITEM_TORCH = 63; +int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; +int BASE_ITEM_AESTHETIC_ITEM = 65; +int BASE_ITEM_DROID_LIGHT_PLATING = 66; +int BASE_ITEM_DROID_MEDIUM_PLATING = 67; +int BASE_ITEM_DROID_HEAVY_PLATING = 68; +int BASE_ITEM_DROID_SEARCH_SCOPE = 69; +int BASE_ITEM_DROID_MOTION_SENSORS = 70; +int BASE_ITEM_DROID_SONIC_SENSORS = 71; +int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; +int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; +int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; +int BASE_ITEM_DROID_SHIELD = 75; +int BASE_ITEM_DROID_UTILITY_DEVICE = 76; +int BASE_ITEM_BLASTER_RIFLE = 77; +int BASE_ITEM_GHAFFI_STICK = 78; +int BASE_ITEM_WOOKIE_WARBLADE = 79; +int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; +int BASE_ITEM_CREATURE_ITEM_SLASH = 81; +int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; +int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; +int BASE_ITEM_CREATURE_HIDE_ITEM = 84; +int BASE_ITEM_BASIC_CLOTHING = 85; +int BASE_ITEM_WRIST_LAUNCHER = 91; +int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 + +int BASE_ITEM_INVALID = 256; + + +// AMF: These constants define attack results +int ATTACK_RESULT_INVALID = 0; +int ATTACK_RESULT_HIT_SUCCESSFUL = 1; +int ATTACK_RESULT_CRITICAL_HIT = 2; +int ATTACK_RESULT_AUTOMATIC_HIT = 3; + +int ATTACK_RESULT_MISS = 4; +int ATTACK_RESULT_ATTACK_RESISTED = 5; +int ATTACK_RESULT_ATTACK_FAILED = 6; + +int ATTACK_RESULT_PARRIED = 8; +int ATTACK_RESULT_DEFLECTED = 9; + + +// these match the constants in visualeffects.2da +int VFX_NONE = -1; + +int VFX_IMP_HEALING_SMALL = 1001; +int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; +int VFX_PRO_AFFLICT = 1003; +int VFX_IMP_CHOKE = 1004; +int VFX_IMP_CURE = 1005; +int VFX_PRO_DEATH_FIELD = 1006; +int VFX_PRO_DROID_DISABLE = 1007; +int VFX_PRO_DROID_KILL = 1008; +int VFX_PRO_DRAIN = 1009; +int VFX_PRO_FORCE_ARMOR = 1010; +int VFX_PRO_FORCE_AURA = 1011; +int VFX_IMP_FORCE_BREACH = 1012; +int VFX_IMP_FORCE_PUSH = 1014; +int VFX_PRO_FORCE_SHIELD = 1015; +int VFX_IMP_FORCE_WAVE = 1017; +int VFX_IMP_FORCE_WHIRLWIND = 1018; +int VFX_IMP_HEAL = 1019; +int VFX_IMP_SPEED_KNIGHT = 1020; +int VFX_PRO_LIGHTNING_L = 1021; +int VFX_IMP_SPEED_MASTERY = 1022; +int VFX_PRO_RESIST_ELEMENTS = 1025; +int VFX_PRO_RESIST_FORCE = 1026; +int VFX_PRO_RESIST_POISON = 1027; +int VFX_PRO_LIGHTNING_S = 1028; +int VFX_IMP_MIND_FORCE = 1031; +int VFX_IMP_SUPPRESS_FORCE = 1032; +int VFX_IMP_MIND_KINIGHT = 1033; +int VFX_IMP_MIND_MASTERY = 1034; +int VFX_PRO_LIGHTNING_JEDI = 1035; +int VFX_PRO_LIGHTNING_L_SOUND = 1036; +int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; +int VFX_IMP_FLAME = 1039; +int VFX_IMP_STUN = 1040; + +int VFX_DUR_STEALTH_PULSE = 2000; +int VFX_DUR_INVISIBILITY = 2001; +int VFX_DUR_SPEED = 2004; +int VFX_DUR_FORCE_WHIRLWIND = 2007; +int VFX_DUR_HOLD = 2008; +int VFX_DUR_BODY_FUAL = 2024; +int VFX_DUR_PSYCHIC_STATIC = 2025; +int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; +int VFX_BEAM_DROID_DISABLE = 2027; +int VFX_BEAM_DROID_DESTROY = 2028; +int VFX_BEAM_DRAIN_LIFE = 2029; +int VFX_DUR_KNIGHTS_SPEED = 2031; +int VFX_DUR_SHIELD_RED_MARK_I = 2032; +int VFX_DUR_SHIELD_RED_MARK_II = 2034; +int VFX_DUR_SHIELD_RED_MARK_IV = 2035; +int VFX_BEAM_LIGHTNING_DARK_S = 2037; +int VFX_BEAM_LIGHTNING_DARK_L = 2038; +int VFX_DUR_SHIELD_BLUE_01 = 2040; +int VFX_DUR_SHIELD_BLUE_02 = 2041; +int VFX_DUR_SHIELD_BLUE_03 = 2042; +int VFX_DUR_SHIELD_BLUE_04 = 2043; +int VFX_DUR_SHIELD_GREEN_01 = 2044; +int VFX_DUR_SHIELD_RED_01 = 2045; +int VFX_DUR_SHIELD_RED_02 = 2046; +int VFX_DUR_SHIELD_CHROME_01 = 2047; +int VFX_DUR_SHIELD_CHROME_02 = 2048; +int VFX_BEAM_ION_RAY_01 = 2049; +int VFX_BEAM_ION_RAY_02 = 2050; +int VFX_BEAM_COLD_RAY = 2051; +int VFX_BEAM_STUN_RAY = 2052; +int VFX_BEAM_FLAME_SPRAY = 2053; +int VFX_DUR_CARBONITE_ENCASING = 2054; +int VFX_DUR_CARBONITE_CHUNKS = 2055; +int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; +int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; +int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; +int VFX_DUR_ELECTRICAL_SPARK = 2067; + +int VFX_FNF_FORCE_WAVE = 3001; +int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; +int VFX_FNF_GRENADE_FRAGMENTATION = 3003; +int VFX_FNF_GRENADE_STUN = 3004; +int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; +int VFX_FNF_GRENADE_POISON = 3006; +int VFX_FNF_GRENADE_SONIC = 3007; +int VFX_FNF_GRENADE_ADHESIVE = 3008; +int VFX_FNF_GRENADE_CRYOBAN = 3009; +int VFX_FNF_GRENADE_PLASMA = 3010; +int VFX_FNF_GRENADE_ION = 3011; +int VFX_FNF_GRAVITY_GENERATOR = 3013; + +int VFX_COM_SPARKS_LARGE = 4003; +int VFX_COM_SPARKS_LIGHTSABER = 4004; +int VFX_COM_SPARKS_PARRY_METAL = 4011; +int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; +int VFX_COM_POWER_BLAST_IMPROVED = 4013; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; +int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; +int VFX_COM_MULTI_SHOT = 4016; +int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; +int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; +int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; +int VFX_COM_SNIPER_SHOT_MASTERY = 4020; +int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; +int VFX_COM_RAPID_SHOT_IMPROVED = 4022; +int VFX_COM_BLASTER_DEFLECTION = 4023; +int VFX_COM_BLASTER_IMPACT = 4024; +int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; +int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; +int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; +int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; +int VFX_COM_POWER_BLAST_MASTERY = 4029; +int VFX_COM_FLURRY_IMPROVED_SABER = 4030; +int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; +int VFX_COM_BLASTER_IMPACT_GROUND = 4032; +int VFX_COM_SPARKS_BLASTER = 4033; +int VFX_COM_DROID_EXPLOSION_1 = 4034; +int VFX_COM_DROID_EXPLOSION_2 = 4035; +int VFX_COM_JEDI_FORCE_FIZZLE = 4036; +int VFX_COM_FORCE_RESISTED = 4037; + +int VFX_ARD_LIGHT_YELLOW_10 = 5000; +int VFX_ARD_LIGHT_YELLOW_20 = 5001; +int VFX_ARD_LIGHT_BLIND = 5002; +int VFX_ARD_HEAT_SHIMMER = 5003; + +int VFX_IMP_MIRV = 6000; +int VFX_IMP_MIRV_IMPACT = 6001; +int VFX_IMP_SCREEN_SHAKE = 6002; + +int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 + +int AOE_PER_FOGACID = 0; +int AOE_PER_FOGFIRE = 1; +int AOE_PER_FOGSTINK = 2; +int AOE_PER_FOGKILL = 3; +int AOE_PER_FOGMIND = 4; +int AOE_PER_WALLFIRE = 5; +int AOE_PER_WALLWIND = 6; +int AOE_PER_WALLBLADE = 7; +int AOE_PER_WEB = 8; +int AOE_PER_ENTANGLE = 9; +//int AOE_PER_CHAOS = 10; +int AOE_PER_DARKNESS = 11; +int AOE_MOB_CIRCEVIL = 12; +int AOE_MOB_CIRCGOOD = 13; +int AOE_MOB_CIRCLAW = 14; +int AOE_MOB_CIRCCHAOS = 15; +int AOE_MOB_FEAR = 16; +int AOE_MOB_BLINDING = 17; +int AOE_MOB_UNEARTHLY = 18; +int AOE_MOB_MENACE = 19; +int AOE_MOB_UNNATURAL = 20; +int AOE_MOB_STUN = 21; +int AOE_MOB_PROTECTION = 22; +int AOE_MOB_FIRE = 23; +int AOE_MOB_FROST = 24; +int AOE_MOB_ELECTRICAL = 25; +int AOE_PER_FOGGHOUL = 26; +int AOE_MOB_TYRANT_FOG = 27; +int AOE_PER_STORM = 28; +int AOE_PER_INVIS_SPHERE = 29; +int AOE_MOB_SILENCE = 30; +int AOE_PER_DELAY_BLAST_FIREBALL = 31; +int AOE_PER_GREASE = 32; +int AOE_PER_CREEPING_DOOM = 33; +int AOE_PER_EVARDS_BLACK_TENTACLES = 34; +int AOE_MOB_INVISIBILITY_PURGE = 35; +int AOE_MOB_DRAGON_FEAR = 36; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/28/2004 +// These masks are used in Spells.2DA to indicate which spells +// can be affected by which Forms. Unfortunately, the script compiler +// won't let me make a constant with a Hex value, so I've had to use +// decimal. +int FORM_MASK_FORCE_FOCUS = 1; +int FORM_MASK_ENDURING_FORCE = 2; +int FORM_MASK_FORCE_AMPLIFICATION = 4; +int FORM_MASK_FORCE_POTENCY = 8; +int FORM_MASK_REGENERATION = 16; +int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; +*/ + +// these constants match those in spell.2da +int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. +int FORCE_POWER_MASTER_ALTER = 0; +int FORCE_POWER_MASTER_CONTROL = 1; +int FORCE_POWER_MASTER_SENSE = 2; +int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; +int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; +int FORCE_POWER_REGNERATION_ADVANCED = 5; +int FORCE_POWER_AFFECT_MIND = 6; +int FORCE_POWER_AFFLICTION = 7; +int FORCE_POWER_SPEED_BURST = 8; +int FORCE_POWER_CHOKE = 9; +int FORCE_POWER_CURE = 10; +int FORCE_POWER_DEATH_FIELD = 11; +int FORCE_POWER_DROID_DISABLE = 12; +int FORCE_POWER_DROID_DESTROY = 13; +int FORCE_POWER_DOMINATE = 14; +int FORCE_POWER_DRAIN_LIFE = 15; +int FORCE_POWER_FEAR = 16; +int FORCE_POWER_FORCE_ARMOR = 17; +int FORCE_POWER_FORCE_AURA = 18; +int FORCE_POWER_FORCE_BREACH = 19; +int FORCE_POWER_FORCE_IMMUNITY = 20; +int FORCE_POWER_FORCE_JUMP = 21; +int FORCE_POWER_FORCE_MIND = 22; +int FORCE_POWER_FORCE_PUSH = 23; +int FORCE_POWER_FORCE_SHIELD = 24; +int FORCE_POWER_FORCE_STORM = 25; +int FORCE_POWER_FORCE_WAVE = 26; +int FORCE_POWER_FORCE_WHIRLWIND = 27; +int FORCE_POWER_HEAL = 28; +int FORCE_POWER_HOLD = 29; +int FORCE_POWER_HORROR = 30; +int FORCE_POWER_INSANITY = 31; +int FORCE_POWER_KILL = 32; +int FORCE_POWER_KNIGHT_MIND = 33; +int FORCE_POWER_KNIGHT_SPEED = 34; +int FORCE_POWER_LIGHTNING = 35; +int FORCE_POWER_MIND_MASTERY = 36; +int FORCE_POWER_SPEED_MASTERY = 37; +int FORCE_POWER_PLAGUE = 38; +int FORCE_POWER_REGENERATION = 39; +int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; +int FORCE_POWER_RESIST_FORCE = 41; +int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; +int FORCE_POWER_SHOCK = 43; +int FORCE_POWER_SLEEP = 44; +int FORCE_POWER_SLOW = 45; +int FORCE_POWER_STUN = 46; +int FORCE_POWER_DROID_STUN = 47; +int FORCE_POWER_SUPRESS_FORCE = 48; +int FORCE_POWER_LIGHT_SABER_THROW = 49; +int FORCE_POWER_WOUND = 50; +int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; +int SPECIAL_ABILITY_BODY_FUEL = 52; +int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; +int SPECIAL_ABILITY_WARRIOR_STANCE = 54; +int SPECIAL_ABILITY_SENTINEL_STANCE = 55; +int SPECIAL_ABILITY_DOMINATE_MIND = 56; +int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; +int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; +int SPECIAL_ABILITY_ENHANCED_SENSES = 59; +int SPECIAL_ABILITY_CAMOFLAGE = 60; +int SPECIAL_ABILITY_TAUNT = 61; +int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; +int SPECIAL_ABILITY_RAGE = 63; + +// DJS-OEI 12/9/2003 +// New Force Powers +int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; +int FORCE_POWER_MASTER_HEAL = 134; +int FORCE_POWER_FORCE_BARRIER = 135; +int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; +int FORCE_POWER_MASTER_FORCE_BARRIER = 137; +int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast +int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. +int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // +int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast +int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. +int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // +int FORCE_POWER_CRUSH_OPPOSITION_I = 144; +int FORCE_POWER_CRUSH_OPPOSITION_II = 145; +int FORCE_POWER_CRUSH_OPPOSITION_III = 146; +int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; +int FORCE_POWER_CRUSH_OPPOSITION_V = 148; +int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; +int FORCE_POWER_FORCE_BODY = 150; +int FORCE_POWER_IMPROVED_FORCE_BODY = 151; +int FORCE_POWER_MASTER_FORCE_BODY = 152; +int FORCE_POWER_DRAIN_FORCE = 153; +int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; +int FORCE_POWER_MASTER_DRAIN_FORCE = 155; +int FORCE_POWER_FORCE_CAMOUFLAGE = 156; +int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; +int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; +int FORCE_POWER_FORCE_SCREAM = 159; +int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; +int FORCE_POWER_MASTER_FORCE_SCREAM = 161; +int FORCE_POWER_FORCE_REPULSION = 162; +int FORCE_POWER_FORCE_REDIRECTION = 163; +int FORCE_POWER_FURY = 164; +int FORCE_POWER_IMPROVED_FURY = 165; +int FORCE_POWER_MASTER_FURY = 166; +int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; +int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; +int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; +int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; +int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; +int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; +int FORCE_POWER_REVITALIZE = 173; +int FORCE_POWER_IMPROVED_REVITALIZE = 174; +int FORCE_POWER_MASTER_REVITALIZE = 175; +int FORCE_POWER_FORCE_SIGHT = 176; +int FORCE_POWER_FORCE_CRUSH = 177; +int FORCE_POWER_PRECOGNITION = 178; +int FORCE_POWER_BATTLE_PRECOGNITION = 179; +int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; +int FORCE_POWER_MIND_TRICK = 181; +int FORCE_POWER_CONFUSION = 200; +int FORCE_POWER_BEAST_TRICK = 182; +int FORCE_POWER_BEAST_CONFUSION = 184; +int FORCE_POWER_DROID_TRICK = 201; +int FORCE_POWER_DROID_CONFUSION = 269; +int FORCE_POWER_BREATH_CONTROL = 270; +int FORCE_POWER_WOOKIEE_RAGE_I = 271; +int FORCE_POWER_WOOKIEE_RAGE_II = 272; +int FORCE_POWER_WOOKIEE_RAGE_III = 273; + +// DJS-OEI 7/21/2004 +// Form re-design. +/* +// DJS-OEI 3/25/2004 +int FORM_LIGHTSABER_PADAWAN_I = 205; +int FORM_LIGHTSABER_PADAWAN_II = 206; +int FORM_LIGHTSABER_PADAWAN_III = 207; +int FORM_LIGHTSABER_DAKLEAN_I = 208; +int FORM_LIGHTSABER_DAKLEAN_II = 209; +int FORM_LIGHTSABER_DAKLEAN_III = 210; +int FORM_LIGHTSABER_SENTINEL_I = 211; +int FORM_LIGHTSABER_SENTINEL_II = 212; +int FORM_LIGHTSABER_SENTINEL_III = 213; +int FORM_LIGHTSABER_SODAK_I = 214; +int FORM_LIGHTSABER_SODAK_II = 215; +int FORM_LIGHTSABER_SODAK_III = 216; +int FORM_LIGHTSABER_ANCIENT_I = 217; +int FORM_LIGHTSABER_ANCIENT_II = 218; +int FORM_LIGHTSABER_ANCIENT_III = 219; +int FORM_LIGHTSABER_MASTER_I = 220; +int FORM_LIGHTSABER_MASTER_II = 221; +int FORM_LIGHTSABER_MASTER_III = 222; +int FORM_CONSULAR_FORCE_FOCUS_I = 223; +int FORM_CONSULAR_FORCE_FOCUS_II = 224; +int FORM_CONSULAR_FORCE_FOCUS_III = 225; +int FORM_CONSULAR_ENDURING_FORCE_I = 226; +int FORM_CONSULAR_ENDURING_FORCE_II = 227; +int FORM_CONSULAR_ENDURING_FORCE_III = 228; +int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; +int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; +int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; +int FORM_CONSULAR_FORCE_SHELL_I = 232; +int FORM_CONSULAR_FORCE_SHELL_II = 233; +int FORM_CONSULAR_FORCE_SHELL_III = 234; +int FORM_CONSULAR_FORCE_POTENCY_I = 235; +int FORM_CONSULAR_FORCE_POTENCY_II = 236; +int FORM_CONSULAR_FORCE_POTENCY_III = 237; +int FORM_CONSULAR_REGENERATION_I = 238; +int FORM_CONSULAR_REGENERATION_II = 239; +int FORM_CONSULAR_REGENERATION_III = 240; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; +int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; +*/ + +int FORM_SABER_I_SHII_CHO = 258; +int FORM_SABER_II_MAKASHI = 259; +int FORM_SABER_III_SORESU = 260; +int FORM_SABER_IV_ATARU = 261; +int FORM_SABER_V_SHIEN = 262; +int FORM_SABER_VI_NIMAN = 263; +int FORM_SABER_VII_JUYO = 264; +int FORM_FORCE_I_FOCUS = 265; +int FORM_FORCE_II_POTENCY = 266; +int FORM_FORCE_III_AFFINITY = 267; +int FORM_FORCE_IV_MASTERY = 268; + +// these constants must match those in poison.2da + +int POISON_ABILITY_SCORE_MILD = 0; +int POISON_ABILITY_SCORE_AVERAGE = 1; +int POISON_ABILITY_SCORE_VIRULENT = 2; +int POISON_DAMAGE_MILD = 3; +int POISON_DAMAGE_AVERAGE = 4; +int POISON_DAMAGE_VIRULENT = 5; +int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; +int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; +int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 +int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 +int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 + +// the thing after CREATURE_TYPE_ should refer to the +// actual "subtype" in the lists given above. +int CREATURE_TYPE_RACIAL_TYPE = 0; +int CREATURE_TYPE_PLAYER_CHAR = 1; +int CREATURE_TYPE_CLASS = 2; +int CREATURE_TYPE_REPUTATION = 3; +int CREATURE_TYPE_IS_ALIVE = 4; +int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; +int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; +int CREATURE_TYPE_PERCEPTION = 7; +//int CREATURE_TYPE_ALIGNMENT = 2; + +int REPUTATION_TYPE_FRIEND = 0; +int REPUTATION_TYPE_ENEMY = 1; +int REPUTATION_TYPE_NEUTRAL = 2; + +int PERCEPTION_SEEN_AND_HEARD = 0; +int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; +int PERCEPTION_HEARD_AND_NOT_SEEN = 2; +int PERCEPTION_SEEN_AND_NOT_HEARD = 3; +int PERCEPTION_NOT_HEARD = 4; +int PERCEPTION_HEARD = 5; +int PERCEPTION_NOT_SEEN = 6; +int PERCEPTION_SEEN = 7; + +int PLAYER_CHAR_NOT_PC = FALSE; +int PLAYER_CHAR_IS_PC = TRUE; + +int CLASS_TYPE_SOLDIER = 0; +int CLASS_TYPE_SCOUT = 1; +int CLASS_TYPE_SCOUNDREL = 2; +int CLASS_TYPE_JEDIGUARDIAN = 3; +int CLASS_TYPE_JEDICONSULAR = 4; +int CLASS_TYPE_JEDISENTINEL = 5; +int CLASS_TYPE_COMBATDROID = 6; +int CLASS_TYPE_EXPERTDROID = 7; +int CLASS_TYPE_MINION = 8; + +// DJS-OEI 2/11/2004 +int CLASS_TYPE_TECHSPECIALIST = 9; +int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe +int CLASS_TYPE_JEDIWEAPONMASTER = 11; +int CLASS_TYPE_JEDIMASTER = 12; +int CLASS_TYPE_JEDIWATCHMAN = 13; +int CLASS_TYPE_SITHMARAUDER = 14; +int CLASS_TYPE_SITHLORD = 15; +int CLASS_TYPE_SITHASSASSIN = 16; + + +int CLASS_TYPE_INVALID = 255; + +// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() +int PERSISTENT_ZONE_ACTIVE = 0; +int PERSISTENT_ZONE_FOLLOW = 1; + +int INVALID_STANDARD_FACTION = -1; +int STANDARD_FACTION_HOSTILE_1 = 1; +int STANDARD_FACTION_FRIENDLY_1 = 2; +int STANDARD_FACTION_HOSTILE_2 = 3; +int STANDARD_FACTION_FRIENDLY_2 = 4; +int STANDARD_FACTION_NEUTRAL = 5; +int STANDARD_FACTION_INSANE = 6; +int STANDARD_FACTION_PTAT_TUSKAN = 7; +int STANDARD_FACTION_GLB_XOR = 8; +int STANDARD_FACTION_SURRENDER_1 = 9; +int STANDARD_FACTION_SURRENDER_2 = 10; +int STANDARD_FACTION_PREDATOR = 11; +int STANDARD_FACTION_PREY = 12; +int STANDARD_FACTION_TRAP = 13; +int STANDARD_FACTION_ENDAR_SPIRE = 14; +int STANDARD_FACTION_RANCOR = 15; +int STANDARD_FACTION_GIZKA_1 = 16; +int STANDARD_FACTION_GIZKA_2 = 17; +// DJS-OEI 2/25/2004 +int STANDARD_FACTION_SELF_LOATHING = 21; +int STANDARD_FACTION_ONE_ON_ONE = 22; +int STANDARD_FACTION_PARTYPUPPET = 23; + +// Skill defines +int SKILL_COMPUTER_USE = 0; +int SKILL_DEMOLITIONS = 1; +int SKILL_STEALTH = 2; +int SKILL_AWARENESS = 3; +int SKILL_PERSUADE = 4; +int SKILL_REPAIR = 5; +int SKILL_SECURITY = 6; +int SKILL_TREAT_INJURY = 7; +int SKILL_MAX_SKILLS = 8; + +int SUBSKILL_FLAGTRAP = 100; +int SUBSKILL_RECOVERTRAP = 101; +int SUBSKILL_EXAMINETRAP = 102; + +// FEATS +//int FEAT_ADVANCED_DODGE = 0; +int FEAT_ADVANCED_JEDI_DEFENSE = 1; +int FEAT_ADVANCED_GUARD_STANCE = 2; +int FEAT_AMBIDEXTERITY = 3; +int FEAT_ARMOUR_PROF_HEAVY = 4; +int FEAT_ARMOUR_PROF_LIGHT = 5; +int FEAT_ARMOUR_PROF_MEDIUM = 6; +int FEAT_CAUTIOUS = 7; +int FEAT_CRITICAL_STRIKE = 8; +int FEAT_DOUBLE_WEAPON_FIGHTING = 9; +int FEAT_EMPATHY = 10; +int FEAT_FLURRY = 11; +int FEAT_GEAR_HEAD = 12; +int FEAT_GREAT_FORTITUDE = 13; +int FEAT_IMPLANT_LEVEL_1 = 14; +int FEAT_IMPLANT_LEVEL_2 = 15; +int FEAT_IMPLANT_LEVEL_3 = 16; +int FEAT_IMPROVED_POWER_ATTACK = 17; +int FEAT_IMPROVED_POWER_BLAST = 18; +int FEAT_IMPROVED_CRITICAL_STRIKE = 19; +int FEAT_IMPROVED_SNIPER_SHOT = 20; +int FEAT_IRON_WILL = 21; +int FEAT_LIGHTNING_REFLEXES = 22; +//int FEAT_MASTER_DODGE = 23; +int FEAT_MASTER_JEDI_DEFENSE = 24; +int FEAT_MASTER_GUARD_STANCE = 25; +int FEAT_MULTI_SHOT = 26; +int FEAT_PERCEPTIVE = 27; +int FEAT_POWER_ATTACK = 28; +int FEAT_POWER_BLAST = 29; +int FEAT_RAPID_SHOT = 30; +int FEAT_SNIPER_SHOT = 31; +int FEAT_WEAPON_FOCUS_BLASTER = 32; +int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; +int FEAT_WEAPON_FOCUS_GRENADE = 34; +int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; +int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; +int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; +int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; +int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; +int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; +int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; +int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; +int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; +int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; +int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; +int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; +int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; +int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; +int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; +int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; +int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; +int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; +int FEAT_WHIRLWIND_ATTACK = 53; +int FEAT_GUARD_STANCE = 54; +int FEAT_JEDI_DEFENSE = 55; +int FEAT_UNCANNY_DODGE_1 = 56; +int FEAT_UNCANNY_DODGE_2 = 57; +int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; +//int FEAT_DODGE = 59; +int FEAT_SNEAK_ATTACK_1D6 = 60; +int FEAT_SNEAK_ATTACK_2D6 = 61; +int FEAT_SNEAK_ATTACK_3D6 = 62; +int FEAT_SNEAK_ATTACK_4D6 = 63; +int FEAT_SNEAK_ATTACK_5D6 = 64; +int FEAT_SNEAK_ATTACK_6D6 = 65; +int FEAT_SNEAK_ATTACK_7D6 = 66; +int FEAT_SNEAK_ATTACK_8D6 = 67; +int FEAT_SNEAK_ATTACK_9D6 = 68; +int FEAT_SNEAK_ATTACK_10D6 = 69; +int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; +int FEAT_SKILL_FOCUS_STEALTH = 71; +int FEAT_SKILL_FOCUS_AWARENESS = 72; +int FEAT_SKILL_FOCUS_PERSUADE = 73; +int FEAT_SKILL_FOCUS_REPAIR = 74; +int FEAT_SKILL_FOCUS_SECURITY = 75; +int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; +int FEAT_MASTER_SNIPER_SHOT = 77; +int FEAT_DROID_UPGRADE_1 = 78; +int FEAT_DROID_UPGRADE_2 = 79; +int FEAT_DROID_UPGRADE_3 = 80; +int FEAT_MASTER_CRITICAL_STRIKE = 81; +int FEAT_MASTER_POWER_BLAST = 82; +int FEAT_MASTER_POWER_ATTACK = 83; +int FEAT_TOUGHNESS = 84; +int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; +int FEAT_FORCE_FOCUS_ALTER = 86; +int FEAT_FORCE_FOCUS_CONTROL = 87; +int FEAT_FORCE_FOCUS_SENSE = 88; +int FEAT_FORCE_FOCUS_ADVANCED = 89; +int FEAT_FORCE_FOCUS_MASTERY = 90; +int FEAT_IMPROVED_FLURRY = 91; +int FEAT_IMPROVED_RAPID_SHOT = 92; +int FEAT_PROFICIENCY_ALL = 93; +int FEAT_BATTLE_MEDITATION = 94; +// DJS-OEI 11/12/2003 +int FEAT_EVASION = 125; +int FEAT_TARGETING_1 = 126; +int FEAT_TARGETING_2 = 127; +int FEAT_TARGETING_3 = 128; +int FEAT_TARGETING_4 = 129; +int FEAT_TARGETING_5 = 130; +int FEAT_TARGETING_6 = 131; +int FEAT_TARGETING_7 = 132; +int FEAT_TARGETING_8 = 133; +int FEAT_TARGETING_9 = 134; +int FEAT_TARGETING_10 = 135; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT = 136; +int FEAT_IMPROVED_PRECISE_SHOT = 137; +int FEAT_MASTER_PRECISE_SHOT = 138; +*/ +int FEAT_CLOSE_COMBAT = 139; +int FEAT_IMPROVED_CLOSE_COMBAT = 140; +int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; +int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; +int FEAT_REGENERATE_FORCE_POINTS = 143; +int FEAT_DARK_SIDE_CORRUPTION = 149; +int FEAT_IGNORE_PAIN_1 = 150; +int FEAT_IGNORE_PAIN_2 = 151; +int FEAT_IGNORE_PAIN_3 = 152; +int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; +int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; +int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; +int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; +int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; +int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; +int FEAT_DEFLECT = 168; +int FEAT_INNER_STRENGTH_1 = 169; +int FEAT_INNER_STRENGTH_2 = 170; +int FEAT_INNER_STRENGTH_3 = 171; +int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; +int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; +int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; +int FEAT_CRAFT = 175; +int FEAT_MASTERCRAFT_WEAPONS_1 = 176; +int FEAT_MASTERCRAFT_WEAPONS_2 = 177; +int FEAT_MASTERCRAFT_WEAPONS_3 = 178; +int FEAT_MASTERCRAFT_ARMOR_1 = 179; +int FEAT_MASTERCRAFT_ARMOR_2 = 180; +int FEAT_MASTERCRAFT_ARMOR_3 = 181; +int FEAT_DROID_INTERFACE = 182; +int FEAT_CLASS_SKILL_AWARENESS = 183; +int FEAT_CLASS_SKILL_COMPUTER_USE = 184; +int FEAT_CLASS_SKILL_DEMOLITIONS = 185; +int FEAT_CLASS_SKILL_REPAIR = 186; +int FEAT_CLASS_SKILL_SECURITY = 187; +int FEAT_CLASS_SKILL_STEALTH = 188; +int FEAT_CLASS_SKILL_TREAT_INJURY = 189; +int FEAT_DUAL_STRIKE = 190; +int FEAT_IMPROVED_DUAL_STRIKE = 191; +int FEAT_MASTER_DUAL_STRIKE = 192; +int FEAT_FINESSE_LIGHTSABERS = 193; +int FEAT_FINESSE_MELEE_WEAPONS = 194; +int FEAT_MOBILITY = 195; +int FEAT_REGENERATE_VITALITY_POINTS = 196; +int FEAT_STEALTH_RUN = 197; +int FEAT_KINETIC_COMBAT = 198; +int FEAT_SURVIVAL = 199; +int FEAT_MANDALORIAN_COURAGE = 200; +int FEAT_PERSONAL_CLOAKING_SHIELD = 201; +int FEAT_MENTOR = 202; +int FEAT_IMPLANT_SWITCHING = 203; +int FEAT_SPIRIT = 204; +int FEAT_FORCE_CHAIN = 205; +int FEAT_WAR_VETERAN = 206; +// DJS-OEI 10/5/2004 +// Moved down to 240+ +/* +int FEAT_PRECISE_SHOT_IV = 226; +int FEAT_PRECISE_SHOT_V = 227; +*/ +int FEAT_FIGHTING_SPIRIT = 236; +int FEAT_HEROIC_RESOLVE = 237; +int FEAT_PRECISE_SHOT = 240; +int FEAT_IMPROVED_PRECISE_SHOT = 241; +int FEAT_MASTER_PRECISE_SHOT = 242; +int FEAT_PRECISE_SHOT_IV = 243; +int FEAT_PRECISE_SHOT_V = 244; + +// Special Attack Defines +int SPECIAL_ATTACK_INVALID = 0; +int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; +int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; +int SPECIAL_ATTACK_SAP = 3; +int SPECIAL_ATTACK_DISARM = 4; +int SPECIAL_ATTACK_IMPROVED_DISARM = 5; +int SPECIAL_ATTACK_KNOCKDOWN = 6; +int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; +int SPECIAL_ATTACK_STUNNING_FIST = 8; +int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; +int SPECIAL_ATTACK_RAPID_SHOT = 10; + +// Combat Mode Defines +int COMBAT_MODE_INVALID = 0; +int COMBAT_MODE_PARRY = 1; +int COMBAT_MODE_POWER_ATTACK = 2; +int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; +int COMBAT_MODE_FLURRY_OF_BLOWS = 4; +int COMBAT_MODE_RAPID_SHOT = 5; + +// These represent the row in the difficulty 2da, rather than +// a difficulty value. +int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; +int ENCOUNTER_DIFFICULTY_EASY = 1; +int ENCOUNTER_DIFFICULTY_NORMAL = 2; +int ENCOUNTER_DIFFICULTY_HARD = 3; +int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; + +// Looping animation constants. +int ANIMATION_LOOPING_PAUSE = 0; +int ANIMATION_LOOPING_PAUSE2 = 1; +int ANIMATION_LOOPING_LISTEN = 2; +int ANIMATION_LOOPING_MEDITATE = 3; +int ANIMATION_LOOPING_WORSHIP = 4; +//int ANIMATION_LOOPING_LOOK_FAR = 5; +//int ANIMATION_LOOPING_SIT_CHAIR = 6; +//int ANIMATION_LOOPING_SIT_CROSS = 7; +int ANIMATION_LOOPING_TALK_NORMAL = 5; +int ANIMATION_LOOPING_TALK_PLEADING = 6; +int ANIMATION_LOOPING_TALK_FORCEFUL = 7; +int ANIMATION_LOOPING_TALK_LAUGHING = 8; +int ANIMATION_LOOPING_TALK_SAD = 9; +int ANIMATION_LOOPING_GET_LOW = 10; +int ANIMATION_LOOPING_GET_MID = 11; +int ANIMATION_LOOPING_PAUSE_TIRED = 12; +int ANIMATION_LOOPING_PAUSE_DRUNK = 13; +int ANIMATION_LOOPING_FLIRT = 14; +int ANIMATION_LOOPING_USE_COMPUTER = 15; +int ANIMATION_LOOPING_DANCE = 16; +int ANIMATION_LOOPING_DANCE1 = 17; +int ANIMATION_LOOPING_HORROR = 18; +int ANIMATION_LOOPING_READY = 19; +int ANIMATION_LOOPING_DEACTIVATE = 20; +int ANIMATION_LOOPING_SPASM = 21; +int ANIMATION_LOOPING_SLEEP = 22; +int ANIMATION_LOOPING_PRONE = 23; +int ANIMATION_LOOPING_PAUSE3 = 24; +int ANIMATION_LOOPING_WELD = 25; +int ANIMATION_LOOPING_DEAD = 26; +int ANIMATION_LOOPING_TALK_INJURED = 27; +int ANIMATION_LOOPING_LISTEN_INJURED = 28; +int ANIMATION_LOOPING_TREAT_INJURED = 29; +int ANIMATION_LOOPING_DEAD_PRONE = 30; +int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; +int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; +int ANIMATION_LOOPING_CHECK_BODY = 33; +int ANIMATION_LOOPING_UNLOCK_DOOR = 34; +int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; + +int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 +int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 + +int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 +//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 +int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 +int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 +int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 +int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 + +// NOTE: Choke is really a looping animation. The fire and forget constant has +// been left in because it has already been used in many places. Please +// use this constant from now on. +int ANIMATION_LOOPING_CHOKE = 116; + +// Fire and forget animation constants. +int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; +int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; +int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; +int ANIMATION_FIREFORGET_PAUSE_BORED = 103; +int ANIMATION_FIREFORGET_SALUTE = 104; +int ANIMATION_FIREFORGET_BOW = 105; +//int ANIMATION_FIREFORGET_STEAL = 106; +int ANIMATION_FIREFORGET_GREETING = 106; +int ANIMATION_FIREFORGET_TAUNT = 107; +int ANIMATION_FIREFORGET_VICTORY1 = 108; +int ANIMATION_FIREFORGET_VICTORY2 = 109; +int ANIMATION_FIREFORGET_VICTORY3 = 110; +//int ANIMATION_FIREFORGET_READ = 111; +int ANIMATION_FIREFORGET_INJECT = 112; +int ANIMATION_FIREFORGET_USE_COMPUTER = 113; +int ANIMATION_FIREFORGET_PERSUADE = 114; +int ANIMATION_FIREFORGET_ACTIVATE = 115; +// NOTE: Please do not use this choke constant anymore. The choke is not a fire +// and forget animation. The looping choke constant above should be used +// instead. +int ANIMATION_FIREFORGET_CHOKE = 116; +int ANIMATION_FIREFORGET_THROW_HIGH = 117; +int ANIMATION_FIREFORGET_THROW_LOW = 118; +int ANIMATION_FIREFORGET_CUSTOM01 = 119; +int ANIMATION_FIREFORGET_TREAT_INJURED = 120; +int ANIMATION_FIREFORGET_FORCE_CAST = 121; +int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 +int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 +int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 + +// Placeable animation constants +int ANIMATION_PLACEABLE_ACTIVATE = 200; +int ANIMATION_PLACEABLE_DEACTIVATE = 201; +int ANIMATION_PLACEABLE_OPEN = 202; +int ANIMATION_PLACEABLE_CLOSE = 203; +int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; +int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; +int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; +int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; +int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; +int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; +int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; +int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; +int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; +int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; + + +// Room Animation Constants +int ANIMATION_ROOM_SCRIPTLOOP01 = 1; +int ANIMATION_ROOM_SCRIPTLOOP02 = 2; +int ANIMATION_ROOM_SCRIPTLOOP03 = 3; +int ANIMATION_ROOM_SCRIPTLOOP04 = 4; +int ANIMATION_ROOM_SCRIPTLOOP05 = 5; +int ANIMATION_ROOM_SCRIPTLOOP06 = 6; +int ANIMATION_ROOM_SCRIPTLOOP07 = 7; +int ANIMATION_ROOM_SCRIPTLOOP08 = 8; +int ANIMATION_ROOM_SCRIPTLOOP09 = 9; +int ANIMATION_ROOM_SCRIPTLOOP10 = 10; +int ANIMATION_ROOM_SCRIPTLOOP11 = 11; +int ANIMATION_ROOM_SCRIPTLOOP12 = 12; +int ANIMATION_ROOM_SCRIPTLOOP13 = 13; +int ANIMATION_ROOM_SCRIPTLOOP14 = 14; +int ANIMATION_ROOM_SCRIPTLOOP15 = 15; +int ANIMATION_ROOM_SCRIPTLOOP16 = 16; +int ANIMATION_ROOM_SCRIPTLOOP17 = 17; +int ANIMATION_ROOM_SCRIPTLOOP18 = 18; +int ANIMATION_ROOM_SCRIPTLOOP19 = 19; +int ANIMATION_ROOM_SCRIPTLOOP20 = 20; + +int TALENT_TYPE_FORCE = 0; +int TALENT_TYPE_SPELL = 0; +int TALENT_TYPE_FEAT = 1; +int TALENT_TYPE_SKILL = 2; + +int TALENT_EXCLUDE_ALL_OF_TYPE = -1; + +int INVENTORY_DISTURB_TYPE_ADDED = 0; +int INVENTORY_DISTURB_TYPE_REMOVED = 1; +int INVENTORY_DISTURB_TYPE_STOLEN = 2; + +int GUI_PANEL_PLAYER_DEATH = 0; + +int POLYMORPH_TYPE_WEREWOLF = 0; +int POLYMORPH_TYPE_WERERAT = 1; +int POLYMORPH_TYPE_WERECAT = 2; +int POLYMORPH_TYPE_GIANT_SPIDER = 3; +int POLYMORPH_TYPE_TROLL = 4; +int POLYMORPH_TYPE_UMBER_HULK = 5; +int POLYMORPH_TYPE_PIXIE = 6; +int POLYMORPH_TYPE_ZOMBIE = 7; +int POLYMORPH_TYPE_RED_DRAGON = 8; +int POLYMORPH_TYPE_FIRE_GIANT = 9; +int POLYMORPH_TYPE_BALOR = 10; +int POLYMORPH_TYPE_DEATH_SLAAD = 11; +int POLYMORPH_TYPE_IRON_GOLEM = 12; +int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; +int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; +int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; +int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; +int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; +int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; +int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; +int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; +int POLYMORPH_TYPE_BROWN_BEAR = 21; +int POLYMORPH_TYPE_PANTHER = 22; +int POLYMORPH_TYPE_WOLF = 23; +int POLYMORPH_TYPE_BOAR = 24; +int POLYMORPH_TYPE_BADGER = 25; +int POLYMORPH_TYPE_PENGUIN = 26; +int POLYMORPH_TYPE_COW = 27; +int POLYMORPH_TYPE_DOOM_KNIGHT = 28; +int POLYMORPH_TYPE_YUANTI = 29; +int POLYMORPH_TYPE_IMP = 30; +int POLYMORPH_TYPE_QUASIT = 31; +int POLYMORPH_TYPE_SUCCUBUS = 32; +int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; +int POLYMORPH_TYPE_DIRE_PANTHER = 34; +int POLYMORPH_TYPE_DIRE_WOLF = 35; +int POLYMORPH_TYPE_DIRE_BOAR = 36; +int POLYMORPH_TYPE_DIRE_BADGER = 37; + +int INVISIBILITY_TYPE_NORMAL = 1; +int INVISIBILITY_TYPE_DARKNESS = 2; +int INVISIBILITY_TYPE_IMPROVED = 4; + +int CREATURE_SIZE_INVALID = 0; +int CREATURE_SIZE_TINY = 1; +int CREATURE_SIZE_SMALL = 2; +int CREATURE_SIZE_MEDIUM = 3; +int CREATURE_SIZE_LARGE = 4; +int CREATURE_SIZE_HUGE = 5; + +int CAMERA_MODE_CHASE_CAMERA = 0; +int CAMERA_MODE_TOP_DOWN = 1; +int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; + +int PROJECTILE_PATH_TYPE_DEFAULT = 0; +int PROJECTILE_PATH_TYPE_HOMING = 1; +int PROJECTILE_PATH_TYPE_BALLISTIC = 2; +int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; +int PROJECTILE_PATH_TYPE_ACCELERATING = 4; + +int GAME_DIFFICULTY_VERY_EASY = 0; +int GAME_DIFFICULTY_EASY = 1; +int GAME_DIFFICULTY_NORMAL = 2; +int GAME_DIFFICULTY_CORE_RULES = 3; +int GAME_DIFFICULTY_DIFFICULT = 4; + +int ACTION_MOVETOPOINT = 0; +int ACTION_PICKUPITEM = 1; +int ACTION_DROPITEM = 2; +int ACTION_ATTACKOBJECT = 3; +int ACTION_CASTSPELL = 4; +int ACTION_OPENDOOR = 5; +int ACTION_CLOSEDOOR = 6; +int ACTION_DIALOGOBJECT = 7; +int ACTION_DISABLETRAP = 8; +int ACTION_RECOVERTRAP = 9; +int ACTION_FLAGTRAP = 10; +int ACTION_EXAMINETRAP = 11; +int ACTION_SETTRAP = 12; +int ACTION_OPENLOCK = 13; +int ACTION_LOCK = 14; +int ACTION_USEOBJECT = 15; +int ACTION_ANIMALEMPATHY = 16; +int ACTION_REST = 17; +int ACTION_TAUNT = 18; +int ACTION_ITEMCASTSPELL = 19; +int ACTION_COUNTERSPELL = 31; +int ACTION_HEAL = 33; +int ACTION_PICKPOCKET = 34; +int ACTION_FOLLOW = 35; +int ACTION_WAIT = 36; +int ACTION_SIT = 37; +int ACTION_FOLLOWLEADER = 38; +int ACTION_FOLLOWOWNER = 43; + + +int ACTION_INVALID = 65535; +int ACTION_QUEUEEMPTY = 65534; + +int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; +int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; +int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; +int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; +int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; +int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; +int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; +int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; +int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; +int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; +int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; +// DJS-OEI 1/20/2004 +int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; +int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; +int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; +int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; +int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; +int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; +int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; +int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; +int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; + +int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; +int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; + +int CONVERSATION_TYPE_CINEMATIC = 0; +int CONVERSATION_TYPE_COMPUTER = 1; + +int PLANET_DANTOOINE = 0; +int PLANET_DXUN = 1; +int PLANET_EBON_HAWK = 2; +int PLANET_KORRIBAN = 3; +int PLANET_M4_78 = 4; +int PLANET_MALACHOR_V = 5; +int PLANET_NAR_SHADDAA = 6; +int PLANET_ONDERON = 7; +int PLANET_PERAGUS = 8; +int PLANET_TELOS = 9; +int PLANET_HARBINGER = 10; +int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers +int PLANET_LIVE_02 = 12; +int PLANET_LIVE_03 = 13; +int PLANET_LIVE_04 = 14; +int PLANET_LIVE_05 = 15; +int PLANET_LIVE_06 = 16; + +int NPC_PLAYER =-1; +int NPC_ATTON = 0; +int NPC_BAO_DUR = 1; +int NPC_CANDEROUS = 2; +int NPC_G0T0 = 3; +int NPC_HANDMAIDEN = 4; +int NPC_HK_47 = 5; +int NPC_KREIA = 6; +int NPC_MIRA = 7; +int NPC_T3_M4 = 8; +int NPC_VISAS = 9; +int NPC_HANHARR = 10; +int NPC_DISCIPLE = 11; + +int PUP_SENSORBALL = 0; +int PUP_OTHER1 = 1; +int PUP_OTHER2 = 2; + + +int PARTY_AISTYLE_AGGRESSIVE = 0; +int PARTY_AISTYLE_DEFENSIVE = 1; +int PARTY_AISTYLE_PASSIVE = 2; + +int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_RANGED_ATTACK = 1; +int NPC_AISTYLE_MELEE_ATTACK = 2; +int NPC_AISTYLE_AID = 3; +int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 +int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals +int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots +int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack +int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member +int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. +int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. +int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. +int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff +int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. +int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. + +int DISGUISE_TYPE_TEST = 1; +int DISGUISE_TYPE_P_T3M3 = 2; +int DISGUISE_TYPE_P_HK47 = 3; +int DISGUISE_TYPE_P_BASTILLA = 4; +int DISGUISE_TYPE_P_CAND = 5; +int DISGUISE_TYPE_P_CARTH = 6; +int DISGUISE_TYPE_P_JOLEE = 7; +int DISGUISE_TYPE_P_JUHANI = 8; +int DISGUISE_TYPE_P_ZAALBAR = 9; +int DISGUISE_TYPE_P_MISSION = 10; +int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; +int DISGUISE_TYPE_N_BITH = 12; +int DISGUISE_TYPE_N_CALONORD = 13; +int DISGUISE_TYPE_N_COMMF = 14; +int DISGUISE_TYPE_N_COMMKIDF = 15; +int DISGUISE_TYPE_N_COMMKIDM = 16; +int DISGUISE_TYPE_N_COMMM = 17; +int DISGUISE_TYPE_N_CZERLAOFF = 18; +int DISGUISE_TYPE_N_DARKJEDIF = 19; +int DISGUISE_TYPE_N_DARKJEDIM = 20; +int DISGUISE_TYPE_N_DARTHMALAK = 21; +int DISGUISE_TYPE_N_DARTHREVAN = 22; +int DISGUISE_TYPE_N_DODONNA = 23; +int DISGUISE_TYPE_N_DUROS = 24; +int DISGUISE_TYPE_N_FATCOMF = 25; +int DISGUISE_TYPE_N_FATCOMM = 26; +int DISGUISE_TYPE_N_SMUGGLER = 27; +int DISGUISE_TYPE_N_SITHSOLDIER = 28; +// int DISGUISE_TYPE_ = 29; +int DISGUISE_TYPE_N_JEDICOUNTF = 30; +int DISGUISE_TYPE_N_JEDICOUNTM = 31; +int DISGUISE_TYPE_N_JEDIMALEK = 32; +int DISGUISE_TYPE_N_JEDIMEMF = 33; +int DISGUISE_TYPE_N_JEDIMEMM = 34; +int DISGUISE_TYPE_N_MANDALORIAN = 35; +int DISGUISE_TYPE_N_RAKATA = 36; +int DISGUISE_TYPE_N_REPOFF = 37; +int DISGUISE_TYPE_N_REPSOLD = 38; +int DISGUISE_TYPE_N_RODIAN = 39; +int DISGUISE_TYPE_C_SELKATH = 40; +int DISGUISE_TYPE_N_SITHAPPREN = 41; +int DISGUISE_TYPE_N_SITHCOMF = 42; +int DISGUISE_TYPE_N_SITHCOMM = 43; +//int DISGUISE_TYPE_N_SITHSOLDIER = 44; +int DISGUISE_TYPE_N_SWOOPGANG = 45; +int DISGUISE_TYPE_N_TUSKEN = 46; +int DISGUISE_TYPE_N_TWILEKF = 47; +int DISGUISE_TYPE_N_TWILEKM = 48; +int DISGUISE_TYPE_N_WALRUSMAN = 49; +int DISGUISE_TYPE_N_WOOKIEF = 50; +int DISGUISE_TYPE_N_WOOKIEM = 51; +int DISGUISE_TYPE_N_YODA = 52; +int DISGUISE_TYPE_C_BANTHA = 53; +int DISGUISE_TYPE_C_BRITH = 54; +int DISGUISE_TYPE_C_DEWBACK = 55; +int DISGUISE_TYPE_C_DRDASSASSIN = 56; +int DISGUISE_TYPE_C_DRDASTRO = 57; +int DISGUISE_TYPE_C_DRDG = 58; +int DISGUISE_TYPE_C_DRDMKFOUR = 59; +int DISGUISE_TYPE_C_DRDMKONE = 60; +int DISGUISE_TYPE_C_DRDMKTWO = 61; +int DISGUISE_TYPE_C_DRDPROBE = 62; +int DISGUISE_TYPE_C_DRDPROT = 63; +int DISGUISE_TYPE_C_DRDSENTRY = 64; +int DISGUISE_TYPE_C_DRDSPYDER = 65; +int DISGUISE_TYPE_C_DRDWAR = 66; +int DISGUISE_TYPE_C_FIRIXA = 67; +int DISGUISE_TYPE_C_GAMMOREAN = 68; +int DISGUISE_TYPE_C_GIZKA = 69; +int DISGUISE_TYPE_C_HUTT = 70; +int DISGUISE_TYPE_C_IRIAZ = 71; +int DISGUISE_TYPE_C_ITHORIAN = 72; +int DISGUISE_TYPE_C_JAWA = 73; +int DISGUISE_TYPE_C_KATAARN = 74; +int DISGUISE_TYPE_C_KHOUNDA = 75; +int DISGUISE_TYPE_C_KHOUNDB = 76; +int DISGUISE_TYPE_C_KRAYTDRAGON = 77; +int DISGUISE_TYPE_C_MYKAL = 78; +int DISGUISE_TYPE_C_RAKGHOUL = 79; +int DISGUISE_TYPE_C_RANCOR = 80; +int DISGUISE_TYPE_C_SEABEAST = 81; +//int DISGUISE_TYPE_ = 82; +int DISGUISE_TYPE_C_TACH = 83; +int DISGUISE_TYPE_C_TWOHEAD = 84; +int DISGUISE_TYPE_C_VERKAAL = 85; +int DISGUISE_TYPE_C_WRAID = 86; +int DISGUISE_TYPE_C_RONTO = 87; +int DISGUISE_TYPE_C_KINRATH = 88; +int DISGUISE_TYPE_C_TUKATA = 89; +int DISGUISE_TYPE_N_TUSKENF = 90; +int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; +int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; +int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; +int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; +int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; +int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; +int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; +int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; +int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; +int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; +int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; +int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; +int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; +int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; +int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; +int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; +int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; +int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; +int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; +int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; +int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; +int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; +int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; +int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; +int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; +int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; +int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; +int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; +int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; +int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; +int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; +int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; +int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; +int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; +int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; +int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; +int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; +int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; +int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; +int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; +int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; +int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; +int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; +int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; +int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; +int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; +int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; +int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; +int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; +int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; +int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; +int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; +int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; +int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; +int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; +int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; +int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; +int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; +int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; +int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; +int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; +int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; +int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; +int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; +int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; +int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; +int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; +int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; +int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; +int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; +int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; +int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; +int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; +int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; +int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; +int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; +int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; +int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; +int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; +int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; +int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; +int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; +int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; +int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; +int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; +int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; +int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; +int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; +int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; +int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; +int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; +int DISGUISE_TYPE_TURRET = 182; +int DISGUISE_TYPE_TURRET2 = 183; +int DISGUISE_TYPE_N_DARTHBAND = 184; +int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; +int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; +int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; +int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; +int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; +int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; +int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; +int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; +int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; +int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; +int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; +int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; +int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; +int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; +int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; +int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; +int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; +int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; +int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; +int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; +int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; +int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; +int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; +int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; +int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; +int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; +int DISGUISE_TYPE_HUTT_02 = 228; +int DISGUISE_TYPE_HUTT_03 = 229; +int DISGUISE_TYPE_HUTT_04 = 230; +int DISGUISE_TYPE_DROID_ASTRO_02 = 231; +int DISGUISE_TYPE_DROID_ASTRO_03 = 232; +int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; +int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; +int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; +int DISGUISE_TYPE_DROID_WAR_02 = 236; +int DISGUISE_TYPE_DROID_WAR_03 = 237; +int DISGUISE_TYPE_DROID_WAR_04 = 238; +int DISGUISE_TYPE_DROID_WAR_05 = 239; +int DISGUISE_TYPE_GAMMOREAN_02 = 240; +int DISGUISE_TYPE_GAMMOREAN_03 = 241; +int DISGUISE_TYPE_GAMMOREAN_04 = 242; +int DISGUISE_TYPE_ITHORIAN_02 = 243; +int DISGUISE_TYPE_ITHORIAN_03 = 244; +int DISGUISE_TYPE_KATH_HOUND_A02 = 245; +int DISGUISE_TYPE_KATH_HOUND_A03 = 246; +int DISGUISE_TYPE_KATH_HOUND_A04 = 247; +int DISGUISE_TYPE_KATH_HOUND_B02 = 248; +int DISGUISE_TYPE_KATH_HOUND_B03 = 249; +int DISGUISE_TYPE_KATH_HOUND_B04 = 250; +int DISGUISE_TYPE_WRAID_02 = 251; +int DISGUISE_TYPE_WRAID_03 = 252; +int DISGUISE_TYPE_WRAID_04 = 253; +int DISGUISE_TYPE_RAKATA_02 = 254; +int DISGUISE_TYPE_RAKATA_03 = 255; +int DISGUISE_TYPE_RODIAN_02 = 256; +int DISGUISE_TYPE_RODIAN_03 = 257; +int DISGUISE_TYPE_RODIAN_04 = 258; +int DISGUISE_TYPE_SELKATH_02 = 259; +int DISGUISE_TYPE_SELKATH_03 = 260; +int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; +int DISGUISE_TYPE_SWOOP_GANG_02 = 262; +int DISGUISE_TYPE_SWOOP_GANG_03 = 263; +int DISGUISE_TYPE_SWOOP_GANG_04 = 264; +int DISGUISE_TYPE_SWOOP_GANG_05 = 265; +int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; +int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; +int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; +int DISGUISE_TYPE_TWILEK_MALE_02 = 269; +int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; +int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; +int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; +int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; +int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; +int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; +int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; +int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; +int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; +int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; +int DISGUISE_TYPE_YUTHURA_BAN = 280; +int DISGUISE_TYPE_SHYRACK_01 = 281; +int DISGUISE_TYPE_SHYRACK_02 = 282; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; +int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; +int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; +int DISGUISE_TYPE_SITH_FEM_WHITE = 291; +int DISGUISE_TYPE_SITH_FEM_BLACK = 292; +int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; +int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; +int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; +int DISGUISE_TYPE_SITH_MAL_WHITE = 296; +int DISGUISE_TYPE_SITH_MAL_BLACK = 297; +int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; +int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; +int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; +int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; +int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; +int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; +int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; +int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; +int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; +int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; + +int PLOT_O_DOOM = 0; +int PLOT_O_SCARY_STUFF = 1; +int PLOT_O_BIG_MONSTERS = 2; + +int FORMATION_WEDGE = 0; +int FORMATION_LINE = 1; + +int SUBSCREEN_ID_NONE = 0; +int SUBSCREEN_ID_EQUIP = 1; +int SUBSCREEN_ID_ITEM = 2; +int SUBSCREEN_ID_CHARACTER_RECORD = 3; +int SUBSCREEN_ID_ABILITY = 4; +int SUBSCREEN_ID_MAP = 5; +int SUBSCREEN_ID_QUEST = 6; +int SUBSCREEN_ID_OPTIONS = 7; +int SUBSCREEN_ID_MESSAGES = 8; + +int SHIELD_DROID_ENERGY_1 = 0; +int SHIELD_DROID_ENERGY_2 = 1; +int SHIELD_DROID_ENERGY_3 = 2; +int SHIELD_DROID_ENVIRO_1 = 3; +int SHIELD_DROID_ENVIRO_2 = 4; +int SHIELD_DROID_ENVIRO_3 = 5; +int SHIELD_ENERGY = 6; +int SHIELD_ENERGY_SITH = 7; +int SHIELD_ENERGY_ARKANIAN = 8; +int SHIELD_ECHANI = 9; +int SHIELD_MANDALORIAN_MELEE = 10; +int SHIELD_MANDALORIAN_POWER = 11; +int SHIELD_DUELING_ECHANI = 12; +int SHIELD_DUELING_YUSANIS = 13; +int SHIELD_VERPINE_PROTOTYPE = 14; +int SHIELD_ANTIQUE_DROID = 15; +int SHIELD_PLOT_TAR_M09AA = 16; +int SHIELD_PLOT_UNK_M44AA = 17; +int SHIELD_PLOT_MAN_M28AA = 18; +int SHIELD_HEAT = 19; +int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 + + +int SUBRACE_NONE = 0; +int SUBRACE_WOOKIE = 1; + +int VIDEO_EFFECT_NONE = -1; +int VIDEO_EFFECT_SECURITY_CAMERA = 0; +int VIDEO_EFFECT_FREELOOK_T3M4 = 1; +int VIDEO_EFFECT_FREELOOK_HK47 = 2; +int VIDEO_EFFECT_CLAIRVOYANCE = 3; +int VIDEO_EFFECT_FORCESIGHT = 4; +int VIDEO_EFFECT_VISAS_FREELOOK = 5; +int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; +int VIDEO_EFFECT_FURY_1 = 7; +int VIDEO_EFFECT_FURY_2 = 8; +int VIDEO_EFFECT_FURY_3 = 9; +int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. + +// DJS-OEI 1/14/2004 +// Modified the way these work. The values +// listed here are now direct references to +// rows in Tutorial.2DA. Originally these +// would have to be converted to .2DA ids +// in the code. +int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; +int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; +// DJS-OEI 11/21/2003 +int TUTORIAL_WINDOW_TEMP1 = 42; +int TUTORIAL_WINDOW_TEMP2 = 43; +int TUTORIAL_WINDOW_TEMP3 = 44; +int TUTORIAL_WINDOW_TEMP4 = 45; +int TUTORIAL_WINDOW_TEMP5 = 46; +int TUTORIAL_WINDOW_TEMP6 = 47; +int TUTORIAL_WINDOW_TEMP7 = 48; +int TUTORIAL_WINDOW_TEMP8 = 49; +int TUTORIAL_WINDOW_TEMP9 = 50; +int TUTORIAL_WINDOW_TEMP10 = 51; +int TUTORIAL_WINDOW_TEMP11 = 52; +int TUTORIAL_WINDOW_TEMP12 = 53; +int TUTORIAL_WINDOW_TEMP13 = 54; +int TUTORIAL_WINDOW_TEMP14 = 55; +int TUTORIAL_WINDOW_TEMP15 = 56; + +int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 +int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 +int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 +int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 +int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 + +int MOVEMENT_SPEED_PC = 0; +int MOVEMENT_SPEED_IMMOBILE = 1; +int MOVEMENT_SPEED_VERYSLOW = 2; +int MOVEMENT_SPEED_SLOW = 3; +int MOVEMENT_SPEED_NORMAL = 4; +int MOVEMENT_SPEED_FAST = 5; +int MOVEMENT_SPEED_VERYFAST = 6; +int MOVEMENT_SPEED_DEFAULT = 7; +int MOVEMENT_SPEED_DMFAST = 8; + +int LIVE_CONTENT_PKG1 = 1; +int LIVE_CONTENT_PKG2 = 2; +int LIVE_CONTENT_PKG3 = 3; +int LIVE_CONTENT_PKG4 = 4; +int LIVE_CONTENT_PKG5 = 5; +int LIVE_CONTENT_PKG6 = 6; + +//RWT-OEI 12/16/03 +// These constants are for the Implant Swapping support in a_swapimplant +// They correspond directly with the ACTIONIDs in the game for each of the +// implant swapping actions. +int IMPLANT_NONE = 0; +int IMPLANT_REGEN = 1; +int IMPLANT_STR = 2; +int IMPLANT_END = 3; +int IMPLANT_AGI = 4; + +// DJS-OEI 6/12/2004 +// These constants can be OR'ed together and sent to SetForfeitConditions() +// in order to set up flagging situations that will alert the area script that +// the player has violated them. This is usually used for Battle Arena restrictions. +int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers +int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) +int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. +int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start + // of one of the Dxun Battle Circle fights, or no weapon at all. +int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. +int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. +int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. +int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. + +string sLanguage = "nwscript"; + + +// 0: Get an integer between 0 and nMaxInteger-1. +// Return value on error: 0 +int Random(int nMaxInteger); + +// 1: Output sString to the log file. +void PrintString(string sString); + +// 2: Output a formatted float to the log file. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); + +// 3: Convert fFloat into a string. +// - nWidth should be a value from 0 to 18 inclusive. +// - nDecimals should be a value from 0 to 9 inclusive. +string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); + +// 4: Output nInteger to the log file. +void PrintInteger(int nInteger); + +// 5: Output oObject's ID to the log file. +void PrintObject(object oObject); + +// 6: Assign aActionToAssign to oActionSubject. +// * No return value, but if an error occurs, the log file will contain +// "AssignCommand failed." +// (If the object doesn't exist, nothing happens.) +void AssignCommand(object oActionSubject,action aActionToAssign); + +// 7: Delay aActionToDelay by fSeconds. +// * No return value, but if an error occurs, the log file will contain +// "DelayCommand failed.". +void DelayCommand(float fSeconds, action aActionToDelay); + +// 8: Make oTarget run sScript and then return execution to the calling script. +// If sScript does not specify a compiled script, nothing happens. +// - nScriptVar: This value will be returned by calls to GetRunScriptVar. +void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); + +// 9: Clear all the actions of the caller. (This will only work on Creatures) +// * No return value, but if an error occurs, the log file will contain +// "ClearAllActions failed.". +void ClearAllActions(); + +// 10: Cause the caller to face fDirection. +// - fDirection is expressed as anticlockwise degrees from Due East. +// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are +// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +void SetFacing(float fDirection); + +// 11: Switches the main character to a specified NPC +// -1 specifies to switch back to the original PC +int SwitchPlayerCharacter(int nNPC); + +// 12: Set the time to the time specified. +// - nHour should be from 0 to 23 inclusive +// - nMinute should be from 0 to 59 inclusive +// - nSecond should be from 0 to 59 inclusive +// - nMillisecond should be from 0 to 999 inclusive +// 1) Time can only be advanced forwards; attempting to set the time backwards +// will result in the day advancing and then the time being set to that +// specified, e.g. if the current hour is 15 and then the hour is set to 3, +// the day will be advanced by 1 and the hour will be set to 3. +// 2) If values larger than the max hour, minute, second or millisecond are +// specified, they will be wrapped around and the overflow will be used to +// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds +// and 10 milliseconds will result in the calendar day being advanced by 2 +// and the time being set to 18 hours, 10 minutes, 10 milliseconds. +void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); + +// 13: Sets (by NPC constant) which party member should be the controlled +// character +int SetPartyLeader(int nNPC); + +// 14: Sets whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +void SetAreaUnescapable(int bUnescapable); + +// 15: Returns whether the current area is escapable or not +// TRUE means you can not escape the area +// FALSE means you can escape the area +int GetAreaUnescapable(); + +// 16: Get the current hour. +int GetTimeHour(); + +// 17: Get the current minute +int GetTimeMinute(); + +// 18: Get the current second +int GetTimeSecond(); + +// 19: Get the current millisecond +int GetTimeMillisecond(); + +// 20: The action subject will generate a random location near its current location +// and pathfind to it. All commands will remove a RandomWalk() from the action +// queue if there is one in place. +// * No return value, but if an error occurs the log file will contain +// "ActionRandomWalk failed." +void ActionRandomWalk(); + +// 21: The action subject will move to lDestination. +// - lDestination: The object will move to this location. If the location is +// invalid or a path cannot be found to it, the command does nothing. +// - bRun: If this is TRUE, the action subject will run rather than walk +// * No return value, but if an error occurs the log file will contain +// "MoveToPoint failed." +void ActionMoveToLocation(location lDestination, int bRun=FALSE); + +// 22: Cause the action subject to move to a certain distance from oMoveTo. +// If there is no path to oMoveTo, this command will do nothing. +// - oMoveTo: This is the object we wish the action subject to move to +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fRange: This is the desired distance between the action subject and oMoveTo +// * No return value, but if an error occurs the log file will contain +// "ActionMoveToObject failed." +void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); + +// 23: Cause the action subject to move to a certain distance away from oFleeFrom. +// - oFleeFrom: This is the object we wish the action subject to move away from. +// If oFleeFrom is not in the same area as the action subject, nothing will +// happen. +// - bRun: If this is TRUE, the action subject will run rather than walk +// - fMoveAwayRange: This is the distance we wish the action subject to put +// between themselves and oFleeFrom +// * No return value, but if an error occurs the log file will contain +// "ActionMoveAwayFromObject failed." +void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 24: Get the area that oTarget is currently in +// * Return value on error: OBJECT_INVALID +object GetArea(object oTarget); + +// 25: The value returned by this function depends on the object type of the caller: +// 1) If the caller is a door or placeable it returns the object that last +// triggered it. +// 2) If the caller is a trigger, area of effect, module, area or encounter it +// returns the object that last entered it. +// * Return value on error: OBJECT_INVALID +object GetEnteringObject(); + +// 26: Get the object that last left the caller. This function works on triggers, +// areas of effect, modules, areas and encounters. +// * Return value on error: OBJECT_INVALID +object GetExitingObject(); + +// 27: Get the position of oTarget +// * Return value on error: vector (0.0f, 0.0f, 0.0f) +vector GetPosition(object oTarget); + +// 28: Get the direction in which oTarget is facing, expressed as a float between +// 0.0f and 360.0f +// * Return value on error: -1.0f +float GetFacing(object oTarget); + +// 29: Get the possessor of oItem +// * Return value on error: OBJECT_INVALID +object GetItemPossessor(object oItem); + +// 30: Get the object possessed by oCreature with the tag sItemTag +// * Return value on error: OBJECT_INVALID +object GetItemPossessedBy(object oCreature, string sItemTag); + +// 31: Create an item with the template sItemTemplate in oTarget's inventory. +// - nStackSize: This is the stack size of the item to be created +// * Return value: The object that has been created. On error, this returns +// OBJECT_INVALID. +//RWT-OEI 12/16/03 - Added the bHideMessage parameter +object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); + +// 32: Equip oItem into nInventorySlot. +// - nInventorySlot: INVENTORY_SLOT_* +// * No return value, but if an error occurs the log file will contain +// "ActionEquipItem failed." +void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); + +// 33: Unequip oItem from whatever slot it is currently in. +void ActionUnequipItem( object oItem, int bInstant = FALSE ); + +// 34: Pick up oItem from the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPickUpItem failed." +void ActionPickUpItem(object oItem); + +// 35: Put down oItem on the ground. +// * No return value, but if an error occurs the log file will contain +// "ActionPutDownItem failed." +void ActionPutDownItem(object oItem); + +// 36: Get the last attacker of oAttackee. This should only be used ONLY in the +// OnAttacked events for creatures, placeables and doors. +// * Return value on error: OBJECT_INVALID +object GetLastAttacker(object oAttackee=OBJECT_SELF); + +// 37: Attack oAttackee. +// - bPassive: If this is TRUE, attack is in passive mode. +void ActionAttack(object oAttackee, int bPassive=FALSE); + +// 38: Get the creature nearest to oTarget, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use: +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - oTarget: We're trying to find the creature of the specified type that is +// nearest to oTarget +// - nNth: We don't have to find the first nearest: we can find the Nth nearest... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 39: Add a speak action to the action subject. +// - sStringToSpeak: String to be spoken +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 40: Cause the action subject to play an animation +// - nAnimation: ANIMATION_* +// - fSpeed: Speed of the animation +// - fDurationSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); + +// 41: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject(object oObject); + +// 42: * Returns TRUE if oObject is a valid object. +int GetIsObjectValid(object oObject); + +// 43: Cause the action subject to open oDoor +void ActionOpenDoor(object oDoor); + +// 44: Cause the action subject to close oDoor +void ActionCloseDoor(object oDoor); + +// 45: Change the direction in which the camera is facing +// - fDirection is expressed as anticlockwise degrees from Due East. +// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) +// This can be used to change the way the camera is facing after the player +// emerges from an area transition. +void SetCameraFacing(float fDirection); + +// 46: Play sSoundName +// - sSoundName: TBD - SS +void PlaySound(string sSoundName); + +// 47: Get the object at which the caller last cast a spell +// * Return value on error: OBJECT_INVALID +object GetSpellTargetObject(); + +// 48: This action casts a spell at oTarget. +// - nSpell: SPELL_* +// - oTarget: Target for the spell +// - nMetamagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nDomainLevel: TBD - SS +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows +// the end-user to simulate a high-level magic-user having lots of advance +// warning of impending trouble +void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 49: Get the current hitpoints of oObject +// * Return value on error: 0 +int GetCurrentHitPoints(object oObject=OBJECT_SELF); + +// 50: Get the maximum hitpoints of oObject +// * Return value on error: 0 +int GetMaxHitPoints(object oObject=OBJECT_SELF); + +// 51: EffectAssuredHit +// Create an Assured Hit effect, which guarantees that all attacks are successful +effect EffectAssuredHit(); + +// 52: +// Returns the last item that was equipped by a creature. +object GetLastItemEquipped(); + +// 53: +// Returns the ID of the subscreen that is currently onscreen. This will be one of the +// SUBSCREEN_ID_* constant values. +int GetSubScreenID(); + +// 54: +// Cancels combat for the specified creature. +void CancelCombat( object oidCreature ); + +// 55: +// returns the current force points for the creature +int GetCurrentForcePoints(object oObject=OBJECT_SELF); + +// 56: +// returns the Max force points for the creature +int GetMaxForcePoints(object oObject=OBJECT_SELF); + +// 57: +// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. +void PauseGame( int bPause ); + +// 58: SetPlayerRestrictMode +// Sets whether the player is currently in 'restricted' mode +void SetPlayerRestrictMode( int bRestrict ); + +// 59: Get the length of sString +// * Return value on error: -1 +int GetStringLength(string sString); + +// 60: Convert sString into upper case +// * Return value on error: "" +string GetStringUpperCase(string sString); + +// 61: Convert sString into lower case +// * Return value on error: "" +string GetStringLowerCase(string sString); + +// 62: Get nCount characters from the right end of sString +// * Return value on error: "" +string GetStringRight(string sString, int nCount); + +// 63: Get nCounter characters from the left end of sString +// * Return value on error: "" +string GetStringLeft(string sString, int nCount); + +// 64: Insert sString into sDestination at nPosition +// * Return value on error: "" +string InsertString(string sDestination, string sString, int nPosition); + +// 65: Get nCount characters from sString, starting at nStart +// * Return value on error: "" +string GetSubString(string sString, int nStart, int nCount); + +// 66: Find the position of sSubstring inside sString +// * Return value on error: -1 +int FindSubString(string sString, string sSubString); + +// 67: Maths operation: absolute value of fValue +float fabs(float fValue); + +// 68: Maths operation: cosine of fValue +float cos(float fValue); + +// 69: Maths operation: sine of fValue +float sin(float fValue); + +// 70: Maths operation: tan of fValue +float tan(float fValue); + +// 71: Maths operation: arccosine of fValue +// * Returns zero if fValue > 1 or fValue < -1 +float acos(float fValue); + +// 72: Maths operation: arcsine of fValue +// * Returns zero if fValue >1 or fValue < -1 +float asin(float fValue); + +// 73: Maths operation: arctan of fValue +float atan(float fValue); + +// 74: Maths operation: log of fValue +// * Returns zero if fValue <= zero +float log(float fValue); + +// 75: Maths operation: fValue is raised to the power of fExponent +// * Returns zero if fValue ==0 and fExponent <0 +float pow(float fValue, float fExponent); + +// 76: Maths operation: square root of fValue +// * Returns zero if fValue <0 +float sqrt(float fValue); + +// 77: Maths operation: integer absolute value of nValue +// * Return value on error: 0 +int abs(int nValue); + +// 78: Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +effect EffectHeal(int nDamageToHeal); + +// 79: 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_* +effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// 80: Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// 81: 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 +effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. +// DJS-OEI 8/26/2004 +// Added a parameter for the percentage of HP the target +// should receive when they are revived. +effect EffectResurrection( int nHPPercent=0 ); + +// 83: GetPlayerRestrictMode +// returns the current player 'restricted' mode +int GetPlayerRestrictMode(object oObject = OBJECT_SELF); + +// 84: Get the Caster Level of oCreature. +// * Return value on error: 0; +int GetCasterLevel(object oCreature); + +// 85: Get the first in-game effect on oCreature. +effect GetFirstEffect(object oCreature); + +// 86: Get the next in-game effect on oCreature. +effect GetNextEffect(object oCreature); + +// 87: Remove eEffect from oCreature. +// * No return value +void RemoveEffect(object oCreature, effect eEffect); + +// 88: * Returns TRUE if eEffect is a valid effect. +int GetIsEffectValid(effect eEffect); + +// 89: Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int GetEffectDurationType(effect eEffect); + +// 90: Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int GetEffectSubType(effect eEffect); + +// 91: Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object GetEffectCreator(effect eEffect); + +// 92: Convert nInteger into a string. +// * Return value on error: "" +string IntToString(int nInteger); + +// 93: Get the first object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 94: Get the next object in oArea. +// If no valid area is specified, it will use the caller's area. +// - oArea +// - nObjectFilter: OBJECT_TYPE_* +// * Return value on error: OBJECT_INVALID +object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); + +// 95: Get the total from rolling (nNumDice x d2 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d2(int nNumDice=1); + +// 96: Get the total from rolling (nNumDice x d3 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d3(int nNumDice=1); + +// 97: Get the total from rolling (nNumDice x d4 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d4(int nNumDice=1); + +// 98: Get the total from rolling (nNumDice x d6 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d6(int nNumDice=1); + +// 99: Get the total from rolling (nNumDice x d8 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d8(int nNumDice=1); + +// 100: Get the total from rolling (nNumDice x d10 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d10(int nNumDice=1); + +// 101: Get the total from rolling (nNumDice x d12 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d12(int nNumDice=1); + +// 102: Get the total from rolling (nNumDice x d20 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d20(int nNumDice=1); + +// 103: Get the total from rolling (nNumDice x d100 dice). +// - nNumDice: If this is less than 1, the value 1 will be used. +int d100(int nNumDice=1); + +// 104: Get the magnitude of vVector; this can be used to determine the +// distance between two points. +// * Return value on error: 0.0f +float VectorMagnitude(vector vVector); + +// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller +// * Return value if the caster is not a valid object: -1 +int GetMetaMagicFeat(); + +// 106: Get the object type (OBJECT_TYPE_*) of oTarget +// * Return value if oTarget is not a valid object: -1 +int GetObjectType(object oTarget); + +// 107: Get the racial type (RACIAL_TYPE_*) of oCreature +// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID +int GetRacialType(object oCreature); + +// 108: Do a Fortitude Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 109: Does a Reflex Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 110: Does a Will Save check for the given DC +// - oCreature +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +// Returns: 0 if the saving throw roll failed +// Returns: 1 if the saving throw roll succeeded +// Returns: 2 if the target was immune to the save type specified +int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). +// This can be called by a creature or by an Area of Effect object. +int GetSpellSaveDC(); + +// 112: Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +effect MagicalEffect(effect eEffect); + +// 113: Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +effect SupernaturalEffect(effect eEffect); + +// 114: Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +effect ExtraordinaryEffect(effect eEffect); + +// 115: 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. +effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 116: If oObject is a creature, this will return that creature's armour class +// If oObject is an item, door or placeable, this will return zero. +// - nForFutureUse: this parameter is not currently used +// * Return value if oObject is not a creature, item, door or placeable: -1 +int GetAC(object oObject, int nForFutureUse=0); + +// 117: Create an AC Decrease effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// - nValue: size of AC decrease +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 118: Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// 119: 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 +effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// 120: Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 121: Convert nRounds into a number of seconds +// A round is always 6.0 seconds +float RoundsToSeconds(int nRounds); + +// 122: Convert nHours into a number of seconds +// The result will depend on how many minutes there are per hour (game-time) +float HoursToSeconds(int nHours); + +// 123: Convert nTurns into a number of seconds +// A turn is always 60.0 seconds +float TurnsToSeconds(int nTurns); + +// 124. SoundObjectSetFixedVariance +// Sets the constant variance at which to play the sound object +// This variance is a multiplier of the original sound +void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); + +// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's +// Good/Evil alignment +// (100=good, 0=evil) +// * Return value if oCreature is not a valid creature: -1 +int GetGoodEvilValue(object oCreature); + +// 126: GetPartyMemberCount +// Returns a count of how many members are in the party including the player character +int GetPartyMemberCount(); + +// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment +// * Return value if oCreature is not a valid creature: -1 +int GetAlignmentGoodEvil(object oCreature); + +// 128: Get the first object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. +// (This can be used to ensure that spell effects do not go through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". +// For example, to return only creatures and doors, the value for this +// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the +// origin of the effect(normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 129: Get the next object in nShape +// - nShape: SHAPE_* +// - fSize: +// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere +// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder +// -> If nShape == SHAPE_CONE, this is the widest radius of the cone +// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of +// the cube +// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), +// or the end of a cylinder or cone. +// - bLineOfSight: This controls whether to do a line-of-sight check on the +// object returned. (This can be used to ensure that spell effects do not go +// through walls.) +// - nObjectFilter: This allows you to filter out undesired object types, using +// bitwise "or". For example, to return only creatures and doors, the value for +// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR +// - vOrigin: This is only used for cylinders and cones, and specifies the origin +// of the effect (normally the spell-caster's position). +// Return value on error: OBJECT_INVALID +object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// 130: 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. +effect EffectEntangle(); + +// 131: Cause oObject to run evToRun +void SignalEvent(object oObject, event evToRun); + +// 132: Create an event of the type nUserDefinedEventNumber +event EventUserDefined(int nUserDefinedEventNumber); + +// 133: Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature +// dies. Note that NO XP will be awarded if the creature is killed with this parameter. +effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); + +// 134: 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). +effect EffectKnockdown(); + +// 135: Give oItem to oGiveTo +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void ActionGiveItem(object oItem, object oGiveTo); + +// 136: Take oItem from oTakeFrom +// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing +// will happen. +void ActionTakeItem(object oItem, object oTakeFrom); + +// 137: Normalize vVector +vector VectorNormalize(vector vVector); + +// 138: +// Gets the stack size of an item. +int GetItemStackSize( object oItem ); + +// 139: Get the ability score of type nAbility for a creature (otherwise 0) +// - oCreature: the creature whose ability score we wish to find out +// - nAbilityType: ABILITY_* +// Return value on error: 0 +int GetAbilityScore(object oCreature, int nAbilityType); + +// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. +int GetIsDead(object oCreature); + +// 141: Output vVector to the logfile. +// - vVector +// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" +void PrintVector(vector vVector, int bPrepend); + +// 142: Create a vector with the specified values for x, y and z +vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); + +// 143: Cause the caller to face vTarget +void SetFacingPoint(vector vTarget); + +// 144: Convert fAngle to a vector +vector AngleToVector(float fAngle); + +// 145: Convert vVector to an angle +float VectorToAngle(vector vVector); + +// 146: The caller will perform a Melee Touch Attack on oTarget +// This is not an action, and it assumes the caller is already within range of +// oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); + +// 147: The caller will perform a Ranged Touch Attack on oTarget +// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit +int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); + +// 148: Create a Paralyze effect +effect EffectParalyze(); + +// 149: 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. +effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); + +// 150: +// Set the stack size of an item. +// NOTE: The stack size will be clamped to between 1 and the max stack size (as +// specified in the base item). +void SetItemStackSize( object oItem, int nStackSize ); + +// 151: Get the distance in metres between oObjectA and oObjectB. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween(object oObjectA, object oObjectB); + +// 152: SetReturnStrref +// This function will turn on/off the display of the 'return to ebon hawk' option +// on the map screen and allow the string to be changed to an arbitrary string ref +// srReturnQueryStrRef is the string ref that will be displayed in the query pop +// up confirming that you wish to return to the specified location. +void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); + +// 153: EffectForceJump +// The effect required for force jumping +effect EffectForceJump(object oTarget, int nAdvanced = 0); + +// 154: Create a Sleep effect +effect EffectSleep(); + +// 155: Get the object which is in oCreature's specified inventory slot +// - nInventorySlot: INVENTORY_SLOT_* +// - oCreature +// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no +// item in nInventorySlot. +object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); + +// 156: This was previously EffectCharmed(); +effect EffectTemporaryForcePoints(int nTempForce); + +// 157: Create a Confuse effect +effect EffectConfused(); + +// 158: Create a Frighten effect +effect EffectFrightened(); + +// 159: Choke the bugger... +effect EffectChoke( ); + +// 160: Sets a global string with the specified identifier. This is an EXTREMELY +// restricted function - do not use without expilicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +void SetGlobalString( string sIdentifier, string sValue ); + +// 161: Create a Stun effect +effect EffectStunned(); + +// 162: Set whether oTarget's action stack can be modified +void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); + +// 163: Determine whether oTarget's action stack can be modified. +int GetCommandable(object oTarget=OBJECT_SELF); + +// 164: Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +effect EffectRegenerate(int nAmount, float fIntervalSeconds); + +// 165: Create a Movement Speed Increase effect. +// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. +// If you supply an integer under 100, 100 gets added to it to produce the final speed. +// e.g. if you supply 50, then the resulting speed is 150% of the original speed. +// If you supply 100 or above, then this is used directly as the resulting speed. +// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, +// it is unchanged. +// However if you specify 200, then the resulting speed is double the original speed. +effect EffectMovementSpeedIncrease(int nNewSpeedPercent); + +// 166: Get the number of hitdice for oCreature. +// * Return value if oCreature is not a valid creature: 0 +int GetHitDice(object oCreature); + +// 167: The action subject will follow oFollow until a ClearAllActions() is called. +// - oFollow: this is the object to be followed +// - fFollowDistance: follow distance in metres +// * No return value +void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); + +// 168: Get the Tag of oObject +// * Return value if oObject is not a valid object: "" +string GetTag(object oObject); + +// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if +// the force was resisted. +// * Return value if oSource or oTarget is an invalid object: FALSE +int ResistForce(object oSource, object oTarget); + +// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int GetEffectType(effect eEffect); + +// 171: Create an Area Of Effect effect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// 172: * Returns TRUE if the Faction Ids of the two objects are the same +int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); + +// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. +// NB. ** This will only work for two NPCs ** +void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); + +// 174: * Returns TRUE if oObject is listening for something +int GetIsListening(object oObject); + +// 175: Set whether oObject is listening. +void SetListening(object oObject, int bValue); + +// 176: Set the string for oObject to listen for. +// Note: this does not set oObject to be listening. +void SetListenPattern(object oObject, string sPattern, int nNumber=0); + +// 177: * Returns TRUE if sStringToTest matches sPattern. +int TestStringAgainstPattern(string sPattern, string sStringToTest); + +// 178: Get the appropriate matched string (this should only be used in +// OnConversation scripts). +// * Returns the appropriate matched string, otherwise returns "" +string GetMatchedSubstring(int nString); + +// 179: Get the number of string parameters available. +// * Returns -1 if no string matched (this could be because of a dialogue event) +int GetMatchedSubstringsCount(); + +// 180: * 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 +effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// 181: Get the weakest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 182: Get the strongest member of oFactionMember's faction. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 183: Get the member of oFactionMember's faction that has taken the most hit points +// of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 184: Get the member of oFactionMember's faction that has taken the fewest hit +// points of damage. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 185: Get the amount of gold held by oFactionMember's faction. +// * Returns -1 if oFactionMember's faction is invalid. +int GetFactionGold(object oFactionMember); + +// 186: Get an integer between 0 and 100 (inclusive) that represents how +// oSourceFactionMember's faction feels about oTarget. +// * Return value on error: -1 +int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); + +// 187: Get an integer between 0 and 100 (inclusive) that represents the average +// good/evil alignment of oFactionMember's faction. +// * Return value on error: -1 +int GetFactionAverageGoodEvilAlignment(object oFactionMember); + +// 188. SoundObjectGetFixedVariance +// Gets the constant variance at which to play the sound object +float SoundObjectGetFixedVariance(object oSound); + +// 189: Get the average level of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageLevel(object oFactionMember); + +// 190: Get the average XP of the members of the faction. +// * Return value on error: -1 +int GetFactionAverageXP(object oFactionMember); + +// 191: Get the most frequent class in the faction - this can be compared with the +// constants CLASS_TYPE_*. +// * Return value on error: -1 +int GetFactionMostFrequentClass(object oFactionMember); + +// 192: Get the object faction member with the lowest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 193: Get the object faction member with the highest armour class. +// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. +object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); + +// 194: Get a global string with the specified identifier +// This is an EXTREMELY restricted function. Use only with explicit permission. +// This means if you are not Preston. Then go see him if you're even thinking +// about using this. +string GetGlobalString( string sIdentifier ); + +// 195: In an onConversation script this gets the number of the string pattern +// matched (the one that triggered the script). +// * Returns -1 if no string matched +int GetListenPatternNumber(); + +// 196: Jump to an object ID, or as near to it as possible. +void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); + +// 197: Get the first waypoint with the specified tag. +// * Returns OBJECT_INVALID if the waypoint cannot be found. +object GetWaypointByTag(string sWaypointTag); + +// 198: Get the destination (a waypoint or a door) for a trigger or a door. +// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. +object GetTransitionTarget(object oTransition); + +// 199: 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. +effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); + +// 200: Get the nNth object with the specified tag. +// - sTag +// - nNth: the nth object with this tag may be requested +// * Returns OBJECT_INVALID if the object cannot be found. +object GetObjectByTag(string sTag, int nNth=0); + +// 201: Adjust the alignment of oSubject. +// - oSubject +// - nAlignment: +// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's +// alignment will be shifted in the direction specified +// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side +// alignment value in the direction which is towards neutrality. +// e.g. If oSubject has an alignment value of 80 (i.e. light side) +// then if nShift is 15, the alignment value will become (80-15)=65 +// Furthermore, the shift will at most take the alignment value to 50 and +// not beyond. +// e.g. If oSubject has an alignment value of 40 then if nShift is 15, +// the aligment value will become 50 +// - nShift: this is the desired shift in alignment +// * No return value +// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust +// the playercharacter's alignment without impacting the rest of the NPCs +void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); + +// 202: Do nothing for fSeconds seconds. +void ActionWait(float fSeconds); + +// 203: Set the transition bitmap of a player; this should only be called in area +// transition scripts. This action should be run by the person "clicking" the +// area transition via AssignCommand. +// - nPredefinedAreaTransition: +// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* +// -> To use a custom, user-defined area transition bitmap, use +// AREA_TRANSITION_USER_DEFINED and specify the filename in the second +// parameter +// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined +// area transition bitmap +void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); + +// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST +// 204: Starts a conversation with oObjectToConverseWith - this will cause their +// OnDialog event to fire. +// - oObjectToConverseWith +// - sDialogResRef: If this is blank, the creature's own dialogue file will be used +// - bPrivateConversation: If this is blank, the default is FALSE. +// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type +// other choices inclue: CONVERSATION_TYPE_COMPUTER +// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However +// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF +// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect +// Setting this to TRUE will cause creatures to start a conversation without requiring to close +// the distance between the two object in dialog. +// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work +// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY +// the same as the string that it represents in the dialog editor. +// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. +// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. +void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); + +// 205: Pause the current conversation. +void ActionPauseConversation(); + +// 206: Resume a conversation after it has been paused. +void ActionResumeConversation(); + +// 207: 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. +effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource +// feels about oTarget. +// -> 0-10 means oSource is hostile to oTarget +// -> 11-89 means oSource is neutral to oTarget +// -> 90-100 means oSource is friendly to oTarget +// * Returns -1 if oSource or oTarget does not identify a valid object +int GetReputation(object oSource, object oTarget); + +// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the +// specified amount. +// Note: This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +// * No return value +void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); + +// 210: Gets the actual file name of the current module +string GetModuleFileName(); + +// 211: Get the creature that is going to attack oTarget. +// Note: This value is cleared out at the end of every combat round and should +// not be used in any case except when getting a "going to be attacked" shout +// from the master creature (and this creature is a henchman) +// * Returns OBJECT_INVALID if oTarget is not a valid creature. +object GetGoingToBeAttackedBy(object oTarget); + +// 212: Create a Force Resistance Increase effect. +// - nValue: size of Force Resistance increase +effect EffectForceResistanceIncrease(int nValue); + +// 213: Get the location of oObject. +location GetLocation(object oObject); + +// 214: The subject will jump to lLocation instantly (even between areas). +// If lLocation is invalid, nothing will happen. +void ActionJumpToLocation(location lLocation); + +// 215: Create a location. +location Location(vector vPosition, float fOrientation); + +// 216: Apply eEffect at lLocation. +void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); + +// 217: * Returns TRUE if oCreature is a Player Controlled character. +int GetIsPC(object oCreature); + +// 218: Convert fFeet into a number of meters. +float FeetToMeters(float fFeet); + +// 219: Convert fYards into a number of meters. +float YardsToMeters(float fYards); + +// 220: Apply eEffect to oTarget. +void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); + +// 221: The caller will immediately speak sStringToSpeak (this is different from +// ActionSpeakString) +// - sStringToSpeak +// - nTalkVolume: TALKVOLUME_* +void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); + +// 222: Get the location of the caller's last spell target. +location GetSpellTargetLocation(); + +// 223: Get the position vector from lLocation. +vector GetPositionFromLocation(location lLocation); + +// 224: the effect of body fule.. convers HP -> FP i think +effect EffectBodyFuel( ); + +// 225: Get the orientation value from lLocation. +float GetFacingFromLocation(location lLocation); + +// 226: Get the creature nearest to lLocation, subject to all the criteria specified. +// - nFirstCriteriaType: CREATURE_TYPE_* +// - nFirstCriteriaValue: +// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS +// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT +// or CREATURE_TYPE_HAS_SPELL_EFFECT +// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE +// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION +// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was +// CREATURE_TYPE_PLAYER_CHAR +// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE +// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION +// For example, to get the nearest PC, use +// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) +// - lLocation: We're trying to find the creature of the specified type that is +// nearest to lLocation +// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... +// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue +// to further specify the type of creature that we are looking for. +// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to +// further specify the type of creature that we are looking for. +// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to +// further specify the type of creature that we are looking for. +// * Return value on error: OBJECT_INVALID +object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); + +// 227: Get the Nth object nearest to oTarget that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - oTarget +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); + +// 228: Get the nNth object nearest to lLocation that is of the specified type. +// - nObjectType: OBJECT_TYPE_* +// - lLocation +// - nNth +// * Return value on error: OBJECT_INVALID +object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); + +// 229: Get the nth Object nearest to oTarget that has sTag as its tag. +// * Return value on error: OBJECT_INVALID +object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); + +// 230: Convert nInteger into a floating point number. +float IntToFloat(int nInteger); + +// 231: Convert fFloat into the nearest integer. +int FloatToInt(float fFloat); + +// 232: Convert sNumber into an integer. +int StringToInt(string sNumber); + +// 233: Convert sNumber into a floating point number. +float StringToFloat(string sNumber); + +// 234: Cast spell nSpell at lTargetLocation. +// - nSpell: SPELL_* +// - lTargetLocation +// - nMetaMagic: METAMAGIC_* +// - bCheat: If this is TRUE, then the executor of the action doesn't have to be +// able to cast the spell. +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows +// the end-user to simulate +// a high-level magic user having lots of advance warning of impending trouble. +void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); + +// 235: * Returns TRUE if oSource considers oTarget as an enemy. +int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + +// 236: * Returns TRUE if oSource considers oTarget as a friend. +int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + +// 237: * Returns TRUE if oSource considers oTarget as neutral. +int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + +// 238: Get the PC that is involved in the conversation. +// * Returns OBJECT_INVALID on error. +object GetPCSpeaker(); + +// 239: Get a string from the talk table using nStrRef. +string GetStringByStrRef(int nStrRef); + +// 240: Causes the creature to speak a translated string. +// - nStrRef: Reference of the string in the talk table +// - nTalkVolume: TALKVOLUME_* +void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); + +// 241: Destroy oObject (irrevocably). +// This will not work on modules and areas. +// The bNoFade and fDelayUntilFade are for creatures and placeables only +void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); + +// 242: Get the module. +// * Return value on error: OBJECT_INVALID +object GetModule(); + +// 243: Create an object of the specified type at lLocation. +// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, +// OBJECT_TYPE_STORE +// - sTemplate +// - lLocation +// - bUseAppearAnimation +// Waypoints can now also be created using the CreateObject function. +// nObjectType is: OBJECT_TYPE_WAYPOINT +// sTemplate will be the tag of the waypoint +// lLocation is where the waypoint will be placed +// bUseAppearAnimation is ignored +object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 244: Create an event which triggers the "SpellCastAt" script +event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); + +// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. +// The spell could have been cast by a creature, placeable or door. +// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. +object GetLastSpellCaster(); + +// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that +// was cast. +int GetLastSpell(); + +// 247: This is for use in a user-defined script, it gets the event number. +int GetUserDefinedEventNumber(); + +// 248: This is for use in a Spell script, it gets the ID of the spell that is being +// cast (SPELL_*). +int GetSpellId(); + +// 249: Generate a random name. +string RandomName(); + +// 250: Create a Poison effect. +// - nPoisonType: POISON_* +effect EffectPoison(int nPoisonType); + +// 251: Returns whether this script is being run +// while a load game is in progress +int GetLoadFromSaveGame(); + +// 252: Assured Deflection +// This effect ensures that all projectiles shot at a jedi will be deflected +// without doing an opposed roll. It takes an optional parameter to say whether +// the deflected projectile will return to the attacker and cause damage +effect EffectAssuredDeflection(int nReturn = 0); + +// 253: Get the name of oObject. +string GetName(object oObject); + +// 254: Use this in a conversation script to get the person with whom you are conversing. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastSpeaker(); + +// 255: Use this in an OnDialog script to start up the dialog tree. +// - sResRef: if this is not specified, the default dialog file will be used +// - oObjectToDialog: if this is not specified the person that triggered the +// event will be used +int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); + +// 256: Use this in an OnPerception script to get the object that was perceived. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetLastPerceived(); + +// 257: Use this in an OnPerception script to determine whether the object that was +// perceived was heard. +int GetLastPerceptionHeard(); + +// 258: Use this in an OnPerception script to determine whether the object that was +// perceived has become inaudible. +int GetLastPerceptionInaudible(); + +// 259: Use this in an OnPerception script to determine whether the object that was +// perceived was seen. +int GetLastPerceptionSeen(); + +// 260: Use this in an OnClosed script to get the object that closed the door or placeable. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastClosedBy(); + +// 261: Use this in an OnPerception script to determine whether the object that was +// perceived has vanished. +int GetLastPerceptionVanished(); + +// 262: Get the first object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 263: Get the next object within oPersistentObject. +// - oPersistentObject +// - nResidentObjectType: OBJECT_TYPE_* +// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value +// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] +// * Returns OBJECT_INVALID if no object is found. +object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); + +// 264: This returns the creator of oAreaOfEffectObject. +// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. +object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); + +// 265: Brings up the level up GUI for the player. The GUI will only show up +// if the player has gained enough experience points to level up. +// * Returns TRUE if the GUI was successfully brought up; FALSE if not. +int ShowLevelUpGUI(); + +// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable +// to TRUE to prevent this item from being equipped, and FALSE to allow +// the normal equipping checks to determine if the item can be equipped. +// NOTE: This will do nothing if the object passed in is not an item. Items that +// are already equipped when this is called will not automatically be +// unequipped. These items will just be prevented from being re-equipped +// should they be unequipped. +void SetItemNonEquippable( object oItem, int bNonEquippable ); + +// 267: GetButtonMashCheck +// This function returns whether the button mash check, used for the combat tutorial, is on +int GetButtonMashCheck(); + +// 268: SetButtonMashCheck +// This function sets the button mash check variable, and is used for turning the check on and off +void SetButtonMashCheck(int nCheck); + +// 269: EffectForcePushTargeted +// This effect is exactly the same as force push, except it takes a location parameter that specifies +// where the location of the force push is to be done from. All orientations are also based on this location. +// AMF: The new ignore test direct line variable should be used with extreme caution +// It overrides geometry checks for force pushes, so that the object that the effect is applied to +// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. +effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); + +// 270: Create a Haste effect. +effect EffectHaste(); + +// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) +// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will +// happen. +void GiveItem(object oItem, object oGiveTo); + +// 272: Convert oObject into a hexadecimal string. +string ObjectToString(object oObject); + +// 273: Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +effect EffectImmunity(int nImmunityType); + +// 274: - oCreature +// - nImmunityType: IMMUNITY_TYPE_* +// - oVersus: if this is specified, then we also check for the race and +// alignment of oVersus +// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. +int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); + +// 275: Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// 276: Determine whether oEncounter is active. +int GetEncounterActive(object oEncounter=OBJECT_SELF); + +// 277: Set oEncounter's active state to nNewValue. +// - nNewValue: TRUE/FALSE +// - oEncounter +void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); + +// 278: Get the maximum number of times that oEncounter will spawn. +int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); + +// 279: Set the maximum number of times that oEncounter can spawn +void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); + +// 280: Get the number of times that oEncounter has spawned so far +int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); + +// 281: Set the number of times that oEncounter has spawned so far +void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); + +// 282: Use this in an OnItemAcquired script to get the item that was acquired. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemAcquired(); + +// 283: Use this in an OnItemAcquired script to get the creatre that previously +// possessed the item. +// * Returns OBJECT_INVALID if the item was picked up from the ground. +object GetModuleItemAcquiredFrom(); + +// 284: Set the value for a custom token. +void SetCustomToken(int nCustomTokenNumber, string sTokenValue); + +// 285: Determine whether oCreature has nFeat, and nFeat is useable. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the feat due to daily limits or +// other restrictions. Use GetFeatAcquired() if you just want to +// know if they've got it or not. +// - nFeat: FEAT_* +// - oCreature +int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); + +// 286: Determine whether oCreature has nSkill, and nSkill is useable. +// - nSkill: SKILL_* +// - oCreature +int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); + +// 287: Use nFeat on oTarget. +// - nFeat: FEAT_* +// - oTarget +void ActionUseFeat(int nFeat, object oTarget); + +// 288: Runs the action "UseSkill" on the current creature +// Use nSkill on oTarget. +// - nSkill: SKILL_* +// - oTarget +// - nSubSkill: SUBSKILL_* +// - oItemUsed: Item to use in conjunction with the skill +void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); + +// 289: Determine whether oSource sees oTarget. +int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); + +// 290: Determine whether oSource hears oTarget. +int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); + +// 291: Use this in an OnPlayerDeath module script to get the last player that died. +object GetLastPlayerDied(); + +// 292: Use this in an OnItemLost script to get the item that was lost/dropped. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLost(); + +// 293: Use this in an OnItemLost script to get the creature that lost the item. +// * Returns OBJECT_INVALID if the module is not valid. +object GetModuleItemLostBy(); + +// 294: Do aActionToDo. +void ActionDoCommand(action aActionToDo); + +// 295: Conversation event. +event EventConversation(); + +// 296: Set the difficulty level of oEncounter. +// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* +// - oEncounter +void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); + +// 297: Get the difficulty level of oEncounter. +int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); + +// 298: Get the distance between lLocationA and lLocationB. +float GetDistanceBetweenLocations(location lLocationA, location lLocationB); + +// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and +// evasion saves. +// - nDamage +// - oTarget +// - nDC: Difficulty check +// - nSaveType: SAVING_THROW_TYPE_* +// - oSaveVersus +int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +// 300: Play nAnimation immediately. +// - nAnimation: ANIMATION_* +// - fSpeed +// - fSeconds: Duration of the animation (this is not used for Fire and +// Forget animations) If a time of -1.0f is specified for a looping animation +// it will loop until the next animation is applied. +void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); + +// 301: Create a Spell Talent. +// - nSpell: SPELL_* +talent TalentSpell(int nSpell); + +// 302: Create a Feat Talent. +// - nFeat: FEAT_* +talent TalentFeat(int nFeat); + +// 303: Create a Skill Talent. +// - nSkill: SKILL_* +talent TalentSkill(int nSkill); + +// 304: Determine if oObject has effects originating from nSpell. +// - nSpell: SPELL_* +// - oObject +int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); + +// 305: Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int GetEffectSpellId(effect eSpellEffect); + +// 306: Determine whether oCreature has tTalent. +int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); + +// 307: Get a random talent of oCreature, within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - oCreature +// - nInclusion: types of talent to include +talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); + +// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, +// within nCategory. +// - nCategory: TALENT_CATEGORY_* +// - nCRMax: Challenge Rating of the talent +// - oCreature +// - nInclusion: types of talent to include +// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore +// - nExcludeId: Talent ID of the talent we wish to ignore. +// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of +// type nExcludeType are ignored. +talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); + +// 309: Use tChosenTalent on oTarget. +void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); + +// 310: Use tChosenTalent at lTargetLocation. +void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); + +// 311: Get the gold piece value of oItem. +// * Returns 0 if oItem is not a valid item. +int GetGoldPieceValue(object oItem); + +// 312: * Returns TRUE if oCreature is of a playable racial type. +int GetIsPlayableRacialType(object oCreature); + +// 313: Jump to lDestination. The action is added to the TOP of the action queue. +void JumpToLocation(location lDestination); + +// 314: Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +effect EffectTemporaryHitpoints(int nHitPoints); + +// 315: Get the number of ranks that oTarget has in nSkill. +// - nSkill: SKILL_* +// - oTarget +// * Returns -1 if oTarget doesn't have nSkill. +// * Returns 0 if nSkill is untrained. +int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); + +// 316: Get the attack target of oCreature. +// This only works when oCreature is in combat. +object GetAttackTarget(object oCreature=OBJECT_SELF); + +// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackType(object oCreature=OBJECT_SELF); + +// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. +// This only works when oCreature is in combat. +int GetLastAttackMode(object oCreature=OBJECT_SELF); + +// 319: Get the distance in metres between oObjectA and oObjectB in 2D. +// * Return value if either object is invalid: 0.0f +float GetDistanceBetween2D(object oObjectA, object oObjectB); + +// 320: * Returns TRUE if oCreature is in combat. +//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then +//this function will only return true if the character is in REAL combat. +//If you don't know what that means, don't pass in TRUE. +int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); + +// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. +int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); + +// 322: Give nGP gold to oCreature. +void GiveGoldToCreature(object oCreature, int nGP); + +// 323: Set the destroyable status of the caller. +// - bDestroyable: If this is FALSE, the caller does not fade out on death, but +// sticks around as a corpse. +// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. +// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. +void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); + +// 324: Set the locked state of oTarget, which can be a door or a placeable object. +void SetLocked(object oTarget, int bLocked); + +// 325: Get the locked state of oTarget, which can be a door or a placeable object. +int GetLocked(object oTarget); + +// 326: Use this in a trigger's OnClick event script to get the object that last +// clicked on it. +// This is identical to GetEnteringObject. +object GetClickingObject(); + +// 327: Initialise oTarget to listen for the standard Associates commands. +void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); + +// 328: Get the last weapon that oCreature used in an attack. +// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. +object GetLastWeaponUsed(object oCreature); + +// 329: Use oPlaceable. +void ActionInteractObject(object oPlaceable); + +// 330: Get the last object that used the placeable object that is calling this function. +// * Returns OBJECT_INVALID if it is called by something other than a placeable or +// a door. +object GetLastUsedBy(); + +// 331: Returns the ability modifier for the specified ability +// Get oCreature's ability modifier for nAbility. +// - nAbility: ABILITY_* +// - oCreature +int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); + +// 332: Determined whether oItem has been identified. +int GetIdentified(object oItem); + +// 333: Set whether oItem has been identified. +void SetIdentified(object oItem, int bIdentified); + +// 334: Get the distance between lLocationA and lLocationB. in 2D +float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); + +// 335: Get the distance from the caller to oObject in metres. +// * Return value on error: -1.0f +float GetDistanceToObject2D(object oObject); + +// 336: Get the last blocking door encountered by the caller of this function. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetBlockingDoor(); + +// 337: - oTargetDoor +// - nDoorAction: DOOR_ACTION_* +// * Returns TRUE if nDoorAction can be performed on oTargetDoor. +int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); + +// 338: Perform nDoorAction on oTargetDoor. +void DoDoorAction(object oTargetDoor, int nDoorAction); + +// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetFirstItemInInventory(object oTarget=OBJECT_SELF); + +// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's +// inventory). +// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, +// or if no item is found. +object GetNextItemInInventory(object oTarget=OBJECT_SELF); + +// 341: A creature can have up to three classes. This function determines the +// creature's class (CLASS_TYPE_*) based on nClassPosition. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in +// nClassPosition (i.e. a single-class creature will only have a value in +// nClassLocation=1) or if oCreature is not a valid creature. +int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 342: A creature can have up to three classes. This function determines the +// creature's class level based on nClass Position. +// - nClassPosition: 1, 2 or 3 +// - oCreature +// * Returns 0 if oCreature does not have a class in nClassPosition +// (i.e. a single-class creature will only have a value in nClassLocation=1) +// or if oCreature is not a valid creature. +int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); + +// 343: Determine the levels that oCreature holds in nClassType. +// - nClassType: CLASS_TYPE_* +// - oCreature +int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); + +// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. +// - nDamageType: DAMAGE_TYPE_* +int GetDamageDealtByType(int nDamageType); + +// 345: Get the total amount of damage that has been dealt to the caller. +int GetTotalDamageDealt(); + +// 346: Get the last object that damaged the caller. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetLastDamager(); + +// 347: Get the last object that disarmed the trap on the caller. +// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or +// door. +object GetLastDisarmed(); + +// 348: Get the last object that disturbed the inventory of the caller. +// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. +object GetLastDisturbed(); + +// 349: Get the last object that locked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastLocked(); + +// 350: Get the last object that unlocked the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastUnlocked(); + +// 351: Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillIncrease(int nSkill, int nValue); + +// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's +// OnInventoryDisturbed script to fire. This will only work for creatures and +// placeables. +int GetInventoryDisturbType(); + +// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. +// * Returns OBJECT_INVALID if the caller is not a valid object. +object GetInventoryDisturbItem(); + +// 354: Displays the upgrade screen where the player can modify weapons and armor +// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. +// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* +// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen +// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able +// to access Item Upgrading. +void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); + +// 355: Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// 356: Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +effect VersusRacialTypeEffect(effect eEffect, int nRacialType); + +// 357: Set eEffect to be versus traps. +effect VersusTrapEffect(effect eEffect); + +// 358: Get the gender of oCreature. +int GetGender(object oCreature); + +// 359: * Returns TRUE if tTalent is valid. +int GetIsTalentValid(talent tTalent); + +// 360: Causes the action subject to move away from lMoveAwayFrom. +void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); + +// 361: Get the target that the caller attempted to attack - this should be used in +// conjunction with GetAttackTarget(). This value is set every time an attack is +// made, and is reset at the end of combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedAttackTarget(); + +// 362: Get the type (TALENT_TYPE_*) of tTalent. +int GetTypeFromTalent(talent tTalent); + +// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. +int GetIdFromTalent(talent tTalent); + +// 364: Starts a game of pazaak. +// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. +// - sEndScript: Script to be run when game finishes. +// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. +// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). +void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); + +// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. +// * Returns 0 if player loses, 1 if player wins. +int GetLastPazaakResult(); + +// 366: displays a feed back string for the object spicified and the constant +// repersents the string to be displayed see:FeedBackText.2da +void DisplayFeedBackText(object oCreature, int nTextConstant); + +// 367: Add a journal quest entry to the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +// - nState: the state of the plot as seen in the toolset's Journal Editor +// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower +// number than the one it is currently on +void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); + +// 368: Remove a journal quest entry from the player. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +void RemoveJournalQuestEntry(string szPlotID); + +// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. +// - szPlotID: the plot identifier used in the toolset's Journal Editor +int GetJournalEntry(string szPlotID); + +// 370: PlayRumblePattern +// Starts a defined rumble pattern playing +int PlayRumblePattern(int nPattern); + +// 371: StopRumblePattern +// Stops a defined rumble pattern +int StopRumblePattern(int nPattern); + +// 372: Damages the creatures force points +effect EffectDamageForcePoints(int nDamage); + +// 373: Heals the creatures force points +effect EffectHealForcePoints(int nHeal); + + +// 374: Send a server message (szMessage) to the oPlayer. +void SendMessageToPC(object oPlayer, string szMessage); + +// 375: Get the target at which the caller attempted to cast a spell. +// This value is set every time a spell is cast and is reset at the end of +// combat. +// * Returns OBJECT_INVALID if the caller is not a valid creature. +object GetAttemptedSpellTarget(); + +// 376: Get the last creature that opened the caller. +// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. +object GetLastOpenedBy(); + +// 377: Determine whether oCreature has nSpell memorised. +// PLEASE NOTE!!! - This function will return FALSE if the target +// is not currently able to use the spell due to lack of sufficient +// Force Points. Use GetSpellAcquired() if you just want to +// know if they've got it or not. +// - nSpell: SPELL_* +// - oCreature +int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); + +// 378: Open oStore for oPC. +void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); + +// 379: +void ActionSurrenderToEnemies(); + +// 380: Get the first member of oMemberOfFaction's faction (start to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through +// oMemberOfFaction's faction). +// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. +object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); + +// 382: Force the action subject to move to lDestination. +void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); + +// 383: Force the action subject to move to oMoveTo. +void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); + +// 384: Get the experience assigned in the journal editor for szPlotID. +int GetJournalQuestExperience(string szPlotID); + +// 385: Jump to oToJumpTo (the action is added to the top of the action queue). +void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); + +// 386: Set whether oMapPin is enabled. +// - oMapPin +// - nEnabled: 0=Off, 1=On +void SetMapPinEnabled(object oMapPin, int nEnabled); + +// 387: 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. +effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// 388: Spawn a GUI panel for the client that controls oPC. +// - oPC +// - nGUIPanel: GUI_PANEL_* +// * Nothing happens if oPC is not a player character or if an invalid value is +// used for nGUIPanel. +void PopUpGUIPanel(object oPC, int nGUIPanel); + +// 389: This allows you to add a new class to any creature object +void AddMultiClass(int nClassType, object oSource); + +// 390: Tests a linked effect to see if the target is immune to it. +// If the target is imune to any of the linked effect then he is immune to all of it +int GetIsLinkImmune(object oTarget, effect eEffect ); + +// 391: Stunn the droid +effect EffectDroidStun( ); + +// 392: Force push the creature... +effect EffectForcePushed(); + +// 393: Gives nXpAmount to oCreature. +void GiveXPToCreature(object oCreature, int nXpAmount); + +// 394: Sets oCreature's experience to nXpAmount. +void SetXP(object oCreature, int nXpAmount); + +// 395: Get oCreature's experience. +int GetXP(object oCreature); + +// 396: Convert nInteger to hex, returning the hex value as a string. +// * Return value has the format "0x????????" where each ? will be a hex digit +// (8 digits in total). +string IntToHexString(int nInteger); + +// 397: Get the base item type (BASE_ITEM_*) of oItem. +// * Returns BASE_ITEM_INVALID if oItem is an invalid item. +int GetBaseItemType(object oItem); + +// 398: Determines whether oItem has nProperty. +// - oItem +// - nProperty: ITEM_PROPERTY_* +// * Returns FALSE if oItem is not a valid item, or if oItem does not have +// nProperty. +int GetItemHasItemProperty(object oItem, int nProperty); + +// 399: The creature will equip the melee weapon in its possession that can do the +// most damage. If no valid melee weapon is found, it will equip the most +// damaging range weapon. This function should only ever be called in the +// EndOfCombatRound scripts, because otherwise it would have to stop the combat +// round to run simulation. +// - oVersus: You can try to get the most damaging weapon against oVersus +// - bOffHand +void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 400: The creature will equip the range weapon in its possession that can do the +// most damage. +// If no valid range weapon can be found, it will equip the most damaging melee +// weapon. +// - oVersus: You can try to get the most damaging weapon against oVersus +void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); + +// 401: Get the Armour Class of oItem. +// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. +int GetItemACValue(object oItem); + +// 402: +// Effect that will play an animation and display a visual effect to indicate the +// target has resisted a force power. +effect EffectForceResisted( object oSource ); + +// 403: Expose the entire map of oArea to oPlayer. +void ExploreAreaForPlayer(object oArea, object oPlayer); + +// 404: The creature will equip the armour in its possession that has the highest +// armour class. +void ActionEquipMostEffectiveArmor(); + +// 405: * Returns TRUE if it is currently day. +int GetIsDay(); + +// 406: * Returns TRUE if it is currently night. +int GetIsNight(); + +// 407: * Returns TRUE if it is currently dawn. +int GetIsDawn(); + +// 408: * Returns TRUE if it is currently dusk. +int GetIsDusk(); + +// 409: * Returns TRUE if oCreature was spawned from an encounter. +int GetIsEncounterCreature(object oCreature=OBJECT_SELF); + +// 410: Use this in an OnPlayerDying module script to get the last player who is dying. +object GetLastPlayerDying(); + +// 411: Get the starting location of the module. +location GetStartingLocation(); + +// 412: Make oCreatureToChange join one of the standard factions. +// ** This will only work on an NPC ** +// - nStandardFaction: STANDARD_FACTION_* +void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); + +// 413: Play oSound. +void SoundObjectPlay(object oSound); + +// 414: Stop playing oSound. +void SoundObjectStop(object oSound); + +// 415: Set the volume of oSound. +// - oSound +// - nVolume: 0-127 +void SoundObjectSetVolume(object oSound, int nVolume); + +// 416: Set the position of oSound. +void SoundObjectSetPosition(object oSound, vector vPosition); + +// 417: Immediately speak a conversation one-liner. +// - sDialogResRef +// - oTokenTarget: This must be specified if there are creature-specific tokens +// in the string. +void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); + +// 418: Get the amount of gold possessed by oTarget. +int GetGold(object oTarget=OBJECT_SELF); + +// 419: Use this in an OnRespawnButtonPressed module script to get the object id of +// the player who last pressed the respawn button. +object GetLastRespawnButtonPresser(); + +// 420: +// Effect that will display a visual effect on the specified object's hand to +// indicate a force power has fizzled out. +effect EffectForceFizzle(); + +// 421: SetLightsaberPowered +// Allows a script to set the state of the lightsaber. This will override any +// game determined lightsaber powerstates. +void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); + +// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. +int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); + +// 423: Use this in a SpellCast script to determine whether the spell was considered +// harmful. +// * Returns TRUE if the last spell cast was harmful. +int GetLastSpellHarmful(); + +// 424: Activate oItem. +event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); + +// 425: Play the background music for oArea. +void MusicBackgroundPlay(object oArea); + +// 426: Stop the background music for oArea. +void MusicBackgroundStop(object oArea); + +// 427: Set the delay for the background music for oArea. +// - oArea +// - nDelay: delay in milliseconds +void MusicBackgroundSetDelay(object oArea, int nDelay); + +// 428: Change the background day track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 429: Change the background night track for oArea to nTrack. +// - oArea +// - nTrack +void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); + +// 430: Play the battle music for oArea. +void MusicBattlePlay(object oArea); + +// 431: Stop the battle music for oArea. +void MusicBattleStop(object oArea); + +// 432: Change the battle track for oArea. +// - oArea +// - nTrack +void MusicBattleChange(object oArea, int nTrack); + +// 433: Play the ambient sound for oArea. +void AmbientSoundPlay(object oArea); + +// 434: Stop the ambient sound for oArea. +void AmbientSoundStop(object oArea); + +// 435: Change the ambient day track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeDay(object oArea, int nTrack); + +// 436: Change the ambient night track for oArea to nTrack. +// - oArea +// - nTrack +void AmbientSoundChangeNight(object oArea, int nTrack); + +// 437: Get the object that killed the caller. +object GetLastKiller(); + +// 438: Use this in a spell script to get the item used to cast the spell. +object GetSpellCastItem(); + +// 439: Use this in an OnItemActivated module script to get the item that was activated. +object GetItemActivated(); + +// 440: Use this in an OnItemActivated module script to get the creature that +// activated the item. +object GetItemActivator(); + +// 441: Use this in an OnItemActivated module script to get the location of the item's +// target. +location GetItemActivatedTargetLocation(); + +// 442: Use this in an OnItemActivated module script to get the item's target. +object GetItemActivatedTarget(); + +// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. +int GetIsOpen(object oObject); + +// 444: Take nAmount of gold from oCreatureToTakeFrom. +// - nAmount +// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. +// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the +// gold will be destroyed and will vanish from the game. +void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); + +// 445: Determine whether oObject is in conversation. +int GetIsInConversation(object oObject); + +// 446: Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +effect EffectAbilityDecrease(int nAbility, int nModifyBy); + +// 447: Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// 448: Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); + +// 449: Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// 450: Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// 451: Create a Movement Speed Decrease effect. +// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. +// If a negative integer is supplied then a movement speed increase will result, +// and if a number >= 100 is supplied then the effect is deleted. +effect EffectMovementSpeedDecrease(int nPercentChange); + +// 452: Create a Saving Throw Decrease effect. +// - nSave +// - nValue +// - nSaveType: SAVING_THROW_TYPE_* +effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// 453: Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +effect EffectSkillDecrease(int nSkill, int nValue); + +// 454: Create a Force Resistance Decrease effect. +effect EffectForceResistanceDecrease(int nValue); + +// 455: Determine whether oTarget is a plot object. +int GetPlotFlag(object oTarget=OBJECT_SELF); + +// 456: Set oTarget's plot object status. +void SetPlotFlag(object oTarget, int nPlotFlag); + +// 457: Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +effect EffectInvisibility(int nInvisibilityType); + +// 458: Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectConcealment(int nPercentage); + +// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da +effect EffectForceShield(int nShield); + +// 460: Create a Dispel Magic All effect. +effect EffectDispelMagicAll(int nCasterLevel); + +// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be +// an existing Placeable Camera ID. Function only works during Dialog. +void SetDialogPlaceableCamera( int nCameraId ); + + +// 462: +// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). +// FALSE otherwise. +int GetSoloMode(); + +// 463: Create a Disguise effect. +// - * nDisguiseAppearance: DISGUISE_TYPE_*s +effect EffectDisguise(int nDisguiseAppearance); + +// 464: +// Returns the maximum amount of stealth xp available in the area. +int GetMaxStealthXP(); + +// 465: Create a True Seeing effect. +effect EffectTrueSeeing(); + +// 466: Create a See Invisible effect. +effect EffectSeeInvisible(); + +// 467: Create a Time Stop effect. +effect EffectTimeStop(); + +// 468: +// Set the maximum amount of stealth xp available in the area. +void SetMaxStealthXP( int nMax ); + +// 469: Increase the blaster deflection rate, i think... +effect EffectBlasterDeflectionIncrease(int nChange); + +// 470:decrease the blaster deflection rate +effect EffectBlasterDeflectionDecrease(int nChange); + +// 471: Make the creature horified. BOO! +effect EffectHorrified( ); + +// 472: 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. +effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); + +// 473: Create a Dispel Magic Best effect. +effect EffectDispelMagicBest(int nCasterLevel); + +// 474: +// Returns the current amount of stealth xp available in the area. +int GetCurrentStealthXP(); + +// 475: Get the number of stacked items that oItem comprises. +int GetNumStackedItems(object oItem); + +// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop +// what they are doing and sets the NPC's enemies within this range to be +// neutral towards the NPC. If this command is run on a PC or an object that is +// not a creature, nothing will happen. +void SurrenderToEnemies(); + +// 477: Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +effect EffectMissChance(int nPercentage); + +// 478: +// Set the current amount of stealth xp available in the area. +void SetCurrentStealthXP( int nCurrent ); + +// 479: Get the size (CREATURE_SIZE_*) of oCreature. +int GetCreatureSize(object oCreature); + +// 480: +// Award the stealth xp to the given oTarget. This will only work on creatures. +void AwardStealthXP( object oTarget ); + +// 481: +// Returns whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +int GetStealthXPEnabled(); + +// 482: +// Sets whether or not the stealth xp bonus is enabled (ie. whether or not +// AwardStealthXP() will actually award any available stealth xp). +void SetStealthXPEnabled( int bEnabled ); + +// 483: The action subject will unlock oTarget, which can be a door or a placeable +// object. +void ActionUnlockObject(object oTarget); + +// 484: The action subject will lock oTarget, which can be a door or a placeable +// object. +void ActionLockObject(object oTarget); + +// 485: 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. +effect EffectModifyAttacks(int nAttacks); + +// 486: Get the last trap detected by oTarget. +// * Return value on error: OBJECT_INVALID +object GetLastTrapDetected(object oTarget=OBJECT_SELF); + +// 487: 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_* +effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// 488: Get the trap nearest to oTarget. +// Note : "trap objects" are actually any trigger, placeable or door that is +// trapped in oTarget's area. +// - oTarget +// - nTrapDetected: if this is TRUE, the trap returned has to have been detected +// by oTarget. +object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); + +// 489: the will get the last attmpted movment target +object GetAttemptedMovementTarget(); + + +// 490: this function returns the bloking creature for the k_def_CBTBlk01 script +object GetBlockingCreature(object oTarget=OBJECT_SELF); + +// 491: Get oTarget's base fortitude saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetFortitudeSavingThrow(object oTarget); + +// 492: Get oTarget's base will saving throw value (this will only work for creatures, +// doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetWillSavingThrow(object oTarget); + +// 493: Get oTarget's base reflex saving throw value (this will only work for +// creatures, doors, and placeables). +// * Returns 0 if oTarget is invalid. +int GetReflexSavingThrow(object oTarget); + +// 494: Get oCreature's challenge rating. +// * Returns 0.0 if oCreature is invalid. +float GetChallengeRating(object oCreature); + +// 495: Returns the found enemy creature on a pathfind. +object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); + +// 496: Get oCreature's movement rate. +// * Returns 0 if oCreature is invalid. +int GetMovementRate(object oCreature); + +// 497: GetSubRace of oCreature +// Returns SUBRACE_* +int GetSubRace(object oCreature); + +// 498: +// Returns the amount the stealth xp bonus gets decreased each time the player is detected. +int GetStealthXPDecrement(); + +// 499: +// Sets the amount the stealth xp bonus gets decreased each time the player is detected. +void SetStealthXPDecrement( int nDecrement ); + +// 500: +void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); + +// 501: The action subject will fake casting a spell at oTarget; the conjure and cast +// animations and visuals will occur, nothing else. +// - nSpell +// - oTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 502: The action subject will fake casting a spell at lLocation; the conjure and +// cast animations and visuals will occur, nothing else. +// - nSpell +// - lTarget +// - nProjectilePathType: PROJECTILE_PATH_TYPE_* +void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); + +// 503: CutsceneAttack +// This function allows the designer to specify exactly what's going to happen in a combat round +// There are no guarentees made that the animation specified here will be correct - only that it will be played, +// so it is up to the designer to ensure that they have selected the right animation +// It relies upon constants specified above for the attack result +void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); + +// 504: Set the camera mode for oPlayer. +// - oPlayer +// - nCameraMode: CAMERA_MODE_* +// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing +// happens. +void SetCameraMode(object oPlayer, int nCameraMode); + +// 505: SetLockOrientationInDialog +// Allows the locking and unlocking of orientation changes for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockOrientationInDialog(object oObject, int nValue); + +// 506: SetLockHeadFollowInDialog +// Allows the locking and undlocking of head following for an object in dialog +// - oObject - Object +// - nValue - TRUE or FALSE +void SetLockHeadFollowInDialog(object oObject, int nValue); + +// 507: CutsceneMoveToPoint +// Used by the cutscene system to allow designers to script combat +void CutsceneMove(object oObject, vector vPosition, int nRun); + +// 508: EnableVideoEffect +// Enables the video frame buffer effect specified by nEffectType, which is +// an index into VideoEffects.2da. This video effect will apply indefinitely, +// and so it should *always* be cleared by a call to DisableVideoEffect(). +void EnableVideoEffect(int nEffectType); + +// 509: Shut down the currently loaded module and start a new one (moving all +// currently-connected players to the starting point. +void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); + +// 510: DisableVideoEffect +// Disables any video frame buffer effect that may be running. See +// EnableVideoEffect() to see how to use them. +void DisableVideoEffect(); + +// 511: * Returns TRUE if oItem is a ranged weapon. +int GetWeaponRanged(object oItem); + +// 512: Only if we are in a single player game, AutoSave the game. +void DoSinglePlayerAutoSave(); + +// 513: Get the game difficulty (GAME_DIFFICULTY_*). +int GetGameDifficulty(); + +// 514: +// This will test the combat action queu to see if the user has placed any actions on the queue. +// will only work during combat. +int GetUserActionsPending(); + +// 515: RevealMap +// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' +// If this function is called with no parameters it will reveal the entire map. +// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 +// then the entire map will be revealed) +void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); + +// 516: SetTutorialWindowsEnabled +// Sets whether or not the tutorial windows are enabled (ie. whether or not they will +// appear when certain things happen for the first time). +void SetTutorialWindowsEnabled( int bEnabled ); + +// 517: ShowTutorialWindow +// nWindow - A row index from Tutorial.2DA specifying the message to display. +// Pops up the specified tutorial window. If the tutorial window has already popped +// up once before, this will do nothing. +void ShowTutorialWindow( int nWindow ); + +// 518: StartCreditSequence +// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed +// with a transparent background, allowing whatever is currently onscreen to show through. If it +// is set to FALSE, the credits will be displayed on a black background. +void StartCreditSequence( int bTransparentBackground ); + +// 519: IsCreditSequenceInProgress +// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. +int IsCreditSequenceInProgress(); + +// 520: Sets the minigame lateral acceleration/sec value +void SWMG_SetLateralAccelerationPerSecond(float fLAPS); + +// 521: Returns the minigame lateral acceleration/sec value +float SWMG_GetLateralAccelerationPerSecond(); + +// 522: Get the current action (ACTION_*) that oObject is executing. +int GetCurrentAction(object oObject=OBJECT_SELF); + +// 523: +float GetDifficultyModifier(); + +// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) +// - oCreature +int GetAppearanceType(object oCreature); + +// 525: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - nStrRefToDisplay: String ref (therefore text is translated) +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 526: Display floaty text above the specified creature. +// The text will also appear in the chat buffer of each player that receives the +// floaty text. +// - sStringToDisplay: String +// - oCreatureToFloatAbove +// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction +// as oCreatureToFloatAbove +// will see the floaty text, and only if they are within range (30 metres). +void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); + +// 527: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is disarmable. +int GetTrapDisarmable(object oTrapObject); + +// 528: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is detectable. +int GetTrapDetectable(object oTrapObject); + +// 529: - oTrapObject: a placeable, door or trigger +// - oCreature +// * Returns TRUE if oCreature has detected oTrapObject +int GetTrapDetectedBy(object oTrapObject, object oCreature); + +// 530: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. +int GetTrapFlagged(object oTrapObject); + +// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapBaseType(object oTrapObject); + +// 532: - oTrapObject: a placeable, door or trigger +// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself +// after firing. +int GetTrapOneShot(object oTrapObject); + +// 533: Get the creator of oTrapObject, the creature that set the trap. +// - oTrapObject: a placeable, door or trigger +// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. +object GetTrapCreator(object oTrapObject); + +// 534: Get the tag of the key that will disarm oTrapObject. +// - oTrapObject: a placeable, door or trigger +string GetTrapKeyTag(object oTrapObject); + +// 535: Get the DC for disarming oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDisarmDC(object oTrapObject); + +// 536: Get the DC for detecting oTrapObject. +// - oTrapObject: a placeable, door or trigger +int GetTrapDetectDC(object oTrapObject); + +// 537: * Returns TRUE if a specific key is required to open the lock on oObject. +int GetLockKeyRequired(object oObject); + +// 538: Get the tag of the key that will open the lock on oObject. +int GetLockKeyTag(object oObject); + +// 539: * Returns TRUE if the lock on oObject is lockable. +int GetLockLockable(object oObject); + +// 540: Get the DC for unlocking oObject. +int GetLockUnlockDC(object oObject); + +// 541: Get the DC for locking oObject. +int GetLockLockDC(object oObject); + +// 542: Get the last PC that levelled up. +object GetPCLevellingUp(); + +// 543: - nFeat: FEAT_* +// - oObject +// * Returns TRUE if oObject has effects on it originating from nFeat. +int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); + +// 544: Set the status of the illumination for oPlaceable. +// - oPlaceable +// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. +// If this is FALSE, oPlaceable's illumination will be turned off. +// Note: You must call RecomputeStaticLighting() after calling this function in +// order for the changes to occur visually for the players. +// SetPlaceableIllumination() buffers the illumination changes, which are then +// sent out to the players once RecomputeStaticLighting() is called. As such, +// it is best to call SetPlaceableIllumination() for all the placeables you wish +// to set the illumination on, and then call RecomputeStaticLighting() once after +// all the placeable illumination has been set. +// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that +// doesn't have a light, nothing will happen. +void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); + +// 545: * Returns TRUE if the illumination for oPlaceable is on +int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); + +// 546: - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +// * Returns TRUE if nPlacebleAction is valid for oPlaceable. +int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); + +// 547: The caller performs nPlaceableAction on oPlaceable. +// - oPlaceable +// - nPlaceableAction: PLACEABLE_ACTION_* +void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); + +// 548: Get the first PC in the player list. +// This resets the position in the player list for GetNextPC(). +object GetFirstPC(); + +// 549: Get the next PC in the player list. +// This picks up where the last GetFirstPC() or GetNextPC() left off. +object GetNextPC(); + +// 550: Set oDetector to have detected oTrap. +int SetTrapDetectedBy(object oTrap, object oDetector); + +// 551: Note: Only placeables, doors and triggers can be trapped. +// * Returns TRUE if oObject is trapped. +int GetIsTrapped(object oObject); + +// 552: SetEffectIcon +// This will link the specified effect icon to the specified effect. The +// effect returned will contain the link to the effect icon and applying this +// effect will cause an effect icon to appear on the portrait/charsheet gui. +// eEffect: The effect which should cause the effect icon to appear. +// nIcon: Index into effecticon.2da of the effect icon to use. +effect SetEffectIcon( effect eEffect, int nIcon ); + +// 553: FaceObjectAwayFromObject +// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. +// The objects must be in the same area for this to work. +void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); + +// 554: Spawn in the Death GUI. +// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but +// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the +// function to use. +// - oPC +// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled +// on the Death GUI. +// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will +// be enabled on the Death GUI. +// - nHelpStringReference +// - sHelpString +void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); + +// 555: Disable oTrap. +// - oTrap: a placeable, door or trigger. +void SetTrapDisabled(object oTrap); + +// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), +// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a +// creature is pickpocketed). +// Note: Return values may only ever be: +// 1) A Creature +// 2) Plot Characters will never have this value set +// 3) Area of Effect Objects will return the AOE creator if they are registered +// as this value, otherwise they will return INVALID_OBJECT_ID +// 4) Traps will not return the creature that set the trap. +// 5) This value will never be overwritten by another non-creature object. +// 6) This value will never be a dead/destroyed creature +object GetLastHostileActor(object oVictim=OBJECT_SELF); + +// 557: Force all the characters of the players who are currently in the game to +// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. +void ExportAllCharacters(); + +// 558: Get the Day Track for oArea. +int MusicBackgroundGetDayTrack(object oArea); + +// 559: Get the Night Track for oArea. +int MusicBackgroundGetNightTrack(object oArea); + +// 560: Write sLogEntry as a timestamped entry into the log file +void WriteTimestampedLogEntry(string sLogEntry); + +// 561: Get the module's name in the language of the server that's running it. +// * If there is no entry for the language of the server, it will return an +// empty string +string GetModuleName(); + +// 562: Get the leader of the faction of which oMemberOfFaction is a member. +// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. +object GetFactionLeader(object oMemberOfFaction); + +// 563: Turns on or off the speed blur effect in rendered scenes. +// bEnabled: Set TRUE to turn it on, FALSE to turn it off. +// fRatio: Sets the frame accumulation ratio. +void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); + +// 564: Immediately ends the currently running game and returns to the start screen. +// nShowEndGameGui: Set TRUE to display the death gui. +void EndGame( int nShowEndGameGui=TRUE ); + +// 565: Get a variable passed when calling console debug runscript +int GetRunScriptVar(); + +// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants +// if the OID passed in is not found or not a creature then it will return +// MOVEMENT_SPEED_IMMOBILE. +int GetCreatureMovmentType(object oidCreature); + +// 567: Set the ambient day volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetDayVolume(object oArea, int nVolume); + +// 568: Set the ambient night volume for oArea to nVolume. +// - oArea +// - nVolume: 0 - 100 +void AmbientSoundSetNightVolume(object oArea, int nVolume); + +// 569: Get the Battle Track for oArea. +int MusicBackgroundGetBattleTrack(object oArea); + +// 570: Determine whether oObject has an inventory. +// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. +// * Returns FALSE for all other object types. +int GetHasInventory(object oObject); + +// 571: Get the duration (in seconds) of the sound attached to nStrRef +// * Returns 0.0f if no duration is stored or if no sound is attached +float GetStrRefSoundDuration(int nStrRef); + +// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. +// - oPC: player to add to a party +// - oPartyLeader: player already in the party +void AddToParty(object oPC, object oPartyLeader); + +// 573: Remove oPC from their current party. This will only work on a PC. +// - oPC: removes this player from whatever party they're currently in. +void RemoveFromParty(object oPC); + +// 574: Adds a creature to the party +// Returns whether the addition was successful +// AddPartyMember +int AddPartyMember(int nNPC, object oCreature); + +// 575: Removes a creature from the party +// Returns whether the removal was syccessful +// RemovePartyMember +int RemovePartyMember(int nNPC); + +// 576: Returns whether a specified creature is a party member +// IsObjectPartyMember +int IsObjectPartyMember(object oCreature); + +// 577: Returns the party member at a given index in the party. +// The order of members in the party can vary based on +// who the current leader is (member 0 is always the current +// party leader). +// GetPartyMemberByIndex +object GetPartyMemberByIndex(int nIndex); + +// 578: GetGlobalBoolean +// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. +int GetGlobalBoolean( string sIdentifier ); + +// 579: SetGlobalBoolean +// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. +void SetGlobalBoolean( string sIdentifier, int nValue ); + +// 580: GetGlobalNumber +// This function returns the value of a global number (-128 to +127) scripting variable. +int GetGlobalNumber( string sIdentifier ); + +// 581: SetGlobalNumber +// This function sets the value of a global number (-128 to +127) scripting variable. +void SetGlobalNumber( string sIdentifier, int nValue ); + +// post a string to the screen at column nX and row nY for fLife seconds +// 582. AurPostString +void AurPostString(string sString, int nX, int nY, float fLife); + +// 583: OnAnimKey +// get the event and the name of the model on which the event happened +// SWMG_GetLastEvent +string SWMG_GetLastEvent(); + +// 584: SWMG_GetLastEventModelName +string SWMG_GetLastEventModelName(); + +// 585: gets an object by its name (duh!) +// SWMG_GetObjectByName +object SWMG_GetObjectByName(string sName); + +// 586: plays an animation on an object +// SWMG_PlayAnimation +void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); + +// 587: OnHitBullet +// get the damage, the target type (see TARGETflags), and the shooter +// SWMG_GetLastBulletHitDamage +int SWMG_GetLastBulletHitDamage(); + +// 588: SWMG_GetLastBulletHitTarget +int SWMG_GetLastBulletHitTarget(); + +// 589: SWMG_GetLastBulletHitShooter +object SWMG_GetLastBulletHitShooter(); + +// 590: adjusts a followers hit points, can specify the absolute value to set to +// SWMG_AdjustFollowerHitPoints +int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); + +// 591: the default implementation of OnBulletHit +// SWMG_OnBulletHit +void SWMG_OnBulletHit(); + +// 592: the default implementation of OnObstacleHit +// SWMG_OnObstacleHit +void SWMG_OnObstacleHit(); + +// 593: returns the last follower and obstacle hit +// SWMG_GetLastFollowerHit +object SWMG_GetLastFollowerHit(); + +// 594: SWMG_GetLastObstacleHit +object SWMG_GetLastObstacleHit(); + +// 595: gets information about the last bullet fired +// SWMG_GetLastBulletFiredDamage +int SWMG_GetLastBulletFiredDamage(); + +// 596: SWMG_GetLastBulletFiredTarget +int SWMG_GetLastBulletFiredTarget(); + +// 597: gets an objects name +// SWMG_GetObjectName +string SWMG_GetObjectName(object oid=OBJECT_SELF); + +// 598: the default implementation of OnDeath +// SWMG_OnDeath +void SWMG_OnDeath(); + +// 599: a bunch of Is functions for your pleasure +// SWMG_IsFollower +int SWMG_IsFollower(object oid=OBJECT_SELF); + +// 600: SWMG_IsPlayer +int SWMG_IsPlayer(object oid=OBJECT_SELF); + +// 601: SWMG_IsEnemy +int SWMG_IsEnemy(object oid=OBJECT_SELF); + +// 602: SWMG_IsTrigger +int SWMG_IsTrigger(object oid=OBJECT_SELF); + +// 603: SWMG_IsObstacle +int SWMG_IsObstacle(object oid=OBJECT_SELF); + +// 604: SWMG_SetFollowerHitPoints +void SWMG_SetFollowerHitPoints(object oFollower, int nHP); + +// 605: SWMG_OnDamage +void SWMG_OnDamage(); + +// 606: SWMG_GetLastHPChange +int SWMG_GetLastHPChange(); + +// 607: SWMG_RemoveAnimation +void SWMG_RemoveAnimation(object oObject, string sAnimName); + +// 608: SWMG_GetCameraNearClip +float SWMG_GetCameraNearClip(); + +// 609: SWMG_GetCameraFarClip +float SWMG_GetCameraFarClip(); + +// 610: SWMG_SetCameraClip +void SWMG_SetCameraClip(float fNear, float fFar); + +// 611: SWMG_GetPlayer +object SWMG_GetPlayer(); + +// 612: SWMG_GetEnemyCount +int SWMG_GetEnemyCount(); + +// 613: SWMG_GetEnemy +object SWMG_GetEnemy(int nEntry); + +// 614: SWMG_GetObstacleCount +int SWMG_GetObstacleCount(); + +// 615: SWMG_GetObstacle +object SWMG_GetObstacle(int nEntry); + +// 616: SWMG_GetHitPoints +int SWMG_GetHitPoints(object oFollower); + +// 617: SWMG_GetMaxHitPoints +int SWMG_GetMaxHitPoints(object oFollower); + +// 618: SWMG_SetMaxHitPoints +void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); + +// 619: SWMG_GetSphereRadius +float SWMG_GetSphereRadius(object oFollower); + +// 620: SWMG_SetSphereRadius +void SWMG_SetSphereRadius(object oFollower, float fRadius); + +// 621: SWMG_GetNumLoops +int SWMG_GetNumLoops(object oFollower); + +// 622: SWMG_SetNumLoops +void SWMG_SetNumLoops(object oFollower, int nNumLoops); + +// 623: SWMG_GetPosition +vector SWMG_GetPosition(object oFollower); + +// 624: SWMG_GetGunBankCount +int SWMG_GetGunBankCount(object oFollower); + +// 625: SWMG_GetGunBankBulletModel +string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); + +// 626: SWMG_GetGunBankGunModel +string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); + +// 627: SWMG_GetGunBankDamage +int SWMG_GetGunBankDamage(object oFollower, int nGunBank); + +// 628: SWMG_GetGunBankTimeBetweenShots +float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); + +// 629: SWMG_GetGunBankLifespan +float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); + +// 630: SWMG_GetGunBankSpeed +float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); + +// 631: SWMG_GetGunBankTarget +int SWMG_GetGunBankTarget(object oFollower, int nGunBank); + +// 632: SWMG_SetGunBankBulletModel +void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); + +// 633: SWMG_SetGunBankGunModel +void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); + +// 634: SWMG_SetGunBankDamage +void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); + +// 635: SWMG_SetGunBankTimeBetweenShots +void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); + +// 636: SWMG_SetGunBankLifespan +void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); + +// 637: SWMG_SetGunBankSpeed +void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); + +// 638: SWMG_SetGunBankTarget +void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); + +// 639: SWMG_GetLastBulletHitPart +string SWMG_GetLastBulletHitPart(); + +// 640: SWMG_IsGunBankTargetting +int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); + +// 641: SWMG_GetPlayerOffset +// returns a vector with the player rotation for rotation minigames +// returns a vector with the player translation for translation minigames +vector SWMG_GetPlayerOffset(); + +// 642: SWMG_GetPlayerInvincibility +float SWMG_GetPlayerInvincibility(); + +// 643: SWMG_GetPlayerSpeed +float SWMG_GetPlayerSpeed(); + +// 644: SWMG_GetPlayerMinSpeed +float SWMG_GetPlayerMinSpeed (); + +// 645: SWMG_GetPlayerAccelerationPerSecond +float SWMG_GetPlayerAccelerationPerSecond(); + +// 646: SWMG_GetPlayerTunnelPos +vector SWMG_GetPlayerTunnelPos(); + +// 647: SWMG_SetPlayerOffset +void SWMG_SetPlayerOffset(vector vOffset); + +// 648: SWMG_SetPlayerInvincibility +void SWMG_SetPlayerInvincibility(float fInvincibility); + +// 649: SWMG_SetPlayerSpeed +void SWMG_SetPlayerSpeed(float fSpeed); + +// 650: SWMG_SetPlayerMinSpeed +void SWMG_SetPlayerMinSpeed(float fMinSpeed); + +// 651: SWMG_SetPlayerAccelerationPerSecond +void SWMG_SetPlayerAccelerationPerSecond(float fAPS); + +// 652: SWMG_SetPlayerTunnelPos +void SWMG_SetPlayerTunnelPos(vector vTunnel); + +// 653: SWMG_GetPlayerTunnelNeg +vector SWMG_GetPlayerTunnelNeg(); + +// 654: SWMG_SetPlayerTunnelNeg +void SWMG_SetPlayerTunnelNeg(vector vTunnel); + +// 655: SWMG_GetPlayerOrigin +vector SWMG_GetPlayerOrigin(); + +// 656: SWMG_SetPlayerOrigin +void SWMG_SetPlayerOrigin(vector vOrigin); + +// 657: SWMG_GetGunBankHorizontalSpread +float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); + +// 658: SWMG_GetGunBankVerticalSpread +float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); + +// 659: SWMG_GetGunBankSensingRadius +float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); + +// 660: SWMG_GetGunBankInaccuracy +float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); + +// 661: SWMG_SetGunBankHorizontalSpread +void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); + +// 662: SWMG_SetGunBankVerticalSpread +void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); + +// 663: SWMG_SetGunBankSensingRadius +void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); + +// 664: SWMG_SetGunBankInaccuracy +void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); + +// 665: GetIsInvulnerable +// This returns whether the follower object is currently invulnerable to damage +int SWMG_GetIsInvulnerable( object oFollower ); + +// 666: StartInvulnerability +// This will begin a period of invulnerability (as defined by Invincibility) +void SWMG_StartInvulnerability( object oFollower ); + +// 667: GetPlayerMaxSpeed +// This returns the player character's max speed +float SWMG_GetPlayerMaxSpeed(); + +// 668: SetPlayerMaxSpeed +// This sets the player character's max speed +void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); + +// 669: AddJournalWorldEntry +// Adds a user entered entry to the world notices +void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); + +// 670: AddJournalWorldEntryStrref +// Adds an entry to the world notices using stringrefs +void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); + +// 671: BarkString +// this will cause a creature to bark the strRef from the talk table +// If creature is specefied as OBJECT_INVALID a general bark is made. +void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); + + +// 672: DeleteJournalWorldAllEntries +// Nuke's 'em all, user entered or otherwise. +void DeleteJournalWorldAllEntries(); + +// 673: DeleteJournalWorldEntry +// Deletes a user entered world notice +void DeleteJournalWorldEntry( int nIndex ); + +// 674: DeleteJournalWorldEntryStrref +// Deletes the world notice pertaining to the string ref +void DeleteJournalWorldEntryStrref( int strref ); + +// 675: EffectForceDrain +// This command will reduce the force points of a creature. +effect EffectForceDrain( int nDamage ); + +// 676: EffectTemporaryForcePoints +// +effect EffectPsychicStatic(); + +// 677: PlayVisualAreaEffect +void PlayVisualAreaEffect(int nEffectID, location lTarget); + +// 678: SetJournalQuestEntryPicture +// Sets the picture for the quest entry on this object (creature) +void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); + +// 679. GetLocalBoolean +// This gets a boolean flag on an object +// currently the index is a range between 20 and 63 +int GetLocalBoolean( object oObject, int nIndex ); + +// 680. SetLocalBoolean +// This sets a boolean flag on an object +// currently the index is a range between 20 and 63 +void SetLocalBoolean( object oObject, int nIndex, int nValue ); + +// 681. GetLocalNumber +// This gets a number on an object +// currently the index is a range between 12 and 28 +int GetLocalNumber( object oObject, int nIndex ); + +// 682. SetLocalNumber +// This sets a number on an object +// currently the index is a range between 12 and 28 +// the value range is 0 to 255 +void SetLocalNumber( object oObject, int nIndex, int nValue ); + +// 683. SWMG_GetSoundFrequency +// Gets the frequency of a trackfollower sound +int SWMG_GetSoundFrequency( object oFollower, int nSound ); + +// 684. SWMG_SetSoundFrequency +// Sets the frequency of a trackfollower sound +void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); + +// 685. SWMG_GetSoundFrequencyIsRandom +// Gets whether the frequency of a trackfollower sound is using the random model +int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); + +// 686. SWMG_SetSoundFrequencyIsRandom +// Sets whether the frequency of a trackfollower sound is using the random model +void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); + +// 687. SWMG_GetSoundVolume +// Gets the volume of a trackfollower sound +int SWMG_GetSoundVolume( object oFollower, int nSound ); + +// 688. SWMG_SetSoundVolume +// Sets the volume of a trackfollower sound +void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); + +// 689. SoundObjectGetPitchVariance +// Gets the pitch variance of a placeable sound object +float SoundObjectGetPitchVariance( object oSound ); + +// 690. SoundObjectSetPitchVariance +// Sets the pitch variance of a placeable sound object +void SoundObjectSetPitchVariance( object oSound, float fVariance ); + +// 691. SoundObjectGetVolume +// Gets the volume of a placeable sound object +int SoundObjectGetVolume( object oSound ); + +// 692: GetGlobalLocation +// This function returns the a global location scripting variable. +location GetGlobalLocation( string sIdentifier ); + +// 693: SetGlobalLocation +// This function sets the a global location scripting variable. +void SetGlobalLocation( string sIdentifier, location lValue ); + +// 694. AddAvailableNPCByObject +// This adds a NPC to the list of available party members using +// a game object as the template +// Returns if true if successful, false if the NPC had already +// been added or the object specified is invalid +int AddAvailableNPCByObject( int nNPC, object oCreature ); + +// 695. RemoveAvailableNPC +// This removes a NPC from the list of available party members +// Returns whether it was successful or not +int RemoveAvailableNPC( int nNPC ); + +// 696. IsAvailableNPC +// This returns whether a NPC is in the list of available party members +int IsAvailableCreature( int nNPC ); + +// 697. AddAvailableNPCByTemplate +// This adds a NPC to the list of available party members using +// a template +// Returns if true if successful, false if the NPC had already +// been added or the template specified is invalid +int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); + +// 698. SpawnAvailableNPC +// This spawns a NPC from the list of available creatures +// Returns a pointer to the creature object +object SpawnAvailableNPC( int nNPC, location lPosition ); + +// 699. IsNPCPartyMember +// Returns if a given NPC constant is in the party currently +int IsNPCPartyMember( int nNPC ); + +// 700. ActionBarkString +// this will cause a creature to bark the strRef from the talk table. +void ActionBarkString(int strRef); + +// 701. GetIsConversationActive +// Checks to see if any conversations are currently taking place +int GetIsConversationActive(); + +// 702. EffectLightsaberThrow +// This function throws a lightsaber at a target +// If multiple targets are specified, then the lightsaber travels to them +// sequentially, returning to the first object specified +// This effect is applied to an object, so an effector is not needed +effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); + +// 703. +// creates the effect of a whirl wind. +effect EffectWhirlWind(); + +// 704. +// Returns the party ai style +int GetPartyAIStyle(); + +// 705. +// Returns the party members ai style +int GetNPCAIStyle(object oCreature); + +// 706. +// Sets the party ai style +void SetPartyAIStyle(int nStyle); + +// 707. +// Sets the party members ai style +void SetNPCAIStyle(object oCreature, int nStyle); + +// 708: SetNPCSelectability +void SetNPCSelectability(int nNPC, int nSelectability); + +// 709: GetNPCSelectability +// nNPC - NPC_ +// returns 1 if in current party, 0 if selectable as a party member +// -1 if not in party at all +int GetNPCSelectability(int nNPC); + +// 710: Clear all the effects of the caller. +// * No return value, but if an error occurs, the log file will contain +// "ClearAllEffects failed.". +void ClearAllEffects(); + +// 711: GetLastConversation +// Gets the last conversation string. +string GetLastConversation(); +// + +// 712: ShowPartySelectionGUI +// Brings up the party selection GUI for the player to +// select the members of the party from +// if exit script is specified, will be executed when +// the GUI is exited +// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE +// to this parameter makes it possible for the player to cancel out +// of the party selection GUI, so be careful that you are okay with +// them cancelling out of it before you pass TRUE. +// Also, in the sExitScript that gets called after the Party Select +// GUI exits, you can use GetRunScriptVar to find out if they +// cancelled. If it returns TRUE, they didn't cancel. If it returns +// FALSE, they cancelled. See me if there's questions. +void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); + +// 713: GetStandardFaction +// Find out which standard faction oObject belongs to. +// * Returns INVALID_STANDARD_FACTION if oObject does not belong to +// a Standard Faction, or an error has occurred. +int GetStandardFaction(object oObject); + +// 714: GivePlotXP +// Give nPercentage% of the experience associated with plot sPlotName +// to the party +// - sPlotName +// - nPercentage +void GivePlotXP(string sPlotName, int nPercentage); + +// 715. GetMinOneHP +// Checks to see if oObject has the MinOneHP Flag set on them. +int GetMinOneHP(object oObject); + +// 716. SetMinOneHP +// Sets/Removes the MinOneHP Flag on oObject. +void SetMinOneHP(object oObject,int nMinOneHP); + +// 717. SWMG_GetPlayerTunnelInfinite +// Gets whether each of the dimensions is infinite +vector SWMG_GetPlayerTunnelInfinite(); + +// 718. SWMG_SetPlayerTunnelInfinite +// Sets whether each of the dimensions is infinite +void SWMG_SetPlayerTunnelInfinite(vector vInfinite); + +// 719. SetGlobalFadeIn +// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be from a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut in from black. +void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + +// 720. SetGlobalFadeOut +// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. +// The Fade will be to a color specified by the RGB values fR, fG, and fB. +// Note that fR, fG, and fB are normalized values. +// The default values are an immediate cut to from black. +void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); + + +// 721. GetLastAttackTarget +// Returns the last attack target for a given object +object GetLastHostileTarget(object oAttacker = OBJECT_SELF); + +// 722. GetLastAttackAction +// Returns the last attack action for a given object +int GetLastAttackAction(object oAttacker = OBJECT_SELF); + +// 723. GetLastForcePowerUsed +// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object +int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); + +// 724. GetLastCombatFeatUsed +// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object +int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); + +// 725. GetLastAttackResult +// Returns the result of the last attack +int GetLastAttackResult(object oAttacker = OBJECT_SELF); + +// 726. GetWasForcePowerSuccessful +// Returns whether the last force power used was successful or not +int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); + +// 727. GetFirstAttacker +// Returns the first object in the area that is attacking oCreature +object GetFirstAttacker(object oCreature = OBJECT_SELF); + +// 728. GetNextAttacker +// Returns the next object in the area that is attacking oCreature +object GetNextAttacker(object oCreature = OBJECT_SELF); + +// 729. SetFormation +// Put oCreature into the nFormationPattern about oAnchor at position nPosition +// - oAnchor: The formation is set relative to this object +// - oCreature: This is the creature that you wish to join the formation +// - nFormationPattern: FORMATION_* +// - nPosition: Integer from 1 to 10 to specify which position in the formation +// oCreature is supposed to take. +void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); + +// 730. ActionFollowLeader +// this action has a party member follow the leader. +// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! +void ActionFollowLeader(); + +// 731. SetForcePowerUnsuccessful +// Sets the reason (through a constant) for why a force power failed +void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); + +// 732. GetIsDebilitated +// Returns whether the given object is debilitated or not +int GetIsDebilitated(object oCreature = OBJECT_SELF); + +// 733. PlayMovie +// Playes a Movie. +void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); + +// 734. SaveNPCState +// Tells the party table to save the state of a party member NPC +void SaveNPCState( int nNPC ); + +// 735: Get the Category of tTalent. +int GetCategoryFromTalent(talent tTalent); + +// 736: This affects all creatures in the area that are in faction nFactionFrom... +// - Makes them join nFactionTo +// - Clears all actions +// - Disables combat mode +void SurrenderByFaction(int nFactionFrom, int nFactionTo); + +// 737: This affects all creatures in the area that are in faction nFactionFrom. +// making them change to nFactionTo +void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); + +// 738: PlayRoomAnimation +// Plays a looping animation on a room +void PlayRoomAnimation(string sRoom, int nAnimation); + +// 739: ShowGalaxyMap +// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet +// that has already been set available and selectable. +void ShowGalaxyMap(int nPlanet); + +// 740: SetPlanetSelectable +// Sets 'nPlanet' selectable on the Galaxy Map Gui. +void SetPlanetSelectable(int nPlanet, int bSelectable); + +// 741: GetPlanetSelectable +// Returns wheter or not 'nPlanet' is selectable. +int GetPlanetSelectable(int nPlanet); + +// 742: SetPlanetAvailable +// Sets 'nPlanet' available on the Galaxy Map Gui. +void SetPlanetAvailable(int nPlanet, int bAvailable); + +// 743: GetPlanetAvailable +// Returns wheter or not 'nPlanet' is available. +int GetPlanetAvailable(int nPlanet); + +// 744: GetSelectedPlanet +// Returns the ID of the currently selected planet. Check Planetary.2da +// for which planet the return value corresponds to. If the return is -1 +// no planet is selected. +int GetSelectedPlanet(); + +// 745: SoundObjectFadeAndStop +// Fades a sound object for 'fSeconds' and then stops it. +void SoundObjectFadeAndStop(object oSound,float fSeconds); + +// 746: SetAreaFogColor +// Set the fog color for the area oArea. +void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); + +// 747: ChangeItemCost +// Change the cost of an item +void ChangeItemCost( string sItem, float fCostMultiplier ); + +// 748: GetIsLiveContentAvailable +// Determines whether a given live content package is available +// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 +int GetIsLiveContentAvailable(int nPkg); + +// 749: ResetDialogState +// Resets the GlobalDialogState for the engine. +// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! +// only to be used for a failing OnDialog script +void ResetDialogState(); + +// 750: SetAlignmentGoodEvil +// Set oCreature's alignment value +void SetGoodEvilValue( object oCreature, int nAlignment ); + +// 751: GetIsPoisoned +// Returns TRUE if the object specified is poisoned. +int GetIsPoisoned( object oObject ); + +// 752: GetSpellTarget +// Returns the object id of the spell target +object GetSpellTarget(object oCreature=OBJECT_SELF); + +// 753: SetSoloMode +// Activates/Deactivates solo mode for the player's party. +void SetSoloMode( int bActivate ); + +// 754: EffectCutSceneHorrified +// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneHorrified(); + +// 755: EffectCutSceneParalyze +// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneParalyze(); + +// 756: EffectCutSceneStunned +// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). +effect EffectCutSceneStunned(); + +// 757: CancelPostDialogCharacterSwitch() +// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object +// calling this function will cancel the Post Dialog switching back to the NPC +// that did the initiating. +void CancelPostDialogCharacterSwitch(); + +// 758: SetMaxHitPoints +// Set the maximum hitpoints of oObject +// The objects maximum AND current hitpoints will be nMaxHP after the function is called +void SetMaxHitPoints(object oObject, int nMaxHP); + +// 759: NoClicksFor() +// This command will not allow clicking on anything for 'fDuration' seconds +void NoClicksFor(float fDuration); + +// 760: HoldWorldFadeInForDialog() +// This will hold the fade in at the begining of a module until a dialog starts +void HoldWorldFadeInForDialog(); + +// 761: ShipBuild() +// This will return if this is a shipping build. this should be used to disable all debug output. +int ShipBuild(); + +// 762: SurrenderRetainBuffs() +// This will do the same as SurrenderToEnemies, except that affected creatures will not +// lose effects which they have put on themselves +void SurrenderRetainBuffs(); + +// 763. SuppressStatusSummaryEntry +// This will prevent the next n entries that should have shown up in the status summary +// from being added +// This will not add on to any existing summary suppressions, but rather replace it. So +// to clear the supression system pass 0 as the entry value +void SuppressStatusSummaryEntry(int nNumEntries = 1); + +// 764. GetCheatCode +// Returns true if cheat code has been enabled +int GetCheatCode(int nCode); + +// 765. SetMusicVolume +// NEVER USE THIS! +void SetMusicVolume(float fVolume = 1.0f); + +// 766. CreateItemOnFloor +// Should only be used for items that have been created on the ground, and will +// be destroyed without ever being picked up or equipped. Returns true if successful +object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); + +// 767. SetAvailableNPCId +// This will set the object id that should be used for a specific available NPC +void SetAvailableNPCId(int nNPC, object oidNPC); + +// DJS-OEI +// 768. GetScriptParameter +// This function will take the index of a script parameter +// and return the value associated with it. The index +// of the first parameter is 1. +int GetScriptParameter( int nIndex ); + +//RWT-OEI 12/10/03 +// 769. SetFadeUntilScript +// This script function will make it so that the fade cannot be lifted under any circumstances +// other than a call to the SetGlobalFadeIn() script. +// This function should be called AFTER the fade has already been called. For example, you would +// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() +// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new +// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript +// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. +void SetFadeUntilScript(); + +// DJS-OEI 12/15/2003 +// 770: Create a Force Body effect +// - nLevel: The level of the Force Body effect. +// 0 = Force Body +// 1 = Improved Force Body +// 2 = Master Force Body +effect EffectForceBody(int nLevel); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item +int GetItemComponent( ); + +// FAK-OEI 12/15/2003 +// 771: Get the number of components for an item in pieces +int GetItemComponentPieceValue( ); + +// FAK-OEI 12/15/2003 +// 773: Start the GUI for Chemical Workshop +void ShowChemicalUpgradeScreen(object oCharacter ); + +// FAK-OEI 12/15/2003 +// 774: Get the number of chemicals for an item +int GetChemicals( ); + +// FAK-OEI 12/15/2003 +// 775: Get the number of chemicals for an item in pieces +int GetChemicalPieceValue( ); + +// DJS-OEI 12/30/2003 +// 776: Get the number of Force Points that were required to +// cast this spell. This includes modifiers such as Room Force +// Ratings and the Force Body power. +// * Return value on error: 0 +int GetSpellForcePointCost( ); + +// DJS-OEI 1/2/2004 +// 777: Create a Fury effect. +effect EffectFury(); + +// DJS-OEI 1/3/2004 +// 778: Create a Blind effect. +effect EffectBlind(); + +// DJS-OEI 1/4/2004 +// 779: Create an FP regeneration modifier effect. +effect EffectFPRegenModifier( int nPercent ); + +// DJS-OEI 1/4/2004 +// 780: Create a VP regeneration modifier effect. +effect EffectVPRegenModifier( int nPercent ); + +// DJS-OEI 1/9/2004 +// 781: Create a Force Crush effect. +effect EffectCrush(); + +// FAK - OEI 1/12/04 +// 782: Minigame grabs a swoop bike upgrade +int SWMG_GetSwoopUpgrade( int nSlot ); + +// DJS-OEI 1/12/2004 +// 783: Returns whether or not the target has access to a feat, +// even if they can't use it right now due to daily limits or +// other restrictions. +int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); + +// DJS-OEI 1/12/2004 +// 784: Returns whether or not the target has access to a spell, +// even if they can't use it right now due to lack of Force Points. +int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); + +// FAK-OEI 1/12/2004 +// 785: Displays the Swoop Bike upgrade screen. +void ShowSwoopUpgradeScreen( ); + +// DJS-OEI 1/13/2004 +// 786: Grants the target a feat without regard for prerequisites. +void GrantFeat( int nFeat, object oCreature ); + +// DJS-OEI 1/13/2004 +// 787: Grants the target a spell without regard for prerequisites. +void GrantSpell( int nSpell, object oCreature ); + +// DJS-OEI 1/13/2004 +// 788: Places an active mine on the map. +// nMineType - Mine Type from Traps.2DA +// lPoint - The location in the world to place the mine. +// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA +// results in the final DC for creatures to detect this mine. +// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA +// results in the final DC for creatures to disarm this mine. +// oCreator - The object that should be considered the owner of the mine. +// If oCreator is set to OBJECT_INVALID, the faction of the mine will be +// considered Hostile1, meaning the party will be vulnerable to it. +void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); + +// FAK - OEI 1/15/04 +// 789: Yet another minigame function. Returns the object's track's position. +vector SWMG_GetTrackPosition(object oFollower); + +// FAK - OEI 1/15/04 +// 790: minigame function that lets you psuedo-set the position of a follower object +vector SWMG_SetFollowerPosition(vector vPos); + +//RWT-OEI 01/16/04 +// 791: A function to put the character into a true combat state but the reason set to +// not real combat. This should help us control animations in cutscenes with a bit +// more precision. -- Not totally sure this is doing anything just yet. Seems +// the combat condition gets cleared shortly after anyway. +// If nEnable is 1, it enables fake combat mode. If 0, it disables it. +// WARNING: Whenever using this function to enable fake combat mode, you should +// have a matching call to it to disable it. (pass 0 for nEnable). +void SetFakeCombatState( object oObject, int nEnable ); + +// FAK - OEI 1/23/04 +// 792: minigame function that deletes a minigame object +void SWMG_DestroyMiniGameObject(object oObject); + +// DJS-OEI 1/26/2004 +// 793: Returns the Demolitions skill of the creature that +// placed this mine. This will often be 0. This function accepts +// the object that the mine is attached to (Door, Placeable, or Trigger) +// and will determine which one it actually is at runtime. +int GetOwnerDemolitionsSkill( object oObject ); + +// RWT-OEI 01/29/04 +// 794: Disables or Enables the Orient On Click behavior in creatures. If +// disabled, they will not orient to face the player when clicked on +// for dialogue. The default behavior is TRUE. +void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); + +// DJS-OEI 1/29/2004 +// 795: Gets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, the return +// value with be 0. If the character is in the party, but has an +// attitude of Ambivalent, this will be -1. +int GetInfluence( int nNPC ); + +// DJS-OEI 1/29/2004 +// 796: Sets the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nInfluence - The new value for the influence on this CNPC. +void SetInfluence( int nNPC, int nInfluence ); + +// DJS-OEI 1/29/2004 +// 797: Modifies the PC's influence on the alignment of a CNPC. +// Parameters: +// nNPC - NPC_* constant identifying the CNPC we're interested in. +// If this character is not an available party member, nothing +// will happen. +// nModifier - The modifier to the current influence on this CNPC. +// This may be a negative value to reduce the influence. +void ModifyInfluence( int nNPC, int nModifier ); + +// FAK - OEI 2/3/04 +// 798: returns the racial sub-type of the oTarget object +int GetRacialSubType(object oTarget); + +// DJS-OEI 2/3/2004 +// 799: Increases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is greater than the max +// of 127. +void IncrementGlobalNumber( string sIdentifier, int nAmount ); + +// DJS-OEI 2/3/2004 +// 800: Decreases the value of the given global number by the given amount. +// This function only works with Number type globals, not booleans. It +// will fail with a warning if the final amount is less than the minimum +// of -128. +void DecrementGlobalNumber( string sIdentifier, int nAmount ); + +// RWT-OEI 02/06/04 +// 801: SetBonusForcePoints - This sets the number of bonus force points +// that will always be added to that character's total calculated +// force points. +void SetBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 802: AddBonusForcePoints - This adds nBonusFP to the current total +// bonus that the player has. The Bonus Force Points are a pool +// of force points that will always be added after the player's +// total force points are calculated (based on level, force dice, +// etc.) +void AddBonusForcePoints( object oCreature, int nBonusFP ); + +// RWT-OEI 02/06/04 +// 803: GetBonusForcePoints - This returns the total number of bonus +// force points a player has. Bonus Force Points are a pool of +// points that are always added to a player's Max Force Points. +// ST: Please explain how a function returning VOID could return a +// numerical value? Hope it works changing the return type... +// void GetBonusForcePoints( object oCreature ); +int GetBonusForcePoints( object oCreature ); + +// FAK - OEI 2/11/04 +// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop +// bike races. Gravity will act upon this velocity. +void SWMG_SetJumpSpeed(float fSpeed); + +// PC CODE MERGER +// 805. IsMoviePlaying--dummy func so we can compile +int IsMoviePlaying(); + +// 806 QueueMovie +void QueueMovie(string sMovie, int nSkippable = TRUE); + +// 807 +void PlayMovieQueue(int nAllowSkips = TRUE); + +// 808 +void YavinHackDoorClose(object oCreature); + +// 809 +// new function for droid confusion so inherint mind immunity can be +// avoided. +effect EffectDroidConfused(); +// END PC CODE MERGER + +// 810 +// DJS-OEI 3/8/2004 +// Determines if the given creature is in Stealth mode or not. +// 0 = Creature is not stealthed. +// 1 = Creature is stealthed. +// This function will return 0 for any non-creature. +int IsStealthed( object oCreature ); + +// 811 +// DJS-OEI 3/12/2004 +// Determines if the given creature is using any Meditation Tree +// Force Power. +// 0 = Creature is not meditating. +// 1 = Creature is meditating. +// This function will return 0 for any non-creature. +int IsMeditating( object oCreature ); + +// 812 +// DJS-OEI 3/16/2004 +// Determines if the given creature is using the Total Defense +// Stance. +// 0 = Creature is not in Total Defense. +// 1 = Creature is in Total Defense. +// This function will return 0 for any non-creature. +int IsInTotalDefense( object oCreature ); + +// 813 +// RWT-OEI 03/19/04 +// Stores a Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +void SetHealTarget( object oidHealer, object oidTarget ); + +// 814 +// RWT-OEI 03/19/04 +// Retrieves the Heal Target for the Healer AI script. Should probably +// not be used outside of the Healer AI script. +object GetHealTarget( object oidHealer ); + +// 815 +// RWT-OEI 03/23/04 +// Returns a vector containing a random destination that the +// given creature can walk to that's within the range of the +// passed parameter. +vector GetRandomDestination( object oCreature, int rangeLimit ); + +// 816 +// DJS-OEI 3/25/2004 +// Returns whether the given creature is currently in the +// requested Lightsaber/Consular Form and can make use of +// its benefits. This function will perform trumping checks +// and lightsaber-wielding checks for those Forms that require +// them. +int IsFormActive( object oCreature, int nFormID ); + +// 817 +// DJS-OEI 3/28/2004 +// Returns the Form Mask of the requested spell. This is used +// to determine if a spell is affected by various Forms, usually +// Consular forms that modify duration/range. +int GetSpellFormMask( int nSpellID ); + +// 818 +// DJS-OEI 3/29/2004 +// Return the base number of Force Points required to cast +// the given spell. This does not take into account modifiers +// of any kind. +int GetSpellBaseForcePointCost( int nSpellID ); + +// 819 +// RWT-OEI 04/05/04 +// Setting this to TRUE makes it so that the Stealth status is +// left on characters even when entering cutscenes. By default, +// stealth is removed from anyone taking part in a cutscene. +// ALWAYS set this back to FALSE on every End Dialog node in +// the cutscene you wanted to stay stealthed in. This isn't a +// flag that should be left on indefinitely. In fact, it isn't +// saved, so needs to be set/unset on a case by case basis. +void SetKeepStealthInDialog( int nStealthState ); + +// 820 +// RWT-OEI 04/06/04 +// This returns TRUE or FALSE if there is a clear line of sight from +// the source vector to the target vector. This is used in the AI to +// help the creatures using ranged weapons find better places to shoot +// when the player moves out of sight. +int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); + +// 821 +// FAK - OEI 5/3/04 +// ShowDemoScreen, displays a texture, timeout, string and xy for string +int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); + +// 822 +// DJS-OEI 5/4/2004 +// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES +// AT THE MOMENT. This heartbeat should force perception updates to occur. +void ForceHeartbeat( object oCreature ); + +// 823 +// DJS-OEI 5/5/2004 +// Creates a Force Sight effect. +effect EffectForceSight(); + +// 824 +// FAK - OEI 5/7/04 +// gets the walk state of the creature: 0 walk or standing, 1 is running +int IsRunning( object oCreature ); + +// 825 +// FAK - OEI 5/24/04 +// applies a velocity to the player object +void SWMG_PlayerApplyForce(vector vForce); + +// 826 +// DJS-OEI 6/12/2004 +// This function allows a script to set the conditions which constitute +// a combat forfeit by a member of the player's party. This is typically +// used to handle Battle Circle behavior or other challenge-based combats. +// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. +void SetForfeitConditions( int nForfeitFlags ); + +// 827 +// DJS-OEI 6/12/2004 +// This function returns the last FORFEIT_* condition that the player +// has violated. +int GetLastForfeitViolation(); + +// 828 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the REFLEX saving throw for aObject +void ModifyReflexSavingThrowBase(object aObject, int aModValue); + +// 829 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the FORTITUDE saving throw for aObject +void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); + +// 830 +// AWD-OEI 6/21/2004 +// This function does not return a value. +// This function modifies the BASE value of the WILL saving throw for aObject +void ModifyWillSavingThrowBase(object aObject, int aModValue); + +// DJS-OEI 6/21/2004 +// 831 +// This function will return the one CExoString parameter +// allowed for the currently running script. +string GetScriptStringParameter(); + +// 832 +// AWD-OEI 6/29/2004 +// This function returns the personal space value of an object +float GetObjectPersonalSpace(object aObject); + +// 833 +// AWD-OEI 7/06/2004 +// This function adjusts a creatures stats. +// oObject is the creature that will have it's attribute adjusted +// The following constants are acceptable for the nAttribute parameter: +// ABILITY_STRENGTH +// ABILITY_DEXTERITY +// ABILITY_CONSTITUTION +// ABILITY_INTELLIGENCE +// ABILITY_WISDOM +// ABILITY_CHARISMA +// nAmount is the integer vlaue to adjust the stat by (negative values will work). +void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); + +// 834 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void SetCreatureAILevel(object oObject, int nPriority); + +// 835 +// AWD-OEI 7/08/2004 +// This function raises a creature's priority level. +void ResetCreatureAILevel(object oObject); + +// 836 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// template. +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); + +// 837 +// RWT-OEI 07/17/04 +// This function adds a Puppet to the Puppet Table by +// creature ID +// Returns 1 if successful, 0 if there was an error +// This does not spawn the puppet or anything. It just +// adds it to the party table and makes it available for +// use down the line. Exactly like AddAvailableNPCByTemplate +int AddAvailablePUPByObject( int nPUP, object oPuppet ); + +// 838 +// RWT-OEI 07/17/04 +// This function assigns a PUPPET constant to a +// Party NPC. The party NPC -MUST- be in the game +// before calling this. +// Both the PUP and the NPC have +// to be available in their respective tables +// Returns 1 if successful, 0 if there was an error +int AssignPUP( int nPUP, int nNPC ); + +// 839 +// RWT-OEI 07/17/04 +// This function spawns a Party PUPPET. +// This must be used whenever you want a copy +// of the puppet around to manipulate in the game +// since the puppet is stored in the party table +// just like NPCs are. Once a puppet is assigned +// to a party NPC (see AssignPUP), it will spawn +// or disappear whenever its owner joins or leaves +// the party. +// This does not add it to the party automatically, +// just like SpawnNPC doesn't. You must call AddPuppet() +// to actually add it to the party +object SpawnAvailablePUP( int nPUP, location lLocation ); + +// 840 +// RWT-OEI 07/18/04 +// This adds an existing puppet object to the party. The +// puppet object must already exist via SpawnAvailablePUP +// and must already be available via AddAvailablePUP* +// functions. +int AddPartyPuppet(int nPUP, object oidCreature); + +// 841 +// RWT-OEI 07/19/04 +// This returns the object ID of the puppet's owner. +// The Puppet's owner must exist and must be in the party +// in order to be found. +// Returns invalid object Id if the owner cannot be found. +object GetPUPOwner(object oPUP = OBJECT_SELF); + +// 842 +// RWT-OEI 07/19/04 +// Returns 1 if the creature is a Puppet in the party. +// Otherwise returns 0. It is possible for a 'party puppet' +// to exist without actually being in the party table. +// such as when SpawnAvailablePUP is used without subsequently +// using AddPartyPuppet to add the newly spawned puppet to +// the party table. A puppet in that in-between state would +// return 0 from this function +int GetIsPuppet(object oPUP = OBJECT_SELF ); + +// 843 +// RWT-OEI 07/20/04 +// Similiar to ActionFollowLeader() except the creature +// follows its owner +//nRange is how close it should follow. Note that once this +//action is queued, it will be the only thing this creature +//does until a ClearAllActions() is used. +void ActionFollowOwner(float fRange = 2.5); + +// 844 +// RWT-OEI 07/21/04 +// Returns TRUE if the object ID passed is the character +// that the player is actively controlling at that point. +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +int GetIsPartyLeader(object oCharacter = OBJECT_SELF); + +// 845 +// RWT-OEI 07/21/04 +// Returns the object ID of the character that the player +// is actively controlling. This is the 'Party Leader'. +// Returns object Invalid on error +// Note that this function is *NOT* able to return correct +// information during Area Loading since the player is not +// actively controlling anyone at that point. +object GetPartyLeader(); + +// 846 +// JAB-OEI 07/22/04 +// Will remove the CNPC from the 3 person party, and remove +// him/her from the area, effectively sending the CNPC back +// to the base. The CNPC data is still stored in the +// party table, and calling this function will not destroy +// the CNPC in any way. +// Returns TRUE for success. +int RemoveNPCFromPartyToBase(int nNPC); + +// 847 +// AWD-OEI 7/22/2004 +// This causes a creature to flourish with it's currently equipped weapon. +void CreatureFlourishWeapon(object oObject); + +// 848 +// Create a Mind Trick effect +effect EffectMindTrick(); + +// 849 +// Create a Faction Modifier effect. +effect EffectFactionModifier( int nNewFaction ); + +// 850 +// ChangeObjectAppearance +// oObjectToChange = Object to change appearance of +// nAppearance = appearance to change to (from appearance.2da) +void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); + +// 851 +// GetIsXBox +// Returns TRUE if this script is being executed on the X-Box. Returns FALSE +// if this is the PC build. +int GetIsXBox(); + +// 852 +// Create a Droid Scramble effect +effect EffectDroidScramble(); + +// 853 +// ActionSwitchWeapons +// Forces the creature to switch between Config 1 and Config 2 +// of their equipment. Does not work in dialogs. Works with +// AssignCommand() +void ActionSwitchWeapons(); + +// 854 +// DJS-OEI 8/29/2004 +// PlayOverlayAnimation +// This function will play an overlay animation on a character +// even if the character is moving. This does not cause an action +// to be placed on the queue. The animation passed in must be +// designated as an overlay in Animations.2DA. +void PlayOverlayAnimation( object oTarget, int nAnimation ); + +// 855 +// RWT-OEI 08/30/04 +// UnlockAllSongs +// Calling this will set all songs as having been unlocked. +// It is INTENDED to be used in the end-game scripts to unlock +// any end-game songs as well as the KotOR1 sound track. +void UnlockAllSongs(); + +// 856 +// RWT-OEI 08/31/04 +// Passing TRUE into this function turns off the player's maps. +// Passing FALSE into this function re-enables them. This change +// is permanent once called, so it is important that there *is* +// a matching call to DisableMap(FALSE) somewhere or else the +// player is stuck without a map indefinitely. +void DisableMap(int nFlag = FALSE); + +// 857 +// RWT-OEI 08/31/04 +// This function schedules a mine to play its DETONATION +// animation once it is destroyed. Note that this detonates +// the mine immediately but has nothing to do with causing +// the mine to do any damage to anything around it. To +// get the mine to damage things around it when it detonates +// do: +// AssignCommand(,ExecuteScript( "k_trp_generic",)); +// right before you call DetonateMine(). By my experience so far +// you don't need any kind of delay between the two. +void DetonateMine(object oMine); + +// 858 +// RWT-OEI 09/06/04 +// This function turns off the innate health regeneration that all party +// members have. The health regen will *stay* off until it is turned back +// on by passing FALSE to this function. +void DisableHealthRegen(int nFlag = FALSE); + +// 859 +// DJS-OEI 9/7/2004 +// This function sets the current Jedi Form on the given creature. This +// call will do nothing if the target does not know the Form itself. +void SetCurrentForm( object oCreature, int nFormID ); + +// 860 +// RWT-OEI 09/09/04 +// This will disable or enable area transit +void SetDisableTransit(int nFlag = FALSE); + +// 861 +//RWT-OEI 09/09/04 +// This will set the specific input class. +// The valid options are: +// 0 - Normal PC control +// 1 - Mini game control +// 2 - GUI control +// 3 - Dialog Control +// 4 - Freelook control +void SetInputClass(int nClass); + +// 862 +//RWT-OEI 09/15/04 +// This script allows an object to recieve updates even if it is outside +//the normal range limit of 250.0f meters away from the player. This should +//ONLY be used for cutscenes that involve objects that are more than 250 +//meters away from the player. It needs to be used on a object by object +//basis. +//This flag should *always* be set to false once the cutscene it is needed +//for is over, or else the game will spend CPU time updating the object +//when it doesn't need to. +//For questions on use of this function, or what its purpose is, check +//with me. +void SetForceAlwaysUpdate(object oObject, int nFlag); + +//863 +//RWT-OEI 09/15/04 +//This function enables or disables rain +void EnableRain( int nFlag ); + +//864 +//RWT-OEI 09/27/04 +//This function displays the generic Message Box with the strref +//message in it +//sIcon is the resref for an icon you would like to display. +void DisplayMessageBox(int nStrRef, string sIcon = ""); + +//865 +//RWT-OEI 09/28/04 +//This function displays a datapad popup. Just pass it the +//object ID of a datapad. +void DisplayDatapad(object oDatapad); + +// 866 +// CTJ-OEI 09-29-04 +// Removes the heartbeat script on the placeable. Useful for +// placeables whose contents get populated in the heartbeat +// script and then the heartbeat no longer needs to be called. +void RemoveHeartbeat(object oPlaceable); + + +//867 +// JF-OEI 10-07-2004 +// Remove an effect by ID +void RemoveEffectByID( object oCreature, int nEffectID ); + +//868 +// RWT-OEI 10/07/04 +// This script removes an effect by an identical match +// based on: +// Must have matching EffectID types. +// Must have the same value in Integer(0) +// Must have the same value in Integer(1) +// I'm specifically using this function for Mandalore's implant swapping +// script and it will probably not be useful for anyone else. If you're +// not sure what this script function does, see me before using it. +void RemoveEffectByExactMatch( object oCreature, effect eEffect); + +// 869 +// DJS-OEI 10/9/2004 +// This function adjusts a creature's skills. +// oObject is the creature that will have its skill adjusted +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// nAmount is the integer value to adjust the stat by (negative values will work). +void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); + +// 870 +// DJS-OEI 10/10/2004 +// This function returns the base Skill Rank for the requested +// skill. It does not include modifiers from effects/items. +// The following constants are acceptable for the nSkill parameter: +// SKILL_COMPUTER_USE +// SKILL_DEMOLITIONS +// SKILL_STEALTH +// SKILL_AWARENESS +// SKILL_PERSUADE +// SKILL_REPAIR +// SKILL_SECURITY +// SKILL_TREAT_INJURY +// oObject is the creature that will have its skill base returned. +int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); + +// 871 +// DJS-OEI 10/15/2004 +// This function will allow the caller to modify the rendering behavior +// of the target object. +// oObject - The object to change rendering state on. +// bEnable - If 0, the object will stop rendering. Else, the object will render. +void EnableRendering( object oObject, int bEnable ); + +// 872 +// RWT-OEI 10/19/04 +// This function returns TRUE if the creature has actions in its +// Combat Action queue. +int GetCombatActionsPending(object oCreature); + +// 873 +// RWT-OEI 10/26/04 +// This function saves the party member at that index with the object +// that is passed in. +void SaveNPCByObject( int nNPC, object oidCharacter); + +// 874 +// RWT-OEI 10/26/04 +// This function saves the party puppet at that index with the object +// that is passed in. For the Remote, just use '0' for nPUP +void SavePUPByObject( int nPUP, object oidPuppet ); + +// 875 +// RWT-OEI 10/29/04 +// Returns TRUE if the object passed in is the character that the player +// made at the start of the game +int GetIsPlayerMadeCharacter(object oidCharacter); + +// 876 +// RWT-OEI 11/12/04 +// This repopulates the NPCObject table in CSWPartyTable. Do not use this +// unless you understand exactly what it is doing. +void RebuildPartyTable(); From 590e15cd65bc983f234a895cbe2af48ee879bec2 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 21:34:32 -0600 Subject: [PATCH 02/19] don't chmod on windows --- .github/workflows/compile_all_scripts.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 42e73539d..8d37640f0 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -34,8 +34,6 @@ jobs: run: | git clone --branch vanilla-source-test https://github.com/th3w1zard1/PyKotor.git PyKotor cd PyKotor - chmod +x ./install_python_venv.ps1 - chmod +x ./compile/compile_holopatcher.ps1 ./install_python_venv.ps1 -noprompt python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary From 43ed2e4fd345383d246a0d447c6990c3b04a356b Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 21:36:08 -0600 Subject: [PATCH 03/19] capture output --- .github/workflows/compile_all_scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 8d37640f0..362b3c07c 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -38,5 +38,5 @@ jobs: python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true shell: pwsh From 6007dd20e072fddfe9ad9a7ad998bcb4fe606df2 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 21:38:42 -0600 Subject: [PATCH 04/19] Revert "capture output" This reverts commit 43ed2e4fd345383d246a0d447c6990c3b04a356b. --- .github/workflows/compile_all_scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 362b3c07c..8d37640f0 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -38,5 +38,5 @@ jobs: python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no shell: pwsh From 3503d06dc60ca329985bf95958688cbf869d68a0 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 22:19:26 -0600 Subject: [PATCH 05/19] Update compile_all_scripts.yml --- .github/workflows/compile_all_scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 8d37640f0..f0b3c297e 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -30,7 +30,7 @@ jobs: # sudo apt-get install -y powershell # shell: bash - - name: Clone PyKotor + - name: Run PyKotor's Compile Tests run: | git clone --branch vanilla-source-test https://github.com/th3w1zard1/PyKotor.git PyKotor cd PyKotor From 0961fdf7b19307466eb74df211419d346f28887b Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 22:40:00 -0600 Subject: [PATCH 06/19] add a reporter --- .github/workflows/compile_all_scripts.yml | 29 ++++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index f0b3c297e..94a38de83 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -17,26 +17,27 @@ jobs: with: python-version: "3.8" - #- name: Install PowerShell Core - # run: | - # # Install pre-requisite packages - # sudo apt-get update - # sudo apt-get install -y wget apt-transport-https software-properties-common - # Import the Microsoft repository key - # wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" - # sudo dpkg -i packages-microsoft-prod.deb - # sudo apt-get update - # Install PowerShell - # sudo apt-get install -y powershell - # shell: bash - - name: Run PyKotor's Compile Tests run: | git clone --branch vanilla-source-test https://github.com/th3w1zard1/PyKotor.git PyKotor cd PyKotor + python -m pip install --upgrade pip ./install_python_venv.ps1 -noprompt python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no + python -m pip install pytest pytest-html + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --junitxml=pytest_report.xml --html=pytest_report.html shell: pwsh + + - name: Publish Test Report + uses: dorny/test-reporter@v1 + if: always() # Ensures this step runs even if the previous step fails + with: + name: 'Pytest Results' # Display name for the check run + path: 'pytest_report.xml' # Path to the JUnit XML report generated by pytest + reporter: 'junit' # Specifies the format of test results + fail-on-error: true # Optionally, you can fail the GitHub check if errors are found in test results + # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit + max-annotations: 10 + From e53507e82b4cddfde29985af8d6316cc76bcf0a2 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 22:47:07 -0600 Subject: [PATCH 07/19] fix reporter --- .github/workflows/compile_all_scripts.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 94a38de83..711ea87a2 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -36,8 +36,13 @@ jobs: with: name: 'Pytest Results' # Display name for the check run path: 'pytest_report.xml' # Path to the JUnit XML report generated by pytest - reporter: 'junit' # Specifies the format of test results fail-on-error: true # Optionally, you can fail the GitHub check if errors are found in test results # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit max-annotations: 10 + - name: Upload Markdown Report + uses: actions/upload-artifact@v3 + with: + name: pytest-markdown-report + path: pytest_report.md + From 2e9505b7e89a424421b72d14b067751ceab18139 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 22:52:46 -0600 Subject: [PATCH 08/19] always run the reporter even if the tests fail --- .github/workflows/compile_all_scripts.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 711ea87a2..dd18044ef 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -27,7 +27,7 @@ jobs: python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest python -m pip install pytest pytest-html - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --junitxml=pytest_report.xml --html=pytest_report.html + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html shell: pwsh - name: Publish Test Report @@ -42,6 +42,7 @@ jobs: - name: Upload Markdown Report uses: actions/upload-artifact@v3 + if: always() # Ensures this step runs even if the previous step fails with: name: pytest-markdown-report path: pytest_report.md From 9e7d1ddf97cf22cc4e5aea6e85dc75ab979c964d Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 22:55:12 -0600 Subject: [PATCH 09/19] test the capture flag --- .github/workflows/compile_all_scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index dd18044ef..b8df63e54 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -27,7 +27,7 @@ jobs: python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest python -m pip install pytest pytest-html - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html shell: pwsh - name: Publish Test Report From 11fabde10a6eb9169aa7d9a6207158f901ec409b Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 23:12:34 -0600 Subject: [PATCH 10/19] remove all nwnnsscomp except tslpatcher's --- K1/nwnnsscomp/KScript/nwnnsscomp.exe | Bin 266240 -> 0 bytes K1/nwnnsscomp/KScript/nwscript-kotor.nss | 5173 ----------------- K1/nwnnsscomp/KScript/nwscript-tsl.nss | 6325 --------------------- K1/nwnnsscomp/KTool/nwnnsscomp.exe | Bin 266240 -> 0 bytes K1/nwnnsscomp/KTool/nwscript.nss | 5173 ----------------- K1/nwnnsscomp/V1/nwnnsscomp.exe | Bin 462848 -> 0 bytes K1/nwnnsscomp/V1/nwscript.nss | 5173 ----------------- TSL/nwnnsscomp/KScript/nwnnsscomp.exe | Bin 266240 -> 0 bytes TSL/nwnnsscomp/KScript/nwscript-kotor.nss | 5173 ----------------- TSL/nwnnsscomp/KScript/nwscript-tsl.nss | 6325 --------------------- TSL/nwnnsscomp/KTool/nwnnsscomp.exe | Bin 266240 -> 0 bytes TSL/nwnnsscomp/KTool/nwscript.nss | 6325 --------------------- TSL/nwnnsscomp/V1/nwnnsscomp.exe | Bin 462848 -> 0 bytes TSL/nwnnsscomp/V1/nwscript.nss | 6325 --------------------- 14 files changed, 45992 deletions(-) delete mode 100644 K1/nwnnsscomp/KScript/nwnnsscomp.exe delete mode 100644 K1/nwnnsscomp/KScript/nwscript-kotor.nss delete mode 100644 K1/nwnnsscomp/KScript/nwscript-tsl.nss delete mode 100644 K1/nwnnsscomp/KTool/nwnnsscomp.exe delete mode 100644 K1/nwnnsscomp/KTool/nwscript.nss delete mode 100644 K1/nwnnsscomp/V1/nwnnsscomp.exe delete mode 100644 K1/nwnnsscomp/V1/nwscript.nss delete mode 100644 TSL/nwnnsscomp/KScript/nwnnsscomp.exe delete mode 100644 TSL/nwnnsscomp/KScript/nwscript-kotor.nss delete mode 100644 TSL/nwnnsscomp/KScript/nwscript-tsl.nss delete mode 100644 TSL/nwnnsscomp/KTool/nwnnsscomp.exe delete mode 100644 TSL/nwnnsscomp/KTool/nwscript.nss delete mode 100644 TSL/nwnnsscomp/V1/nwnnsscomp.exe delete mode 100644 TSL/nwnnsscomp/V1/nwscript.nss diff --git a/K1/nwnnsscomp/KScript/nwnnsscomp.exe b/K1/nwnnsscomp/KScript/nwnnsscomp.exe deleted file mode 100644 index 668bbeddcbc2eaa83e475838d8f53166caee3043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266240 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 diff --git a/K1/nwnnsscomp/KScript/nwscript-kotor.nss b/K1/nwnnsscomp/KScript/nwscript-kotor.nss deleted file mode 100644 index 7a9b4f12d..000000000 --- a/K1/nwnnsscomp/KScript/nwscript-kotor.nss +++ /dev/null @@ -1,5173 +0,0 @@ -//////////////////////////////////////////////////////// -// -// NWScript -// -// The list of actions and pre-defined constants. -// -// (c) BioWare Corp, 1999 -// -//////////////////////////////////////////////////////// - -#define ENGINE_NUM_STRUCTURES 4 -#define ENGINE_STRUCTURE_0 effect -#define ENGINE_STRUCTURE_1 event -#define ENGINE_STRUCTURE_2 location -#define ENGINE_STRUCTURE_3 talent - -// Constants - -int NUM_INVENTORY_SLOTS = 18; - -int TRUE = 1; -int FALSE = 0; - -float DIRECTION_EAST = 0.0; -float DIRECTION_NORTH = 90.0; -float DIRECTION_WEST = 180.0; -float DIRECTION_SOUTH = 270.0; -float PI = 3.141592; - -int ATTITUDE_NEUTRAL = 0; -int ATTITUDE_AGGRESSIVE = 1; -int ATTITUDE_DEFENSIVE = 2; -int ATTITUDE_SPECIAL = 3; - -int TALKVOLUME_TALK = 0; -int TALKVOLUME_WHISPER = 1; -int TALKVOLUME_SHOUT = 2; -int TALKVOLUME_SILENT_TALK = 3; -int TALKVOLUME_SILENT_SHOUT = 4; - -int INVENTORY_SLOT_HEAD = 0; -int INVENTORY_SLOT_BODY = 1; -int INVENTORY_SLOT_HANDS = 3; -int INVENTORY_SLOT_RIGHTWEAPON = 4; -int INVENTORY_SLOT_LEFTWEAPON = 5; -int INVENTORY_SLOT_LEFTARM = 7; -int INVENTORY_SLOT_RIGHTARM = 8; -int INVENTORY_SLOT_IMPLANT = 9; -int INVENTORY_SLOT_BELT = 10; -int INVENTORY_SLOT_CWEAPON_L = 14; -int INVENTORY_SLOT_CWEAPON_R = 15; -int INVENTORY_SLOT_CWEAPON_B = 16; -int INVENTORY_SLOT_CARMOUR = 17; - -//Effect type constants -int DURATION_TYPE_INSTANT = 0; -int DURATION_TYPE_TEMPORARY = 1; -int DURATION_TYPE_PERMANENT = 2; - -int SUBTYPE_MAGICAL = 8; -int SUBTYPE_SUPERNATURAL = 16; -int SUBTYPE_EXTRAORDINARY = 24; - -int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp -int ABILITY_DEXTERITY = 1; -int ABILITY_CONSTITUTION = 2; -int ABILITY_INTELLIGENCE = 3; -int ABILITY_WISDOM = 4; -int ABILITY_CHARISMA = 5; - -int SHAPE_SPELLCYLINDER = 0; -int SHAPE_CONE = 1; -int SHAPE_CUBE = 2; -int SHAPE_SPELLCONE = 3; -int SHAPE_SPHERE = 4; - -int OBJECT_TYPE_CREATURE = 1; -int OBJECT_TYPE_ITEM = 2; -int OBJECT_TYPE_TRIGGER = 4; -int OBJECT_TYPE_DOOR = 8; -int OBJECT_TYPE_AREA_OF_EFFECT = 16; -int OBJECT_TYPE_WAYPOINT = 32; -int OBJECT_TYPE_PLACEABLE = 64; -int OBJECT_TYPE_STORE = 128; -int OBJECT_TYPE_ENCOUNTER = 256; -int OBJECT_TYPE_SOUND = 512; -int OBJECT_TYPE_ALL = 32767; - -int OBJECT_TYPE_INVALID = 32767; - -int GENDER_MALE = 0; -int GENDER_FEMALE = 1; -int GENDER_BOTH = 2; -int GENDER_OTHER = 3; -int GENDER_NONE = 4; - -int DAMAGE_TYPE_BLUDGEONING = 1; -int DAMAGE_TYPE_PIERCING = 2; -int DAMAGE_TYPE_SLASHING = 4; -int DAMAGE_TYPE_UNIVERSAL = 8; -int DAMAGE_TYPE_ACID = 16; -int DAMAGE_TYPE_COLD = 32; -int DAMAGE_TYPE_LIGHT_SIDE = 64; -int DAMAGE_TYPE_ELECTRICAL = 128; -int DAMAGE_TYPE_FIRE = 256; -int DAMAGE_TYPE_DARK_SIDE = 512; -int DAMAGE_TYPE_SONIC = 1024; -int DAMAGE_TYPE_ION = 2048; -int DAMAGE_TYPE_BLASTER = 4096; - -// Special versus flag just for AC effects -int AC_VS_DAMAGE_TYPE_ALL = 8199; - -int DAMAGE_BONUS_1 = 1; -int DAMAGE_BONUS_2 = 2; -int DAMAGE_BONUS_3 = 3; -int DAMAGE_BONUS_4 = 4; -int DAMAGE_BONUS_5 = 5; -int DAMAGE_BONUS_1d4 = 6; -int DAMAGE_BONUS_1d6 = 7; -int DAMAGE_BONUS_1d8 = 8; -int DAMAGE_BONUS_1d10 = 9; -int DAMAGE_BONUS_2d6 = 10; - -int DAMAGE_POWER_NORMAL = 0; -int DAMAGE_POWER_PLUS_ONE = 1; -int DAMAGE_POWER_PLUS_TWO = 2; -int DAMAGE_POWER_PLUS_THREE = 3; -int DAMAGE_POWER_PLUS_FOUR = 4; -int DAMAGE_POWER_PLUS_FIVE = 5; -int DAMAGE_POWER_ENERGY = 6; - -int ATTACK_BONUS_MISC = 0; -int ATTACK_BONUS_ONHAND = 1; -int ATTACK_BONUS_OFFHAND = 2; - -int AC_DODGE_BONUS = 0; -int AC_NATURAL_BONUS = 1; -int AC_ARMOUR_ENCHANTMENT_BONUS = 2; -int AC_SHIELD_ENCHANTMENT_BONUS = 3; -int AC_DEFLECTION_BONUS = 4; - -int DOOR_ACTION_OPEN = 0; -int DOOR_ACTION_UNLOCK = 1; -int DOOR_ACTION_BASH = 2; -int DOOR_ACTION_IGNORE = 3; -int DOOR_ACTION_KNOCK = 4; - -int PLACEABLE_ACTION_USE = 0; -int PLACEABLE_ACTION_UNLOCK = 1; -int PLACEABLE_ACTION_BASH = 2; -int PLACEABLE_ACTION_KNOCK = 4; - - -int RACIAL_TYPE_UNKNOWN = 0; -int RACIAL_TYPE_ELF = 1; -int RACIAL_TYPE_GNOME = 2; -int RACIAL_TYPE_HALFLING = 3; -int RACIAL_TYPE_HALFELF = 4; -int RACIAL_TYPE_DROID = 5; -int RACIAL_TYPE_HUMAN = 6; -int RACIAL_TYPE_ALL = 7; -int RACIAL_TYPE_INVALID = 8; - -int ALIGNMENT_ALL = 0; -int ALIGNMENT_NEUTRAL = 1; -int ALIGNMENT_LIGHT_SIDE = 2; -int ALIGNMENT_DARK_SIDE = 3; - -int SAVING_THROW_ALL = 0; -int SAVING_THROW_FORT = 1; -int SAVING_THROW_REFLEX = 2; -int SAVING_THROW_WILL = 3; - -int SAVING_THROW_TYPE_ALL = 0; -int SAVING_THROW_TYPE_NONE = 0; -int SAVING_THROW_TYPE_ACID = 1; -int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; -int SAVING_THROW_TYPE_COLD = 3; -int SAVING_THROW_TYPE_DEATH = 4; -int SAVING_THROW_TYPE_DISEASE = 5; -int SAVING_THROW_TYPE_LIGHT_SIDE = 6; -int SAVING_THROW_TYPE_ELECTRICAL = 7; -int SAVING_THROW_TYPE_FEAR = 8; -int SAVING_THROW_TYPE_FIRE = 9; -int SAVING_THROW_TYPE_MIND_AFFECTING = 10; -int SAVING_THROW_TYPE_DARK_SIDE = 11; -int SAVING_THROW_TYPE_POISON = 12; -int SAVING_THROW_TYPE_SONIC = 13; -int SAVING_THROW_TYPE_TRAP = 14; -int SAVING_THROW_TYPE_FORCE_POWER = 15; -int SAVING_THROW_TYPE_ION = 16; -int SAVING_THROW_TYPE_BLASTER = 17; -int SAVING_THROW_TYPE_PARALYSIS = 18; - -int IMMUNITY_TYPE_NONE = 0; -int IMMUNITY_TYPE_MIND_SPELLS = 1; -int IMMUNITY_TYPE_POISON = 2; -int IMMUNITY_TYPE_DISEASE = 3; -int IMMUNITY_TYPE_FEAR = 4; -int IMMUNITY_TYPE_TRAP = 5; -int IMMUNITY_TYPE_PARALYSIS = 6; -int IMMUNITY_TYPE_BLINDNESS = 7; -int IMMUNITY_TYPE_DEAFNESS = 8; -int IMMUNITY_TYPE_SLOW = 9; -int IMMUNITY_TYPE_ENTANGLE = 10; -int IMMUNITY_TYPE_SILENCE = 11; -int IMMUNITY_TYPE_STUN = 12; -int IMMUNITY_TYPE_SLEEP = 13; -int IMMUNITY_TYPE_CHARM = 14; -int IMMUNITY_TYPE_DOMINATE = 15; -int IMMUNITY_TYPE_CONFUSED = 16; -int IMMUNITY_TYPE_CURSED = 17; -int IMMUNITY_TYPE_DAZED = 18; -int IMMUNITY_TYPE_ABILITY_DECREASE = 19; -int IMMUNITY_TYPE_ATTACK_DECREASE = 20; -int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; -int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; -int IMMUNITY_TYPE_AC_DECREASE = 23; -int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; -int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; -int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; -int IMMUNITY_TYPE_SKILL_DECREASE = 27; -int IMMUNITY_TYPE_KNOCKDOWN = 28; -int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; -int IMMUNITY_TYPE_SNEAK_ATTACK = 30; -int IMMUNITY_TYPE_CRITICAL_HIT = 31; -int IMMUNITY_TYPE_DEATH = 32; - -int AREA_TRANSITION_RANDOM = 0; -int AREA_TRANSITION_USER_DEFINED = 1; -int AREA_TRANSITION_CITY_01 = 2; -int AREA_TRANSITION_CITY_02 = 3; -int AREA_TRANSITION_CITY_03 = 4; -int AREA_TRANSITION_CITY_04 = 5; -int AREA_TRANSITION_CITY_05 = 6; -int AREA_TRANSITION_CRYPT_01 = 7; -int AREA_TRANSITION_CRYPT_02 = 8; -int AREA_TRANSITION_CRYPT_03 = 9; -int AREA_TRANSITION_CRYPT_04 = 10; -int AREA_TRANSITION_CRYPT_05 = 11; -int AREA_TRANSITION_DUNGEON_01 = 12; -int AREA_TRANSITION_DUNGEON_02 = 13; -int AREA_TRANSITION_DUNGEON_03 = 14; -int AREA_TRANSITION_DUNGEON_04 = 15; -int AREA_TRANSITION_DUNGEON_05 = 16; -int AREA_TRANSITION_DUNGEON_06 = 17; -int AREA_TRANSITION_DUNGEON_07 = 18; -int AREA_TRANSITION_DUNGEON_08 = 19; -int AREA_TRANSITION_MINES_01 = 20; -int AREA_TRANSITION_MINES_02 = 21; -int AREA_TRANSITION_MINES_03 = 22; -int AREA_TRANSITION_MINES_04 = 23; -int AREA_TRANSITION_MINES_05 = 24; -int AREA_TRANSITION_MINES_06 = 25; -int AREA_TRANSITION_MINES_07 = 26; -int AREA_TRANSITION_MINES_08 = 27; -int AREA_TRANSITION_MINES_09 = 28; -int AREA_TRANSITION_SEWER_01 = 29; -int AREA_TRANSITION_SEWER_02 = 30; -int AREA_TRANSITION_SEWER_03 = 31; -int AREA_TRANSITION_SEWER_04 = 32; -int AREA_TRANSITION_SEWER_05 = 33; -int AREA_TRANSITION_CASTLE_01 = 34; -int AREA_TRANSITION_CASTLE_02 = 35; -int AREA_TRANSITION_CASTLE_03 = 36; -int AREA_TRANSITION_CASTLE_04 = 37; -int AREA_TRANSITION_CASTLE_05 = 38; -int AREA_TRANSITION_CASTLE_06 = 39; -int AREA_TRANSITION_CASTLE_07 = 40; -int AREA_TRANSITION_CASTLE_08 = 41; -int AREA_TRANSITION_INTERIOR_01 = 42; -int AREA_TRANSITION_INTERIOR_02 = 43; -int AREA_TRANSITION_INTERIOR_03 = 44; -int AREA_TRANSITION_INTERIOR_04 = 45; -int AREA_TRANSITION_INTERIOR_05 = 46; -int AREA_TRANSITION_INTERIOR_06 = 47; -int AREA_TRANSITION_INTERIOR_07 = 48; -int AREA_TRANSITION_INTERIOR_08 = 49; -int AREA_TRANSITION_INTERIOR_09 = 50; -int AREA_TRANSITION_INTERIOR_10 = 51; -int AREA_TRANSITION_INTERIOR_11 = 52; -int AREA_TRANSITION_INTERIOR_12 = 53; -int AREA_TRANSITION_INTERIOR_13 = 54; -int AREA_TRANSITION_INTERIOR_14 = 55; -int AREA_TRANSITION_INTERIOR_15 = 56; -int AREA_TRANSITION_INTERIOR_16 = 57; -int AREA_TRANSITION_FOREST_01 = 58; -int AREA_TRANSITION_FOREST_02 = 59; -int AREA_TRANSITION_FOREST_03 = 60; -int AREA_TRANSITION_FOREST_04 = 61; -int AREA_TRANSITION_FOREST_05 = 62; -int AREA_TRANSITION_RURAL_01 = 63; -int AREA_TRANSITION_RURAL_02 = 64; -int AREA_TRANSITION_RURAL_03 = 65; -int AREA_TRANSITION_RURAL_04 = 66; -int AREA_TRANSITION_RURAL_05 = 67; - -// Legacy area-transition constants. Do not delete these. -int AREA_TRANSITION_CITY = 2; -int AREA_TRANSITION_CRYPT = 7; -int AREA_TRANSITION_FOREST = 58; -int AREA_TRANSITION_RURAL = 63; - -// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. -int BODY_NODE_HAND = 0; -int BODY_NODE_CHEST = 1; -int BODY_NODE_HEAD = 2; -// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The -// nodes used with be 'lhand' and 'rhand'. -int BODY_NODE_HAND_LEFT = 3; -int BODY_NODE_HAND_RIGHT = 4; - -float RADIUS_SIZE_SMALL = 1.67f; -float RADIUS_SIZE_MEDIUM = 3.33f; -float RADIUS_SIZE_LARGE = 5.0f; -float RADIUS_SIZE_HUGE = 6.67f; -float RADIUS_SIZE_GARGANTUAN = 8.33f; -float RADIUS_SIZE_COLOSSAL = 10.0f; - -// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType -int EFFECT_TYPE_INVALIDEFFECT = 0; -int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; -//int EFFECT_TYPE_ABILITY_BONUS = 2; -int EFFECT_TYPE_REGENERATE = 3; -//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; -//int EFFECT_TYPE_MODIFY_AC = 5; -//int EFFECT_TYPE_ATTACK_BONUS = 6; -int EFFECT_TYPE_DAMAGE_REDUCTION = 7; -//int EFFECT_TYPE_DAMAGE_BONUS = 8; -int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; -//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; -int EFFECT_TYPE_ENTANGLE = 11; -int EFFECT_TYPE_INVULNERABLE = 12; -int EFFECT_TYPE_DEAF = 13; -int EFFECT_TYPE_RESURRECTION = 14; -int EFFECT_TYPE_IMMUNITY = 15; -//int EFFECT_TYPE_BLIND = 16; -int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; -int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; -//int EFFECT_TYPE_MOVEMENT_SPEED = 19; -int EFFECT_TYPE_AREA_OF_EFFECT = 20; -int EFFECT_TYPE_BEAM = 21; -//int EFFECT_TYPE_FORCE_RESISTANCE = 22; -int EFFECT_TYPE_CHARMED = 23; -int EFFECT_TYPE_CONFUSED = 24; -int EFFECT_TYPE_FRIGHTENED = 25; -int EFFECT_TYPE_DOMINATED = 26; -int EFFECT_TYPE_PARALYZE = 27; -int EFFECT_TYPE_DAZED = 28; -int EFFECT_TYPE_STUNNED = 29; -int EFFECT_TYPE_SLEEP = 30; -int EFFECT_TYPE_POISON = 31; -int EFFECT_TYPE_DISEASE = 32; -int EFFECT_TYPE_CURSE = 33; -int EFFECT_TYPE_SILENCE = 34; -int EFFECT_TYPE_TURNED = 35; -int EFFECT_TYPE_HASTE = 36; -int EFFECT_TYPE_SLOW = 37; -int EFFECT_TYPE_ABILITY_INCREASE = 38; -int EFFECT_TYPE_ABILITY_DECREASE = 39; -int EFFECT_TYPE_ATTACK_INCREASE = 40; -int EFFECT_TYPE_ATTACK_DECREASE = 41; -int EFFECT_TYPE_DAMAGE_INCREASE = 42; -int EFFECT_TYPE_DAMAGE_DECREASE = 43; -int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; -int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; -int EFFECT_TYPE_AC_INCREASE = 46; -int EFFECT_TYPE_AC_DECREASE = 47; -int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; -int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; -int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; -int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; -int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; -int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; -int EFFECT_TYPE_SKILL_INCREASE = 54; -int EFFECT_TYPE_SKILL_DECREASE = 55; -int EFFECT_TYPE_INVISIBILITY = 56; -int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; -int EFFECT_TYPE_DARKNESS = 58; -int EFFECT_TYPE_DISPELMAGICALL = 59; -int EFFECT_TYPE_ELEMENTALSHIELD = 60; -int EFFECT_TYPE_NEGATIVELEVEL = 61; -int EFFECT_TYPE_DISGUISE = 62; -int EFFECT_TYPE_SANCTUARY = 63; -int EFFECT_TYPE_TRUESEEING = 64; -int EFFECT_TYPE_SEEINVISIBLE = 65; -int EFFECT_TYPE_TIMESTOP = 66; -int EFFECT_TYPE_BLINDNESS = 67; -int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; -int EFFECT_TYPE_DISPELMAGICBEST = 69; -int EFFECT_TYPE_ULTRAVISION = 70; -int EFFECT_TYPE_MISS_CHANCE = 71; -int EFFECT_TYPE_CONCEALMENT = 72; -int EFFECT_TYPE_SPELL_IMMUNITY = 73; -int EFFECT_TYPE_ASSUREDHIT = 74; -int EFFECT_TYPE_VISUAL = 75; -int EFFECT_TYPE_LIGHTSABERTHROW = 76; -int EFFECT_TYPE_FORCEJUMP = 77; -int EFFECT_TYPE_ASSUREDDEFLECTION = 78; - - -int ITEM_PROPERTY_ABILITY_BONUS = 0 ; -int ITEM_PROPERTY_AC_BONUS = 1 ; -int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; -int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; -int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; -int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; -int ITEM_PROPERTY_BONUS_FEAT = 9 ; -int ITEM_PROPERTY_ACTIVATE_ITEM = 10; -int ITEM_PROPERTY_DAMAGE_BONUS = 11; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; -int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; -int ITEM_PROPERTY_DECREASED_DAMAGE = 15; -int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; -int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; -int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; -int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; -int ITEM_PROPERTY_DECREASED_AC = 20; -int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; -int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; -int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; -int ITEM_PROPERTY_IMMUNITY = 24; -int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; -int ITEM_PROPERTY_KEEN = 28; -int ITEM_PROPERTY_LIGHT = 29; -int ITEM_PROPERTY_MIGHTY = 30; -int ITEM_PROPERTY_NO_DAMAGE = 31; -int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; -int ITEM_PROPERTY_REGENERATION = 35; -int ITEM_PROPERTY_SKILL_BONUS = 36; -int ITEM_PROPERTY_SECURITY_SPIKE = 37; -int ITEM_PROPERTY_ATTACK_BONUS = 38; -int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; -int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; -int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; -int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; -int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; -int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; -int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; -int ITEM_PROPERTY_TRAP = 46; -int ITEM_PROPERTY_TRUE_SEEING = 47; -int ITEM_PROPERTY_ON_MONSTER_HIT = 48; -int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; -int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; -int ITEM_PROPERTY_MONSTER_DAMAGE = 51; -int ITEM_PROPERTY_SPECIAL_WALK = 52; -int ITEM_PROPERTY_COMPUTER_SPIKE = 53; -int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; -int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; -int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; - -int BASE_ITEM_QUARTER_STAFF = 0; -int BASE_ITEM_STUN_BATON = 1; -int BASE_ITEM_LONG_SWORD = 2; -int BASE_ITEM_VIBRO_SWORD = 3; -int BASE_ITEM_SHORT_SWORD = 4; -int BASE_ITEM_VIBRO_BLADE = 5; -int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; -int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; -int BASE_ITEM_LIGHTSABER = 8; -int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; -int BASE_ITEM_SHORT_LIGHTSABER = 10; -int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; -int BASE_ITEM_BLASTER_PISTOL = 12; -int BASE_ITEM_HEAVY_BLASTER = 13; -int BASE_ITEM_HOLD_OUT_BLASTER = 14; -int BASE_ITEM_ION_BLASTER = 15; -int BASE_ITEM_DISRUPTER_PISTOL = 16; -int BASE_ITEM_SONIC_PISTOL = 17; -int BASE_ITEM_ION_RIFLE = 18; -int BASE_ITEM_BOWCASTER = 19; -int BASE_ITEM_BLASTER_CARBINE = 20; -int BASE_ITEM_DISRUPTER_RIFLE = 21; -int BASE_ITEM_SONIC_RIFLE = 22; -int BASE_ITEM_REPEATING_BLASTER = 23; -int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; -int BASE_ITEM_FRAGMENTATION_GRENADES = 25; -int BASE_ITEM_STUN_GRENADES = 26; -int BASE_ITEM_THERMAL_DETONATOR = 27; -int BASE_ITEM_POISON_GRENADE = 28; -int BASE_ITEM_FLASH_GRENADE = 29; -int BASE_ITEM_SONIC_GRENADE = 30; -int BASE_ITEM_ADHESIVE_GRENADE = 31; -int BASE_ITEM_CRYOBAN_GRENADE = 32; -int BASE_ITEM_FIRE_GRENADE = 33; -int BASE_ITEM_ION_GRENADE = 34; -int BASE_ITEM_JEDI_ROBE = 35; -int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; -int BASE_ITEM_JEDI_MASTER_ROBE = 37; -int BASE_ITEM_ARMOR_CLASS_4 = 38; -int BASE_ITEM_ARMOR_CLASS_5 = 39; -int BASE_ITEM_ARMOR_CLASS_6 = 40; -int BASE_ITEM_ARMOR_CLASS_7 = 41; -int BASE_ITEM_ARMOR_CLASS_8 = 42; -int BASE_ITEM_ARMOR_CLASS_9 = 43; -int BASE_ITEM_MASK = 44; -int BASE_ITEM_GAUNTLETS = 45; -int BASE_ITEM_FOREARM_BANDS = 46; -int BASE_ITEM_BELT = 47; -int BASE_ITEM_IMPLANT_1 = 48; -int BASE_ITEM_IMPLANT_2 = 49; -int BASE_ITEM_IMPLANT_3 = 50; -int BASE_ITEM_DATA_PAD = 52; -int BASE_ITEM_ADRENALINE = 53; -int BASE_ITEM_COMBAT_SHOTS = 54; -int BASE_ITEM_MEDICAL_EQUIPMENT = 55; -int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; -int BASE_ITEM_CREDITS = 57; -int BASE_ITEM_TRAP_KIT = 58; -int BASE_ITEM_SECURITY_SPIKES = 59; -int BASE_ITEM_PROGRAMMING_SPIKES = 60; -int BASE_ITEM_GLOW_ROD = 61; -int BASE_ITEM_COLLAR_LIGHT = 62; -int BASE_ITEM_TORCH = 63; -int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; -int BASE_ITEM_AESTHETIC_ITEM = 65; -int BASE_ITEM_DROID_LIGHT_PLATING = 66; -int BASE_ITEM_DROID_MEDIUM_PLATING = 67; -int BASE_ITEM_DROID_HEAVY_PLATING = 68; -int BASE_ITEM_DROID_SEARCH_SCOPE = 69; -int BASE_ITEM_DROID_MOTION_SENSORS = 70; -int BASE_ITEM_DROID_SONIC_SENSORS = 71; -int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; -int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; -int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; -int BASE_ITEM_DROID_SHIELD = 75; -int BASE_ITEM_DROID_UTILITY_DEVICE = 76; -int BASE_ITEM_BLASTER_RIFLE = 77; -int BASE_ITEM_GHAFFI_STICK = 78; -int BASE_ITEM_WOOKIE_WARBLADE = 79; -int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; -int BASE_ITEM_CREATURE_ITEM_SLASH = 81; -int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; -int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; -int BASE_ITEM_CREATURE_HIDE_ITEM = 84; -int BASE_ITEM_BASIC_CLOTHING = 85; - -int BASE_ITEM_INVALID = 256; - - -// AMF: These constants define attack results -int ATTACK_RESULT_INVALID = 0; -int ATTACK_RESULT_HIT_SUCCESSFUL = 1; -int ATTACK_RESULT_CRITICAL_HIT = 2; -int ATTACK_RESULT_AUTOMATIC_HIT = 3; - -int ATTACK_RESULT_MISS = 4; -int ATTACK_RESULT_ATTACK_RESISTED = 5; -int ATTACK_RESULT_ATTACK_FAILED = 6; - -int ATTACK_RESULT_PARRIED = 8; -int ATTACK_RESULT_DEFLECTED = 9; - - -// these match the constants in visualeffects.2da -int VFX_NONE = -1; - -int VFX_IMP_HEALING_SMALL = 1001; -int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; -int VFX_PRO_AFFLICT = 1003; -int VFX_IMP_CHOKE = 1004; -int VFX_IMP_CURE = 1005; -int VFX_PRO_DEATH_FIELD = 1006; -int VFX_PRO_DROID_DISABLE = 1007; -int VFX_PRO_DROID_KILL = 1008; -int VFX_PRO_DRAIN = 1009; -int VFX_PRO_FORCE_ARMOR = 1010; -int VFX_PRO_FORCE_AURA = 1011; -int VFX_IMP_FORCE_BREACH = 1012; -int VFX_IMP_FORCE_PUSH = 1014; -int VFX_PRO_FORCE_SHIELD = 1015; -int VFX_IMP_FORCE_WAVE = 1017; -int VFX_IMP_FORCE_WHIRLWIND = 1018; -int VFX_IMP_HEAL = 1019; -int VFX_IMP_SPEED_KNIGHT = 1020; -int VFX_PRO_LIGHTNING_L = 1021; -int VFX_IMP_SPEED_MASTERY = 1022; -int VFX_PRO_RESIST_ELEMENTS = 1025; -int VFX_PRO_RESIST_FORCE = 1026; -int VFX_PRO_RESIST_POISON = 1027; -int VFX_PRO_LIGHTNING_S = 1028; -int VFX_IMP_MIND_FORCE = 1031; -int VFX_IMP_SUPPRESS_FORCE = 1032; -int VFX_IMP_MIND_KINIGHT = 1033; -int VFX_IMP_MIND_MASTERY = 1034; -int VFX_PRO_LIGHTNING_JEDI = 1035; -int VFX_PRO_LIGHTNING_L_SOUND = 1036; -int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; -int VFX_IMP_FLAME = 1039; -int VFX_IMP_STUN = 1040; - -int VFX_DUR_STEALTH_PULSE = 2000; -int VFX_DUR_INVISIBILITY = 2001; -int VFX_DUR_SPEED = 2004; -int VFX_DUR_FORCE_WHIRLWIND = 2007; -int VFX_DUR_HOLD = 2008; -int VFX_DUR_BODY_FUAL = 2024; -int VFX_DUR_PSYCHIC_STATIC = 2025; -int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; -int VFX_BEAM_DROID_DISABLE = 2027; -int VFX_BEAM_DROID_DESTROY = 2028; -int VFX_BEAM_DRAIN_LIFE = 2029; -int VFX_DUR_KNIGHTS_SPEED = 2031; -int VFX_DUR_SHIELD_RED_MARK_I = 2032; -int VFX_DUR_SHIELD_RED_MARK_II = 2034; -int VFX_DUR_SHIELD_RED_MARK_IV = 2035; -int VFX_BEAM_LIGHTNING_DARK_S = 2037; -int VFX_BEAM_LIGHTNING_DARK_L = 2038; -int VFX_DUR_SHIELD_BLUE_01 = 2040; -int VFX_DUR_SHIELD_BLUE_02 = 2041; -int VFX_DUR_SHIELD_BLUE_03 = 2042; -int VFX_DUR_SHIELD_BLUE_04 = 2043; -int VFX_DUR_SHIELD_GREEN_01 = 2044; -int VFX_DUR_SHIELD_RED_01 = 2045; -int VFX_DUR_SHIELD_RED_02 = 2046; -int VFX_DUR_SHIELD_CHROME_01 = 2047; -int VFX_DUR_SHIELD_CHROME_02 = 2048; -int VFX_BEAM_ION_RAY_01 = 2049; -int VFX_BEAM_ION_RAY_02 = 2050; -int VFX_BEAM_COLD_RAY = 2051; -int VFX_BEAM_STUN_RAY = 2052; -int VFX_BEAM_FLAME_SPRAY = 2053; -int VFX_DUR_CARBONITE_ENCASING = 2054; -int VFX_DUR_CARBONITE_CHUNKS = 2055; -int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; -int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; -int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; - -int VFX_FNF_FORCE_WAVE = 3001; -int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; -int VFX_FNF_GRENADE_FRAGMENTATION = 3003; -int VFX_FNF_GRENADE_STUN = 3004; -int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; -int VFX_FNF_GRENADE_POISON = 3006; -int VFX_FNF_GRENADE_SONIC = 3007; -int VFX_FNF_GRENADE_ADHESIVE = 3008; -int VFX_FNF_GRENADE_CRYOBAN = 3009; -int VFX_FNF_GRENADE_PLASMA = 3010; -int VFX_FNF_GRENADE_ION = 3011; -int VFX_FNF_GRAVITY_GENERATOR = 3013; - -int VFX_COM_SPARKS_LARGE = 4003; -int VFX_COM_SPARKS_LIGHTSABER = 4004; -int VFX_COM_SPARKS_PARRY_METAL = 4011; -int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; -int VFX_COM_POWER_BLAST_IMPROVED = 4013; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; -int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; -int VFX_COM_MULTI_SHOT = 4016; -int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; -int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; -int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; -int VFX_COM_SNIPER_SHOT_MASTERY = 4020; -int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; -int VFX_COM_RAPID_SHOT_IMPROVED = 4022; -int VFX_COM_BLASTER_DEFLECTION = 4023; -int VFX_COM_BLASTER_IMPACT = 4024; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; -int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; -int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; -int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; -int VFX_COM_POWER_BLAST_MASTERY = 4029; -int VFX_COM_FLURRY_IMPROVED_SABER = 4030; -int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; -int VFX_COM_BLASTER_IMPACT_GROUND = 4032; -int VFX_COM_SPARKS_BLASTER = 4033; -int VFX_COM_DROID_EXPLOSION_1 = 4034; -int VFX_COM_DROID_EXPLOSION_2 = 4035; -int VFX_COM_JEDI_FORCE_FIZZLE = 4036; -int VFX_COM_FORCE_RESISTED = 4037; - -int VFX_ARD_LIGHT_YELLOW_10 = 5000; -int VFX_ARD_LIGHT_YELLOW_20 = 5001; -int VFX_ARD_LIGHT_BLIND = 5002; -int VFX_ARD_HEAT_SHIMMER = 5003; - -int VFX_IMP_MIRV = 6000; -int VFX_IMP_MIRV_IMPACT = 6001; -int VFX_IMP_SCREEN_SHAKE = 6002; - - -int AOE_PER_FOGACID = 0; -int AOE_PER_FOGFIRE = 1; -int AOE_PER_FOGSTINK = 2; -int AOE_PER_FOGKILL = 3; -int AOE_PER_FOGMIND = 4; -int AOE_PER_WALLFIRE = 5; -int AOE_PER_WALLWIND = 6; -int AOE_PER_WALLBLADE = 7; -int AOE_PER_WEB = 8; -int AOE_PER_ENTANGLE = 9; -//int AOE_PER_CHAOS = 10; -int AOE_PER_DARKNESS = 11; -int AOE_MOB_CIRCEVIL = 12; -int AOE_MOB_CIRCGOOD = 13; -int AOE_MOB_CIRCLAW = 14; -int AOE_MOB_CIRCCHAOS = 15; -int AOE_MOB_FEAR = 16; -int AOE_MOB_BLINDING = 17; -int AOE_MOB_UNEARTHLY = 18; -int AOE_MOB_MENACE = 19; -int AOE_MOB_UNNATURAL = 20; -int AOE_MOB_STUN = 21; -int AOE_MOB_PROTECTION = 22; -int AOE_MOB_FIRE = 23; -int AOE_MOB_FROST = 24; -int AOE_MOB_ELECTRICAL = 25; -int AOE_PER_FOGGHOUL = 26; -int AOE_MOB_TYRANT_FOG = 27; -int AOE_PER_STORM = 28; -int AOE_PER_INVIS_SPHERE = 29; -int AOE_MOB_SILENCE = 30; -int AOE_PER_DELAY_BLAST_FIREBALL = 31; -int AOE_PER_GREASE = 32; -int AOE_PER_CREEPING_DOOM = 33; -int AOE_PER_EVARDS_BLACK_TENTACLES = 34; -int AOE_MOB_INVISIBILITY_PURGE = 35; -int AOE_MOB_DRAGON_FEAR = 36; - -// these constants match those in spell.2da -int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. -int FORCE_POWER_MASTER_ALTER = 0; -int FORCE_POWER_MASTER_CONTROL = 1; -int FORCE_POWER_MASTER_SENSE = 2; -int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; -int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; -int FORCE_POWER_REGNERATION_ADVANCED = 5; -int FORCE_POWER_AFFECT_MIND = 6; -int FORCE_POWER_AFFLICTION = 7; -int FORCE_POWER_SPEED_BURST = 8; -int FORCE_POWER_CHOKE = 9; -int FORCE_POWER_CURE = 10; -int FORCE_POWER_DEATH_FIELD = 11; -int FORCE_POWER_DROID_DISABLE = 12; -int FORCE_POWER_DROID_DESTROY = 13; -int FORCE_POWER_DOMINATE = 14; -int FORCE_POWER_DRAIN_LIFE = 15; -int FORCE_POWER_FEAR = 16; -int FORCE_POWER_FORCE_ARMOR = 17; -int FORCE_POWER_FORCE_AURA = 18; -int FORCE_POWER_FORCE_BREACH = 19; -int FORCE_POWER_FORCE_IMMUNITY = 20; -int FORCE_POWER_FORCE_JUMP = 21; -int FORCE_POWER_FORCE_MIND = 22; -int FORCE_POWER_FORCE_PUSH = 23; -int FORCE_POWER_FORCE_SHIELD = 24; -int FORCE_POWER_FORCE_STORM = 25; -int FORCE_POWER_FORCE_WAVE = 26; -int FORCE_POWER_FORCE_WHIRLWIND = 27; -int FORCE_POWER_HEAL = 28; -int FORCE_POWER_HOLD = 29; -int FORCE_POWER_HORROR = 30; -int FORCE_POWER_INSANITY = 31; -int FORCE_POWER_KILL = 32; -int FORCE_POWER_KNIGHT_MIND = 33; -int FORCE_POWER_KNIGHT_SPEED = 34; -int FORCE_POWER_LIGHTNING = 35; -int FORCE_POWER_MIND_MASTERY = 36; -int FORCE_POWER_SPEED_MASTERY = 37; -int FORCE_POWER_PLAGUE = 38; -int FORCE_POWER_REGENERATION = 39; -int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; -int FORCE_POWER_RESIST_FORCE = 41; -int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; -int FORCE_POWER_SHOCK = 43; -int FORCE_POWER_SLEEP = 44; -int FORCE_POWER_SLOW = 45; -int FORCE_POWER_STUN = 46; -int FORCE_POWER_DROID_STUN = 47; -int FORCE_POWER_SUPRESS_FORCE = 48; -int FORCE_POWER_LIGHT_SABER_THROW = 49; -int FORCE_POWER_WOUND = 50; -int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; -int SPECIAL_ABILITY_BODY_FUEL = 52; -int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; -int SPECIAL_ABILITY_WARRIOR_STANCE = 54; -int SPECIAL_ABILITY_SENTINEL_STANCE = 55; -int SPECIAL_ABILITY_DOMINATE_MIND = 56; -int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; -int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; -int SPECIAL_ABILITY_ENHANCED_SENSES = 59; -int SPECIAL_ABILITY_CAMOFLAGE = 60; -int SPECIAL_ABILITY_TAUNT = 61; -int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; -int SPECIAL_ABILITY_RAGE = 63; - -// these constants must match those in poison.2da - -int POISON_ABILITY_SCORE_MILD = 0; -int POISON_ABILITY_SCORE_AVERAGE = 1; -int POISON_ABILITY_SCORE_VIRULENT = 2; -int POISON_DAMAGE_MILD = 3; -int POISON_DAMAGE_AVERAGE = 4; -int POISON_DAMAGE_VIRULENT = 5; - -// the thing after CREATURE_TYPE_ should refer to the -// actual "subtype" in the lists given above. -int CREATURE_TYPE_RACIAL_TYPE = 0; -int CREATURE_TYPE_PLAYER_CHAR = 1; -int CREATURE_TYPE_CLASS = 2; -int CREATURE_TYPE_REPUTATION = 3; -int CREATURE_TYPE_IS_ALIVE = 4; -int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; -int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; -int CREATURE_TYPE_PERCEPTION = 7; -//int CREATURE_TYPE_ALIGNMENT = 2; - -int REPUTATION_TYPE_FRIEND = 0; -int REPUTATION_TYPE_ENEMY = 1; -int REPUTATION_TYPE_NEUTRAL = 2; - -int PERCEPTION_SEEN_AND_HEARD = 0; -int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; -int PERCEPTION_HEARD_AND_NOT_SEEN = 2; -int PERCEPTION_SEEN_AND_NOT_HEARD = 3; -int PERCEPTION_NOT_HEARD = 4; -int PERCEPTION_HEARD = 5; -int PERCEPTION_NOT_SEEN = 6; -int PERCEPTION_SEEN = 7; - -int PLAYER_CHAR_NOT_PC = FALSE; -int PLAYER_CHAR_IS_PC = TRUE; - -int CLASS_TYPE_SOLDIER = 0; -int CLASS_TYPE_SCOUT = 1; -int CLASS_TYPE_SCOUNDREL = 2; -int CLASS_TYPE_JEDIGUARDIAN = 3; -int CLASS_TYPE_JEDICONSULAR = 4; -int CLASS_TYPE_JEDISENTINEL = 5; -int CLASS_TYPE_COMBATDROID = 6; -int CLASS_TYPE_EXPERTDROID = 7; -int CLASS_TYPE_MINION = 8; - -int CLASS_TYPE_INVALID = 255; - -// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() -int PERSISTENT_ZONE_ACTIVE = 0; -int PERSISTENT_ZONE_FOLLOW = 1; - -int INVALID_STANDARD_FACTION = -1; -int STANDARD_FACTION_HOSTILE_1 = 1; -int STANDARD_FACTION_FRIENDLY_1 = 2; -int STANDARD_FACTION_HOSTILE_2 = 3; -int STANDARD_FACTION_FRIENDLY_2 = 4; -int STANDARD_FACTION_NEUTRAL = 5; -int STANDARD_FACTION_INSANE = 6; -int STANDARD_FACTION_PTAT_TUSKAN = 7; -int STANDARD_FACTION_GLB_XOR = 8; -int STANDARD_FACTION_SURRENDER_1 = 9; -int STANDARD_FACTION_SURRENDER_2 = 10; -int STANDARD_FACTION_PREDATOR = 11; -int STANDARD_FACTION_PREY = 12; -int STANDARD_FACTION_TRAP = 13; -int STANDARD_FACTION_ENDAR_SPIRE = 14; -int STANDARD_FACTION_RANCOR = 15; -int STANDARD_FACTION_GIZKA_1 = 16; -int STANDARD_FACTION_GIZKA_2 = 17; - -// Skill defines -int SKILL_COMPUTER_USE = 0; -int SKILL_DEMOLITIONS = 1; -int SKILL_STEALTH = 2; -int SKILL_AWARENESS = 3; -int SKILL_PERSUADE = 4; -int SKILL_REPAIR = 5; -int SKILL_SECURITY = 6; -int SKILL_TREAT_INJURY = 7; -int SKILL_MAX_SKILLS = 8; - -int SUBSKILL_FLAGTRAP = 100; -int SUBSKILL_RECOVERTRAP = 101; -int SUBSKILL_EXAMINETRAP = 102; - -// FEATS -//int FEAT_ADVANCED_DODGE = 0; -int FEAT_ADVANCED_JEDI_DEFENSE = 1; -int FEAT_ADVANCED_GUARD_STANCE = 2; -int FEAT_AMBIDEXTERITY = 3; -int FEAT_ARMOUR_PROF_HEAVY = 4; -int FEAT_ARMOUR_PROF_LIGHT = 5; -int FEAT_ARMOUR_PROF_MEDIUM = 6; -int FEAT_CAUTIOUS = 7; -int FEAT_CRITICAL_STRIKE = 8; -int FEAT_DOUBLE_WEAPON_FIGHTING = 9; -int FEAT_EMPATHY = 10; -int FEAT_FLURRY = 11; -int FEAT_GEAR_HEAD = 12; -int FEAT_GREAT_FORTITUDE = 13; -int FEAT_IMPLANT_LEVEL_1 = 14; -int FEAT_IMPLANT_LEVEL_2 = 15; -int FEAT_IMPLANT_LEVEL_3 = 16; -int FEAT_IMPROVED_POWER_ATTACK = 17; -int FEAT_IMPROVED_POWER_BLAST = 18; -int FEAT_IMPROVED_CRITICAL_STRIKE = 19; -int FEAT_IMPROVED_SNIPER_SHOT = 20; -int FEAT_IRON_WILL = 21; -int FEAT_LIGHTNING_REFLEXES = 22; -//int FEAT_MASTER_DODGE = 23; -int FEAT_MASTER_JEDI_DEFENSE = 24; -int FEAT_MASTER_GUARD_STANCE = 25; -int FEAT_MULTI_SHOT = 26; -int FEAT_PERCEPTIVE = 27; -int FEAT_POWER_ATTACK = 28; -int FEAT_POWER_BLAST = 29; -int FEAT_RAPID_SHOT = 30; -int FEAT_SNIPER_SHOT = 31; -int FEAT_WEAPON_FOCUS_BLASTER = 32; -int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; -int FEAT_WEAPON_FOCUS_GRENADE = 34; -int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; -int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; -int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; -int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; -int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; -int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; -int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; -int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; -int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; -int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; -int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; -int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; -int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; -int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; -int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; -int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; -int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; -int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; -int FEAT_WHIRLWIND_ATTACK = 53; -int FEAT_GUARD_STANCE = 54; -int FEAT_JEDI_DEFENSE = 55; -int FEAT_UNCANNY_DODGE_1 = 56; -int FEAT_UNCANNY_DODGE_2 = 57; -int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; -//int FEAT_DODGE = 59; -int FEAT_SNEAK_ATTACK_1D6 = 60; -int FEAT_SNEAK_ATTACK_2D6 = 61; -int FEAT_SNEAK_ATTACK_3D6 = 62; -int FEAT_SNEAK_ATTACK_4D6 = 63; -int FEAT_SNEAK_ATTACK_5D6 = 64; -int FEAT_SNEAK_ATTACK_6D6 = 65; -int FEAT_SNEAK_ATTACK_7D6 = 66; -int FEAT_SNEAK_ATTACK_8D6 = 67; -int FEAT_SNEAK_ATTACK_9D6 = 68; -int FEAT_SNEAK_ATTACK_10D6 = 69; -int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; -int FEAT_SKILL_FOCUS_STEALTH = 71; -int FEAT_SKILL_FOCUS_AWARENESS = 72; -int FEAT_SKILL_FOCUS_PERSUADE = 73; -int FEAT_SKILL_FOCUS_REPAIR = 74; -int FEAT_SKILL_FOCUS_SECURITY = 75; -int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; -int FEAT_MASTER_SNIPER_SHOT = 77; -int FEAT_DROID_UPGRADE_1 = 78; -int FEAT_DROID_UPGRADE_2 = 79; -int FEAT_DROID_UPGRADE_3 = 80; -int FEAT_MASTER_CRITICAL_STRIKE = 81; -int FEAT_MASTER_POWER_BLAST = 82; -int FEAT_MASTER_POWER_ATTACK = 83; -int FEAT_TOUGHNESS = 84; -int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; -int FEAT_FORCE_FOCUS_ALTER = 86; -int FEAT_FORCE_FOCUS_CONTROL = 87; -int FEAT_FORCE_FOCUS_SENSE = 88; -int FEAT_FORCE_FOCUS_ADVANCED = 89; -int FEAT_FORCE_FOCUS_MASTERY = 90; -int FEAT_IMPROVED_FLURRY = 91; -int FEAT_IMPROVED_RAPID_SHOT = 92; -int FEAT_PROFICIENCY_ALL = 93; -int FEAT_BATTLE_MEDITATION = 94; - -// Special Attack Defines -int SPECIAL_ATTACK_INVALID = 0; -int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; -int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; -int SPECIAL_ATTACK_SAP = 3; -int SPECIAL_ATTACK_DISARM = 4; -int SPECIAL_ATTACK_IMPROVED_DISARM = 5; -int SPECIAL_ATTACK_KNOCKDOWN = 6; -int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; -int SPECIAL_ATTACK_STUNNING_FIST = 8; -int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; -int SPECIAL_ATTACK_RAPID_SHOT = 10; - -// Combat Mode Defines -int COMBAT_MODE_INVALID = 0; -int COMBAT_MODE_PARRY = 1; -int COMBAT_MODE_POWER_ATTACK = 2; -int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; -int COMBAT_MODE_FLURRY_OF_BLOWS = 4; -int COMBAT_MODE_RAPID_SHOT = 5; - -// These represent the row in the difficulty 2da, rather than -// a difficulty value. -int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; -int ENCOUNTER_DIFFICULTY_EASY = 1; -int ENCOUNTER_DIFFICULTY_NORMAL = 2; -int ENCOUNTER_DIFFICULTY_HARD = 3; -int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; - -// Looping animation constants. -int ANIMATION_LOOPING_PAUSE = 0; -int ANIMATION_LOOPING_PAUSE2 = 1; -int ANIMATION_LOOPING_LISTEN = 2; -int ANIMATION_LOOPING_MEDITATE = 3; -int ANIMATION_LOOPING_WORSHIP = 4; -//int ANIMATION_LOOPING_LOOK_FAR = 5; -//int ANIMATION_LOOPING_SIT_CHAIR = 6; -//int ANIMATION_LOOPING_SIT_CROSS = 7; -int ANIMATION_LOOPING_TALK_NORMAL = 5; -int ANIMATION_LOOPING_TALK_PLEADING = 6; -int ANIMATION_LOOPING_TALK_FORCEFUL = 7; -int ANIMATION_LOOPING_TALK_LAUGHING = 8; -int ANIMATION_LOOPING_TALK_SAD = 9; -int ANIMATION_LOOPING_GET_LOW = 10; -int ANIMATION_LOOPING_GET_MID = 11; -int ANIMATION_LOOPING_PAUSE_TIRED = 12; -int ANIMATION_LOOPING_PAUSE_DRUNK = 13; -int ANIMATION_LOOPING_FLIRT = 14; -int ANIMATION_LOOPING_USE_COMPUTER = 15; -int ANIMATION_LOOPING_DANCE = 16; -int ANIMATION_LOOPING_DANCE1 = 17; -int ANIMATION_LOOPING_HORROR = 18; -int ANIMATION_LOOPING_READY = 19; -int ANIMATION_LOOPING_DEACTIVATE = 20; -int ANIMATION_LOOPING_SPASM = 21; -int ANIMATION_LOOPING_SLEEP = 22; -int ANIMATION_LOOPING_PRONE = 23; -int ANIMATION_LOOPING_PAUSE3 = 24; -int ANIMATION_LOOPING_WELD = 25; -int ANIMATION_LOOPING_DEAD = 26; -int ANIMATION_LOOPING_TALK_INJURED = 27; -int ANIMATION_LOOPING_LISTEN_INJURED = 28; -int ANIMATION_LOOPING_TREAT_INJURED = 29; -int ANIMATION_LOOPING_DEAD_PRONE = 30; -int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; -int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; - -// NOTE: Choke is really a looping animation. The fire and forget constant has -// been left in because it has already been used in many places. Please -// use this constant from now on. -int ANIMATION_LOOPING_CHOKE = 116; - -// Fire and forget animation constants. -int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; -int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; -int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; -int ANIMATION_FIREFORGET_PAUSE_BORED = 103; -int ANIMATION_FIREFORGET_SALUTE = 104; -int ANIMATION_FIREFORGET_BOW = 105; -//int ANIMATION_FIREFORGET_STEAL = 106; -int ANIMATION_FIREFORGET_GREETING = 106; -int ANIMATION_FIREFORGET_TAUNT = 107; -int ANIMATION_FIREFORGET_VICTORY1 = 108; -int ANIMATION_FIREFORGET_VICTORY2 = 109; -int ANIMATION_FIREFORGET_VICTORY3 = 110; -//int ANIMATION_FIREFORGET_READ = 111; -int ANIMATION_FIREFORGET_INJECT = 112; -int ANIMATION_FIREFORGET_USE_COMPUTER = 113; -int ANIMATION_FIREFORGET_PERSUADE = 114; -int ANIMATION_FIREFORGET_ACTIVATE = 115; -// NOTE: Please do not use this choke constant anymore. The choke is not a fire -// and forget animation. The looping choke constant above should be used -// instead. -int ANIMATION_FIREFORGET_CHOKE = 116; -int ANIMATION_FIREFORGET_THROW_HIGH = 117; -int ANIMATION_FIREFORGET_THROW_LOW = 118; -int ANIMATION_FIREFORGET_CUSTOM01 = 119; -int ANIMATION_FIREFORGET_TREAT_INJURED = 120; - -// Placeable animation constants -int ANIMATION_PLACEABLE_ACTIVATE = 200; -int ANIMATION_PLACEABLE_DEACTIVATE = 201; -int ANIMATION_PLACEABLE_OPEN = 202; -int ANIMATION_PLACEABLE_CLOSE = 203; -int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; -int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; -int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; -int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; -int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; -int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; -int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; -int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; -int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; -int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; - - -// Room Animation Constants -int ANIMATION_ROOM_SCRIPTLOOP01 = 1; -int ANIMATION_ROOM_SCRIPTLOOP02 = 2; -int ANIMATION_ROOM_SCRIPTLOOP03 = 3; -int ANIMATION_ROOM_SCRIPTLOOP04 = 4; -int ANIMATION_ROOM_SCRIPTLOOP05 = 5; -int ANIMATION_ROOM_SCRIPTLOOP06 = 6; -int ANIMATION_ROOM_SCRIPTLOOP07 = 7; -int ANIMATION_ROOM_SCRIPTLOOP08 = 8; -int ANIMATION_ROOM_SCRIPTLOOP09 = 9; -int ANIMATION_ROOM_SCRIPTLOOP10 = 10; -int ANIMATION_ROOM_SCRIPTLOOP11 = 11; -int ANIMATION_ROOM_SCRIPTLOOP12 = 12; -int ANIMATION_ROOM_SCRIPTLOOP13 = 13; -int ANIMATION_ROOM_SCRIPTLOOP14 = 14; -int ANIMATION_ROOM_SCRIPTLOOP15 = 15; -int ANIMATION_ROOM_SCRIPTLOOP16 = 16; -int ANIMATION_ROOM_SCRIPTLOOP17 = 17; -int ANIMATION_ROOM_SCRIPTLOOP18 = 18; -int ANIMATION_ROOM_SCRIPTLOOP19 = 19; -int ANIMATION_ROOM_SCRIPTLOOP20 = 20; - -int TALENT_TYPE_FORCE = 0; -int TALENT_TYPE_SPELL = 0; -int TALENT_TYPE_FEAT = 1; -int TALENT_TYPE_SKILL = 2; - -int TALENT_EXCLUDE_ALL_OF_TYPE = -1; - -int INVENTORY_DISTURB_TYPE_ADDED = 0; -int INVENTORY_DISTURB_TYPE_REMOVED = 1; -int INVENTORY_DISTURB_TYPE_STOLEN = 2; - -int GUI_PANEL_PLAYER_DEATH = 0; - -int POLYMORPH_TYPE_WEREWOLF = 0; -int POLYMORPH_TYPE_WERERAT = 1; -int POLYMORPH_TYPE_WERECAT = 2; -int POLYMORPH_TYPE_GIANT_SPIDER = 3; -int POLYMORPH_TYPE_TROLL = 4; -int POLYMORPH_TYPE_UMBER_HULK = 5; -int POLYMORPH_TYPE_PIXIE = 6; -int POLYMORPH_TYPE_ZOMBIE = 7; -int POLYMORPH_TYPE_RED_DRAGON = 8; -int POLYMORPH_TYPE_FIRE_GIANT = 9; -int POLYMORPH_TYPE_BALOR = 10; -int POLYMORPH_TYPE_DEATH_SLAAD = 11; -int POLYMORPH_TYPE_IRON_GOLEM = 12; -int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; -int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; -int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; -int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; -int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; -int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; -int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; -int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; -int POLYMORPH_TYPE_BROWN_BEAR = 21; -int POLYMORPH_TYPE_PANTHER = 22; -int POLYMORPH_TYPE_WOLF = 23; -int POLYMORPH_TYPE_BOAR = 24; -int POLYMORPH_TYPE_BADGER = 25; -int POLYMORPH_TYPE_PENGUIN = 26; -int POLYMORPH_TYPE_COW = 27; -int POLYMORPH_TYPE_DOOM_KNIGHT = 28; -int POLYMORPH_TYPE_YUANTI = 29; -int POLYMORPH_TYPE_IMP = 30; -int POLYMORPH_TYPE_QUASIT = 31; -int POLYMORPH_TYPE_SUCCUBUS = 32; -int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; -int POLYMORPH_TYPE_DIRE_PANTHER = 34; -int POLYMORPH_TYPE_DIRE_WOLF = 35; -int POLYMORPH_TYPE_DIRE_BOAR = 36; -int POLYMORPH_TYPE_DIRE_BADGER = 37; - -int INVISIBILITY_TYPE_NORMAL = 1; -int INVISIBILITY_TYPE_DARKNESS = 2; -int INVISIBILITY_TYPE_IMPROVED = 4; - -int CREATURE_SIZE_INVALID = 0; -int CREATURE_SIZE_TINY = 1; -int CREATURE_SIZE_SMALL = 2; -int CREATURE_SIZE_MEDIUM = 3; -int CREATURE_SIZE_LARGE = 4; -int CREATURE_SIZE_HUGE = 5; - -int CAMERA_MODE_CHASE_CAMERA = 0; -int CAMERA_MODE_TOP_DOWN = 1; -int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; - -int PROJECTILE_PATH_TYPE_DEFAULT = 0; -int PROJECTILE_PATH_TYPE_HOMING = 1; -int PROJECTILE_PATH_TYPE_BALLISTIC = 2; -int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; -int PROJECTILE_PATH_TYPE_ACCELERATING = 4; - -int GAME_DIFFICULTY_VERY_EASY = 0; -int GAME_DIFFICULTY_EASY = 1; -int GAME_DIFFICULTY_NORMAL = 2; -int GAME_DIFFICULTY_CORE_RULES = 3; -int GAME_DIFFICULTY_DIFFICULT = 4; - -int ACTION_MOVETOPOINT = 0; -int ACTION_PICKUPITEM = 1; -int ACTION_DROPITEM = 2; -int ACTION_ATTACKOBJECT = 3; -int ACTION_CASTSPELL = 4; -int ACTION_OPENDOOR = 5; -int ACTION_CLOSEDOOR = 6; -int ACTION_DIALOGOBJECT = 7; -int ACTION_DISABLETRAP = 8; -int ACTION_RECOVERTRAP = 9; -int ACTION_FLAGTRAP = 10; -int ACTION_EXAMINETRAP = 11; -int ACTION_SETTRAP = 12; -int ACTION_OPENLOCK = 13; -int ACTION_LOCK = 14; -int ACTION_USEOBJECT = 15; -int ACTION_ANIMALEMPATHY = 16; -int ACTION_REST = 17; -int ACTION_TAUNT = 18; -int ACTION_ITEMCASTSPELL = 19; -int ACTION_COUNTERSPELL = 31; -int ACTION_HEAL = 33; -int ACTION_PICKPOCKET = 34; -int ACTION_FOLLOW = 35; -int ACTION_WAIT = 36; -int ACTION_SIT = 37; -int ACTION_FOLLOWLEADER = 38; - -int ACTION_INVALID = 65535; -int ACTION_QUEUEEMPTY = 65534; - -int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; -int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; -int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; -int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; -int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; -int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; -int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; -int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; -int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; - -int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; -int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; - -int CONVERSATION_TYPE_CINEMATIC = 0; -int CONVERSATION_TYPE_COMPUTER = 1; - -int PLANET_ENDAR_SPIRE = 0; -int PLANET_TARIS = 1; -int PLANET_EBON_HAWK = 2; -int PLANET_DANTOOINE = 3; -int PLANET_TATOOINE = 4; -int PLANET_KASHYYYK = 5; -int PLANET_MANAAN = 6; -int PLANET_KORRIBAN = 7; -int PLANET_LEVIATHAN = 8; -int PLANET_UNKNOWN_WORLD = 9; -int PLANET_STAR_FORGE = 10; -int PLANET_LIVE_01 = 11; -int PLANET_LIVE_02 = 12; -int PLANET_LIVE_03 = 13; -int PLANET_LIVE_04 = 14; -int PLANET_LIVE_05 = 15; - -int NPC_PLAYER = -1; -int NPC_BASTILA = 0; -int NPC_CANDEROUS = 1; -int NPC_CARTH = 2; -int NPC_HK_47 = 3; -int NPC_JOLEE = 4; -int NPC_JUHANI = 5; -int NPC_MISSION = 6; -int NPC_T3_M4 = 7; -int NPC_ZAALBAR = 8; - - -int PARTY_AISTYLE_AGGRESSIVE = 0; -int PARTY_AISTYLE_DEFENSIVE = 1; -int PARTY_AISTYLE_PASSIVE = 2; - -int NPC_AISTYLE_DEFAULT_ATTACK = 0; -int NPC_AISTYLE_RANGED_ATTACK = 1; -int NPC_AISTYLE_MELEE_ATTACK = 2; -int NPC_AISTYLE_AID = 3; -int NPC_AISTYLE_GRENADE_THROWER = 4; -int NPC_AISTYLE_JEDI_SUPPORT = 5; - -int DISGUISE_TYPE_TEST = 1; -int DISGUISE_TYPE_P_T3M3 = 2; -int DISGUISE_TYPE_P_HK47 = 3; -int DISGUISE_TYPE_P_BASTILLA = 4; -int DISGUISE_TYPE_P_CAND = 5; -int DISGUISE_TYPE_P_CARTH = 6; -int DISGUISE_TYPE_P_JOLEE = 7; -int DISGUISE_TYPE_P_JUHANI = 8; -int DISGUISE_TYPE_P_ZAALBAR = 9; -int DISGUISE_TYPE_P_MISSION = 10; -int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; -int DISGUISE_TYPE_N_BITH = 12; -int DISGUISE_TYPE_N_CALONORD = 13; -int DISGUISE_TYPE_N_COMMF = 14; -int DISGUISE_TYPE_N_COMMKIDF = 15; -int DISGUISE_TYPE_N_COMMKIDM = 16; -int DISGUISE_TYPE_N_COMMM = 17; -int DISGUISE_TYPE_N_CZERLAOFF = 18; -int DISGUISE_TYPE_N_DARKJEDIF = 19; -int DISGUISE_TYPE_N_DARKJEDIM = 20; -int DISGUISE_TYPE_N_DARTHMALAK = 21; -int DISGUISE_TYPE_N_DARTHREVAN = 22; -int DISGUISE_TYPE_N_DODONNA = 23; -int DISGUISE_TYPE_N_DUROS = 24; -int DISGUISE_TYPE_N_FATCOMF = 25; -int DISGUISE_TYPE_N_FATCOMM = 26; -int DISGUISE_TYPE_N_SMUGGLER = 27; -int DISGUISE_TYPE_N_SITHSOLDIER = 28; -// int DISGUISE_TYPE_ = 29; -int DISGUISE_TYPE_N_JEDICOUNTF = 30; -int DISGUISE_TYPE_N_JEDICOUNTM = 31; -int DISGUISE_TYPE_N_JEDIMALEK = 32; -int DISGUISE_TYPE_N_JEDIMEMF = 33; -int DISGUISE_TYPE_N_JEDIMEMM = 34; -int DISGUISE_TYPE_N_MANDALORIAN = 35; -int DISGUISE_TYPE_N_RAKATA = 36; -int DISGUISE_TYPE_N_REPOFF = 37; -int DISGUISE_TYPE_N_REPSOLD = 38; -int DISGUISE_TYPE_N_RODIAN = 39; -int DISGUISE_TYPE_C_SELKATH = 40; -int DISGUISE_TYPE_N_SITHAPPREN = 41; -int DISGUISE_TYPE_N_SITHCOMF = 42; -int DISGUISE_TYPE_N_SITHCOMM = 43; -//int DISGUISE_TYPE_N_SITHSOLDIER = 44; -int DISGUISE_TYPE_N_SWOOPGANG = 45; -int DISGUISE_TYPE_N_TUSKEN = 46; -int DISGUISE_TYPE_N_TWILEKF = 47; -int DISGUISE_TYPE_N_TWILEKM = 48; -int DISGUISE_TYPE_N_WALRUSMAN = 49; -int DISGUISE_TYPE_N_WOOKIEF = 50; -int DISGUISE_TYPE_N_WOOKIEM = 51; -int DISGUISE_TYPE_N_YODA = 52; -int DISGUISE_TYPE_C_BANTHA = 53; -int DISGUISE_TYPE_C_BRITH = 54; -int DISGUISE_TYPE_C_DEWBACK = 55; -int DISGUISE_TYPE_C_DRDASSASSIN = 56; -int DISGUISE_TYPE_C_DRDASTRO = 57; -int DISGUISE_TYPE_C_DRDG = 58; -int DISGUISE_TYPE_C_DRDMKFOUR = 59; -int DISGUISE_TYPE_C_DRDMKONE = 60; -int DISGUISE_TYPE_C_DRDMKTWO = 61; -int DISGUISE_TYPE_C_DRDPROBE = 62; -int DISGUISE_TYPE_C_DRDPROT = 63; -int DISGUISE_TYPE_C_DRDSENTRY = 64; -int DISGUISE_TYPE_C_DRDSPYDER = 65; -int DISGUISE_TYPE_C_DRDWAR = 66; -int DISGUISE_TYPE_C_FIRIXA = 67; -int DISGUISE_TYPE_C_GAMMOREAN = 68; -int DISGUISE_TYPE_C_GIZKA = 69; -int DISGUISE_TYPE_C_HUTT = 70; -int DISGUISE_TYPE_C_IRIAZ = 71; -int DISGUISE_TYPE_C_ITHORIAN = 72; -int DISGUISE_TYPE_C_JAWA = 73; -int DISGUISE_TYPE_C_KATAARN = 74; -int DISGUISE_TYPE_C_KHOUNDA = 75; -int DISGUISE_TYPE_C_KHOUNDB = 76; -int DISGUISE_TYPE_C_KRAYTDRAGON = 77; -int DISGUISE_TYPE_C_MYKAL = 78; -int DISGUISE_TYPE_C_RAKGHOUL = 79; -int DISGUISE_TYPE_C_RANCOR = 80; -int DISGUISE_TYPE_C_SEABEAST = 81; -//int DISGUISE_TYPE_ = 82; -int DISGUISE_TYPE_C_TACH = 83; -int DISGUISE_TYPE_C_TWOHEAD = 84; -int DISGUISE_TYPE_C_VERKAAL = 85; -int DISGUISE_TYPE_C_WRAID = 86; -int DISGUISE_TYPE_C_RONTO = 87; -int DISGUISE_TYPE_C_KINRATH = 88; -int DISGUISE_TYPE_C_TUKATA = 89; -int DISGUISE_TYPE_N_TUSKENF = 90; -int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; -int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; -int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; -int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; -int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; -int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; -int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; -int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; -int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; -int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; -int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; -int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; -int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; -int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; -int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; -int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; -int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; -int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; -int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; -int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; -int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; -int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; -int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; -int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; -int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; -int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; -int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; -int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; -int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; -int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; -int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; -int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; -int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; -int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; -int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; -int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; -int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; -int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; -int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; -int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; -int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; -int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; -int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; -int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; -int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; -int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; -int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; -int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; -int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; -int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; -int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; -int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; -int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; -int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; -int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; -int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; -int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; -int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; -int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; -int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; -int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; -int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; -int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; -int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; -int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; -int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; -int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; -int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; -int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; -int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; -int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; -int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; -int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; -int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; -int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; -int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; -int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; -int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; -int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; -int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; -int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; -int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; -int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; -int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; -int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; -int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; -int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; -int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; -int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; -int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; -int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; -int DISGUISE_TYPE_TURRET = 182; -int DISGUISE_TYPE_TURRET2 = 183; -int DISGUISE_TYPE_N_DARTHBAND = 184; -int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; -int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; -int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; -int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; -int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; -int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; -int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; -int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; -int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; -int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; -int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; -int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; -int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; -int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; -int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; -int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; -int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; -int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; -int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; -int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; -int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; -int DISGUISE_TYPE_HUTT_02 = 228; -int DISGUISE_TYPE_HUTT_03 = 229; -int DISGUISE_TYPE_HUTT_04 = 230; -int DISGUISE_TYPE_DROID_ASTRO_02 = 231; -int DISGUISE_TYPE_DROID_ASTRO_03 = 232; -int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; -int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; -int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; -int DISGUISE_TYPE_DROID_WAR_02 = 236; -int DISGUISE_TYPE_DROID_WAR_03 = 237; -int DISGUISE_TYPE_DROID_WAR_04 = 238; -int DISGUISE_TYPE_DROID_WAR_05 = 239; -int DISGUISE_TYPE_GAMMOREAN_02 = 240; -int DISGUISE_TYPE_GAMMOREAN_03 = 241; -int DISGUISE_TYPE_GAMMOREAN_04 = 242; -int DISGUISE_TYPE_ITHORIAN_02 = 243; -int DISGUISE_TYPE_ITHORIAN_03 = 244; -int DISGUISE_TYPE_KATH_HOUND_A02 = 245; -int DISGUISE_TYPE_KATH_HOUND_A03 = 246; -int DISGUISE_TYPE_KATH_HOUND_A04 = 247; -int DISGUISE_TYPE_KATH_HOUND_B02 = 248; -int DISGUISE_TYPE_KATH_HOUND_B03 = 249; -int DISGUISE_TYPE_KATH_HOUND_B04 = 250; -int DISGUISE_TYPE_WRAID_02 = 251; -int DISGUISE_TYPE_WRAID_03 = 252; -int DISGUISE_TYPE_WRAID_04 = 253; -int DISGUISE_TYPE_RAKATA_02 = 254; -int DISGUISE_TYPE_RAKATA_03 = 255; -int DISGUISE_TYPE_RODIAN_02 = 256; -int DISGUISE_TYPE_RODIAN_03 = 257; -int DISGUISE_TYPE_RODIAN_04 = 258; -int DISGUISE_TYPE_SELKATH_02 = 259; -int DISGUISE_TYPE_SELKATH_03 = 260; -int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; -int DISGUISE_TYPE_SWOOP_GANG_02 = 262; -int DISGUISE_TYPE_SWOOP_GANG_03 = 263; -int DISGUISE_TYPE_SWOOP_GANG_04 = 264; -int DISGUISE_TYPE_SWOOP_GANG_05 = 265; -int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; -int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; -int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; -int DISGUISE_TYPE_TWILEK_MALE_02 = 269; -int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; -int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; -int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; -int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; -int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; -int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; -int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; -int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; -int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; -int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; -int DISGUISE_TYPE_YUTHURA_BAN = 280; -int DISGUISE_TYPE_SHYRACK_01 = 281; -int DISGUISE_TYPE_SHYRACK_02 = 282; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; -int DISGUISE_TYPE_SITH_FEM_WHITE = 291; -int DISGUISE_TYPE_SITH_FEM_BLACK = 292; -int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; -int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; -int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; -int DISGUISE_TYPE_SITH_MAL_WHITE = 296; -int DISGUISE_TYPE_SITH_MAL_BLACK = 297; -int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; -int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; -int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; -int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; -int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; -int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; -int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; -int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; -int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; - -int PLOT_O_DOOM = 0; -int PLOT_O_SCARY_STUFF = 1; -int PLOT_O_BIG_MONSTERS = 2; - -int FORMATION_WEDGE = 0; -int FORMATION_LINE = 1; - -int SUBSCREEN_ID_NONE = 0; -int SUBSCREEN_ID_EQUIP = 1; -int SUBSCREEN_ID_ITEM = 2; -int SUBSCREEN_ID_CHARACTER_RECORD = 3; -int SUBSCREEN_ID_ABILITY = 4; -int SUBSCREEN_ID_MAP = 5; -int SUBSCREEN_ID_QUEST = 6; -int SUBSCREEN_ID_OPTIONS = 7; -int SUBSCREEN_ID_MESSAGES = 8; - -int SHIELD_DROID_ENERGY_1 = 0; -int SHIELD_DROID_ENERGY_2 = 1; -int SHIELD_DROID_ENERGY_3 = 2; -int SHIELD_DROID_ENVIRO_1 = 3; -int SHIELD_DROID_ENVIRO_2 = 4; -int SHIELD_DROID_ENVIRO_3 = 5; -int SHIELD_ENERGY = 6; -int SHIELD_ENERGY_SITH = 7; -int SHIELD_ENERGY_ARKANIAN = 8; -int SHIELD_ECHANI = 9; -int SHIELD_MANDALORIAN_MELEE = 10; -int SHIELD_MANDALORIAN_POWER = 11; -int SHIELD_DUELING_ECHANI = 12; -int SHIELD_DUELING_YUSANIS = 13; -int SHIELD_VERPINE_PROTOTYPE = 14; -int SHIELD_ANTIQUE_DROID = 15; -int SHIELD_PLOT_TAR_M09AA = 16; -int SHIELD_PLOT_UNK_M44AA = 17; - -int SUBRACE_NONE = 0; -int SUBRACE_WOOKIE = 1; - -int VIDEO_EFFECT_NONE = -1; -int VIDEO_EFFECT_SECURITY_CAMERA = 0; -int VIDEO_EFFECT_FREELOOK_T3M4 = 1; -int VIDEO_EFFECT_FREELOOK_HK47 = 2; - -int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; -int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; -int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; - -int MOVEMENT_SPEED_PC = 0; -int MOVEMENT_SPEED_IMMOBILE = 1; -int MOVEMENT_SPEED_VERYSLOW = 2; -int MOVEMENT_SPEED_SLOW = 3; -int MOVEMENT_SPEED_NORMAL = 4; -int MOVEMENT_SPEED_FAST = 5; -int MOVEMENT_SPEED_VERYFAST = 6; -int MOVEMENT_SPEED_DEFAULT = 7; -int MOVEMENT_SPEED_DMFAST = 8; - -int LIVE_CONTENT_PKG1 = 1; -int LIVE_CONTENT_PKG2 = 2; -int LIVE_CONTENT_PKG3 = 3; -int LIVE_CONTENT_PKG4 = 4; -int LIVE_CONTENT_PKG5 = 5; -int LIVE_CONTENT_PKG6 = 6; - - -string sLanguage = "nwscript"; - - -// 0: Get an integer between 0 and nMaxInteger-1. -// Return value on error: 0 -int Random(int nMaxInteger); - -// 1: Output sString to the log file. -void PrintString(string sString); - -// 2: Output a formatted float to the log file. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); - -// 3: Convert fFloat into a string. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); - -// 4: Output nInteger to the log file. -void PrintInteger(int nInteger); - -// 5: Output oObject's ID to the log file. -void PrintObject(object oObject); - -// 6: Assign aActionToAssign to oActionSubject. -// * No return value, but if an error occurs, the log file will contain -// "AssignCommand failed." -// (If the object doesn't exist, nothing happens.) -void AssignCommand(object oActionSubject,action aActionToAssign); - -// 7: Delay aActionToDelay by fSeconds. -// * No return value, but if an error occurs, the log file will contain -// "DelayCommand failed.". -void DelayCommand(float fSeconds, action aActionToDelay); - -// 8: Make oTarget run sScript and then return execution to the calling script. -// If sScript does not specify a compiled script, nothing happens. -// - nScriptVar: This value will be returned by calls to GetRunScriptVar. -void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); - -// 9: Clear all the actions of the caller. (This will only work on Creatures) -// * No return value, but if an error occurs, the log file will contain -// "ClearAllActions failed.". -void ClearAllActions(); - -// 10: Cause the caller to face fDirection. -// - fDirection is expressed as anticlockwise degrees from Due East. -// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are -// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -void SetFacing(float fDirection); - -// 11: Switches the main character to a specified NPC -// -1 specifies to switch back to the original PC -int SwitchPlayerCharacter(int nNPC); - -// 12: Set the time to the time specified. -// - nHour should be from 0 to 23 inclusive -// - nMinute should be from 0 to 59 inclusive -// - nSecond should be from 0 to 59 inclusive -// - nMillisecond should be from 0 to 999 inclusive -// 1) Time can only be advanced forwards; attempting to set the time backwards -// will result in the day advancing and then the time being set to that -// specified, e.g. if the current hour is 15 and then the hour is set to 3, -// the day will be advanced by 1 and the hour will be set to 3. -// 2) If values larger than the max hour, minute, second or millisecond are -// specified, they will be wrapped around and the overflow will be used to -// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds -// and 10 milliseconds will result in the calendar day being advanced by 2 -// and the time being set to 18 hours, 10 minutes, 10 milliseconds. -void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); - -// 13: Sets (by NPC constant) which party member should be the controlled -// character -int SetPartyLeader(int nNPC); - -// 14: Sets whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -void SetAreaUnescapable(int bUnescapable); - -// 15: Returns whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -int GetAreaUnescapable(); - -// 16: Get the current hour. -int GetTimeHour(); - -// 17: Get the current minute -int GetTimeMinute(); - -// 18: Get the current second -int GetTimeSecond(); - -// 19: Get the current millisecond -int GetTimeMillisecond(); - -// 20: The action subject will generate a random location near its current location -// and pathfind to it. All commands will remove a RandomWalk() from the action -// queue if there is one in place. -// * No return value, but if an error occurs the log file will contain -// "ActionRandomWalk failed." -void ActionRandomWalk(); - -// 21: The action subject will move to lDestination. -// - lDestination: The object will move to this location. If the location is -// invalid or a path cannot be found to it, the command does nothing. -// - bRun: If this is TRUE, the action subject will run rather than walk -// * No return value, but if an error occurs the log file will contain -// "MoveToPoint failed." -void ActionMoveToLocation(location lDestination, int bRun=FALSE); - -// 22: Cause the action subject to move to a certain distance from oMoveTo. -// If there is no path to oMoveTo, this command will do nothing. -// - oMoveTo: This is the object we wish the action subject to move to -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fRange: This is the desired distance between the action subject and oMoveTo -// * No return value, but if an error occurs the log file will contain -// "ActionMoveToObject failed." -void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); - -// 23: Cause the action subject to move to a certain distance away from oFleeFrom. -// - oFleeFrom: This is the object we wish the action subject to move away from. -// If oFleeFrom is not in the same area as the action subject, nothing will -// happen. -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fMoveAwayRange: This is the distance we wish the action subject to put -// between themselves and oFleeFrom -// * No return value, but if an error occurs the log file will contain -// "ActionMoveAwayFromObject failed." -void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 24: Get the area that oTarget is currently in -// * Return value on error: OBJECT_INVALID -object GetArea(object oTarget); - -// 25: The value returned by this function depends on the object type of the caller: -// 1) If the caller is a door or placeable it returns the object that last -// triggered it. -// 2) If the caller is a trigger, area of effect, module, area or encounter it -// returns the object that last entered it. -// * Return value on error: OBJECT_INVALID -object GetEnteringObject(); - -// 26: Get the object that last left the caller. This function works on triggers, -// areas of effect, modules, areas and encounters. -// * Return value on error: OBJECT_INVALID -object GetExitingObject(); - -// 27: Get the position of oTarget -// * Return value on error: vector (0.0f, 0.0f, 0.0f) -vector GetPosition(object oTarget); - -// 28: Get the direction in which oTarget is facing, expressed as a float between -// 0.0f and 360.0f -// * Return value on error: -1.0f -float GetFacing(object oTarget); - -// 29: Get the possessor of oItem -// * Return value on error: OBJECT_INVALID -object GetItemPossessor(object oItem); - -// 30: Get the object possessed by oCreature with the tag sItemTag -// * Return value on error: OBJECT_INVALID -object GetItemPossessedBy(object oCreature, string sItemTag); - -// 31: Create an item with the template sItemTemplate in oTarget's inventory. -// - nStackSize: This is the stack size of the item to be created -// * Return value: The object that has been created. On error, this returns -// OBJECT_INVALID. -object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); - -// 32: Equip oItem into nInventorySlot. -// - nInventorySlot: INVENTORY_SLOT_* -// * No return value, but if an error occurs the log file will contain -// "ActionEquipItem failed." -void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); - -// 33: Unequip oItem from whatever slot it is currently in. -void ActionUnequipItem( object oItem, int bInstant = FALSE ); - -// 34: Pick up oItem from the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPickUpItem failed." -void ActionPickUpItem(object oItem); - -// 35: Put down oItem on the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPutDownItem failed." -void ActionPutDownItem(object oItem); - -// 36: Get the last attacker of oAttackee. This should only be used ONLY in the -// OnAttacked events for creatures, placeables and doors. -// * Return value on error: OBJECT_INVALID -object GetLastAttacker(object oAttackee=OBJECT_SELF); - -// 37: Attack oAttackee. -// - bPassive: If this is TRUE, attack is in passive mode. -void ActionAttack(object oAttackee, int bPassive=FALSE); - -// 38: Get the creature nearest to oTarget, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -effect EffectResurrection(); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: 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. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -void AdjustAlignment(object oSubject, int nAlignment, int nShift); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -int GetIsInCombat(object oCreature=OBJECT_SELF); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -void ShowUpgradeScreen(object oItem = OBJECT_INVALID); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef); - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 0 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 0 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 0 and 0 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 0 and 0 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); - -// 768. IsMoviePlaying -// Checks if a movie is currently playing. -int IsMoviePlaying(); - -// 769. QueueMovie -// Queues up a movie to be played using PlayMovieQueue. -// If bSkippable is TRUE, the player can cancel the movie by hitting escape. -// If bSkippable is FALSE, the player cannot cancel the movie and must wait -// for it to finish playing. -void QueueMovie( string sMovie, int bSkippable ); - -// 770. PlayMovieQueue -// Plays the movies that have been added to the queue by QueueMovie -// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only -// cancels out of the currently playing movie rather than the entire queue -// of movies (assuming the currently playing movie is flagged as skippable). -// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled -// if the player hits escape (assuming the currently playing movie is flagged -// as skippable). -void PlayMovieQueue( int bAllowSeparateSkips ); - -// 771. YavinHackCloseDoor -// This is an incredibly hacky function to allow the doors to be properly -// closed on Yavin without running into the problems we've had. It is too -// late in development to fix it correctly, so thus we do this. Life is -// hard. You'll get over it -void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/K1/nwnnsscomp/KScript/nwscript-tsl.nss b/K1/nwnnsscomp/KScript/nwscript-tsl.nss deleted file mode 100644 index 94e753a63..000000000 --- a/K1/nwnnsscomp/KScript/nwscript-tsl.nss +++ /dev/null @@ -1,6325 +0,0 @@ -//////////////////////////////////////////////////////// -// -// NWScript -// -// The list of actions and pre-defined constants. -// -// (c) BioWare Corp, 1999 -// -//////////////////////////////////////////////////////// - -#define ENGINE_NUM_STRUCTURES 4 -#define ENGINE_STRUCTURE_0 effect -#define ENGINE_STRUCTURE_1 event -#define ENGINE_STRUCTURE_2 location -#define ENGINE_STRUCTURE_3 talent - -// Constants - -int NUM_INVENTORY_SLOTS = 20; - -int TRUE = 1; -int FALSE = 0; - -float DIRECTION_EAST = 0.0; -float DIRECTION_NORTH = 90.0; -float DIRECTION_WEST = 180.0; -float DIRECTION_SOUTH = 270.0; -float PI = 3.141592; - -int ATTITUDE_NEUTRAL = 0; -int ATTITUDE_AGGRESSIVE = 1; -int ATTITUDE_DEFENSIVE = 2; -int ATTITUDE_SPECIAL = 3; - -int TALKVOLUME_TALK = 0; -int TALKVOLUME_WHISPER = 1; -int TALKVOLUME_SHOUT = 2; -int TALKVOLUME_SILENT_TALK = 3; -int TALKVOLUME_SILENT_SHOUT = 4; - -int INVENTORY_SLOT_HEAD = 0; -int INVENTORY_SLOT_BODY = 1; -int INVENTORY_SLOT_HANDS = 3; -int INVENTORY_SLOT_RIGHTWEAPON = 4; -int INVENTORY_SLOT_LEFTWEAPON = 5; -int INVENTORY_SLOT_LEFTARM = 7; -int INVENTORY_SLOT_RIGHTARM = 8; -int INVENTORY_SLOT_IMPLANT = 9; -int INVENTORY_SLOT_BELT = 10; -int INVENTORY_SLOT_CWEAPON_L = 14; -int INVENTORY_SLOT_CWEAPON_R = 15; -int INVENTORY_SLOT_CWEAPON_B = 16; -int INVENTORY_SLOT_CARMOUR = 17; -int INVENTORY_SLOT_RIGHTWEAPON2= 18; -int INVENTORY_SLOT_LEFTWEAPON2 = 19; - -//Effect type constants -int DURATION_TYPE_INSTANT = 0; -int DURATION_TYPE_TEMPORARY = 1; -int DURATION_TYPE_PERMANENT = 2; - -int SUBTYPE_MAGICAL = 8; -int SUBTYPE_SUPERNATURAL = 16; -int SUBTYPE_EXTRAORDINARY = 24; - -int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp -int ABILITY_DEXTERITY = 1; -int ABILITY_CONSTITUTION = 2; -int ABILITY_INTELLIGENCE = 3; -int ABILITY_WISDOM = 4; -int ABILITY_CHARISMA = 5; - -int SHAPE_SPELLCYLINDER = 0; -int SHAPE_CONE = 1; -int SHAPE_CUBE = 2; -int SHAPE_SPELLCONE = 3; -int SHAPE_SPHERE = 4; - -int OBJECT_TYPE_CREATURE = 1; -int OBJECT_TYPE_ITEM = 2; -int OBJECT_TYPE_TRIGGER = 4; -int OBJECT_TYPE_DOOR = 8; -int OBJECT_TYPE_AREA_OF_EFFECT = 16; -int OBJECT_TYPE_WAYPOINT = 32; -int OBJECT_TYPE_PLACEABLE = 64; -int OBJECT_TYPE_STORE = 128; -int OBJECT_TYPE_ENCOUNTER = 256; -int OBJECT_TYPE_SOUND = 512; -int OBJECT_TYPE_ALL = 32767; - -int OBJECT_TYPE_INVALID = 32767; - -int GENDER_MALE = 0; -int GENDER_FEMALE = 1; -int GENDER_BOTH = 2; -int GENDER_OTHER = 3; -int GENDER_NONE = 4; - -int DAMAGE_TYPE_BLUDGEONING = 1; -int DAMAGE_TYPE_PIERCING = 2; -int DAMAGE_TYPE_SLASHING = 4; -int DAMAGE_TYPE_UNIVERSAL = 8; -int DAMAGE_TYPE_ACID = 16; -int DAMAGE_TYPE_COLD = 32; -int DAMAGE_TYPE_LIGHT_SIDE = 64; -int DAMAGE_TYPE_ELECTRICAL = 128; -int DAMAGE_TYPE_FIRE = 256; -int DAMAGE_TYPE_DARK_SIDE = 512; -int DAMAGE_TYPE_SONIC = 1024; -int DAMAGE_TYPE_ION = 2048; -int DAMAGE_TYPE_BLASTER = 4096; - -// Special versus flag just for AC effects -int AC_VS_DAMAGE_TYPE_ALL = 8199; - -int DAMAGE_BONUS_1 = 1; -int DAMAGE_BONUS_2 = 2; -int DAMAGE_BONUS_3 = 3; -int DAMAGE_BONUS_4 = 4; -int DAMAGE_BONUS_5 = 5; -int DAMAGE_BONUS_1d4 = 6; -int DAMAGE_BONUS_1d6 = 7; -int DAMAGE_BONUS_1d8 = 8; -int DAMAGE_BONUS_1d10 = 9; -int DAMAGE_BONUS_2d6 = 10; - -int DAMAGE_POWER_NORMAL = 0; -int DAMAGE_POWER_PLUS_ONE = 1; -int DAMAGE_POWER_PLUS_TWO = 2; -int DAMAGE_POWER_PLUS_THREE = 3; -int DAMAGE_POWER_PLUS_FOUR = 4; -int DAMAGE_POWER_PLUS_FIVE = 5; -int DAMAGE_POWER_ENERGY = 6; - -int ATTACK_BONUS_MISC = 0; -int ATTACK_BONUS_ONHAND = 1; -int ATTACK_BONUS_OFFHAND = 2; - -int AC_DODGE_BONUS = 0; -int AC_NATURAL_BONUS = 1; -int AC_ARMOUR_ENCHANTMENT_BONUS = 2; -int AC_SHIELD_ENCHANTMENT_BONUS = 3; -int AC_DEFLECTION_BONUS = 4; - -int DOOR_ACTION_OPEN = 0; -int DOOR_ACTION_UNLOCK = 1; -int DOOR_ACTION_BASH = 2; -int DOOR_ACTION_IGNORE = 3; -int DOOR_ACTION_KNOCK = 4; - -int PLACEABLE_ACTION_USE = 0; -int PLACEABLE_ACTION_UNLOCK = 1; -int PLACEABLE_ACTION_BASH = 2; -int PLACEABLE_ACTION_KNOCK = 4; - - -int RACIAL_TYPE_UNKNOWN = 0; -int RACIAL_TYPE_ELF = 1; -int RACIAL_TYPE_GNOME = 2; -int RACIAL_TYPE_HALFLING = 3; -int RACIAL_TYPE_HALFELF = 4; -int RACIAL_TYPE_DROID = 5; -int RACIAL_TYPE_HUMAN = 6; -int RACIAL_TYPE_ALL = 7; -int RACIAL_TYPE_INVALID = 8; - -int ALIGNMENT_ALL = 0; -int ALIGNMENT_NEUTRAL = 1; -int ALIGNMENT_LIGHT_SIDE = 2; -int ALIGNMENT_DARK_SIDE = 3; - -int SAVING_THROW_ALL = 0; -int SAVING_THROW_FORT = 1; -int SAVING_THROW_REFLEX = 2; -int SAVING_THROW_WILL = 3; - -int SAVING_THROW_TYPE_ALL = 0; -int SAVING_THROW_TYPE_NONE = 0; -int SAVING_THROW_TYPE_ACID = 1; -int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; -int SAVING_THROW_TYPE_COLD = 3; -int SAVING_THROW_TYPE_DEATH = 4; -int SAVING_THROW_TYPE_DISEASE = 5; -int SAVING_THROW_TYPE_LIGHT_SIDE = 6; -int SAVING_THROW_TYPE_ELECTRICAL = 7; -int SAVING_THROW_TYPE_FEAR = 8; -int SAVING_THROW_TYPE_FIRE = 9; -int SAVING_THROW_TYPE_MIND_AFFECTING = 10; -int SAVING_THROW_TYPE_DARK_SIDE = 11; -int SAVING_THROW_TYPE_POISON = 12; -int SAVING_THROW_TYPE_SONIC = 13; -int SAVING_THROW_TYPE_TRAP = 14; -int SAVING_THROW_TYPE_FORCE_POWER = 15; -int SAVING_THROW_TYPE_ION = 16; -int SAVING_THROW_TYPE_BLASTER = 17; -int SAVING_THROW_TYPE_PARALYSIS = 18; - -int IMMUNITY_TYPE_NONE = 0; -int IMMUNITY_TYPE_MIND_SPELLS = 1; -int IMMUNITY_TYPE_POISON = 2; -int IMMUNITY_TYPE_DISEASE = 3; -int IMMUNITY_TYPE_FEAR = 4; -int IMMUNITY_TYPE_TRAP = 5; -int IMMUNITY_TYPE_PARALYSIS = 6; -int IMMUNITY_TYPE_BLINDNESS = 7; -int IMMUNITY_TYPE_DEAFNESS = 8; -int IMMUNITY_TYPE_SLOW = 9; -int IMMUNITY_TYPE_ENTANGLE = 10; -int IMMUNITY_TYPE_SILENCE = 11; -int IMMUNITY_TYPE_STUN = 12; -int IMMUNITY_TYPE_SLEEP = 13; -int IMMUNITY_TYPE_CHARM = 14; -int IMMUNITY_TYPE_DOMINATE = 15; -int IMMUNITY_TYPE_CONFUSED = 16; -int IMMUNITY_TYPE_CURSED = 17; -int IMMUNITY_TYPE_DAZED = 18; -int IMMUNITY_TYPE_ABILITY_DECREASE = 19; -int IMMUNITY_TYPE_ATTACK_DECREASE = 20; -int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; -int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; -int IMMUNITY_TYPE_AC_DECREASE = 23; -int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; -int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; -int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; -int IMMUNITY_TYPE_SKILL_DECREASE = 27; -int IMMUNITY_TYPE_KNOCKDOWN = 28; -int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; -int IMMUNITY_TYPE_SNEAK_ATTACK = 30; -int IMMUNITY_TYPE_CRITICAL_HIT = 31; -int IMMUNITY_TYPE_DEATH = 32; -int IMMUNITY_TYPE_DROID_CONFUSED = 33; - -int AREA_TRANSITION_RANDOM = 0; -int AREA_TRANSITION_USER_DEFINED = 1; -int AREA_TRANSITION_CITY_01 = 2; -int AREA_TRANSITION_CITY_02 = 3; -int AREA_TRANSITION_CITY_03 = 4; -int AREA_TRANSITION_CITY_04 = 5; -int AREA_TRANSITION_CITY_05 = 6; -int AREA_TRANSITION_CRYPT_01 = 7; -int AREA_TRANSITION_CRYPT_02 = 8; -int AREA_TRANSITION_CRYPT_03 = 9; -int AREA_TRANSITION_CRYPT_04 = 10; -int AREA_TRANSITION_CRYPT_05 = 11; -int AREA_TRANSITION_DUNGEON_01 = 12; -int AREA_TRANSITION_DUNGEON_02 = 13; -int AREA_TRANSITION_DUNGEON_03 = 14; -int AREA_TRANSITION_DUNGEON_04 = 15; -int AREA_TRANSITION_DUNGEON_05 = 16; -int AREA_TRANSITION_DUNGEON_06 = 17; -int AREA_TRANSITION_DUNGEON_07 = 18; -int AREA_TRANSITION_DUNGEON_08 = 19; -int AREA_TRANSITION_MINES_01 = 20; -int AREA_TRANSITION_MINES_02 = 21; -int AREA_TRANSITION_MINES_03 = 22; -int AREA_TRANSITION_MINES_04 = 23; -int AREA_TRANSITION_MINES_05 = 24; -int AREA_TRANSITION_MINES_06 = 25; -int AREA_TRANSITION_MINES_07 = 26; -int AREA_TRANSITION_MINES_08 = 27; -int AREA_TRANSITION_MINES_09 = 28; -int AREA_TRANSITION_SEWER_01 = 29; -int AREA_TRANSITION_SEWER_02 = 30; -int AREA_TRANSITION_SEWER_03 = 31; -int AREA_TRANSITION_SEWER_04 = 32; -int AREA_TRANSITION_SEWER_05 = 33; -int AREA_TRANSITION_CASTLE_01 = 34; -int AREA_TRANSITION_CASTLE_02 = 35; -int AREA_TRANSITION_CASTLE_03 = 36; -int AREA_TRANSITION_CASTLE_04 = 37; -int AREA_TRANSITION_CASTLE_05 = 38; -int AREA_TRANSITION_CASTLE_06 = 39; -int AREA_TRANSITION_CASTLE_07 = 40; -int AREA_TRANSITION_CASTLE_08 = 41; -int AREA_TRANSITION_INTERIOR_01 = 42; -int AREA_TRANSITION_INTERIOR_02 = 43; -int AREA_TRANSITION_INTERIOR_03 = 44; -int AREA_TRANSITION_INTERIOR_04 = 45; -int AREA_TRANSITION_INTERIOR_05 = 46; -int AREA_TRANSITION_INTERIOR_06 = 47; -int AREA_TRANSITION_INTERIOR_07 = 48; -int AREA_TRANSITION_INTERIOR_08 = 49; -int AREA_TRANSITION_INTERIOR_09 = 50; -int AREA_TRANSITION_INTERIOR_10 = 51; -int AREA_TRANSITION_INTERIOR_11 = 52; -int AREA_TRANSITION_INTERIOR_12 = 53; -int AREA_TRANSITION_INTERIOR_13 = 54; -int AREA_TRANSITION_INTERIOR_14 = 55; -int AREA_TRANSITION_INTERIOR_15 = 56; -int AREA_TRANSITION_INTERIOR_16 = 57; -int AREA_TRANSITION_FOREST_01 = 58; -int AREA_TRANSITION_FOREST_02 = 59; -int AREA_TRANSITION_FOREST_03 = 60; -int AREA_TRANSITION_FOREST_04 = 61; -int AREA_TRANSITION_FOREST_05 = 62; -int AREA_TRANSITION_RURAL_01 = 63; -int AREA_TRANSITION_RURAL_02 = 64; -int AREA_TRANSITION_RURAL_03 = 65; -int AREA_TRANSITION_RURAL_04 = 66; -int AREA_TRANSITION_RURAL_05 = 67; - -// Legacy area-transition constants. Do not delete these. -int AREA_TRANSITION_CITY = 2; -int AREA_TRANSITION_CRYPT = 7; -int AREA_TRANSITION_FOREST = 58; -int AREA_TRANSITION_RURAL = 63; - -// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. -int BODY_NODE_HAND = 0; -int BODY_NODE_CHEST = 1; -int BODY_NODE_HEAD = 2; -// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The -// nodes used with be 'lhand' and 'rhand'. -int BODY_NODE_HAND_LEFT = 3; -int BODY_NODE_HAND_RIGHT = 4; - -float RADIUS_SIZE_SMALL = 1.67f; -float RADIUS_SIZE_MEDIUM = 3.33f; -float RADIUS_SIZE_LARGE = 5.0f; -float RADIUS_SIZE_HUGE = 6.67f; -float RADIUS_SIZE_GARGANTUAN = 8.33f; -float RADIUS_SIZE_COLOSSAL = 10.0f; - -// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType -int EFFECT_TYPE_INVALIDEFFECT = 0; -int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; -//int EFFECT_TYPE_ABILITY_BONUS = 2; -int EFFECT_TYPE_REGENERATE = 3; -//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; -//int EFFECT_TYPE_MODIFY_AC = 5; -//int EFFECT_TYPE_ATTACK_BONUS = 6; -int EFFECT_TYPE_DAMAGE_REDUCTION = 7; -//int EFFECT_TYPE_DAMAGE_BONUS = 8; -int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; -//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; -int EFFECT_TYPE_ENTANGLE = 11; -int EFFECT_TYPE_INVULNERABLE = 12; -int EFFECT_TYPE_DEAF = 13; -int EFFECT_TYPE_RESURRECTION = 14; -int EFFECT_TYPE_IMMUNITY = 15; -//int EFFECT_TYPE_BLIND = 16; -int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; -int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; -//int EFFECT_TYPE_MOVEMENT_SPEED = 19; -int EFFECT_TYPE_AREA_OF_EFFECT = 20; -int EFFECT_TYPE_BEAM = 21; -//int EFFECT_TYPE_FORCE_RESISTANCE = 22; -int EFFECT_TYPE_CHARMED = 23; -int EFFECT_TYPE_CONFUSED = 24; -int EFFECT_TYPE_FRIGHTENED = 25; -int EFFECT_TYPE_DOMINATED = 26; -int EFFECT_TYPE_PARALYZE = 27; -int EFFECT_TYPE_DAZED = 28; -int EFFECT_TYPE_STUNNED = 29; -int EFFECT_TYPE_SLEEP = 30; -int EFFECT_TYPE_POISON = 31; -int EFFECT_TYPE_DISEASE = 32; -int EFFECT_TYPE_CURSE = 33; -int EFFECT_TYPE_SILENCE = 34; -int EFFECT_TYPE_TURNED = 35; -int EFFECT_TYPE_HASTE = 36; -int EFFECT_TYPE_SLOW = 37; -int EFFECT_TYPE_ABILITY_INCREASE = 38; -int EFFECT_TYPE_ABILITY_DECREASE = 39; -int EFFECT_TYPE_ATTACK_INCREASE = 40; -int EFFECT_TYPE_ATTACK_DECREASE = 41; -int EFFECT_TYPE_DAMAGE_INCREASE = 42; -int EFFECT_TYPE_DAMAGE_DECREASE = 43; -int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; -int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; -int EFFECT_TYPE_AC_INCREASE = 46; -int EFFECT_TYPE_AC_DECREASE = 47; -int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; -int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; -int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; -int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; -int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; -int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; -int EFFECT_TYPE_SKILL_INCREASE = 54; -int EFFECT_TYPE_SKILL_DECREASE = 55; -int EFFECT_TYPE_INVISIBILITY = 56; -int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; -int EFFECT_TYPE_DARKNESS = 58; -int EFFECT_TYPE_DISPELMAGICALL = 59; -int EFFECT_TYPE_ELEMENTALSHIELD = 60; -int EFFECT_TYPE_NEGATIVELEVEL = 61; -int EFFECT_TYPE_DISGUISE = 62; -int EFFECT_TYPE_SANCTUARY = 63; -int EFFECT_TYPE_TRUESEEING = 64; -int EFFECT_TYPE_SEEINVISIBLE = 65; -int EFFECT_TYPE_TIMESTOP = 66; -int EFFECT_TYPE_BLINDNESS = 67; -int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; -int EFFECT_TYPE_DISPELMAGICBEST = 69; -int EFFECT_TYPE_ULTRAVISION = 70; -int EFFECT_TYPE_MISS_CHANCE = 71; -int EFFECT_TYPE_CONCEALMENT = 72; -int EFFECT_TYPE_SPELL_IMMUNITY = 73; -int EFFECT_TYPE_ASSUREDHIT = 74; -int EFFECT_TYPE_VISUAL = 75; -int EFFECT_TYPE_LIGHTSABERTHROW = 76; -int EFFECT_TYPE_FORCEJUMP = 77; -int EFFECT_TYPE_ASSUREDDEFLECTION = 78; -int EFFECT_TYPE_DROID_CONFUSED = 79; -int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 -int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 - - -int ITEM_PROPERTY_ABILITY_BONUS = 0 ; -int ITEM_PROPERTY_AC_BONUS = 1 ; -int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; -int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; -int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; -int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; -int ITEM_PROPERTY_BONUS_FEAT = 9 ; -int ITEM_PROPERTY_ACTIVATE_ITEM = 10; -int ITEM_PROPERTY_DAMAGE_BONUS = 11; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; -int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; -int ITEM_PROPERTY_DECREASED_DAMAGE = 15; -int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; -int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; -int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; -int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; -int ITEM_PROPERTY_DECREASED_AC = 20; -int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; -int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; -int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; -int ITEM_PROPERTY_IMMUNITY = 24; -int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; -int ITEM_PROPERTY_KEEN = 28; -int ITEM_PROPERTY_LIGHT = 29; -int ITEM_PROPERTY_MIGHTY = 30; -int ITEM_PROPERTY_NO_DAMAGE = 31; -int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; -int ITEM_PROPERTY_REGENERATION = 35; -int ITEM_PROPERTY_SKILL_BONUS = 36; -int ITEM_PROPERTY_SECURITY_SPIKE = 37; -int ITEM_PROPERTY_ATTACK_BONUS = 38; -int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; -int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; -int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; -int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; -int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; -int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; -int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; -int ITEM_PROPERTY_TRAP = 46; -int ITEM_PROPERTY_TRUE_SEEING = 47; -int ITEM_PROPERTY_ON_MONSTER_HIT = 48; -int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; -int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; -int ITEM_PROPERTY_MONSTER_DAMAGE = 51; -int ITEM_PROPERTY_SPECIAL_WALK = 52; -int ITEM_PROPERTY_COMPUTER_SPIKE = 53; -int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; -int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; -int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; -int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code -int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; -int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; -int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; -int ITEM_PROPERTY_DAMPEN_SOUND = 63; -int ITEM_PROPERTY_DOORCUTTING = 64; -int ITEM_PROPERTY_DOORSABERING = 65; - -int BASE_ITEM_QUARTER_STAFF = 0; -int BASE_ITEM_STUN_BATON = 1; -int BASE_ITEM_LONG_SWORD = 2; -int BASE_ITEM_VIBRO_SWORD = 3; -int BASE_ITEM_SHORT_SWORD = 4; -int BASE_ITEM_VIBRO_BLADE = 5; -int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; -int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; -int BASE_ITEM_LIGHTSABER = 8; -int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; -int BASE_ITEM_SHORT_LIGHTSABER = 10; -int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; -int BASE_ITEM_BLASTER_PISTOL = 12; -int BASE_ITEM_HEAVY_BLASTER = 13; -int BASE_ITEM_HOLD_OUT_BLASTER = 14; -int BASE_ITEM_ION_BLASTER = 15; -int BASE_ITEM_DISRUPTER_PISTOL = 16; -int BASE_ITEM_SONIC_PISTOL = 17; -int BASE_ITEM_ION_RIFLE = 18; -int BASE_ITEM_BOWCASTER = 19; -int BASE_ITEM_BLASTER_CARBINE = 20; -int BASE_ITEM_DISRUPTER_RIFLE = 21; -int BASE_ITEM_SONIC_RIFLE = 22; -int BASE_ITEM_REPEATING_BLASTER = 23; -int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; -int BASE_ITEM_FRAGMENTATION_GRENADES = 25; -int BASE_ITEM_STUN_GRENADES = 26; -int BASE_ITEM_THERMAL_DETONATOR = 27; -int BASE_ITEM_POISON_GRENADE = 28; -int BASE_ITEM_FLASH_GRENADE = 29; -int BASE_ITEM_SONIC_GRENADE = 30; -int BASE_ITEM_ADHESIVE_GRENADE = 31; -int BASE_ITEM_CRYOBAN_GRENADE = 32; -int BASE_ITEM_FIRE_GRENADE = 33; -int BASE_ITEM_ION_GRENADE = 34; -int BASE_ITEM_JEDI_ROBE = 35; -int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; -int BASE_ITEM_JEDI_MASTER_ROBE = 37; -int BASE_ITEM_ARMOR_CLASS_4 = 38; -int BASE_ITEM_ARMOR_CLASS_5 = 39; -int BASE_ITEM_ARMOR_CLASS_6 = 40; -int BASE_ITEM_ARMOR_CLASS_7 = 41; -int BASE_ITEM_ARMOR_CLASS_8 = 42; -int BASE_ITEM_ARMOR_CLASS_9 = 43; -int BASE_ITEM_MASK = 44; -int BASE_ITEM_GAUNTLETS = 45; -int BASE_ITEM_FOREARM_BANDS = 46; -int BASE_ITEM_BELT = 47; -int BASE_ITEM_IMPLANT_1 = 48; -int BASE_ITEM_IMPLANT_2 = 49; -int BASE_ITEM_IMPLANT_3 = 50; -int BASE_ITEM_DATA_PAD = 52; -int BASE_ITEM_ADRENALINE = 53; -int BASE_ITEM_COMBAT_SHOTS = 54; -int BASE_ITEM_MEDICAL_EQUIPMENT = 55; -int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; -int BASE_ITEM_CREDITS = 57; -int BASE_ITEM_TRAP_KIT = 58; -int BASE_ITEM_SECURITY_SPIKES = 59; -int BASE_ITEM_PROGRAMMING_SPIKES = 60; -int BASE_ITEM_GLOW_ROD = 61; -int BASE_ITEM_COLLAR_LIGHT = 62; -int BASE_ITEM_TORCH = 63; -int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; -int BASE_ITEM_AESTHETIC_ITEM = 65; -int BASE_ITEM_DROID_LIGHT_PLATING = 66; -int BASE_ITEM_DROID_MEDIUM_PLATING = 67; -int BASE_ITEM_DROID_HEAVY_PLATING = 68; -int BASE_ITEM_DROID_SEARCH_SCOPE = 69; -int BASE_ITEM_DROID_MOTION_SENSORS = 70; -int BASE_ITEM_DROID_SONIC_SENSORS = 71; -int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; -int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; -int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; -int BASE_ITEM_DROID_SHIELD = 75; -int BASE_ITEM_DROID_UTILITY_DEVICE = 76; -int BASE_ITEM_BLASTER_RIFLE = 77; -int BASE_ITEM_GHAFFI_STICK = 78; -int BASE_ITEM_WOOKIE_WARBLADE = 79; -int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; -int BASE_ITEM_CREATURE_ITEM_SLASH = 81; -int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; -int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; -int BASE_ITEM_CREATURE_HIDE_ITEM = 84; -int BASE_ITEM_BASIC_CLOTHING = 85; -int BASE_ITEM_WRIST_LAUNCHER = 91; -int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 - -int BASE_ITEM_INVALID = 256; - - -// AMF: These constants define attack results -int ATTACK_RESULT_INVALID = 0; -int ATTACK_RESULT_HIT_SUCCESSFUL = 1; -int ATTACK_RESULT_CRITICAL_HIT = 2; -int ATTACK_RESULT_AUTOMATIC_HIT = 3; - -int ATTACK_RESULT_MISS = 4; -int ATTACK_RESULT_ATTACK_RESISTED = 5; -int ATTACK_RESULT_ATTACK_FAILED = 6; - -int ATTACK_RESULT_PARRIED = 8; -int ATTACK_RESULT_DEFLECTED = 9; - - -// these match the constants in visualeffects.2da -int VFX_NONE = -1; - -int VFX_IMP_HEALING_SMALL = 1001; -int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; -int VFX_PRO_AFFLICT = 1003; -int VFX_IMP_CHOKE = 1004; -int VFX_IMP_CURE = 1005; -int VFX_PRO_DEATH_FIELD = 1006; -int VFX_PRO_DROID_DISABLE = 1007; -int VFX_PRO_DROID_KILL = 1008; -int VFX_PRO_DRAIN = 1009; -int VFX_PRO_FORCE_ARMOR = 1010; -int VFX_PRO_FORCE_AURA = 1011; -int VFX_IMP_FORCE_BREACH = 1012; -int VFX_IMP_FORCE_PUSH = 1014; -int VFX_PRO_FORCE_SHIELD = 1015; -int VFX_IMP_FORCE_WAVE = 1017; -int VFX_IMP_FORCE_WHIRLWIND = 1018; -int VFX_IMP_HEAL = 1019; -int VFX_IMP_SPEED_KNIGHT = 1020; -int VFX_PRO_LIGHTNING_L = 1021; -int VFX_IMP_SPEED_MASTERY = 1022; -int VFX_PRO_RESIST_ELEMENTS = 1025; -int VFX_PRO_RESIST_FORCE = 1026; -int VFX_PRO_RESIST_POISON = 1027; -int VFX_PRO_LIGHTNING_S = 1028; -int VFX_IMP_MIND_FORCE = 1031; -int VFX_IMP_SUPPRESS_FORCE = 1032; -int VFX_IMP_MIND_KINIGHT = 1033; -int VFX_IMP_MIND_MASTERY = 1034; -int VFX_PRO_LIGHTNING_JEDI = 1035; -int VFX_PRO_LIGHTNING_L_SOUND = 1036; -int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; -int VFX_IMP_FLAME = 1039; -int VFX_IMP_STUN = 1040; - -int VFX_DUR_STEALTH_PULSE = 2000; -int VFX_DUR_INVISIBILITY = 2001; -int VFX_DUR_SPEED = 2004; -int VFX_DUR_FORCE_WHIRLWIND = 2007; -int VFX_DUR_HOLD = 2008; -int VFX_DUR_BODY_FUAL = 2024; -int VFX_DUR_PSYCHIC_STATIC = 2025; -int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; -int VFX_BEAM_DROID_DISABLE = 2027; -int VFX_BEAM_DROID_DESTROY = 2028; -int VFX_BEAM_DRAIN_LIFE = 2029; -int VFX_DUR_KNIGHTS_SPEED = 2031; -int VFX_DUR_SHIELD_RED_MARK_I = 2032; -int VFX_DUR_SHIELD_RED_MARK_II = 2034; -int VFX_DUR_SHIELD_RED_MARK_IV = 2035; -int VFX_BEAM_LIGHTNING_DARK_S = 2037; -int VFX_BEAM_LIGHTNING_DARK_L = 2038; -int VFX_DUR_SHIELD_BLUE_01 = 2040; -int VFX_DUR_SHIELD_BLUE_02 = 2041; -int VFX_DUR_SHIELD_BLUE_03 = 2042; -int VFX_DUR_SHIELD_BLUE_04 = 2043; -int VFX_DUR_SHIELD_GREEN_01 = 2044; -int VFX_DUR_SHIELD_RED_01 = 2045; -int VFX_DUR_SHIELD_RED_02 = 2046; -int VFX_DUR_SHIELD_CHROME_01 = 2047; -int VFX_DUR_SHIELD_CHROME_02 = 2048; -int VFX_BEAM_ION_RAY_01 = 2049; -int VFX_BEAM_ION_RAY_02 = 2050; -int VFX_BEAM_COLD_RAY = 2051; -int VFX_BEAM_STUN_RAY = 2052; -int VFX_BEAM_FLAME_SPRAY = 2053; -int VFX_DUR_CARBONITE_ENCASING = 2054; -int VFX_DUR_CARBONITE_CHUNKS = 2055; -int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; -int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; -int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; -int VFX_DUR_ELECTRICAL_SPARK = 2067; - -int VFX_FNF_FORCE_WAVE = 3001; -int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; -int VFX_FNF_GRENADE_FRAGMENTATION = 3003; -int VFX_FNF_GRENADE_STUN = 3004; -int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; -int VFX_FNF_GRENADE_POISON = 3006; -int VFX_FNF_GRENADE_SONIC = 3007; -int VFX_FNF_GRENADE_ADHESIVE = 3008; -int VFX_FNF_GRENADE_CRYOBAN = 3009; -int VFX_FNF_GRENADE_PLASMA = 3010; -int VFX_FNF_GRENADE_ION = 3011; -int VFX_FNF_GRAVITY_GENERATOR = 3013; - -int VFX_COM_SPARKS_LARGE = 4003; -int VFX_COM_SPARKS_LIGHTSABER = 4004; -int VFX_COM_SPARKS_PARRY_METAL = 4011; -int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; -int VFX_COM_POWER_BLAST_IMPROVED = 4013; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; -int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; -int VFX_COM_MULTI_SHOT = 4016; -int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; -int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; -int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; -int VFX_COM_SNIPER_SHOT_MASTERY = 4020; -int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; -int VFX_COM_RAPID_SHOT_IMPROVED = 4022; -int VFX_COM_BLASTER_DEFLECTION = 4023; -int VFX_COM_BLASTER_IMPACT = 4024; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; -int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; -int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; -int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; -int VFX_COM_POWER_BLAST_MASTERY = 4029; -int VFX_COM_FLURRY_IMPROVED_SABER = 4030; -int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; -int VFX_COM_BLASTER_IMPACT_GROUND = 4032; -int VFX_COM_SPARKS_BLASTER = 4033; -int VFX_COM_DROID_EXPLOSION_1 = 4034; -int VFX_COM_DROID_EXPLOSION_2 = 4035; -int VFX_COM_JEDI_FORCE_FIZZLE = 4036; -int VFX_COM_FORCE_RESISTED = 4037; - -int VFX_ARD_LIGHT_YELLOW_10 = 5000; -int VFX_ARD_LIGHT_YELLOW_20 = 5001; -int VFX_ARD_LIGHT_BLIND = 5002; -int VFX_ARD_HEAT_SHIMMER = 5003; - -int VFX_IMP_MIRV = 6000; -int VFX_IMP_MIRV_IMPACT = 6001; -int VFX_IMP_SCREEN_SHAKE = 6002; - -int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 - -int AOE_PER_FOGACID = 0; -int AOE_PER_FOGFIRE = 1; -int AOE_PER_FOGSTINK = 2; -int AOE_PER_FOGKILL = 3; -int AOE_PER_FOGMIND = 4; -int AOE_PER_WALLFIRE = 5; -int AOE_PER_WALLWIND = 6; -int AOE_PER_WALLBLADE = 7; -int AOE_PER_WEB = 8; -int AOE_PER_ENTANGLE = 9; -//int AOE_PER_CHAOS = 10; -int AOE_PER_DARKNESS = 11; -int AOE_MOB_CIRCEVIL = 12; -int AOE_MOB_CIRCGOOD = 13; -int AOE_MOB_CIRCLAW = 14; -int AOE_MOB_CIRCCHAOS = 15; -int AOE_MOB_FEAR = 16; -int AOE_MOB_BLINDING = 17; -int AOE_MOB_UNEARTHLY = 18; -int AOE_MOB_MENACE = 19; -int AOE_MOB_UNNATURAL = 20; -int AOE_MOB_STUN = 21; -int AOE_MOB_PROTECTION = 22; -int AOE_MOB_FIRE = 23; -int AOE_MOB_FROST = 24; -int AOE_MOB_ELECTRICAL = 25; -int AOE_PER_FOGGHOUL = 26; -int AOE_MOB_TYRANT_FOG = 27; -int AOE_PER_STORM = 28; -int AOE_PER_INVIS_SPHERE = 29; -int AOE_MOB_SILENCE = 30; -int AOE_PER_DELAY_BLAST_FIREBALL = 31; -int AOE_PER_GREASE = 32; -int AOE_PER_CREEPING_DOOM = 33; -int AOE_PER_EVARDS_BLACK_TENTACLES = 34; -int AOE_MOB_INVISIBILITY_PURGE = 35; -int AOE_MOB_DRAGON_FEAR = 36; - -// DJS-OEI 7/21/2004 -// Form re-design. -/* -// DJS-OEI 3/28/2004 -// These masks are used in Spells.2DA to indicate which spells -// can be affected by which Forms. Unfortunately, the script compiler -// won't let me make a constant with a Hex value, so I've had to use -// decimal. -int FORM_MASK_FORCE_FOCUS = 1; -int FORM_MASK_ENDURING_FORCE = 2; -int FORM_MASK_FORCE_AMPLIFICATION = 4; -int FORM_MASK_FORCE_POTENCY = 8; -int FORM_MASK_REGENERATION = 16; -int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; -*/ - -// these constants match those in spell.2da -int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. -int FORCE_POWER_MASTER_ALTER = 0; -int FORCE_POWER_MASTER_CONTROL = 1; -int FORCE_POWER_MASTER_SENSE = 2; -int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; -int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; -int FORCE_POWER_REGNERATION_ADVANCED = 5; -int FORCE_POWER_AFFECT_MIND = 6; -int FORCE_POWER_AFFLICTION = 7; -int FORCE_POWER_SPEED_BURST = 8; -int FORCE_POWER_CHOKE = 9; -int FORCE_POWER_CURE = 10; -int FORCE_POWER_DEATH_FIELD = 11; -int FORCE_POWER_DROID_DISABLE = 12; -int FORCE_POWER_DROID_DESTROY = 13; -int FORCE_POWER_DOMINATE = 14; -int FORCE_POWER_DRAIN_LIFE = 15; -int FORCE_POWER_FEAR = 16; -int FORCE_POWER_FORCE_ARMOR = 17; -int FORCE_POWER_FORCE_AURA = 18; -int FORCE_POWER_FORCE_BREACH = 19; -int FORCE_POWER_FORCE_IMMUNITY = 20; -int FORCE_POWER_FORCE_JUMP = 21; -int FORCE_POWER_FORCE_MIND = 22; -int FORCE_POWER_FORCE_PUSH = 23; -int FORCE_POWER_FORCE_SHIELD = 24; -int FORCE_POWER_FORCE_STORM = 25; -int FORCE_POWER_FORCE_WAVE = 26; -int FORCE_POWER_FORCE_WHIRLWIND = 27; -int FORCE_POWER_HEAL = 28; -int FORCE_POWER_HOLD = 29; -int FORCE_POWER_HORROR = 30; -int FORCE_POWER_INSANITY = 31; -int FORCE_POWER_KILL = 32; -int FORCE_POWER_KNIGHT_MIND = 33; -int FORCE_POWER_KNIGHT_SPEED = 34; -int FORCE_POWER_LIGHTNING = 35; -int FORCE_POWER_MIND_MASTERY = 36; -int FORCE_POWER_SPEED_MASTERY = 37; -int FORCE_POWER_PLAGUE = 38; -int FORCE_POWER_REGENERATION = 39; -int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; -int FORCE_POWER_RESIST_FORCE = 41; -int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; -int FORCE_POWER_SHOCK = 43; -int FORCE_POWER_SLEEP = 44; -int FORCE_POWER_SLOW = 45; -int FORCE_POWER_STUN = 46; -int FORCE_POWER_DROID_STUN = 47; -int FORCE_POWER_SUPRESS_FORCE = 48; -int FORCE_POWER_LIGHT_SABER_THROW = 49; -int FORCE_POWER_WOUND = 50; -int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; -int SPECIAL_ABILITY_BODY_FUEL = 52; -int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; -int SPECIAL_ABILITY_WARRIOR_STANCE = 54; -int SPECIAL_ABILITY_SENTINEL_STANCE = 55; -int SPECIAL_ABILITY_DOMINATE_MIND = 56; -int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; -int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; -int SPECIAL_ABILITY_ENHANCED_SENSES = 59; -int SPECIAL_ABILITY_CAMOFLAGE = 60; -int SPECIAL_ABILITY_TAUNT = 61; -int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; -int SPECIAL_ABILITY_RAGE = 63; - -// DJS-OEI 12/9/2003 -// New Force Powers -int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; -int FORCE_POWER_MASTER_HEAL = 134; -int FORCE_POWER_FORCE_BARRIER = 135; -int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; -int FORCE_POWER_MASTER_FORCE_BARRIER = 137; -int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast -int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. -int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // -int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast -int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. -int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // -int FORCE_POWER_CRUSH_OPPOSITION_I = 144; -int FORCE_POWER_CRUSH_OPPOSITION_II = 145; -int FORCE_POWER_CRUSH_OPPOSITION_III = 146; -int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; -int FORCE_POWER_CRUSH_OPPOSITION_V = 148; -int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; -int FORCE_POWER_FORCE_BODY = 150; -int FORCE_POWER_IMPROVED_FORCE_BODY = 151; -int FORCE_POWER_MASTER_FORCE_BODY = 152; -int FORCE_POWER_DRAIN_FORCE = 153; -int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; -int FORCE_POWER_MASTER_DRAIN_FORCE = 155; -int FORCE_POWER_FORCE_CAMOUFLAGE = 156; -int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; -int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; -int FORCE_POWER_FORCE_SCREAM = 159; -int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; -int FORCE_POWER_MASTER_FORCE_SCREAM = 161; -int FORCE_POWER_FORCE_REPULSION = 162; -int FORCE_POWER_FORCE_REDIRECTION = 163; -int FORCE_POWER_FURY = 164; -int FORCE_POWER_IMPROVED_FURY = 165; -int FORCE_POWER_MASTER_FURY = 166; -int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; -int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; -int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; -int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; -int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; -int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; -int FORCE_POWER_REVITALIZE = 173; -int FORCE_POWER_IMPROVED_REVITALIZE = 174; -int FORCE_POWER_MASTER_REVITALIZE = 175; -int FORCE_POWER_FORCE_SIGHT = 176; -int FORCE_POWER_FORCE_CRUSH = 177; -int FORCE_POWER_PRECOGNITION = 178; -int FORCE_POWER_BATTLE_PRECOGNITION = 179; -int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; -int FORCE_POWER_MIND_TRICK = 181; -int FORCE_POWER_CONFUSION = 200; -int FORCE_POWER_BEAST_TRICK = 182; -int FORCE_POWER_BEAST_CONFUSION = 184; -int FORCE_POWER_DROID_TRICK = 201; -int FORCE_POWER_DROID_CONFUSION = 269; -int FORCE_POWER_BREATH_CONTROL = 270; -int FORCE_POWER_WOOKIEE_RAGE_I = 271; -int FORCE_POWER_WOOKIEE_RAGE_II = 272; -int FORCE_POWER_WOOKIEE_RAGE_III = 273; - -// DJS-OEI 7/21/2004 -// Form re-design. -/* -// DJS-OEI 3/25/2004 -int FORM_LIGHTSABER_PADAWAN_I = 205; -int FORM_LIGHTSABER_PADAWAN_II = 206; -int FORM_LIGHTSABER_PADAWAN_III = 207; -int FORM_LIGHTSABER_DAKLEAN_I = 208; -int FORM_LIGHTSABER_DAKLEAN_II = 209; -int FORM_LIGHTSABER_DAKLEAN_III = 210; -int FORM_LIGHTSABER_SENTINEL_I = 211; -int FORM_LIGHTSABER_SENTINEL_II = 212; -int FORM_LIGHTSABER_SENTINEL_III = 213; -int FORM_LIGHTSABER_SODAK_I = 214; -int FORM_LIGHTSABER_SODAK_II = 215; -int FORM_LIGHTSABER_SODAK_III = 216; -int FORM_LIGHTSABER_ANCIENT_I = 217; -int FORM_LIGHTSABER_ANCIENT_II = 218; -int FORM_LIGHTSABER_ANCIENT_III = 219; -int FORM_LIGHTSABER_MASTER_I = 220; -int FORM_LIGHTSABER_MASTER_II = 221; -int FORM_LIGHTSABER_MASTER_III = 222; -int FORM_CONSULAR_FORCE_FOCUS_I = 223; -int FORM_CONSULAR_FORCE_FOCUS_II = 224; -int FORM_CONSULAR_FORCE_FOCUS_III = 225; -int FORM_CONSULAR_ENDURING_FORCE_I = 226; -int FORM_CONSULAR_ENDURING_FORCE_II = 227; -int FORM_CONSULAR_ENDURING_FORCE_III = 228; -int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; -int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; -int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; -int FORM_CONSULAR_FORCE_SHELL_I = 232; -int FORM_CONSULAR_FORCE_SHELL_II = 233; -int FORM_CONSULAR_FORCE_SHELL_III = 234; -int FORM_CONSULAR_FORCE_POTENCY_I = 235; -int FORM_CONSULAR_FORCE_POTENCY_II = 236; -int FORM_CONSULAR_FORCE_POTENCY_III = 237; -int FORM_CONSULAR_REGENERATION_I = 238; -int FORM_CONSULAR_REGENERATION_II = 239; -int FORM_CONSULAR_REGENERATION_III = 240; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; -*/ - -int FORM_SABER_I_SHII_CHO = 258; -int FORM_SABER_II_MAKASHI = 259; -int FORM_SABER_III_SORESU = 260; -int FORM_SABER_IV_ATARU = 261; -int FORM_SABER_V_SHIEN = 262; -int FORM_SABER_VI_NIMAN = 263; -int FORM_SABER_VII_JUYO = 264; -int FORM_FORCE_I_FOCUS = 265; -int FORM_FORCE_II_POTENCY = 266; -int FORM_FORCE_III_AFFINITY = 267; -int FORM_FORCE_IV_MASTERY = 268; - -// these constants must match those in poison.2da - -int POISON_ABILITY_SCORE_MILD = 0; -int POISON_ABILITY_SCORE_AVERAGE = 1; -int POISON_ABILITY_SCORE_VIRULENT = 2; -int POISON_DAMAGE_MILD = 3; -int POISON_DAMAGE_AVERAGE = 4; -int POISON_DAMAGE_VIRULENT = 5; -int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; -int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; -int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 -int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 -int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 -int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 - -// the thing after CREATURE_TYPE_ should refer to the -// actual "subtype" in the lists given above. -int CREATURE_TYPE_RACIAL_TYPE = 0; -int CREATURE_TYPE_PLAYER_CHAR = 1; -int CREATURE_TYPE_CLASS = 2; -int CREATURE_TYPE_REPUTATION = 3; -int CREATURE_TYPE_IS_ALIVE = 4; -int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; -int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; -int CREATURE_TYPE_PERCEPTION = 7; -//int CREATURE_TYPE_ALIGNMENT = 2; - -int REPUTATION_TYPE_FRIEND = 0; -int REPUTATION_TYPE_ENEMY = 1; -int REPUTATION_TYPE_NEUTRAL = 2; - -int PERCEPTION_SEEN_AND_HEARD = 0; -int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; -int PERCEPTION_HEARD_AND_NOT_SEEN = 2; -int PERCEPTION_SEEN_AND_NOT_HEARD = 3; -int PERCEPTION_NOT_HEARD = 4; -int PERCEPTION_HEARD = 5; -int PERCEPTION_NOT_SEEN = 6; -int PERCEPTION_SEEN = 7; - -int PLAYER_CHAR_NOT_PC = FALSE; -int PLAYER_CHAR_IS_PC = TRUE; - -int CLASS_TYPE_SOLDIER = 0; -int CLASS_TYPE_SCOUT = 1; -int CLASS_TYPE_SCOUNDREL = 2; -int CLASS_TYPE_JEDIGUARDIAN = 3; -int CLASS_TYPE_JEDICONSULAR = 4; -int CLASS_TYPE_JEDISENTINEL = 5; -int CLASS_TYPE_COMBATDROID = 6; -int CLASS_TYPE_EXPERTDROID = 7; -int CLASS_TYPE_MINION = 8; - -// DJS-OEI 2/11/2004 -int CLASS_TYPE_TECHSPECIALIST = 9; -int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe -int CLASS_TYPE_JEDIWEAPONMASTER = 11; -int CLASS_TYPE_JEDIMASTER = 12; -int CLASS_TYPE_JEDIWATCHMAN = 13; -int CLASS_TYPE_SITHMARAUDER = 14; -int CLASS_TYPE_SITHLORD = 15; -int CLASS_TYPE_SITHASSASSIN = 16; - - -int CLASS_TYPE_INVALID = 255; - -// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() -int PERSISTENT_ZONE_ACTIVE = 0; -int PERSISTENT_ZONE_FOLLOW = 1; - -int INVALID_STANDARD_FACTION = -1; -int STANDARD_FACTION_HOSTILE_1 = 1; -int STANDARD_FACTION_FRIENDLY_1 = 2; -int STANDARD_FACTION_HOSTILE_2 = 3; -int STANDARD_FACTION_FRIENDLY_2 = 4; -int STANDARD_FACTION_NEUTRAL = 5; -int STANDARD_FACTION_INSANE = 6; -int STANDARD_FACTION_PTAT_TUSKAN = 7; -int STANDARD_FACTION_GLB_XOR = 8; -int STANDARD_FACTION_SURRENDER_1 = 9; -int STANDARD_FACTION_SURRENDER_2 = 10; -int STANDARD_FACTION_PREDATOR = 11; -int STANDARD_FACTION_PREY = 12; -int STANDARD_FACTION_TRAP = 13; -int STANDARD_FACTION_ENDAR_SPIRE = 14; -int STANDARD_FACTION_RANCOR = 15; -int STANDARD_FACTION_GIZKA_1 = 16; -int STANDARD_FACTION_GIZKA_2 = 17; -// DJS-OEI 2/25/2004 -int STANDARD_FACTION_SELF_LOATHING = 21; -int STANDARD_FACTION_ONE_ON_ONE = 22; -int STANDARD_FACTION_PARTYPUPPET = 23; - -// Skill defines -int SKILL_COMPUTER_USE = 0; -int SKILL_DEMOLITIONS = 1; -int SKILL_STEALTH = 2; -int SKILL_AWARENESS = 3; -int SKILL_PERSUADE = 4; -int SKILL_REPAIR = 5; -int SKILL_SECURITY = 6; -int SKILL_TREAT_INJURY = 7; -int SKILL_MAX_SKILLS = 8; - -int SUBSKILL_FLAGTRAP = 100; -int SUBSKILL_RECOVERTRAP = 101; -int SUBSKILL_EXAMINETRAP = 102; - -// FEATS -//int FEAT_ADVANCED_DODGE = 0; -int FEAT_ADVANCED_JEDI_DEFENSE = 1; -int FEAT_ADVANCED_GUARD_STANCE = 2; -int FEAT_AMBIDEXTERITY = 3; -int FEAT_ARMOUR_PROF_HEAVY = 4; -int FEAT_ARMOUR_PROF_LIGHT = 5; -int FEAT_ARMOUR_PROF_MEDIUM = 6; -int FEAT_CAUTIOUS = 7; -int FEAT_CRITICAL_STRIKE = 8; -int FEAT_DOUBLE_WEAPON_FIGHTING = 9; -int FEAT_EMPATHY = 10; -int FEAT_FLURRY = 11; -int FEAT_GEAR_HEAD = 12; -int FEAT_GREAT_FORTITUDE = 13; -int FEAT_IMPLANT_LEVEL_1 = 14; -int FEAT_IMPLANT_LEVEL_2 = 15; -int FEAT_IMPLANT_LEVEL_3 = 16; -int FEAT_IMPROVED_POWER_ATTACK = 17; -int FEAT_IMPROVED_POWER_BLAST = 18; -int FEAT_IMPROVED_CRITICAL_STRIKE = 19; -int FEAT_IMPROVED_SNIPER_SHOT = 20; -int FEAT_IRON_WILL = 21; -int FEAT_LIGHTNING_REFLEXES = 22; -//int FEAT_MASTER_DODGE = 23; -int FEAT_MASTER_JEDI_DEFENSE = 24; -int FEAT_MASTER_GUARD_STANCE = 25; -int FEAT_MULTI_SHOT = 26; -int FEAT_PERCEPTIVE = 27; -int FEAT_POWER_ATTACK = 28; -int FEAT_POWER_BLAST = 29; -int FEAT_RAPID_SHOT = 30; -int FEAT_SNIPER_SHOT = 31; -int FEAT_WEAPON_FOCUS_BLASTER = 32; -int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; -int FEAT_WEAPON_FOCUS_GRENADE = 34; -int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; -int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; -int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; -int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; -int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; -int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; -int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; -int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; -int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; -int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; -int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; -int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; -int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; -int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; -int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; -int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; -int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; -int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; -int FEAT_WHIRLWIND_ATTACK = 53; -int FEAT_GUARD_STANCE = 54; -int FEAT_JEDI_DEFENSE = 55; -int FEAT_UNCANNY_DODGE_1 = 56; -int FEAT_UNCANNY_DODGE_2 = 57; -int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; -//int FEAT_DODGE = 59; -int FEAT_SNEAK_ATTACK_1D6 = 60; -int FEAT_SNEAK_ATTACK_2D6 = 61; -int FEAT_SNEAK_ATTACK_3D6 = 62; -int FEAT_SNEAK_ATTACK_4D6 = 63; -int FEAT_SNEAK_ATTACK_5D6 = 64; -int FEAT_SNEAK_ATTACK_6D6 = 65; -int FEAT_SNEAK_ATTACK_7D6 = 66; -int FEAT_SNEAK_ATTACK_8D6 = 67; -int FEAT_SNEAK_ATTACK_9D6 = 68; -int FEAT_SNEAK_ATTACK_10D6 = 69; -int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; -int FEAT_SKILL_FOCUS_STEALTH = 71; -int FEAT_SKILL_FOCUS_AWARENESS = 72; -int FEAT_SKILL_FOCUS_PERSUADE = 73; -int FEAT_SKILL_FOCUS_REPAIR = 74; -int FEAT_SKILL_FOCUS_SECURITY = 75; -int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; -int FEAT_MASTER_SNIPER_SHOT = 77; -int FEAT_DROID_UPGRADE_1 = 78; -int FEAT_DROID_UPGRADE_2 = 79; -int FEAT_DROID_UPGRADE_3 = 80; -int FEAT_MASTER_CRITICAL_STRIKE = 81; -int FEAT_MASTER_POWER_BLAST = 82; -int FEAT_MASTER_POWER_ATTACK = 83; -int FEAT_TOUGHNESS = 84; -int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; -int FEAT_FORCE_FOCUS_ALTER = 86; -int FEAT_FORCE_FOCUS_CONTROL = 87; -int FEAT_FORCE_FOCUS_SENSE = 88; -int FEAT_FORCE_FOCUS_ADVANCED = 89; -int FEAT_FORCE_FOCUS_MASTERY = 90; -int FEAT_IMPROVED_FLURRY = 91; -int FEAT_IMPROVED_RAPID_SHOT = 92; -int FEAT_PROFICIENCY_ALL = 93; -int FEAT_BATTLE_MEDITATION = 94; -// DJS-OEI 11/12/2003 -int FEAT_EVASION = 125; -int FEAT_TARGETING_1 = 126; -int FEAT_TARGETING_2 = 127; -int FEAT_TARGETING_3 = 128; -int FEAT_TARGETING_4 = 129; -int FEAT_TARGETING_5 = 130; -int FEAT_TARGETING_6 = 131; -int FEAT_TARGETING_7 = 132; -int FEAT_TARGETING_8 = 133; -int FEAT_TARGETING_9 = 134; -int FEAT_TARGETING_10 = 135; -// DJS-OEI 10/5/2004 -// Moved down to 240+ -/* -int FEAT_PRECISE_SHOT = 136; -int FEAT_IMPROVED_PRECISE_SHOT = 137; -int FEAT_MASTER_PRECISE_SHOT = 138; -*/ -int FEAT_CLOSE_COMBAT = 139; -int FEAT_IMPROVED_CLOSE_COMBAT = 140; -int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; -int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; -int FEAT_REGENERATE_FORCE_POINTS = 143; -int FEAT_DARK_SIDE_CORRUPTION = 149; -int FEAT_IGNORE_PAIN_1 = 150; -int FEAT_IGNORE_PAIN_2 = 151; -int FEAT_IGNORE_PAIN_3 = 152; -int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; -int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; -int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; -int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; -int FEAT_DEFLECT = 168; -int FEAT_INNER_STRENGTH_1 = 169; -int FEAT_INNER_STRENGTH_2 = 170; -int FEAT_INNER_STRENGTH_3 = 171; -int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; -int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; -int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; -int FEAT_CRAFT = 175; -int FEAT_MASTERCRAFT_WEAPONS_1 = 176; -int FEAT_MASTERCRAFT_WEAPONS_2 = 177; -int FEAT_MASTERCRAFT_WEAPONS_3 = 178; -int FEAT_MASTERCRAFT_ARMOR_1 = 179; -int FEAT_MASTERCRAFT_ARMOR_2 = 180; -int FEAT_MASTERCRAFT_ARMOR_3 = 181; -int FEAT_DROID_INTERFACE = 182; -int FEAT_CLASS_SKILL_AWARENESS = 183; -int FEAT_CLASS_SKILL_COMPUTER_USE = 184; -int FEAT_CLASS_SKILL_DEMOLITIONS = 185; -int FEAT_CLASS_SKILL_REPAIR = 186; -int FEAT_CLASS_SKILL_SECURITY = 187; -int FEAT_CLASS_SKILL_STEALTH = 188; -int FEAT_CLASS_SKILL_TREAT_INJURY = 189; -int FEAT_DUAL_STRIKE = 190; -int FEAT_IMPROVED_DUAL_STRIKE = 191; -int FEAT_MASTER_DUAL_STRIKE = 192; -int FEAT_FINESSE_LIGHTSABERS = 193; -int FEAT_FINESSE_MELEE_WEAPONS = 194; -int FEAT_MOBILITY = 195; -int FEAT_REGENERATE_VITALITY_POINTS = 196; -int FEAT_STEALTH_RUN = 197; -int FEAT_KINETIC_COMBAT = 198; -int FEAT_SURVIVAL = 199; -int FEAT_MANDALORIAN_COURAGE = 200; -int FEAT_PERSONAL_CLOAKING_SHIELD = 201; -int FEAT_MENTOR = 202; -int FEAT_IMPLANT_SWITCHING = 203; -int FEAT_SPIRIT = 204; -int FEAT_FORCE_CHAIN = 205; -int FEAT_WAR_VETERAN = 206; -// DJS-OEI 10/5/2004 -// Moved down to 240+ -/* -int FEAT_PRECISE_SHOT_IV = 226; -int FEAT_PRECISE_SHOT_V = 227; -*/ -int FEAT_FIGHTING_SPIRIT = 236; -int FEAT_HEROIC_RESOLVE = 237; -int FEAT_PRECISE_SHOT = 240; -int FEAT_IMPROVED_PRECISE_SHOT = 241; -int FEAT_MASTER_PRECISE_SHOT = 242; -int FEAT_PRECISE_SHOT_IV = 243; -int FEAT_PRECISE_SHOT_V = 244; - -// Special Attack Defines -int SPECIAL_ATTACK_INVALID = 0; -int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; -int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; -int SPECIAL_ATTACK_SAP = 3; -int SPECIAL_ATTACK_DISARM = 4; -int SPECIAL_ATTACK_IMPROVED_DISARM = 5; -int SPECIAL_ATTACK_KNOCKDOWN = 6; -int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; -int SPECIAL_ATTACK_STUNNING_FIST = 8; -int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; -int SPECIAL_ATTACK_RAPID_SHOT = 10; - -// Combat Mode Defines -int COMBAT_MODE_INVALID = 0; -int COMBAT_MODE_PARRY = 1; -int COMBAT_MODE_POWER_ATTACK = 2; -int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; -int COMBAT_MODE_FLURRY_OF_BLOWS = 4; -int COMBAT_MODE_RAPID_SHOT = 5; - -// These represent the row in the difficulty 2da, rather than -// a difficulty value. -int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; -int ENCOUNTER_DIFFICULTY_EASY = 1; -int ENCOUNTER_DIFFICULTY_NORMAL = 2; -int ENCOUNTER_DIFFICULTY_HARD = 3; -int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; - -// Looping animation constants. -int ANIMATION_LOOPING_PAUSE = 0; -int ANIMATION_LOOPING_PAUSE2 = 1; -int ANIMATION_LOOPING_LISTEN = 2; -int ANIMATION_LOOPING_MEDITATE = 3; -int ANIMATION_LOOPING_WORSHIP = 4; -//int ANIMATION_LOOPING_LOOK_FAR = 5; -//int ANIMATION_LOOPING_SIT_CHAIR = 6; -//int ANIMATION_LOOPING_SIT_CROSS = 7; -int ANIMATION_LOOPING_TALK_NORMAL = 5; -int ANIMATION_LOOPING_TALK_PLEADING = 6; -int ANIMATION_LOOPING_TALK_FORCEFUL = 7; -int ANIMATION_LOOPING_TALK_LAUGHING = 8; -int ANIMATION_LOOPING_TALK_SAD = 9; -int ANIMATION_LOOPING_GET_LOW = 10; -int ANIMATION_LOOPING_GET_MID = 11; -int ANIMATION_LOOPING_PAUSE_TIRED = 12; -int ANIMATION_LOOPING_PAUSE_DRUNK = 13; -int ANIMATION_LOOPING_FLIRT = 14; -int ANIMATION_LOOPING_USE_COMPUTER = 15; -int ANIMATION_LOOPING_DANCE = 16; -int ANIMATION_LOOPING_DANCE1 = 17; -int ANIMATION_LOOPING_HORROR = 18; -int ANIMATION_LOOPING_READY = 19; -int ANIMATION_LOOPING_DEACTIVATE = 20; -int ANIMATION_LOOPING_SPASM = 21; -int ANIMATION_LOOPING_SLEEP = 22; -int ANIMATION_LOOPING_PRONE = 23; -int ANIMATION_LOOPING_PAUSE3 = 24; -int ANIMATION_LOOPING_WELD = 25; -int ANIMATION_LOOPING_DEAD = 26; -int ANIMATION_LOOPING_TALK_INJURED = 27; -int ANIMATION_LOOPING_LISTEN_INJURED = 28; -int ANIMATION_LOOPING_TREAT_INJURED = 29; -int ANIMATION_LOOPING_DEAD_PRONE = 30; -int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; -int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; -int ANIMATION_LOOPING_CHECK_BODY = 33; -int ANIMATION_LOOPING_UNLOCK_DOOR = 34; -int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; - -int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 - -int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 -//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 -int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 -int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 -int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 -int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 - -// NOTE: Choke is really a looping animation. The fire and forget constant has -// been left in because it has already been used in many places. Please -// use this constant from now on. -int ANIMATION_LOOPING_CHOKE = 116; - -// Fire and forget animation constants. -int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; -int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; -int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; -int ANIMATION_FIREFORGET_PAUSE_BORED = 103; -int ANIMATION_FIREFORGET_SALUTE = 104; -int ANIMATION_FIREFORGET_BOW = 105; -//int ANIMATION_FIREFORGET_STEAL = 106; -int ANIMATION_FIREFORGET_GREETING = 106; -int ANIMATION_FIREFORGET_TAUNT = 107; -int ANIMATION_FIREFORGET_VICTORY1 = 108; -int ANIMATION_FIREFORGET_VICTORY2 = 109; -int ANIMATION_FIREFORGET_VICTORY3 = 110; -//int ANIMATION_FIREFORGET_READ = 111; -int ANIMATION_FIREFORGET_INJECT = 112; -int ANIMATION_FIREFORGET_USE_COMPUTER = 113; -int ANIMATION_FIREFORGET_PERSUADE = 114; -int ANIMATION_FIREFORGET_ACTIVATE = 115; -// NOTE: Please do not use this choke constant anymore. The choke is not a fire -// and forget animation. The looping choke constant above should be used -// instead. -int ANIMATION_FIREFORGET_CHOKE = 116; -int ANIMATION_FIREFORGET_THROW_HIGH = 117; -int ANIMATION_FIREFORGET_THROW_LOW = 118; -int ANIMATION_FIREFORGET_CUSTOM01 = 119; -int ANIMATION_FIREFORGET_TREAT_INJURED = 120; -int ANIMATION_FIREFORGET_FORCE_CAST = 121; -int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 -int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 -int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 - -// Placeable animation constants -int ANIMATION_PLACEABLE_ACTIVATE = 200; -int ANIMATION_PLACEABLE_DEACTIVATE = 201; -int ANIMATION_PLACEABLE_OPEN = 202; -int ANIMATION_PLACEABLE_CLOSE = 203; -int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; -int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; -int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; -int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; -int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; -int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; -int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; -int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; -int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; -int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; - - -// Room Animation Constants -int ANIMATION_ROOM_SCRIPTLOOP01 = 1; -int ANIMATION_ROOM_SCRIPTLOOP02 = 2; -int ANIMATION_ROOM_SCRIPTLOOP03 = 3; -int ANIMATION_ROOM_SCRIPTLOOP04 = 4; -int ANIMATION_ROOM_SCRIPTLOOP05 = 5; -int ANIMATION_ROOM_SCRIPTLOOP06 = 6; -int ANIMATION_ROOM_SCRIPTLOOP07 = 7; -int ANIMATION_ROOM_SCRIPTLOOP08 = 8; -int ANIMATION_ROOM_SCRIPTLOOP09 = 9; -int ANIMATION_ROOM_SCRIPTLOOP10 = 10; -int ANIMATION_ROOM_SCRIPTLOOP11 = 11; -int ANIMATION_ROOM_SCRIPTLOOP12 = 12; -int ANIMATION_ROOM_SCRIPTLOOP13 = 13; -int ANIMATION_ROOM_SCRIPTLOOP14 = 14; -int ANIMATION_ROOM_SCRIPTLOOP15 = 15; -int ANIMATION_ROOM_SCRIPTLOOP16 = 16; -int ANIMATION_ROOM_SCRIPTLOOP17 = 17; -int ANIMATION_ROOM_SCRIPTLOOP18 = 18; -int ANIMATION_ROOM_SCRIPTLOOP19 = 19; -int ANIMATION_ROOM_SCRIPTLOOP20 = 20; - -int TALENT_TYPE_FORCE = 0; -int TALENT_TYPE_SPELL = 0; -int TALENT_TYPE_FEAT = 1; -int TALENT_TYPE_SKILL = 2; - -int TALENT_EXCLUDE_ALL_OF_TYPE = -1; - -int INVENTORY_DISTURB_TYPE_ADDED = 0; -int INVENTORY_DISTURB_TYPE_REMOVED = 1; -int INVENTORY_DISTURB_TYPE_STOLEN = 2; - -int GUI_PANEL_PLAYER_DEATH = 0; - -int POLYMORPH_TYPE_WEREWOLF = 0; -int POLYMORPH_TYPE_WERERAT = 1; -int POLYMORPH_TYPE_WERECAT = 2; -int POLYMORPH_TYPE_GIANT_SPIDER = 3; -int POLYMORPH_TYPE_TROLL = 4; -int POLYMORPH_TYPE_UMBER_HULK = 5; -int POLYMORPH_TYPE_PIXIE = 6; -int POLYMORPH_TYPE_ZOMBIE = 7; -int POLYMORPH_TYPE_RED_DRAGON = 8; -int POLYMORPH_TYPE_FIRE_GIANT = 9; -int POLYMORPH_TYPE_BALOR = 10; -int POLYMORPH_TYPE_DEATH_SLAAD = 11; -int POLYMORPH_TYPE_IRON_GOLEM = 12; -int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; -int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; -int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; -int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; -int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; -int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; -int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; -int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; -int POLYMORPH_TYPE_BROWN_BEAR = 21; -int POLYMORPH_TYPE_PANTHER = 22; -int POLYMORPH_TYPE_WOLF = 23; -int POLYMORPH_TYPE_BOAR = 24; -int POLYMORPH_TYPE_BADGER = 25; -int POLYMORPH_TYPE_PENGUIN = 26; -int POLYMORPH_TYPE_COW = 27; -int POLYMORPH_TYPE_DOOM_KNIGHT = 28; -int POLYMORPH_TYPE_YUANTI = 29; -int POLYMORPH_TYPE_IMP = 30; -int POLYMORPH_TYPE_QUASIT = 31; -int POLYMORPH_TYPE_SUCCUBUS = 32; -int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; -int POLYMORPH_TYPE_DIRE_PANTHER = 34; -int POLYMORPH_TYPE_DIRE_WOLF = 35; -int POLYMORPH_TYPE_DIRE_BOAR = 36; -int POLYMORPH_TYPE_DIRE_BADGER = 37; - -int INVISIBILITY_TYPE_NORMAL = 1; -int INVISIBILITY_TYPE_DARKNESS = 2; -int INVISIBILITY_TYPE_IMPROVED = 4; - -int CREATURE_SIZE_INVALID = 0; -int CREATURE_SIZE_TINY = 1; -int CREATURE_SIZE_SMALL = 2; -int CREATURE_SIZE_MEDIUM = 3; -int CREATURE_SIZE_LARGE = 4; -int CREATURE_SIZE_HUGE = 5; - -int CAMERA_MODE_CHASE_CAMERA = 0; -int CAMERA_MODE_TOP_DOWN = 1; -int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; - -int PROJECTILE_PATH_TYPE_DEFAULT = 0; -int PROJECTILE_PATH_TYPE_HOMING = 1; -int PROJECTILE_PATH_TYPE_BALLISTIC = 2; -int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; -int PROJECTILE_PATH_TYPE_ACCELERATING = 4; - -int GAME_DIFFICULTY_VERY_EASY = 0; -int GAME_DIFFICULTY_EASY = 1; -int GAME_DIFFICULTY_NORMAL = 2; -int GAME_DIFFICULTY_CORE_RULES = 3; -int GAME_DIFFICULTY_DIFFICULT = 4; - -int ACTION_MOVETOPOINT = 0; -int ACTION_PICKUPITEM = 1; -int ACTION_DROPITEM = 2; -int ACTION_ATTACKOBJECT = 3; -int ACTION_CASTSPELL = 4; -int ACTION_OPENDOOR = 5; -int ACTION_CLOSEDOOR = 6; -int ACTION_DIALOGOBJECT = 7; -int ACTION_DISABLETRAP = 8; -int ACTION_RECOVERTRAP = 9; -int ACTION_FLAGTRAP = 10; -int ACTION_EXAMINETRAP = 11; -int ACTION_SETTRAP = 12; -int ACTION_OPENLOCK = 13; -int ACTION_LOCK = 14; -int ACTION_USEOBJECT = 15; -int ACTION_ANIMALEMPATHY = 16; -int ACTION_REST = 17; -int ACTION_TAUNT = 18; -int ACTION_ITEMCASTSPELL = 19; -int ACTION_COUNTERSPELL = 31; -int ACTION_HEAL = 33; -int ACTION_PICKPOCKET = 34; -int ACTION_FOLLOW = 35; -int ACTION_WAIT = 36; -int ACTION_SIT = 37; -int ACTION_FOLLOWLEADER = 38; -int ACTION_FOLLOWOWNER = 43; - - -int ACTION_INVALID = 65535; -int ACTION_QUEUEEMPTY = 65534; - -int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; -int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; -int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; -int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; -int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; -int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; -int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; -int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; -int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; -int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; -int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; -int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; -// DJS-OEI 1/20/2004 -int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; -int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; -int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; -int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; -int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; -int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; -int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; -int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; - -int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; -int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; - -int CONVERSATION_TYPE_CINEMATIC = 0; -int CONVERSATION_TYPE_COMPUTER = 1; - -int PLANET_DANTOOINE = 0; -int PLANET_DXUN = 1; -int PLANET_EBON_HAWK = 2; -int PLANET_KORRIBAN = 3; -int PLANET_M4_78 = 4; -int PLANET_MALACHOR_V = 5; -int PLANET_NAR_SHADDAA = 6; -int PLANET_ONDERON = 7; -int PLANET_PERAGUS = 8; -int PLANET_TELOS = 9; -int PLANET_HARBINGER = 10; -int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers -int PLANET_LIVE_02 = 12; -int PLANET_LIVE_03 = 13; -int PLANET_LIVE_04 = 14; -int PLANET_LIVE_05 = 15; -int PLANET_LIVE_06 = 16; - -int NPC_PLAYER =-1; -int NPC_ATTON = 0; -int NPC_BAO_DUR = 1; -int NPC_CANDEROUS = 2; -int NPC_G0T0 = 3; -int NPC_HANDMAIDEN = 4; -int NPC_HK_47 = 5; -int NPC_KREIA = 6; -int NPC_MIRA = 7; -int NPC_T3_M4 = 8; -int NPC_VISAS = 9; -int NPC_HANHARR = 10; -int NPC_DISCIPLE = 11; - -int PUP_SENSORBALL = 0; -int PUP_OTHER1 = 1; -int PUP_OTHER2 = 2; - - -int PARTY_AISTYLE_AGGRESSIVE = 0; -int PARTY_AISTYLE_DEFENSIVE = 1; -int PARTY_AISTYLE_PASSIVE = 2; - -int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_RANGED_ATTACK = 1; -int NPC_AISTYLE_MELEE_ATTACK = 2; -int NPC_AISTYLE_AID = 3; -int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals -int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots -int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack -int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member -int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. -int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. -int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. -int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff -int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. -int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. - -int DISGUISE_TYPE_TEST = 1; -int DISGUISE_TYPE_P_T3M3 = 2; -int DISGUISE_TYPE_P_HK47 = 3; -int DISGUISE_TYPE_P_BASTILLA = 4; -int DISGUISE_TYPE_P_CAND = 5; -int DISGUISE_TYPE_P_CARTH = 6; -int DISGUISE_TYPE_P_JOLEE = 7; -int DISGUISE_TYPE_P_JUHANI = 8; -int DISGUISE_TYPE_P_ZAALBAR = 9; -int DISGUISE_TYPE_P_MISSION = 10; -int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; -int DISGUISE_TYPE_N_BITH = 12; -int DISGUISE_TYPE_N_CALONORD = 13; -int DISGUISE_TYPE_N_COMMF = 14; -int DISGUISE_TYPE_N_COMMKIDF = 15; -int DISGUISE_TYPE_N_COMMKIDM = 16; -int DISGUISE_TYPE_N_COMMM = 17; -int DISGUISE_TYPE_N_CZERLAOFF = 18; -int DISGUISE_TYPE_N_DARKJEDIF = 19; -int DISGUISE_TYPE_N_DARKJEDIM = 20; -int DISGUISE_TYPE_N_DARTHMALAK = 21; -int DISGUISE_TYPE_N_DARTHREVAN = 22; -int DISGUISE_TYPE_N_DODONNA = 23; -int DISGUISE_TYPE_N_DUROS = 24; -int DISGUISE_TYPE_N_FATCOMF = 25; -int DISGUISE_TYPE_N_FATCOMM = 26; -int DISGUISE_TYPE_N_SMUGGLER = 27; -int DISGUISE_TYPE_N_SITHSOLDIER = 28; -// int DISGUISE_TYPE_ = 29; -int DISGUISE_TYPE_N_JEDICOUNTF = 30; -int DISGUISE_TYPE_N_JEDICOUNTM = 31; -int DISGUISE_TYPE_N_JEDIMALEK = 32; -int DISGUISE_TYPE_N_JEDIMEMF = 33; -int DISGUISE_TYPE_N_JEDIMEMM = 34; -int DISGUISE_TYPE_N_MANDALORIAN = 35; -int DISGUISE_TYPE_N_RAKATA = 36; -int DISGUISE_TYPE_N_REPOFF = 37; -int DISGUISE_TYPE_N_REPSOLD = 38; -int DISGUISE_TYPE_N_RODIAN = 39; -int DISGUISE_TYPE_C_SELKATH = 40; -int DISGUISE_TYPE_N_SITHAPPREN = 41; -int DISGUISE_TYPE_N_SITHCOMF = 42; -int DISGUISE_TYPE_N_SITHCOMM = 43; -//int DISGUISE_TYPE_N_SITHSOLDIER = 44; -int DISGUISE_TYPE_N_SWOOPGANG = 45; -int DISGUISE_TYPE_N_TUSKEN = 46; -int DISGUISE_TYPE_N_TWILEKF = 47; -int DISGUISE_TYPE_N_TWILEKM = 48; -int DISGUISE_TYPE_N_WALRUSMAN = 49; -int DISGUISE_TYPE_N_WOOKIEF = 50; -int DISGUISE_TYPE_N_WOOKIEM = 51; -int DISGUISE_TYPE_N_YODA = 52; -int DISGUISE_TYPE_C_BANTHA = 53; -int DISGUISE_TYPE_C_BRITH = 54; -int DISGUISE_TYPE_C_DEWBACK = 55; -int DISGUISE_TYPE_C_DRDASSASSIN = 56; -int DISGUISE_TYPE_C_DRDASTRO = 57; -int DISGUISE_TYPE_C_DRDG = 58; -int DISGUISE_TYPE_C_DRDMKFOUR = 59; -int DISGUISE_TYPE_C_DRDMKONE = 60; -int DISGUISE_TYPE_C_DRDMKTWO = 61; -int DISGUISE_TYPE_C_DRDPROBE = 62; -int DISGUISE_TYPE_C_DRDPROT = 63; -int DISGUISE_TYPE_C_DRDSENTRY = 64; -int DISGUISE_TYPE_C_DRDSPYDER = 65; -int DISGUISE_TYPE_C_DRDWAR = 66; -int DISGUISE_TYPE_C_FIRIXA = 67; -int DISGUISE_TYPE_C_GAMMOREAN = 68; -int DISGUISE_TYPE_C_GIZKA = 69; -int DISGUISE_TYPE_C_HUTT = 70; -int DISGUISE_TYPE_C_IRIAZ = 71; -int DISGUISE_TYPE_C_ITHORIAN = 72; -int DISGUISE_TYPE_C_JAWA = 73; -int DISGUISE_TYPE_C_KATAARN = 74; -int DISGUISE_TYPE_C_KHOUNDA = 75; -int DISGUISE_TYPE_C_KHOUNDB = 76; -int DISGUISE_TYPE_C_KRAYTDRAGON = 77; -int DISGUISE_TYPE_C_MYKAL = 78; -int DISGUISE_TYPE_C_RAKGHOUL = 79; -int DISGUISE_TYPE_C_RANCOR = 80; -int DISGUISE_TYPE_C_SEABEAST = 81; -//int DISGUISE_TYPE_ = 82; -int DISGUISE_TYPE_C_TACH = 83; -int DISGUISE_TYPE_C_TWOHEAD = 84; -int DISGUISE_TYPE_C_VERKAAL = 85; -int DISGUISE_TYPE_C_WRAID = 86; -int DISGUISE_TYPE_C_RONTO = 87; -int DISGUISE_TYPE_C_KINRATH = 88; -int DISGUISE_TYPE_C_TUKATA = 89; -int DISGUISE_TYPE_N_TUSKENF = 90; -int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; -int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; -int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; -int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; -int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; -int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; -int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; -int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; -int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; -int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; -int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; -int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; -int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; -int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; -int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; -int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; -int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; -int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; -int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; -int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; -int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; -int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; -int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; -int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; -int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; -int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; -int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; -int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; -int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; -int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; -int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; -int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; -int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; -int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; -int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; -int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; -int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; -int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; -int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; -int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; -int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; -int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; -int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; -int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; -int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; -int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; -int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; -int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; -int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; -int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; -int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; -int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; -int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; -int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; -int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; -int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; -int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; -int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; -int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; -int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; -int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; -int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; -int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; -int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; -int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; -int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; -int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; -int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; -int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; -int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; -int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; -int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; -int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; -int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; -int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; -int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; -int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; -int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; -int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; -int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; -int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; -int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; -int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; -int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; -int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; -int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; -int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; -int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; -int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; -int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; -int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; -int DISGUISE_TYPE_TURRET = 182; -int DISGUISE_TYPE_TURRET2 = 183; -int DISGUISE_TYPE_N_DARTHBAND = 184; -int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; -int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; -int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; -int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; -int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; -int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; -int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; -int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; -int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; -int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; -int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; -int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; -int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; -int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; -int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; -int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; -int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; -int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; -int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; -int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; -int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; -int DISGUISE_TYPE_HUTT_02 = 228; -int DISGUISE_TYPE_HUTT_03 = 229; -int DISGUISE_TYPE_HUTT_04 = 230; -int DISGUISE_TYPE_DROID_ASTRO_02 = 231; -int DISGUISE_TYPE_DROID_ASTRO_03 = 232; -int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; -int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; -int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; -int DISGUISE_TYPE_DROID_WAR_02 = 236; -int DISGUISE_TYPE_DROID_WAR_03 = 237; -int DISGUISE_TYPE_DROID_WAR_04 = 238; -int DISGUISE_TYPE_DROID_WAR_05 = 239; -int DISGUISE_TYPE_GAMMOREAN_02 = 240; -int DISGUISE_TYPE_GAMMOREAN_03 = 241; -int DISGUISE_TYPE_GAMMOREAN_04 = 242; -int DISGUISE_TYPE_ITHORIAN_02 = 243; -int DISGUISE_TYPE_ITHORIAN_03 = 244; -int DISGUISE_TYPE_KATH_HOUND_A02 = 245; -int DISGUISE_TYPE_KATH_HOUND_A03 = 246; -int DISGUISE_TYPE_KATH_HOUND_A04 = 247; -int DISGUISE_TYPE_KATH_HOUND_B02 = 248; -int DISGUISE_TYPE_KATH_HOUND_B03 = 249; -int DISGUISE_TYPE_KATH_HOUND_B04 = 250; -int DISGUISE_TYPE_WRAID_02 = 251; -int DISGUISE_TYPE_WRAID_03 = 252; -int DISGUISE_TYPE_WRAID_04 = 253; -int DISGUISE_TYPE_RAKATA_02 = 254; -int DISGUISE_TYPE_RAKATA_03 = 255; -int DISGUISE_TYPE_RODIAN_02 = 256; -int DISGUISE_TYPE_RODIAN_03 = 257; -int DISGUISE_TYPE_RODIAN_04 = 258; -int DISGUISE_TYPE_SELKATH_02 = 259; -int DISGUISE_TYPE_SELKATH_03 = 260; -int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; -int DISGUISE_TYPE_SWOOP_GANG_02 = 262; -int DISGUISE_TYPE_SWOOP_GANG_03 = 263; -int DISGUISE_TYPE_SWOOP_GANG_04 = 264; -int DISGUISE_TYPE_SWOOP_GANG_05 = 265; -int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; -int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; -int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; -int DISGUISE_TYPE_TWILEK_MALE_02 = 269; -int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; -int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; -int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; -int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; -int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; -int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; -int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; -int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; -int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; -int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; -int DISGUISE_TYPE_YUTHURA_BAN = 280; -int DISGUISE_TYPE_SHYRACK_01 = 281; -int DISGUISE_TYPE_SHYRACK_02 = 282; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; -int DISGUISE_TYPE_SITH_FEM_WHITE = 291; -int DISGUISE_TYPE_SITH_FEM_BLACK = 292; -int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; -int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; -int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; -int DISGUISE_TYPE_SITH_MAL_WHITE = 296; -int DISGUISE_TYPE_SITH_MAL_BLACK = 297; -int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; -int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; -int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; -int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; -int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; -int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; -int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; -int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; -int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; - -int PLOT_O_DOOM = 0; -int PLOT_O_SCARY_STUFF = 1; -int PLOT_O_BIG_MONSTERS = 2; - -int FORMATION_WEDGE = 0; -int FORMATION_LINE = 1; - -int SUBSCREEN_ID_NONE = 0; -int SUBSCREEN_ID_EQUIP = 1; -int SUBSCREEN_ID_ITEM = 2; -int SUBSCREEN_ID_CHARACTER_RECORD = 3; -int SUBSCREEN_ID_ABILITY = 4; -int SUBSCREEN_ID_MAP = 5; -int SUBSCREEN_ID_QUEST = 6; -int SUBSCREEN_ID_OPTIONS = 7; -int SUBSCREEN_ID_MESSAGES = 8; - -int SHIELD_DROID_ENERGY_1 = 0; -int SHIELD_DROID_ENERGY_2 = 1; -int SHIELD_DROID_ENERGY_3 = 2; -int SHIELD_DROID_ENVIRO_1 = 3; -int SHIELD_DROID_ENVIRO_2 = 4; -int SHIELD_DROID_ENVIRO_3 = 5; -int SHIELD_ENERGY = 6; -int SHIELD_ENERGY_SITH = 7; -int SHIELD_ENERGY_ARKANIAN = 8; -int SHIELD_ECHANI = 9; -int SHIELD_MANDALORIAN_MELEE = 10; -int SHIELD_MANDALORIAN_POWER = 11; -int SHIELD_DUELING_ECHANI = 12; -int SHIELD_DUELING_YUSANIS = 13; -int SHIELD_VERPINE_PROTOTYPE = 14; -int SHIELD_ANTIQUE_DROID = 15; -int SHIELD_PLOT_TAR_M09AA = 16; -int SHIELD_PLOT_UNK_M44AA = 17; -int SHIELD_PLOT_MAN_M28AA = 18; -int SHIELD_HEAT = 19; -int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 - - -int SUBRACE_NONE = 0; -int SUBRACE_WOOKIE = 1; - -int VIDEO_EFFECT_NONE = -1; -int VIDEO_EFFECT_SECURITY_CAMERA = 0; -int VIDEO_EFFECT_FREELOOK_T3M4 = 1; -int VIDEO_EFFECT_FREELOOK_HK47 = 2; -int VIDEO_EFFECT_CLAIRVOYANCE = 3; -int VIDEO_EFFECT_FORCESIGHT = 4; -int VIDEO_EFFECT_VISAS_FREELOOK = 5; -int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; -int VIDEO_EFFECT_FURY_1 = 7; -int VIDEO_EFFECT_FURY_2 = 8; -int VIDEO_EFFECT_FURY_3 = 9; -int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. - -// DJS-OEI 1/14/2004 -// Modified the way these work. The values -// listed here are now direct references to -// rows in Tutorial.2DA. Originally these -// would have to be converted to .2DA ids -// in the code. -int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; -int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; -// DJS-OEI 11/21/2003 -int TUTORIAL_WINDOW_TEMP1 = 42; -int TUTORIAL_WINDOW_TEMP2 = 43; -int TUTORIAL_WINDOW_TEMP3 = 44; -int TUTORIAL_WINDOW_TEMP4 = 45; -int TUTORIAL_WINDOW_TEMP5 = 46; -int TUTORIAL_WINDOW_TEMP6 = 47; -int TUTORIAL_WINDOW_TEMP7 = 48; -int TUTORIAL_WINDOW_TEMP8 = 49; -int TUTORIAL_WINDOW_TEMP9 = 50; -int TUTORIAL_WINDOW_TEMP10 = 51; -int TUTORIAL_WINDOW_TEMP11 = 52; -int TUTORIAL_WINDOW_TEMP12 = 53; -int TUTORIAL_WINDOW_TEMP13 = 54; -int TUTORIAL_WINDOW_TEMP14 = 55; -int TUTORIAL_WINDOW_TEMP15 = 56; - -int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 -int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 -int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 -int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 -int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 - -int MOVEMENT_SPEED_PC = 0; -int MOVEMENT_SPEED_IMMOBILE = 1; -int MOVEMENT_SPEED_VERYSLOW = 2; -int MOVEMENT_SPEED_SLOW = 3; -int MOVEMENT_SPEED_NORMAL = 4; -int MOVEMENT_SPEED_FAST = 5; -int MOVEMENT_SPEED_VERYFAST = 6; -int MOVEMENT_SPEED_DEFAULT = 7; -int MOVEMENT_SPEED_DMFAST = 8; - -int LIVE_CONTENT_PKG1 = 1; -int LIVE_CONTENT_PKG2 = 2; -int LIVE_CONTENT_PKG3 = 3; -int LIVE_CONTENT_PKG4 = 4; -int LIVE_CONTENT_PKG5 = 5; -int LIVE_CONTENT_PKG6 = 6; - -//RWT-OEI 12/16/03 -// These constants are for the Implant Swapping support in a_swapimplant -// They correspond directly with the ACTIONIDs in the game for each of the -// implant swapping actions. -int IMPLANT_NONE = 0; -int IMPLANT_REGEN = 1; -int IMPLANT_STR = 2; -int IMPLANT_END = 3; -int IMPLANT_AGI = 4; - -// DJS-OEI 6/12/2004 -// These constants can be OR'ed together and sent to SetForfeitConditions() -// in order to set up flagging situations that will alert the area script that -// the player has violated them. This is usually used for Battle Arena restrictions. -int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers -int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) -int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. -int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start - // of one of the Dxun Battle Circle fights, or no weapon at all. -int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. -int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. -int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. -int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. - -string sLanguage = "nwscript"; - - -// 0: Get an integer between 0 and nMaxInteger-1. -// Return value on error: 0 -int Random(int nMaxInteger); - -// 1: Output sString to the log file. -void PrintString(string sString); - -// 2: Output a formatted float to the log file. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); - -// 3: Convert fFloat into a string. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); - -// 4: Output nInteger to the log file. -void PrintInteger(int nInteger); - -// 5: Output oObject's ID to the log file. -void PrintObject(object oObject); - -// 6: Assign aActionToAssign to oActionSubject. -// * No return value, but if an error occurs, the log file will contain -// "AssignCommand failed." -// (If the object doesn't exist, nothing happens.) -void AssignCommand(object oActionSubject,action aActionToAssign); - -// 7: Delay aActionToDelay by fSeconds. -// * No return value, but if an error occurs, the log file will contain -// "DelayCommand failed.". -void DelayCommand(float fSeconds, action aActionToDelay); - -// 8: Make oTarget run sScript and then return execution to the calling script. -// If sScript does not specify a compiled script, nothing happens. -// - nScriptVar: This value will be returned by calls to GetRunScriptVar. -void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); - -// 9: Clear all the actions of the caller. (This will only work on Creatures) -// * No return value, but if an error occurs, the log file will contain -// "ClearAllActions failed.". -void ClearAllActions(); - -// 10: Cause the caller to face fDirection. -// - fDirection is expressed as anticlockwise degrees from Due East. -// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are -// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -void SetFacing(float fDirection); - -// 11: Switches the main character to a specified NPC -// -1 specifies to switch back to the original PC -int SwitchPlayerCharacter(int nNPC); - -// 12: Set the time to the time specified. -// - nHour should be from 0 to 23 inclusive -// - nMinute should be from 0 to 59 inclusive -// - nSecond should be from 0 to 59 inclusive -// - nMillisecond should be from 0 to 999 inclusive -// 1) Time can only be advanced forwards; attempting to set the time backwards -// will result in the day advancing and then the time being set to that -// specified, e.g. if the current hour is 15 and then the hour is set to 3, -// the day will be advanced by 1 and the hour will be set to 3. -// 2) If values larger than the max hour, minute, second or millisecond are -// specified, they will be wrapped around and the overflow will be used to -// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds -// and 10 milliseconds will result in the calendar day being advanced by 2 -// and the time being set to 18 hours, 10 minutes, 10 milliseconds. -void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); - -// 13: Sets (by NPC constant) which party member should be the controlled -// character -int SetPartyLeader(int nNPC); - -// 14: Sets whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -void SetAreaUnescapable(int bUnescapable); - -// 15: Returns whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -int GetAreaUnescapable(); - -// 16: Get the current hour. -int GetTimeHour(); - -// 17: Get the current minute -int GetTimeMinute(); - -// 18: Get the current second -int GetTimeSecond(); - -// 19: Get the current millisecond -int GetTimeMillisecond(); - -// 20: The action subject will generate a random location near its current location -// and pathfind to it. All commands will remove a RandomWalk() from the action -// queue if there is one in place. -// * No return value, but if an error occurs the log file will contain -// "ActionRandomWalk failed." -void ActionRandomWalk(); - -// 21: The action subject will move to lDestination. -// - lDestination: The object will move to this location. If the location is -// invalid or a path cannot be found to it, the command does nothing. -// - bRun: If this is TRUE, the action subject will run rather than walk -// * No return value, but if an error occurs the log file will contain -// "MoveToPoint failed." -void ActionMoveToLocation(location lDestination, int bRun=FALSE); - -// 22: Cause the action subject to move to a certain distance from oMoveTo. -// If there is no path to oMoveTo, this command will do nothing. -// - oMoveTo: This is the object we wish the action subject to move to -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fRange: This is the desired distance between the action subject and oMoveTo -// * No return value, but if an error occurs the log file will contain -// "ActionMoveToObject failed." -void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); - -// 23: Cause the action subject to move to a certain distance away from oFleeFrom. -// - oFleeFrom: This is the object we wish the action subject to move away from. -// If oFleeFrom is not in the same area as the action subject, nothing will -// happen. -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fMoveAwayRange: This is the distance we wish the action subject to put -// between themselves and oFleeFrom -// * No return value, but if an error occurs the log file will contain -// "ActionMoveAwayFromObject failed." -void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 24: Get the area that oTarget is currently in -// * Return value on error: OBJECT_INVALID -object GetArea(object oTarget); - -// 25: The value returned by this function depends on the object type of the caller: -// 1) If the caller is a door or placeable it returns the object that last -// triggered it. -// 2) If the caller is a trigger, area of effect, module, area or encounter it -// returns the object that last entered it. -// * Return value on error: OBJECT_INVALID -object GetEnteringObject(); - -// 26: Get the object that last left the caller. This function works on triggers, -// areas of effect, modules, areas and encounters. -// * Return value on error: OBJECT_INVALID -object GetExitingObject(); - -// 27: Get the position of oTarget -// * Return value on error: vector (0.0f, 0.0f, 0.0f) -vector GetPosition(object oTarget); - -// 28: Get the direction in which oTarget is facing, expressed as a float between -// 0.0f and 360.0f -// * Return value on error: -1.0f -float GetFacing(object oTarget); - -// 29: Get the possessor of oItem -// * Return value on error: OBJECT_INVALID -object GetItemPossessor(object oItem); - -// 30: Get the object possessed by oCreature with the tag sItemTag -// * Return value on error: OBJECT_INVALID -object GetItemPossessedBy(object oCreature, string sItemTag); - -// 31: Create an item with the template sItemTemplate in oTarget's inventory. -// - nStackSize: This is the stack size of the item to be created -// * Return value: The object that has been created. On error, this returns -// OBJECT_INVALID. -//RWT-OEI 12/16/03 - Added the bHideMessage parameter -object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); - -// 32: Equip oItem into nInventorySlot. -// - nInventorySlot: INVENTORY_SLOT_* -// * No return value, but if an error occurs the log file will contain -// "ActionEquipItem failed." -void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); - -// 33: Unequip oItem from whatever slot it is currently in. -void ActionUnequipItem( object oItem, int bInstant = FALSE ); - -// 34: Pick up oItem from the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPickUpItem failed." -void ActionPickUpItem(object oItem); - -// 35: Put down oItem on the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPutDownItem failed." -void ActionPutDownItem(object oItem); - -// 36: Get the last attacker of oAttackee. This should only be used ONLY in the -// OnAttacked events for creatures, placeables and doors. -// * Return value on error: OBJECT_INVALID -object GetLastAttacker(object oAttackee=OBJECT_SELF); - -// 37: Attack oAttackee. -// - bPassive: If this is TRUE, attack is in passive mode. -void ActionAttack(object oAttackee, int bPassive=FALSE); - -// 38: Get the creature nearest to oTarget, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -// DJS-OEI 8/26/2004 -// Added a parameter for the percentage of HP the target -// should receive when they are revived. -effect EffectResurrection( int nHPPercent=0 ); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). -// This can be called by a creature or by an Area of Effect object. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature -// dies. Note that NO XP will be awarded if the creature is killed with this parameter. -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust -// the playercharacter's alignment without impacting the rest of the NPCs -void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. -// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the feat due to daily limits or -// other restrictions. Use GetFeatAcquired() if you just want to -// know if they've got it or not. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then -//this function will only return true if the character is in REAL combat. -//If you don't know what that means, don't pass in TRUE. -int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. -// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* -// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen -// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able -// to access Item Upgrading. -void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the spell due to lack of sufficient -// Force Points. Use GetSpellAcquired() if you just want to -// know if they've got it or not. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// nWindow - A row index from Tutorial.2DA specifying the message to display. -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); - - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 20 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 20 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 12 and 28 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 12 and 28 -// the value range is 0 to 255 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -// nNPC - NPC_ -// returns 1 if in current party, 0 if selectable as a party member -// -1 if not in party at all -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE -// to this parameter makes it possible for the player to cancel out -// of the party selection GUI, so be careful that you are okay with -// them cancelling out of it before you pass TRUE. -// Also, in the sExitScript that gets called after the Party Select -// GUI exits, you can use GetRunScriptVar to find out if they -// cancelled. If it returns TRUE, they didn't cancel. If it returns -// FALSE, they cancelled. See me if there's questions. -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(int nNPC, object oidNPC); - -// DJS-OEI -// 768. GetScriptParameter -// This function will take the index of a script parameter -// and return the value associated with it. The index -// of the first parameter is 1. -int GetScriptParameter( int nIndex ); - -//RWT-OEI 12/10/03 -// 769. SetFadeUntilScript -// This script function will make it so that the fade cannot be lifted under any circumstances -// other than a call to the SetGlobalFadeIn() script. -// This function should be called AFTER the fade has already been called. For example, you would -// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() -// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new -// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript -// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. -void SetFadeUntilScript(); - -// DJS-OEI 12/15/2003 -// 770: Create a Force Body effect -// - nLevel: The level of the Force Body effect. -// 0 = Force Body -// 1 = Improved Force Body -// 2 = Master Force Body -effect EffectForceBody(int nLevel); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item -int GetItemComponent( ); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item in pieces -int GetItemComponentPieceValue( ); - -// FAK-OEI 12/15/2003 -// 773: Start the GUI for Chemical Workshop -void ShowChemicalUpgradeScreen(object oCharacter ); - -// FAK-OEI 12/15/2003 -// 774: Get the number of chemicals for an item -int GetChemicals( ); - -// FAK-OEI 12/15/2003 -// 775: Get the number of chemicals for an item in pieces -int GetChemicalPieceValue( ); - -// DJS-OEI 12/30/2003 -// 776: Get the number of Force Points that were required to -// cast this spell. This includes modifiers such as Room Force -// Ratings and the Force Body power. -// * Return value on error: 0 -int GetSpellForcePointCost( ); - -// DJS-OEI 1/2/2004 -// 777: Create a Fury effect. -effect EffectFury(); - -// DJS-OEI 1/3/2004 -// 778: Create a Blind effect. -effect EffectBlind(); - -// DJS-OEI 1/4/2004 -// 779: Create an FP regeneration modifier effect. -effect EffectFPRegenModifier( int nPercent ); - -// DJS-OEI 1/4/2004 -// 780: Create a VP regeneration modifier effect. -effect EffectVPRegenModifier( int nPercent ); - -// DJS-OEI 1/9/2004 -// 781: Create a Force Crush effect. -effect EffectCrush(); - -// FAK - OEI 1/12/04 -// 782: Minigame grabs a swoop bike upgrade -int SWMG_GetSwoopUpgrade( int nSlot ); - -// DJS-OEI 1/12/2004 -// 783: Returns whether or not the target has access to a feat, -// even if they can't use it right now due to daily limits or -// other restrictions. -int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); - -// DJS-OEI 1/12/2004 -// 784: Returns whether or not the target has access to a spell, -// even if they can't use it right now due to lack of Force Points. -int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); - -// FAK-OEI 1/12/2004 -// 785: Displays the Swoop Bike upgrade screen. -void ShowSwoopUpgradeScreen( ); - -// DJS-OEI 1/13/2004 -// 786: Grants the target a feat without regard for prerequisites. -void GrantFeat( int nFeat, object oCreature ); - -// DJS-OEI 1/13/2004 -// 787: Grants the target a spell without regard for prerequisites. -void GrantSpell( int nSpell, object oCreature ); - -// DJS-OEI 1/13/2004 -// 788: Places an active mine on the map. -// nMineType - Mine Type from Traps.2DA -// lPoint - The location in the world to place the mine. -// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA -// results in the final DC for creatures to detect this mine. -// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA -// results in the final DC for creatures to disarm this mine. -// oCreator - The object that should be considered the owner of the mine. -// If oCreator is set to OBJECT_INVALID, the faction of the mine will be -// considered Hostile1, meaning the party will be vulnerable to it. -void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); - -// FAK - OEI 1/15/04 -// 789: Yet another minigame function. Returns the object's track's position. -vector SWMG_GetTrackPosition(object oFollower); - -// FAK - OEI 1/15/04 -// 790: minigame function that lets you psuedo-set the position of a follower object -vector SWMG_SetFollowerPosition(vector vPos); - -//RWT-OEI 01/16/04 -// 791: A function to put the character into a true combat state but the reason set to -// not real combat. This should help us control animations in cutscenes with a bit -// more precision. -- Not totally sure this is doing anything just yet. Seems -// the combat condition gets cleared shortly after anyway. -// If nEnable is 1, it enables fake combat mode. If 0, it disables it. -// WARNING: Whenever using this function to enable fake combat mode, you should -// have a matching call to it to disable it. (pass 0 for nEnable). -void SetFakeCombatState( object oObject, int nEnable ); - -// FAK - OEI 1/23/04 -// 792: minigame function that deletes a minigame object -void SWMG_DestroyMiniGameObject(object oObject); - -// DJS-OEI 1/26/2004 -// 793: Returns the Demolitions skill of the creature that -// placed this mine. This will often be 0. This function accepts -// the object that the mine is attached to (Door, Placeable, or Trigger) -// and will determine which one it actually is at runtime. -int GetOwnerDemolitionsSkill( object oObject ); - -// RWT-OEI 01/29/04 -// 794: Disables or Enables the Orient On Click behavior in creatures. If -// disabled, they will not orient to face the player when clicked on -// for dialogue. The default behavior is TRUE. -void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); - -// DJS-OEI 1/29/2004 -// 795: Gets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, the return -// value with be 0. If the character is in the party, but has an -// attitude of Ambivalent, this will be -1. -int GetInfluence( int nNPC ); - -// DJS-OEI 1/29/2004 -// 796: Sets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nInfluence - The new value for the influence on this CNPC. -void SetInfluence( int nNPC, int nInfluence ); - -// DJS-OEI 1/29/2004 -// 797: Modifies the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nModifier - The modifier to the current influence on this CNPC. -// This may be a negative value to reduce the influence. -void ModifyInfluence( int nNPC, int nModifier ); - -// FAK - OEI 2/3/04 -// 798: returns the racial sub-type of the oTarget object -int GetRacialSubType(object oTarget); - -// DJS-OEI 2/3/2004 -// 799: Increases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is greater than the max -// of 127. -void IncrementGlobalNumber( string sIdentifier, int nAmount ); - -// DJS-OEI 2/3/2004 -// 800: Decreases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is less than the minimum -// of -128. -void DecrementGlobalNumber( string sIdentifier, int nAmount ); - -// RWT-OEI 02/06/04 -// 801: SetBonusForcePoints - This sets the number of bonus force points -// that will always be added to that character's total calculated -// force points. -void SetBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 802: AddBonusForcePoints - This adds nBonusFP to the current total -// bonus that the player has. The Bonus Force Points are a pool -// of force points that will always be added after the player's -// total force points are calculated (based on level, force dice, -// etc.) -void AddBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 803: GetBonusForcePoints - This returns the total number of bonus -// force points a player has. Bonus Force Points are a pool of -// points that are always added to a player's Max Force Points. -// ST: Please explain how a function returning VOID could return a -// numerical value? Hope it works changing the return type... -// void GetBonusForcePoints( object oCreature ); -int GetBonusForcePoints( object oCreature ); - -// FAK - OEI 2/11/04 -// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop -// bike races. Gravity will act upon this velocity. -void SWMG_SetJumpSpeed(float fSpeed); - -// PC CODE MERGER -// 805. IsMoviePlaying--dummy func so we can compile -int IsMoviePlaying(); - -// 806 QueueMovie -void QueueMovie(string sMovie, int nSkippable = TRUE); - -// 807 -void PlayMovieQueue(int nAllowSkips = TRUE); - -// 808 -void YavinHackDoorClose(object oCreature); - -// 809 -// new function for droid confusion so inherint mind immunity can be -// avoided. -effect EffectDroidConfused(); -// END PC CODE MERGER - -// 810 -// DJS-OEI 3/8/2004 -// Determines if the given creature is in Stealth mode or not. -// 0 = Creature is not stealthed. -// 1 = Creature is stealthed. -// This function will return 0 for any non-creature. -int IsStealthed( object oCreature ); - -// 811 -// DJS-OEI 3/12/2004 -// Determines if the given creature is using any Meditation Tree -// Force Power. -// 0 = Creature is not meditating. -// 1 = Creature is meditating. -// This function will return 0 for any non-creature. -int IsMeditating( object oCreature ); - -// 812 -// DJS-OEI 3/16/2004 -// Determines if the given creature is using the Total Defense -// Stance. -// 0 = Creature is not in Total Defense. -// 1 = Creature is in Total Defense. -// This function will return 0 for any non-creature. -int IsInTotalDefense( object oCreature ); - -// 813 -// RWT-OEI 03/19/04 -// Stores a Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -void SetHealTarget( object oidHealer, object oidTarget ); - -// 814 -// RWT-OEI 03/19/04 -// Retrieves the Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -object GetHealTarget( object oidHealer ); - -// 815 -// RWT-OEI 03/23/04 -// Returns a vector containing a random destination that the -// given creature can walk to that's within the range of the -// passed parameter. -vector GetRandomDestination( object oCreature, int rangeLimit ); - -// 816 -// DJS-OEI 3/25/2004 -// Returns whether the given creature is currently in the -// requested Lightsaber/Consular Form and can make use of -// its benefits. This function will perform trumping checks -// and lightsaber-wielding checks for those Forms that require -// them. -int IsFormActive( object oCreature, int nFormID ); - -// 817 -// DJS-OEI 3/28/2004 -// Returns the Form Mask of the requested spell. This is used -// to determine if a spell is affected by various Forms, usually -// Consular forms that modify duration/range. -int GetSpellFormMask( int nSpellID ); - -// 818 -// DJS-OEI 3/29/2004 -// Return the base number of Force Points required to cast -// the given spell. This does not take into account modifiers -// of any kind. -int GetSpellBaseForcePointCost( int nSpellID ); - -// 819 -// RWT-OEI 04/05/04 -// Setting this to TRUE makes it so that the Stealth status is -// left on characters even when entering cutscenes. By default, -// stealth is removed from anyone taking part in a cutscene. -// ALWAYS set this back to FALSE on every End Dialog node in -// the cutscene you wanted to stay stealthed in. This isn't a -// flag that should be left on indefinitely. In fact, it isn't -// saved, so needs to be set/unset on a case by case basis. -void SetKeepStealthInDialog( int nStealthState ); - -// 820 -// RWT-OEI 04/06/04 -// This returns TRUE or FALSE if there is a clear line of sight from -// the source vector to the target vector. This is used in the AI to -// help the creatures using ranged weapons find better places to shoot -// when the player moves out of sight. -int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); - -// 821 -// FAK - OEI 5/3/04 -// ShowDemoScreen, displays a texture, timeout, string and xy for string -int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); - -// 822 -// DJS-OEI 5/4/2004 -// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES -// AT THE MOMENT. This heartbeat should force perception updates to occur. -void ForceHeartbeat( object oCreature ); - -// 823 -// DJS-OEI 5/5/2004 -// Creates a Force Sight effect. -effect EffectForceSight(); - -// 824 -// FAK - OEI 5/7/04 -// gets the walk state of the creature: 0 walk or standing, 1 is running -int IsRunning( object oCreature ); - -// 825 -// FAK - OEI 5/24/04 -// applies a velocity to the player object -void SWMG_PlayerApplyForce(vector vForce); - -// 826 -// DJS-OEI 6/12/2004 -// This function allows a script to set the conditions which constitute -// a combat forfeit by a member of the player's party. This is typically -// used to handle Battle Circle behavior or other challenge-based combats. -// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. -void SetForfeitConditions( int nForfeitFlags ); - -// 827 -// DJS-OEI 6/12/2004 -// This function returns the last FORFEIT_* condition that the player -// has violated. -int GetLastForfeitViolation(); - -// 828 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the REFLEX saving throw for aObject -void ModifyReflexSavingThrowBase(object aObject, int aModValue); - -// 829 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the FORTITUDE saving throw for aObject -void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); - -// 830 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the WILL saving throw for aObject -void ModifyWillSavingThrowBase(object aObject, int aModValue); - -// DJS-OEI 6/21/2004 -// 831 -// This function will return the one CExoString parameter -// allowed for the currently running script. -string GetScriptStringParameter(); - -// 832 -// AWD-OEI 6/29/2004 -// This function returns the personal space value of an object -float GetObjectPersonalSpace(object aObject); - -// 833 -// AWD-OEI 7/06/2004 -// This function adjusts a creatures stats. -// oObject is the creature that will have it's attribute adjusted -// The following constants are acceptable for the nAttribute parameter: -// ABILITY_STRENGTH -// ABILITY_DEXTERITY -// ABILITY_CONSTITUTION -// ABILITY_INTELLIGENCE -// ABILITY_WISDOM -// ABILITY_CHARISMA -// nAmount is the integer vlaue to adjust the stat by (negative values will work). -void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); - -// 834 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void SetCreatureAILevel(object oObject, int nPriority); - -// 835 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void ResetCreatureAILevel(object oObject); - -// 836 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// template. -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); - -// 837 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// creature ID -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByObject( int nPUP, object oPuppet ); - -// 838 -// RWT-OEI 07/17/04 -// This function assigns a PUPPET constant to a -// Party NPC. The party NPC -MUST- be in the game -// before calling this. -// Both the PUP and the NPC have -// to be available in their respective tables -// Returns 1 if successful, 0 if there was an error -int AssignPUP( int nPUP, int nNPC ); - -// 839 -// RWT-OEI 07/17/04 -// This function spawns a Party PUPPET. -// This must be used whenever you want a copy -// of the puppet around to manipulate in the game -// since the puppet is stored in the party table -// just like NPCs are. Once a puppet is assigned -// to a party NPC (see AssignPUP), it will spawn -// or disappear whenever its owner joins or leaves -// the party. -// This does not add it to the party automatically, -// just like SpawnNPC doesn't. You must call AddPuppet() -// to actually add it to the party -object SpawnAvailablePUP( int nPUP, location lLocation ); - -// 840 -// RWT-OEI 07/18/04 -// This adds an existing puppet object to the party. The -// puppet object must already exist via SpawnAvailablePUP -// and must already be available via AddAvailablePUP* -// functions. -int AddPartyPuppet(int nPUP, object oidCreature); - -// 841 -// RWT-OEI 07/19/04 -// This returns the object ID of the puppet's owner. -// The Puppet's owner must exist and must be in the party -// in order to be found. -// Returns invalid object Id if the owner cannot be found. -object GetPUPOwner(object oPUP = OBJECT_SELF); - -// 842 -// RWT-OEI 07/19/04 -// Returns 1 if the creature is a Puppet in the party. -// Otherwise returns 0. It is possible for a 'party puppet' -// to exist without actually being in the party table. -// such as when SpawnAvailablePUP is used without subsequently -// using AddPartyPuppet to add the newly spawned puppet to -// the party table. A puppet in that in-between state would -// return 0 from this function -int GetIsPuppet(object oPUP = OBJECT_SELF ); - -// 843 -// RWT-OEI 07/20/04 -// Similiar to ActionFollowLeader() except the creature -// follows its owner -//nRange is how close it should follow. Note that once this -//action is queued, it will be the only thing this creature -//does until a ClearAllActions() is used. -void ActionFollowOwner(float fRange = 2.5); - -// 844 -// RWT-OEI 07/21/04 -// Returns TRUE if the object ID passed is the character -// that the player is actively controlling at that point. -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -int GetIsPartyLeader(object oCharacter = OBJECT_SELF); - -// 845 -// RWT-OEI 07/21/04 -// Returns the object ID of the character that the player -// is actively controlling. This is the 'Party Leader'. -// Returns object Invalid on error -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -object GetPartyLeader(); - -// 846 -// JAB-OEI 07/22/04 -// Will remove the CNPC from the 3 person party, and remove -// him/her from the area, effectively sending the CNPC back -// to the base. The CNPC data is still stored in the -// party table, and calling this function will not destroy -// the CNPC in any way. -// Returns TRUE for success. -int RemoveNPCFromPartyToBase(int nNPC); - -// 847 -// AWD-OEI 7/22/2004 -// This causes a creature to flourish with it's currently equipped weapon. -void CreatureFlourishWeapon(object oObject); - -// 848 -// Create a Mind Trick effect -effect EffectMindTrick(); - -// 849 -// Create a Faction Modifier effect. -effect EffectFactionModifier( int nNewFaction ); - -// 850 -// ChangeObjectAppearance -// oObjectToChange = Object to change appearance of -// nAppearance = appearance to change to (from appearance.2da) -void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); - -// 851 -// GetIsXBox -// Returns TRUE if this script is being executed on the X-Box. Returns FALSE -// if this is the PC build. -int GetIsXBox(); - -// 852 -// Create a Droid Scramble effect -effect EffectDroidScramble(); - -// 853 -// ActionSwitchWeapons -// Forces the creature to switch between Config 1 and Config 2 -// of their equipment. Does not work in dialogs. Works with -// AssignCommand() -void ActionSwitchWeapons(); - -// 854 -// DJS-OEI 8/29/2004 -// PlayOverlayAnimation -// This function will play an overlay animation on a character -// even if the character is moving. This does not cause an action -// to be placed on the queue. The animation passed in must be -// designated as an overlay in Animations.2DA. -void PlayOverlayAnimation( object oTarget, int nAnimation ); - -// 855 -// RWT-OEI 08/30/04 -// UnlockAllSongs -// Calling this will set all songs as having been unlocked. -// It is INTENDED to be used in the end-game scripts to unlock -// any end-game songs as well as the KotOR1 sound track. -void UnlockAllSongs(); - -// 856 -// RWT-OEI 08/31/04 -// Passing TRUE into this function turns off the player's maps. -// Passing FALSE into this function re-enables them. This change -// is permanent once called, so it is important that there *is* -// a matching call to DisableMap(FALSE) somewhere or else the -// player is stuck without a map indefinitely. -void DisableMap(int nFlag = FALSE); - -// 857 -// RWT-OEI 08/31/04 -// This function schedules a mine to play its DETONATION -// animation once it is destroyed. Note that this detonates -// the mine immediately but has nothing to do with causing -// the mine to do any damage to anything around it. To -// get the mine to damage things around it when it detonates -// do: -// AssignCommand(,ExecuteScript( "k_trp_generic",)); -// right before you call DetonateMine(). By my experience so far -// you don't need any kind of delay between the two. -void DetonateMine(object oMine); - -// 858 -// RWT-OEI 09/06/04 -// This function turns off the innate health regeneration that all party -// members have. The health regen will *stay* off until it is turned back -// on by passing FALSE to this function. -void DisableHealthRegen(int nFlag = FALSE); - -// 859 -// DJS-OEI 9/7/2004 -// This function sets the current Jedi Form on the given creature. This -// call will do nothing if the target does not know the Form itself. -void SetCurrentForm( object oCreature, int nFormID ); - -// 860 -// RWT-OEI 09/09/04 -// This will disable or enable area transit -void SetDisableTransit(int nFlag = FALSE); - -// 861 -//RWT-OEI 09/09/04 -// This will set the specific input class. -// The valid options are: -// 0 - Normal PC control -// 1 - Mini game control -// 2 - GUI control -// 3 - Dialog Control -// 4 - Freelook control -void SetInputClass(int nClass); - -// 862 -//RWT-OEI 09/15/04 -// This script allows an object to recieve updates even if it is outside -//the normal range limit of 250.0f meters away from the player. This should -//ONLY be used for cutscenes that involve objects that are more than 250 -//meters away from the player. It needs to be used on a object by object -//basis. -//This flag should *always* be set to false once the cutscene it is needed -//for is over, or else the game will spend CPU time updating the object -//when it doesn't need to. -//For questions on use of this function, or what its purpose is, check -//with me. -void SetForceAlwaysUpdate(object oObject, int nFlag); - -//863 -//RWT-OEI 09/15/04 -//This function enables or disables rain -void EnableRain( int nFlag ); - -//864 -//RWT-OEI 09/27/04 -//This function displays the generic Message Box with the strref -//message in it -//sIcon is the resref for an icon you would like to display. -void DisplayMessageBox(int nStrRef, string sIcon = ""); - -//865 -//RWT-OEI 09/28/04 -//This function displays a datapad popup. Just pass it the -//object ID of a datapad. -void DisplayDatapad(object oDatapad); - -// 866 -// CTJ-OEI 09-29-04 -// Removes the heartbeat script on the placeable. Useful for -// placeables whose contents get populated in the heartbeat -// script and then the heartbeat no longer needs to be called. -void RemoveHeartbeat(object oPlaceable); - - -//867 -// JF-OEI 10-07-2004 -// Remove an effect by ID -void RemoveEffectByID( object oCreature, int nEffectID ); - -//868 -// RWT-OEI 10/07/04 -// This script removes an effect by an identical match -// based on: -// Must have matching EffectID types. -// Must have the same value in Integer(0) -// Must have the same value in Integer(1) -// I'm specifically using this function for Mandalore's implant swapping -// script and it will probably not be useful for anyone else. If you're -// not sure what this script function does, see me before using it. -void RemoveEffectByExactMatch( object oCreature, effect eEffect); - -// 869 -// DJS-OEI 10/9/2004 -// This function adjusts a creature's skills. -// oObject is the creature that will have its skill adjusted -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// nAmount is the integer value to adjust the stat by (negative values will work). -void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); - -// 870 -// DJS-OEI 10/10/2004 -// This function returns the base Skill Rank for the requested -// skill. It does not include modifiers from effects/items. -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// oObject is the creature that will have its skill base returned. -int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); - -// 871 -// DJS-OEI 10/15/2004 -// This function will allow the caller to modify the rendering behavior -// of the target object. -// oObject - The object to change rendering state on. -// bEnable - If 0, the object will stop rendering. Else, the object will render. -void EnableRendering( object oObject, int bEnable ); - -// 872 -// RWT-OEI 10/19/04 -// This function returns TRUE if the creature has actions in its -// Combat Action queue. -int GetCombatActionsPending(object oCreature); - -// 873 -// RWT-OEI 10/26/04 -// This function saves the party member at that index with the object -// that is passed in. -void SaveNPCByObject( int nNPC, object oidCharacter); - -// 874 -// RWT-OEI 10/26/04 -// This function saves the party puppet at that index with the object -// that is passed in. For the Remote, just use '0' for nPUP -void SavePUPByObject( int nPUP, object oidPuppet ); - -// 875 -// RWT-OEI 10/29/04 -// Returns TRUE if the object passed in is the character that the player -// made at the start of the game -int GetIsPlayerMadeCharacter(object oidCharacter); - -// 876 -// RWT-OEI 11/12/04 -// This repopulates the NPCObject table in CSWPartyTable. Do not use this -// unless you understand exactly what it is doing. -void RebuildPartyTable(); diff --git a/K1/nwnnsscomp/KTool/nwnnsscomp.exe b/K1/nwnnsscomp/KTool/nwnnsscomp.exe deleted file mode 100644 index ff8140fe25306725263b249f0f60656550b0749e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266240 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

yHU#pT_#B(`_;`PmclN(P4A#>B)7^-l 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≈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 CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -effect EffectResurrection(); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: 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. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -void AdjustAlignment(object oSubject, int nAlignment, int nShift); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -int GetIsInCombat(object oCreature=OBJECT_SELF); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -void ShowUpgradeScreen(object oItem = OBJECT_INVALID); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef); - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 0 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 0 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 0 and 0 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 0 and 0 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); - -// 768. IsMoviePlaying -// Checks if a movie is currently playing. -int IsMoviePlaying(); - -// 769. QueueMovie -// Queues up a movie to be played using PlayMovieQueue. -// If bSkippable is TRUE, the player can cancel the movie by hitting escape. -// If bSkippable is FALSE, the player cannot cancel the movie and must wait -// for it to finish playing. -void QueueMovie( string sMovie, int bSkippable ); - -// 770. PlayMovieQueue -// Plays the movies that have been added to the queue by QueueMovie -// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only -// cancels out of the currently playing movie rather than the entire queue -// of movies (assuming the currently playing movie is flagged as skippable). -// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled -// if the player hits escape (assuming the currently playing movie is flagged -// as skippable). -void PlayMovieQueue( int bAllowSeparateSkips ); - -// 771. YavinHackCloseDoor -// This is an incredibly hacky function to allow the doors to be properly -// closed on Yavin without running into the problems we've had. It is too -// late in development to fix it correctly, so thus we do this. Life is -// hard. You'll get over it -void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/K1/nwnnsscomp/V1/nwnnsscomp.exe b/K1/nwnnsscomp/V1/nwnnsscomp.exe deleted file mode 100644 index bef40b7784055700f73bacf914f2ee7da27b4727..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462848 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

Ksy#d{!eNofyjh=yQbGYJFx`cNaUeaL7V&t17P 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 ^*V{oa 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 z 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

j{S0Wm8i3_` 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"VY&YEDr*rf? zeGiU20UkdAKULifT+DRyBl9%Wth2R)9M-jm+7s+A?4!;mD93DX4-VU74soXz#)kPx zMW$|EfCyrn$PQ?9Z)5%vc6R(I>xjV)9Ko#wp zCvTE>C=%Ns+5A+Gxwq5Uhw3|z-YWwyve=mF9By-t;f!XYOIDgqtZvpM61-bhfBPk} zr4w+h`EDC;iuVwtr>U=yLo|mScJ#aWJ^j8U)`MWpqx`WD+klj3agq!DkD)OD*-_-iVgqv99~ zudL9J?>iBlbck%MITJ9SBBT0PgW`>E%`+#m+*6dGr-DB=&E}tVkiwm=}$H{X4VfkSOv_IS_ zj0?H>9Uhh4y#3x`{Mt#f$@BD;%XF6O zki-h?h{pQ~e&RnlTq=Y}!HGD$p@8VV@r> zjYm1;vT?Qo?XW)FohX!chTkC`&YG;HXq(J@GtXXcZz2yq43jJkXKTc%;8b!Fog^pK z5gf;9?kKK7G8Swnq`8sHcb=n_)E2(dQ%Z(2wPM$!1TQgzo|BF8DZn8Gf1xn=8;~90 zG84sx)WcHPOc9$VCE`iyB97hJcu9c&87Q5A(hQNNN;5*GvtG*QbDqa}T#Q}NKqp2*SH^1N*+QMF&CqgT zuq(_wa~&I(!E+awg)rG7ZbvD(SUk_0686aK4=iws;Ko;+h?~gHn84HbB$pcN zPIY&ZOx8g1!U2sLLA9+qG*V%;9VKwaB(yz zo6C;jPW1N`CRJ2;ripYMft0Z)r`(4E zQXUVdS{I(^NzOB(M3LIWD~a4fMM*;+jiwG3vW;D+l%Rx4*#N$!M6u16s2XZVcE5V7 z8Em@p97$zEUPn^Sr>Vp{PLNW_R|M72TA68127GZi=QR3X?0N=ie-;^Q4rya9x&I0; zkJDSv`Q>wh|69F9{3t(;v;Ci|u9e@G&Y0$Ri%%*EVxh(H*|%R7uHlhgkmRjsYE@kma13a)KOXm zEnZ8cx>Cts9HvS~m{G9RHH7;(mb*AZ%hGb_T`RO;YtQ&EJA2*qbiF_Re7&*B7;8>6 zXP8-N!d!0cI&N$Mw{<^s_jI^jb&E}LfxYQUs6ig)?tgbr;O+_BJ%PI?aQ6i6p1|D` ZxO)P3PvGte+&zK2Cvf)!{vV&fe*i+5gg*cP diff --git a/K1/nwnnsscomp/V1/nwscript.nss b/K1/nwnnsscomp/V1/nwscript.nss deleted file mode 100644 index 7a9b4f12d..000000000 --- a/K1/nwnnsscomp/V1/nwscript.nss +++ /dev/null @@ -1,5173 +0,0 @@ -//////////////////////////////////////////////////////// -// -// NWScript -// -// The list of actions and pre-defined constants. -// -// (c) BioWare Corp, 1999 -// -//////////////////////////////////////////////////////// - -#define ENGINE_NUM_STRUCTURES 4 -#define ENGINE_STRUCTURE_0 effect -#define ENGINE_STRUCTURE_1 event -#define ENGINE_STRUCTURE_2 location -#define ENGINE_STRUCTURE_3 talent - -// Constants - -int NUM_INVENTORY_SLOTS = 18; - -int TRUE = 1; -int FALSE = 0; - -float DIRECTION_EAST = 0.0; -float DIRECTION_NORTH = 90.0; -float DIRECTION_WEST = 180.0; -float DIRECTION_SOUTH = 270.0; -float PI = 3.141592; - -int ATTITUDE_NEUTRAL = 0; -int ATTITUDE_AGGRESSIVE = 1; -int ATTITUDE_DEFENSIVE = 2; -int ATTITUDE_SPECIAL = 3; - -int TALKVOLUME_TALK = 0; -int TALKVOLUME_WHISPER = 1; -int TALKVOLUME_SHOUT = 2; -int TALKVOLUME_SILENT_TALK = 3; -int TALKVOLUME_SILENT_SHOUT = 4; - -int INVENTORY_SLOT_HEAD = 0; -int INVENTORY_SLOT_BODY = 1; -int INVENTORY_SLOT_HANDS = 3; -int INVENTORY_SLOT_RIGHTWEAPON = 4; -int INVENTORY_SLOT_LEFTWEAPON = 5; -int INVENTORY_SLOT_LEFTARM = 7; -int INVENTORY_SLOT_RIGHTARM = 8; -int INVENTORY_SLOT_IMPLANT = 9; -int INVENTORY_SLOT_BELT = 10; -int INVENTORY_SLOT_CWEAPON_L = 14; -int INVENTORY_SLOT_CWEAPON_R = 15; -int INVENTORY_SLOT_CWEAPON_B = 16; -int INVENTORY_SLOT_CARMOUR = 17; - -//Effect type constants -int DURATION_TYPE_INSTANT = 0; -int DURATION_TYPE_TEMPORARY = 1; -int DURATION_TYPE_PERMANENT = 2; - -int SUBTYPE_MAGICAL = 8; -int SUBTYPE_SUPERNATURAL = 16; -int SUBTYPE_EXTRAORDINARY = 24; - -int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp -int ABILITY_DEXTERITY = 1; -int ABILITY_CONSTITUTION = 2; -int ABILITY_INTELLIGENCE = 3; -int ABILITY_WISDOM = 4; -int ABILITY_CHARISMA = 5; - -int SHAPE_SPELLCYLINDER = 0; -int SHAPE_CONE = 1; -int SHAPE_CUBE = 2; -int SHAPE_SPELLCONE = 3; -int SHAPE_SPHERE = 4; - -int OBJECT_TYPE_CREATURE = 1; -int OBJECT_TYPE_ITEM = 2; -int OBJECT_TYPE_TRIGGER = 4; -int OBJECT_TYPE_DOOR = 8; -int OBJECT_TYPE_AREA_OF_EFFECT = 16; -int OBJECT_TYPE_WAYPOINT = 32; -int OBJECT_TYPE_PLACEABLE = 64; -int OBJECT_TYPE_STORE = 128; -int OBJECT_TYPE_ENCOUNTER = 256; -int OBJECT_TYPE_SOUND = 512; -int OBJECT_TYPE_ALL = 32767; - -int OBJECT_TYPE_INVALID = 32767; - -int GENDER_MALE = 0; -int GENDER_FEMALE = 1; -int GENDER_BOTH = 2; -int GENDER_OTHER = 3; -int GENDER_NONE = 4; - -int DAMAGE_TYPE_BLUDGEONING = 1; -int DAMAGE_TYPE_PIERCING = 2; -int DAMAGE_TYPE_SLASHING = 4; -int DAMAGE_TYPE_UNIVERSAL = 8; -int DAMAGE_TYPE_ACID = 16; -int DAMAGE_TYPE_COLD = 32; -int DAMAGE_TYPE_LIGHT_SIDE = 64; -int DAMAGE_TYPE_ELECTRICAL = 128; -int DAMAGE_TYPE_FIRE = 256; -int DAMAGE_TYPE_DARK_SIDE = 512; -int DAMAGE_TYPE_SONIC = 1024; -int DAMAGE_TYPE_ION = 2048; -int DAMAGE_TYPE_BLASTER = 4096; - -// Special versus flag just for AC effects -int AC_VS_DAMAGE_TYPE_ALL = 8199; - -int DAMAGE_BONUS_1 = 1; -int DAMAGE_BONUS_2 = 2; -int DAMAGE_BONUS_3 = 3; -int DAMAGE_BONUS_4 = 4; -int DAMAGE_BONUS_5 = 5; -int DAMAGE_BONUS_1d4 = 6; -int DAMAGE_BONUS_1d6 = 7; -int DAMAGE_BONUS_1d8 = 8; -int DAMAGE_BONUS_1d10 = 9; -int DAMAGE_BONUS_2d6 = 10; - -int DAMAGE_POWER_NORMAL = 0; -int DAMAGE_POWER_PLUS_ONE = 1; -int DAMAGE_POWER_PLUS_TWO = 2; -int DAMAGE_POWER_PLUS_THREE = 3; -int DAMAGE_POWER_PLUS_FOUR = 4; -int DAMAGE_POWER_PLUS_FIVE = 5; -int DAMAGE_POWER_ENERGY = 6; - -int ATTACK_BONUS_MISC = 0; -int ATTACK_BONUS_ONHAND = 1; -int ATTACK_BONUS_OFFHAND = 2; - -int AC_DODGE_BONUS = 0; -int AC_NATURAL_BONUS = 1; -int AC_ARMOUR_ENCHANTMENT_BONUS = 2; -int AC_SHIELD_ENCHANTMENT_BONUS = 3; -int AC_DEFLECTION_BONUS = 4; - -int DOOR_ACTION_OPEN = 0; -int DOOR_ACTION_UNLOCK = 1; -int DOOR_ACTION_BASH = 2; -int DOOR_ACTION_IGNORE = 3; -int DOOR_ACTION_KNOCK = 4; - -int PLACEABLE_ACTION_USE = 0; -int PLACEABLE_ACTION_UNLOCK = 1; -int PLACEABLE_ACTION_BASH = 2; -int PLACEABLE_ACTION_KNOCK = 4; - - -int RACIAL_TYPE_UNKNOWN = 0; -int RACIAL_TYPE_ELF = 1; -int RACIAL_TYPE_GNOME = 2; -int RACIAL_TYPE_HALFLING = 3; -int RACIAL_TYPE_HALFELF = 4; -int RACIAL_TYPE_DROID = 5; -int RACIAL_TYPE_HUMAN = 6; -int RACIAL_TYPE_ALL = 7; -int RACIAL_TYPE_INVALID = 8; - -int ALIGNMENT_ALL = 0; -int ALIGNMENT_NEUTRAL = 1; -int ALIGNMENT_LIGHT_SIDE = 2; -int ALIGNMENT_DARK_SIDE = 3; - -int SAVING_THROW_ALL = 0; -int SAVING_THROW_FORT = 1; -int SAVING_THROW_REFLEX = 2; -int SAVING_THROW_WILL = 3; - -int SAVING_THROW_TYPE_ALL = 0; -int SAVING_THROW_TYPE_NONE = 0; -int SAVING_THROW_TYPE_ACID = 1; -int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; -int SAVING_THROW_TYPE_COLD = 3; -int SAVING_THROW_TYPE_DEATH = 4; -int SAVING_THROW_TYPE_DISEASE = 5; -int SAVING_THROW_TYPE_LIGHT_SIDE = 6; -int SAVING_THROW_TYPE_ELECTRICAL = 7; -int SAVING_THROW_TYPE_FEAR = 8; -int SAVING_THROW_TYPE_FIRE = 9; -int SAVING_THROW_TYPE_MIND_AFFECTING = 10; -int SAVING_THROW_TYPE_DARK_SIDE = 11; -int SAVING_THROW_TYPE_POISON = 12; -int SAVING_THROW_TYPE_SONIC = 13; -int SAVING_THROW_TYPE_TRAP = 14; -int SAVING_THROW_TYPE_FORCE_POWER = 15; -int SAVING_THROW_TYPE_ION = 16; -int SAVING_THROW_TYPE_BLASTER = 17; -int SAVING_THROW_TYPE_PARALYSIS = 18; - -int IMMUNITY_TYPE_NONE = 0; -int IMMUNITY_TYPE_MIND_SPELLS = 1; -int IMMUNITY_TYPE_POISON = 2; -int IMMUNITY_TYPE_DISEASE = 3; -int IMMUNITY_TYPE_FEAR = 4; -int IMMUNITY_TYPE_TRAP = 5; -int IMMUNITY_TYPE_PARALYSIS = 6; -int IMMUNITY_TYPE_BLINDNESS = 7; -int IMMUNITY_TYPE_DEAFNESS = 8; -int IMMUNITY_TYPE_SLOW = 9; -int IMMUNITY_TYPE_ENTANGLE = 10; -int IMMUNITY_TYPE_SILENCE = 11; -int IMMUNITY_TYPE_STUN = 12; -int IMMUNITY_TYPE_SLEEP = 13; -int IMMUNITY_TYPE_CHARM = 14; -int IMMUNITY_TYPE_DOMINATE = 15; -int IMMUNITY_TYPE_CONFUSED = 16; -int IMMUNITY_TYPE_CURSED = 17; -int IMMUNITY_TYPE_DAZED = 18; -int IMMUNITY_TYPE_ABILITY_DECREASE = 19; -int IMMUNITY_TYPE_ATTACK_DECREASE = 20; -int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; -int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; -int IMMUNITY_TYPE_AC_DECREASE = 23; -int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; -int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; -int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; -int IMMUNITY_TYPE_SKILL_DECREASE = 27; -int IMMUNITY_TYPE_KNOCKDOWN = 28; -int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; -int IMMUNITY_TYPE_SNEAK_ATTACK = 30; -int IMMUNITY_TYPE_CRITICAL_HIT = 31; -int IMMUNITY_TYPE_DEATH = 32; - -int AREA_TRANSITION_RANDOM = 0; -int AREA_TRANSITION_USER_DEFINED = 1; -int AREA_TRANSITION_CITY_01 = 2; -int AREA_TRANSITION_CITY_02 = 3; -int AREA_TRANSITION_CITY_03 = 4; -int AREA_TRANSITION_CITY_04 = 5; -int AREA_TRANSITION_CITY_05 = 6; -int AREA_TRANSITION_CRYPT_01 = 7; -int AREA_TRANSITION_CRYPT_02 = 8; -int AREA_TRANSITION_CRYPT_03 = 9; -int AREA_TRANSITION_CRYPT_04 = 10; -int AREA_TRANSITION_CRYPT_05 = 11; -int AREA_TRANSITION_DUNGEON_01 = 12; -int AREA_TRANSITION_DUNGEON_02 = 13; -int AREA_TRANSITION_DUNGEON_03 = 14; -int AREA_TRANSITION_DUNGEON_04 = 15; -int AREA_TRANSITION_DUNGEON_05 = 16; -int AREA_TRANSITION_DUNGEON_06 = 17; -int AREA_TRANSITION_DUNGEON_07 = 18; -int AREA_TRANSITION_DUNGEON_08 = 19; -int AREA_TRANSITION_MINES_01 = 20; -int AREA_TRANSITION_MINES_02 = 21; -int AREA_TRANSITION_MINES_03 = 22; -int AREA_TRANSITION_MINES_04 = 23; -int AREA_TRANSITION_MINES_05 = 24; -int AREA_TRANSITION_MINES_06 = 25; -int AREA_TRANSITION_MINES_07 = 26; -int AREA_TRANSITION_MINES_08 = 27; -int AREA_TRANSITION_MINES_09 = 28; -int AREA_TRANSITION_SEWER_01 = 29; -int AREA_TRANSITION_SEWER_02 = 30; -int AREA_TRANSITION_SEWER_03 = 31; -int AREA_TRANSITION_SEWER_04 = 32; -int AREA_TRANSITION_SEWER_05 = 33; -int AREA_TRANSITION_CASTLE_01 = 34; -int AREA_TRANSITION_CASTLE_02 = 35; -int AREA_TRANSITION_CASTLE_03 = 36; -int AREA_TRANSITION_CASTLE_04 = 37; -int AREA_TRANSITION_CASTLE_05 = 38; -int AREA_TRANSITION_CASTLE_06 = 39; -int AREA_TRANSITION_CASTLE_07 = 40; -int AREA_TRANSITION_CASTLE_08 = 41; -int AREA_TRANSITION_INTERIOR_01 = 42; -int AREA_TRANSITION_INTERIOR_02 = 43; -int AREA_TRANSITION_INTERIOR_03 = 44; -int AREA_TRANSITION_INTERIOR_04 = 45; -int AREA_TRANSITION_INTERIOR_05 = 46; -int AREA_TRANSITION_INTERIOR_06 = 47; -int AREA_TRANSITION_INTERIOR_07 = 48; -int AREA_TRANSITION_INTERIOR_08 = 49; -int AREA_TRANSITION_INTERIOR_09 = 50; -int AREA_TRANSITION_INTERIOR_10 = 51; -int AREA_TRANSITION_INTERIOR_11 = 52; -int AREA_TRANSITION_INTERIOR_12 = 53; -int AREA_TRANSITION_INTERIOR_13 = 54; -int AREA_TRANSITION_INTERIOR_14 = 55; -int AREA_TRANSITION_INTERIOR_15 = 56; -int AREA_TRANSITION_INTERIOR_16 = 57; -int AREA_TRANSITION_FOREST_01 = 58; -int AREA_TRANSITION_FOREST_02 = 59; -int AREA_TRANSITION_FOREST_03 = 60; -int AREA_TRANSITION_FOREST_04 = 61; -int AREA_TRANSITION_FOREST_05 = 62; -int AREA_TRANSITION_RURAL_01 = 63; -int AREA_TRANSITION_RURAL_02 = 64; -int AREA_TRANSITION_RURAL_03 = 65; -int AREA_TRANSITION_RURAL_04 = 66; -int AREA_TRANSITION_RURAL_05 = 67; - -// Legacy area-transition constants. Do not delete these. -int AREA_TRANSITION_CITY = 2; -int AREA_TRANSITION_CRYPT = 7; -int AREA_TRANSITION_FOREST = 58; -int AREA_TRANSITION_RURAL = 63; - -// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. -int BODY_NODE_HAND = 0; -int BODY_NODE_CHEST = 1; -int BODY_NODE_HEAD = 2; -// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The -// nodes used with be 'lhand' and 'rhand'. -int BODY_NODE_HAND_LEFT = 3; -int BODY_NODE_HAND_RIGHT = 4; - -float RADIUS_SIZE_SMALL = 1.67f; -float RADIUS_SIZE_MEDIUM = 3.33f; -float RADIUS_SIZE_LARGE = 5.0f; -float RADIUS_SIZE_HUGE = 6.67f; -float RADIUS_SIZE_GARGANTUAN = 8.33f; -float RADIUS_SIZE_COLOSSAL = 10.0f; - -// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType -int EFFECT_TYPE_INVALIDEFFECT = 0; -int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; -//int EFFECT_TYPE_ABILITY_BONUS = 2; -int EFFECT_TYPE_REGENERATE = 3; -//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; -//int EFFECT_TYPE_MODIFY_AC = 5; -//int EFFECT_TYPE_ATTACK_BONUS = 6; -int EFFECT_TYPE_DAMAGE_REDUCTION = 7; -//int EFFECT_TYPE_DAMAGE_BONUS = 8; -int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; -//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; -int EFFECT_TYPE_ENTANGLE = 11; -int EFFECT_TYPE_INVULNERABLE = 12; -int EFFECT_TYPE_DEAF = 13; -int EFFECT_TYPE_RESURRECTION = 14; -int EFFECT_TYPE_IMMUNITY = 15; -//int EFFECT_TYPE_BLIND = 16; -int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; -int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; -//int EFFECT_TYPE_MOVEMENT_SPEED = 19; -int EFFECT_TYPE_AREA_OF_EFFECT = 20; -int EFFECT_TYPE_BEAM = 21; -//int EFFECT_TYPE_FORCE_RESISTANCE = 22; -int EFFECT_TYPE_CHARMED = 23; -int EFFECT_TYPE_CONFUSED = 24; -int EFFECT_TYPE_FRIGHTENED = 25; -int EFFECT_TYPE_DOMINATED = 26; -int EFFECT_TYPE_PARALYZE = 27; -int EFFECT_TYPE_DAZED = 28; -int EFFECT_TYPE_STUNNED = 29; -int EFFECT_TYPE_SLEEP = 30; -int EFFECT_TYPE_POISON = 31; -int EFFECT_TYPE_DISEASE = 32; -int EFFECT_TYPE_CURSE = 33; -int EFFECT_TYPE_SILENCE = 34; -int EFFECT_TYPE_TURNED = 35; -int EFFECT_TYPE_HASTE = 36; -int EFFECT_TYPE_SLOW = 37; -int EFFECT_TYPE_ABILITY_INCREASE = 38; -int EFFECT_TYPE_ABILITY_DECREASE = 39; -int EFFECT_TYPE_ATTACK_INCREASE = 40; -int EFFECT_TYPE_ATTACK_DECREASE = 41; -int EFFECT_TYPE_DAMAGE_INCREASE = 42; -int EFFECT_TYPE_DAMAGE_DECREASE = 43; -int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; -int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; -int EFFECT_TYPE_AC_INCREASE = 46; -int EFFECT_TYPE_AC_DECREASE = 47; -int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; -int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; -int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; -int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; -int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; -int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; -int EFFECT_TYPE_SKILL_INCREASE = 54; -int EFFECT_TYPE_SKILL_DECREASE = 55; -int EFFECT_TYPE_INVISIBILITY = 56; -int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; -int EFFECT_TYPE_DARKNESS = 58; -int EFFECT_TYPE_DISPELMAGICALL = 59; -int EFFECT_TYPE_ELEMENTALSHIELD = 60; -int EFFECT_TYPE_NEGATIVELEVEL = 61; -int EFFECT_TYPE_DISGUISE = 62; -int EFFECT_TYPE_SANCTUARY = 63; -int EFFECT_TYPE_TRUESEEING = 64; -int EFFECT_TYPE_SEEINVISIBLE = 65; -int EFFECT_TYPE_TIMESTOP = 66; -int EFFECT_TYPE_BLINDNESS = 67; -int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; -int EFFECT_TYPE_DISPELMAGICBEST = 69; -int EFFECT_TYPE_ULTRAVISION = 70; -int EFFECT_TYPE_MISS_CHANCE = 71; -int EFFECT_TYPE_CONCEALMENT = 72; -int EFFECT_TYPE_SPELL_IMMUNITY = 73; -int EFFECT_TYPE_ASSUREDHIT = 74; -int EFFECT_TYPE_VISUAL = 75; -int EFFECT_TYPE_LIGHTSABERTHROW = 76; -int EFFECT_TYPE_FORCEJUMP = 77; -int EFFECT_TYPE_ASSUREDDEFLECTION = 78; - - -int ITEM_PROPERTY_ABILITY_BONUS = 0 ; -int ITEM_PROPERTY_AC_BONUS = 1 ; -int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; -int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; -int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; -int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; -int ITEM_PROPERTY_BONUS_FEAT = 9 ; -int ITEM_PROPERTY_ACTIVATE_ITEM = 10; -int ITEM_PROPERTY_DAMAGE_BONUS = 11; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; -int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; -int ITEM_PROPERTY_DECREASED_DAMAGE = 15; -int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; -int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; -int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; -int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; -int ITEM_PROPERTY_DECREASED_AC = 20; -int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; -int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; -int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; -int ITEM_PROPERTY_IMMUNITY = 24; -int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; -int ITEM_PROPERTY_KEEN = 28; -int ITEM_PROPERTY_LIGHT = 29; -int ITEM_PROPERTY_MIGHTY = 30; -int ITEM_PROPERTY_NO_DAMAGE = 31; -int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; -int ITEM_PROPERTY_REGENERATION = 35; -int ITEM_PROPERTY_SKILL_BONUS = 36; -int ITEM_PROPERTY_SECURITY_SPIKE = 37; -int ITEM_PROPERTY_ATTACK_BONUS = 38; -int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; -int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; -int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; -int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; -int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; -int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; -int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; -int ITEM_PROPERTY_TRAP = 46; -int ITEM_PROPERTY_TRUE_SEEING = 47; -int ITEM_PROPERTY_ON_MONSTER_HIT = 48; -int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; -int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; -int ITEM_PROPERTY_MONSTER_DAMAGE = 51; -int ITEM_PROPERTY_SPECIAL_WALK = 52; -int ITEM_PROPERTY_COMPUTER_SPIKE = 53; -int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; -int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; -int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; - -int BASE_ITEM_QUARTER_STAFF = 0; -int BASE_ITEM_STUN_BATON = 1; -int BASE_ITEM_LONG_SWORD = 2; -int BASE_ITEM_VIBRO_SWORD = 3; -int BASE_ITEM_SHORT_SWORD = 4; -int BASE_ITEM_VIBRO_BLADE = 5; -int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; -int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; -int BASE_ITEM_LIGHTSABER = 8; -int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; -int BASE_ITEM_SHORT_LIGHTSABER = 10; -int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; -int BASE_ITEM_BLASTER_PISTOL = 12; -int BASE_ITEM_HEAVY_BLASTER = 13; -int BASE_ITEM_HOLD_OUT_BLASTER = 14; -int BASE_ITEM_ION_BLASTER = 15; -int BASE_ITEM_DISRUPTER_PISTOL = 16; -int BASE_ITEM_SONIC_PISTOL = 17; -int BASE_ITEM_ION_RIFLE = 18; -int BASE_ITEM_BOWCASTER = 19; -int BASE_ITEM_BLASTER_CARBINE = 20; -int BASE_ITEM_DISRUPTER_RIFLE = 21; -int BASE_ITEM_SONIC_RIFLE = 22; -int BASE_ITEM_REPEATING_BLASTER = 23; -int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; -int BASE_ITEM_FRAGMENTATION_GRENADES = 25; -int BASE_ITEM_STUN_GRENADES = 26; -int BASE_ITEM_THERMAL_DETONATOR = 27; -int BASE_ITEM_POISON_GRENADE = 28; -int BASE_ITEM_FLASH_GRENADE = 29; -int BASE_ITEM_SONIC_GRENADE = 30; -int BASE_ITEM_ADHESIVE_GRENADE = 31; -int BASE_ITEM_CRYOBAN_GRENADE = 32; -int BASE_ITEM_FIRE_GRENADE = 33; -int BASE_ITEM_ION_GRENADE = 34; -int BASE_ITEM_JEDI_ROBE = 35; -int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; -int BASE_ITEM_JEDI_MASTER_ROBE = 37; -int BASE_ITEM_ARMOR_CLASS_4 = 38; -int BASE_ITEM_ARMOR_CLASS_5 = 39; -int BASE_ITEM_ARMOR_CLASS_6 = 40; -int BASE_ITEM_ARMOR_CLASS_7 = 41; -int BASE_ITEM_ARMOR_CLASS_8 = 42; -int BASE_ITEM_ARMOR_CLASS_9 = 43; -int BASE_ITEM_MASK = 44; -int BASE_ITEM_GAUNTLETS = 45; -int BASE_ITEM_FOREARM_BANDS = 46; -int BASE_ITEM_BELT = 47; -int BASE_ITEM_IMPLANT_1 = 48; -int BASE_ITEM_IMPLANT_2 = 49; -int BASE_ITEM_IMPLANT_3 = 50; -int BASE_ITEM_DATA_PAD = 52; -int BASE_ITEM_ADRENALINE = 53; -int BASE_ITEM_COMBAT_SHOTS = 54; -int BASE_ITEM_MEDICAL_EQUIPMENT = 55; -int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; -int BASE_ITEM_CREDITS = 57; -int BASE_ITEM_TRAP_KIT = 58; -int BASE_ITEM_SECURITY_SPIKES = 59; -int BASE_ITEM_PROGRAMMING_SPIKES = 60; -int BASE_ITEM_GLOW_ROD = 61; -int BASE_ITEM_COLLAR_LIGHT = 62; -int BASE_ITEM_TORCH = 63; -int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; -int BASE_ITEM_AESTHETIC_ITEM = 65; -int BASE_ITEM_DROID_LIGHT_PLATING = 66; -int BASE_ITEM_DROID_MEDIUM_PLATING = 67; -int BASE_ITEM_DROID_HEAVY_PLATING = 68; -int BASE_ITEM_DROID_SEARCH_SCOPE = 69; -int BASE_ITEM_DROID_MOTION_SENSORS = 70; -int BASE_ITEM_DROID_SONIC_SENSORS = 71; -int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; -int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; -int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; -int BASE_ITEM_DROID_SHIELD = 75; -int BASE_ITEM_DROID_UTILITY_DEVICE = 76; -int BASE_ITEM_BLASTER_RIFLE = 77; -int BASE_ITEM_GHAFFI_STICK = 78; -int BASE_ITEM_WOOKIE_WARBLADE = 79; -int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; -int BASE_ITEM_CREATURE_ITEM_SLASH = 81; -int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; -int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; -int BASE_ITEM_CREATURE_HIDE_ITEM = 84; -int BASE_ITEM_BASIC_CLOTHING = 85; - -int BASE_ITEM_INVALID = 256; - - -// AMF: These constants define attack results -int ATTACK_RESULT_INVALID = 0; -int ATTACK_RESULT_HIT_SUCCESSFUL = 1; -int ATTACK_RESULT_CRITICAL_HIT = 2; -int ATTACK_RESULT_AUTOMATIC_HIT = 3; - -int ATTACK_RESULT_MISS = 4; -int ATTACK_RESULT_ATTACK_RESISTED = 5; -int ATTACK_RESULT_ATTACK_FAILED = 6; - -int ATTACK_RESULT_PARRIED = 8; -int ATTACK_RESULT_DEFLECTED = 9; - - -// these match the constants in visualeffects.2da -int VFX_NONE = -1; - -int VFX_IMP_HEALING_SMALL = 1001; -int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; -int VFX_PRO_AFFLICT = 1003; -int VFX_IMP_CHOKE = 1004; -int VFX_IMP_CURE = 1005; -int VFX_PRO_DEATH_FIELD = 1006; -int VFX_PRO_DROID_DISABLE = 1007; -int VFX_PRO_DROID_KILL = 1008; -int VFX_PRO_DRAIN = 1009; -int VFX_PRO_FORCE_ARMOR = 1010; -int VFX_PRO_FORCE_AURA = 1011; -int VFX_IMP_FORCE_BREACH = 1012; -int VFX_IMP_FORCE_PUSH = 1014; -int VFX_PRO_FORCE_SHIELD = 1015; -int VFX_IMP_FORCE_WAVE = 1017; -int VFX_IMP_FORCE_WHIRLWIND = 1018; -int VFX_IMP_HEAL = 1019; -int VFX_IMP_SPEED_KNIGHT = 1020; -int VFX_PRO_LIGHTNING_L = 1021; -int VFX_IMP_SPEED_MASTERY = 1022; -int VFX_PRO_RESIST_ELEMENTS = 1025; -int VFX_PRO_RESIST_FORCE = 1026; -int VFX_PRO_RESIST_POISON = 1027; -int VFX_PRO_LIGHTNING_S = 1028; -int VFX_IMP_MIND_FORCE = 1031; -int VFX_IMP_SUPPRESS_FORCE = 1032; -int VFX_IMP_MIND_KINIGHT = 1033; -int VFX_IMP_MIND_MASTERY = 1034; -int VFX_PRO_LIGHTNING_JEDI = 1035; -int VFX_PRO_LIGHTNING_L_SOUND = 1036; -int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; -int VFX_IMP_FLAME = 1039; -int VFX_IMP_STUN = 1040; - -int VFX_DUR_STEALTH_PULSE = 2000; -int VFX_DUR_INVISIBILITY = 2001; -int VFX_DUR_SPEED = 2004; -int VFX_DUR_FORCE_WHIRLWIND = 2007; -int VFX_DUR_HOLD = 2008; -int VFX_DUR_BODY_FUAL = 2024; -int VFX_DUR_PSYCHIC_STATIC = 2025; -int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; -int VFX_BEAM_DROID_DISABLE = 2027; -int VFX_BEAM_DROID_DESTROY = 2028; -int VFX_BEAM_DRAIN_LIFE = 2029; -int VFX_DUR_KNIGHTS_SPEED = 2031; -int VFX_DUR_SHIELD_RED_MARK_I = 2032; -int VFX_DUR_SHIELD_RED_MARK_II = 2034; -int VFX_DUR_SHIELD_RED_MARK_IV = 2035; -int VFX_BEAM_LIGHTNING_DARK_S = 2037; -int VFX_BEAM_LIGHTNING_DARK_L = 2038; -int VFX_DUR_SHIELD_BLUE_01 = 2040; -int VFX_DUR_SHIELD_BLUE_02 = 2041; -int VFX_DUR_SHIELD_BLUE_03 = 2042; -int VFX_DUR_SHIELD_BLUE_04 = 2043; -int VFX_DUR_SHIELD_GREEN_01 = 2044; -int VFX_DUR_SHIELD_RED_01 = 2045; -int VFX_DUR_SHIELD_RED_02 = 2046; -int VFX_DUR_SHIELD_CHROME_01 = 2047; -int VFX_DUR_SHIELD_CHROME_02 = 2048; -int VFX_BEAM_ION_RAY_01 = 2049; -int VFX_BEAM_ION_RAY_02 = 2050; -int VFX_BEAM_COLD_RAY = 2051; -int VFX_BEAM_STUN_RAY = 2052; -int VFX_BEAM_FLAME_SPRAY = 2053; -int VFX_DUR_CARBONITE_ENCASING = 2054; -int VFX_DUR_CARBONITE_CHUNKS = 2055; -int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; -int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; -int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; - -int VFX_FNF_FORCE_WAVE = 3001; -int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; -int VFX_FNF_GRENADE_FRAGMENTATION = 3003; -int VFX_FNF_GRENADE_STUN = 3004; -int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; -int VFX_FNF_GRENADE_POISON = 3006; -int VFX_FNF_GRENADE_SONIC = 3007; -int VFX_FNF_GRENADE_ADHESIVE = 3008; -int VFX_FNF_GRENADE_CRYOBAN = 3009; -int VFX_FNF_GRENADE_PLASMA = 3010; -int VFX_FNF_GRENADE_ION = 3011; -int VFX_FNF_GRAVITY_GENERATOR = 3013; - -int VFX_COM_SPARKS_LARGE = 4003; -int VFX_COM_SPARKS_LIGHTSABER = 4004; -int VFX_COM_SPARKS_PARRY_METAL = 4011; -int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; -int VFX_COM_POWER_BLAST_IMPROVED = 4013; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; -int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; -int VFX_COM_MULTI_SHOT = 4016; -int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; -int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; -int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; -int VFX_COM_SNIPER_SHOT_MASTERY = 4020; -int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; -int VFX_COM_RAPID_SHOT_IMPROVED = 4022; -int VFX_COM_BLASTER_DEFLECTION = 4023; -int VFX_COM_BLASTER_IMPACT = 4024; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; -int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; -int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; -int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; -int VFX_COM_POWER_BLAST_MASTERY = 4029; -int VFX_COM_FLURRY_IMPROVED_SABER = 4030; -int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; -int VFX_COM_BLASTER_IMPACT_GROUND = 4032; -int VFX_COM_SPARKS_BLASTER = 4033; -int VFX_COM_DROID_EXPLOSION_1 = 4034; -int VFX_COM_DROID_EXPLOSION_2 = 4035; -int VFX_COM_JEDI_FORCE_FIZZLE = 4036; -int VFX_COM_FORCE_RESISTED = 4037; - -int VFX_ARD_LIGHT_YELLOW_10 = 5000; -int VFX_ARD_LIGHT_YELLOW_20 = 5001; -int VFX_ARD_LIGHT_BLIND = 5002; -int VFX_ARD_HEAT_SHIMMER = 5003; - -int VFX_IMP_MIRV = 6000; -int VFX_IMP_MIRV_IMPACT = 6001; -int VFX_IMP_SCREEN_SHAKE = 6002; - - -int AOE_PER_FOGACID = 0; -int AOE_PER_FOGFIRE = 1; -int AOE_PER_FOGSTINK = 2; -int AOE_PER_FOGKILL = 3; -int AOE_PER_FOGMIND = 4; -int AOE_PER_WALLFIRE = 5; -int AOE_PER_WALLWIND = 6; -int AOE_PER_WALLBLADE = 7; -int AOE_PER_WEB = 8; -int AOE_PER_ENTANGLE = 9; -//int AOE_PER_CHAOS = 10; -int AOE_PER_DARKNESS = 11; -int AOE_MOB_CIRCEVIL = 12; -int AOE_MOB_CIRCGOOD = 13; -int AOE_MOB_CIRCLAW = 14; -int AOE_MOB_CIRCCHAOS = 15; -int AOE_MOB_FEAR = 16; -int AOE_MOB_BLINDING = 17; -int AOE_MOB_UNEARTHLY = 18; -int AOE_MOB_MENACE = 19; -int AOE_MOB_UNNATURAL = 20; -int AOE_MOB_STUN = 21; -int AOE_MOB_PROTECTION = 22; -int AOE_MOB_FIRE = 23; -int AOE_MOB_FROST = 24; -int AOE_MOB_ELECTRICAL = 25; -int AOE_PER_FOGGHOUL = 26; -int AOE_MOB_TYRANT_FOG = 27; -int AOE_PER_STORM = 28; -int AOE_PER_INVIS_SPHERE = 29; -int AOE_MOB_SILENCE = 30; -int AOE_PER_DELAY_BLAST_FIREBALL = 31; -int AOE_PER_GREASE = 32; -int AOE_PER_CREEPING_DOOM = 33; -int AOE_PER_EVARDS_BLACK_TENTACLES = 34; -int AOE_MOB_INVISIBILITY_PURGE = 35; -int AOE_MOB_DRAGON_FEAR = 36; - -// these constants match those in spell.2da -int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. -int FORCE_POWER_MASTER_ALTER = 0; -int FORCE_POWER_MASTER_CONTROL = 1; -int FORCE_POWER_MASTER_SENSE = 2; -int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; -int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; -int FORCE_POWER_REGNERATION_ADVANCED = 5; -int FORCE_POWER_AFFECT_MIND = 6; -int FORCE_POWER_AFFLICTION = 7; -int FORCE_POWER_SPEED_BURST = 8; -int FORCE_POWER_CHOKE = 9; -int FORCE_POWER_CURE = 10; -int FORCE_POWER_DEATH_FIELD = 11; -int FORCE_POWER_DROID_DISABLE = 12; -int FORCE_POWER_DROID_DESTROY = 13; -int FORCE_POWER_DOMINATE = 14; -int FORCE_POWER_DRAIN_LIFE = 15; -int FORCE_POWER_FEAR = 16; -int FORCE_POWER_FORCE_ARMOR = 17; -int FORCE_POWER_FORCE_AURA = 18; -int FORCE_POWER_FORCE_BREACH = 19; -int FORCE_POWER_FORCE_IMMUNITY = 20; -int FORCE_POWER_FORCE_JUMP = 21; -int FORCE_POWER_FORCE_MIND = 22; -int FORCE_POWER_FORCE_PUSH = 23; -int FORCE_POWER_FORCE_SHIELD = 24; -int FORCE_POWER_FORCE_STORM = 25; -int FORCE_POWER_FORCE_WAVE = 26; -int FORCE_POWER_FORCE_WHIRLWIND = 27; -int FORCE_POWER_HEAL = 28; -int FORCE_POWER_HOLD = 29; -int FORCE_POWER_HORROR = 30; -int FORCE_POWER_INSANITY = 31; -int FORCE_POWER_KILL = 32; -int FORCE_POWER_KNIGHT_MIND = 33; -int FORCE_POWER_KNIGHT_SPEED = 34; -int FORCE_POWER_LIGHTNING = 35; -int FORCE_POWER_MIND_MASTERY = 36; -int FORCE_POWER_SPEED_MASTERY = 37; -int FORCE_POWER_PLAGUE = 38; -int FORCE_POWER_REGENERATION = 39; -int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; -int FORCE_POWER_RESIST_FORCE = 41; -int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; -int FORCE_POWER_SHOCK = 43; -int FORCE_POWER_SLEEP = 44; -int FORCE_POWER_SLOW = 45; -int FORCE_POWER_STUN = 46; -int FORCE_POWER_DROID_STUN = 47; -int FORCE_POWER_SUPRESS_FORCE = 48; -int FORCE_POWER_LIGHT_SABER_THROW = 49; -int FORCE_POWER_WOUND = 50; -int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; -int SPECIAL_ABILITY_BODY_FUEL = 52; -int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; -int SPECIAL_ABILITY_WARRIOR_STANCE = 54; -int SPECIAL_ABILITY_SENTINEL_STANCE = 55; -int SPECIAL_ABILITY_DOMINATE_MIND = 56; -int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; -int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; -int SPECIAL_ABILITY_ENHANCED_SENSES = 59; -int SPECIAL_ABILITY_CAMOFLAGE = 60; -int SPECIAL_ABILITY_TAUNT = 61; -int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; -int SPECIAL_ABILITY_RAGE = 63; - -// these constants must match those in poison.2da - -int POISON_ABILITY_SCORE_MILD = 0; -int POISON_ABILITY_SCORE_AVERAGE = 1; -int POISON_ABILITY_SCORE_VIRULENT = 2; -int POISON_DAMAGE_MILD = 3; -int POISON_DAMAGE_AVERAGE = 4; -int POISON_DAMAGE_VIRULENT = 5; - -// the thing after CREATURE_TYPE_ should refer to the -// actual "subtype" in the lists given above. -int CREATURE_TYPE_RACIAL_TYPE = 0; -int CREATURE_TYPE_PLAYER_CHAR = 1; -int CREATURE_TYPE_CLASS = 2; -int CREATURE_TYPE_REPUTATION = 3; -int CREATURE_TYPE_IS_ALIVE = 4; -int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; -int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; -int CREATURE_TYPE_PERCEPTION = 7; -//int CREATURE_TYPE_ALIGNMENT = 2; - -int REPUTATION_TYPE_FRIEND = 0; -int REPUTATION_TYPE_ENEMY = 1; -int REPUTATION_TYPE_NEUTRAL = 2; - -int PERCEPTION_SEEN_AND_HEARD = 0; -int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; -int PERCEPTION_HEARD_AND_NOT_SEEN = 2; -int PERCEPTION_SEEN_AND_NOT_HEARD = 3; -int PERCEPTION_NOT_HEARD = 4; -int PERCEPTION_HEARD = 5; -int PERCEPTION_NOT_SEEN = 6; -int PERCEPTION_SEEN = 7; - -int PLAYER_CHAR_NOT_PC = FALSE; -int PLAYER_CHAR_IS_PC = TRUE; - -int CLASS_TYPE_SOLDIER = 0; -int CLASS_TYPE_SCOUT = 1; -int CLASS_TYPE_SCOUNDREL = 2; -int CLASS_TYPE_JEDIGUARDIAN = 3; -int CLASS_TYPE_JEDICONSULAR = 4; -int CLASS_TYPE_JEDISENTINEL = 5; -int CLASS_TYPE_COMBATDROID = 6; -int CLASS_TYPE_EXPERTDROID = 7; -int CLASS_TYPE_MINION = 8; - -int CLASS_TYPE_INVALID = 255; - -// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() -int PERSISTENT_ZONE_ACTIVE = 0; -int PERSISTENT_ZONE_FOLLOW = 1; - -int INVALID_STANDARD_FACTION = -1; -int STANDARD_FACTION_HOSTILE_1 = 1; -int STANDARD_FACTION_FRIENDLY_1 = 2; -int STANDARD_FACTION_HOSTILE_2 = 3; -int STANDARD_FACTION_FRIENDLY_2 = 4; -int STANDARD_FACTION_NEUTRAL = 5; -int STANDARD_FACTION_INSANE = 6; -int STANDARD_FACTION_PTAT_TUSKAN = 7; -int STANDARD_FACTION_GLB_XOR = 8; -int STANDARD_FACTION_SURRENDER_1 = 9; -int STANDARD_FACTION_SURRENDER_2 = 10; -int STANDARD_FACTION_PREDATOR = 11; -int STANDARD_FACTION_PREY = 12; -int STANDARD_FACTION_TRAP = 13; -int STANDARD_FACTION_ENDAR_SPIRE = 14; -int STANDARD_FACTION_RANCOR = 15; -int STANDARD_FACTION_GIZKA_1 = 16; -int STANDARD_FACTION_GIZKA_2 = 17; - -// Skill defines -int SKILL_COMPUTER_USE = 0; -int SKILL_DEMOLITIONS = 1; -int SKILL_STEALTH = 2; -int SKILL_AWARENESS = 3; -int SKILL_PERSUADE = 4; -int SKILL_REPAIR = 5; -int SKILL_SECURITY = 6; -int SKILL_TREAT_INJURY = 7; -int SKILL_MAX_SKILLS = 8; - -int SUBSKILL_FLAGTRAP = 100; -int SUBSKILL_RECOVERTRAP = 101; -int SUBSKILL_EXAMINETRAP = 102; - -// FEATS -//int FEAT_ADVANCED_DODGE = 0; -int FEAT_ADVANCED_JEDI_DEFENSE = 1; -int FEAT_ADVANCED_GUARD_STANCE = 2; -int FEAT_AMBIDEXTERITY = 3; -int FEAT_ARMOUR_PROF_HEAVY = 4; -int FEAT_ARMOUR_PROF_LIGHT = 5; -int FEAT_ARMOUR_PROF_MEDIUM = 6; -int FEAT_CAUTIOUS = 7; -int FEAT_CRITICAL_STRIKE = 8; -int FEAT_DOUBLE_WEAPON_FIGHTING = 9; -int FEAT_EMPATHY = 10; -int FEAT_FLURRY = 11; -int FEAT_GEAR_HEAD = 12; -int FEAT_GREAT_FORTITUDE = 13; -int FEAT_IMPLANT_LEVEL_1 = 14; -int FEAT_IMPLANT_LEVEL_2 = 15; -int FEAT_IMPLANT_LEVEL_3 = 16; -int FEAT_IMPROVED_POWER_ATTACK = 17; -int FEAT_IMPROVED_POWER_BLAST = 18; -int FEAT_IMPROVED_CRITICAL_STRIKE = 19; -int FEAT_IMPROVED_SNIPER_SHOT = 20; -int FEAT_IRON_WILL = 21; -int FEAT_LIGHTNING_REFLEXES = 22; -//int FEAT_MASTER_DODGE = 23; -int FEAT_MASTER_JEDI_DEFENSE = 24; -int FEAT_MASTER_GUARD_STANCE = 25; -int FEAT_MULTI_SHOT = 26; -int FEAT_PERCEPTIVE = 27; -int FEAT_POWER_ATTACK = 28; -int FEAT_POWER_BLAST = 29; -int FEAT_RAPID_SHOT = 30; -int FEAT_SNIPER_SHOT = 31; -int FEAT_WEAPON_FOCUS_BLASTER = 32; -int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; -int FEAT_WEAPON_FOCUS_GRENADE = 34; -int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; -int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; -int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; -int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; -int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; -int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; -int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; -int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; -int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; -int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; -int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; -int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; -int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; -int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; -int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; -int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; -int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; -int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; -int FEAT_WHIRLWIND_ATTACK = 53; -int FEAT_GUARD_STANCE = 54; -int FEAT_JEDI_DEFENSE = 55; -int FEAT_UNCANNY_DODGE_1 = 56; -int FEAT_UNCANNY_DODGE_2 = 57; -int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; -//int FEAT_DODGE = 59; -int FEAT_SNEAK_ATTACK_1D6 = 60; -int FEAT_SNEAK_ATTACK_2D6 = 61; -int FEAT_SNEAK_ATTACK_3D6 = 62; -int FEAT_SNEAK_ATTACK_4D6 = 63; -int FEAT_SNEAK_ATTACK_5D6 = 64; -int FEAT_SNEAK_ATTACK_6D6 = 65; -int FEAT_SNEAK_ATTACK_7D6 = 66; -int FEAT_SNEAK_ATTACK_8D6 = 67; -int FEAT_SNEAK_ATTACK_9D6 = 68; -int FEAT_SNEAK_ATTACK_10D6 = 69; -int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; -int FEAT_SKILL_FOCUS_STEALTH = 71; -int FEAT_SKILL_FOCUS_AWARENESS = 72; -int FEAT_SKILL_FOCUS_PERSUADE = 73; -int FEAT_SKILL_FOCUS_REPAIR = 74; -int FEAT_SKILL_FOCUS_SECURITY = 75; -int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; -int FEAT_MASTER_SNIPER_SHOT = 77; -int FEAT_DROID_UPGRADE_1 = 78; -int FEAT_DROID_UPGRADE_2 = 79; -int FEAT_DROID_UPGRADE_3 = 80; -int FEAT_MASTER_CRITICAL_STRIKE = 81; -int FEAT_MASTER_POWER_BLAST = 82; -int FEAT_MASTER_POWER_ATTACK = 83; -int FEAT_TOUGHNESS = 84; -int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; -int FEAT_FORCE_FOCUS_ALTER = 86; -int FEAT_FORCE_FOCUS_CONTROL = 87; -int FEAT_FORCE_FOCUS_SENSE = 88; -int FEAT_FORCE_FOCUS_ADVANCED = 89; -int FEAT_FORCE_FOCUS_MASTERY = 90; -int FEAT_IMPROVED_FLURRY = 91; -int FEAT_IMPROVED_RAPID_SHOT = 92; -int FEAT_PROFICIENCY_ALL = 93; -int FEAT_BATTLE_MEDITATION = 94; - -// Special Attack Defines -int SPECIAL_ATTACK_INVALID = 0; -int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; -int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; -int SPECIAL_ATTACK_SAP = 3; -int SPECIAL_ATTACK_DISARM = 4; -int SPECIAL_ATTACK_IMPROVED_DISARM = 5; -int SPECIAL_ATTACK_KNOCKDOWN = 6; -int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; -int SPECIAL_ATTACK_STUNNING_FIST = 8; -int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; -int SPECIAL_ATTACK_RAPID_SHOT = 10; - -// Combat Mode Defines -int COMBAT_MODE_INVALID = 0; -int COMBAT_MODE_PARRY = 1; -int COMBAT_MODE_POWER_ATTACK = 2; -int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; -int COMBAT_MODE_FLURRY_OF_BLOWS = 4; -int COMBAT_MODE_RAPID_SHOT = 5; - -// These represent the row in the difficulty 2da, rather than -// a difficulty value. -int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; -int ENCOUNTER_DIFFICULTY_EASY = 1; -int ENCOUNTER_DIFFICULTY_NORMAL = 2; -int ENCOUNTER_DIFFICULTY_HARD = 3; -int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; - -// Looping animation constants. -int ANIMATION_LOOPING_PAUSE = 0; -int ANIMATION_LOOPING_PAUSE2 = 1; -int ANIMATION_LOOPING_LISTEN = 2; -int ANIMATION_LOOPING_MEDITATE = 3; -int ANIMATION_LOOPING_WORSHIP = 4; -//int ANIMATION_LOOPING_LOOK_FAR = 5; -//int ANIMATION_LOOPING_SIT_CHAIR = 6; -//int ANIMATION_LOOPING_SIT_CROSS = 7; -int ANIMATION_LOOPING_TALK_NORMAL = 5; -int ANIMATION_LOOPING_TALK_PLEADING = 6; -int ANIMATION_LOOPING_TALK_FORCEFUL = 7; -int ANIMATION_LOOPING_TALK_LAUGHING = 8; -int ANIMATION_LOOPING_TALK_SAD = 9; -int ANIMATION_LOOPING_GET_LOW = 10; -int ANIMATION_LOOPING_GET_MID = 11; -int ANIMATION_LOOPING_PAUSE_TIRED = 12; -int ANIMATION_LOOPING_PAUSE_DRUNK = 13; -int ANIMATION_LOOPING_FLIRT = 14; -int ANIMATION_LOOPING_USE_COMPUTER = 15; -int ANIMATION_LOOPING_DANCE = 16; -int ANIMATION_LOOPING_DANCE1 = 17; -int ANIMATION_LOOPING_HORROR = 18; -int ANIMATION_LOOPING_READY = 19; -int ANIMATION_LOOPING_DEACTIVATE = 20; -int ANIMATION_LOOPING_SPASM = 21; -int ANIMATION_LOOPING_SLEEP = 22; -int ANIMATION_LOOPING_PRONE = 23; -int ANIMATION_LOOPING_PAUSE3 = 24; -int ANIMATION_LOOPING_WELD = 25; -int ANIMATION_LOOPING_DEAD = 26; -int ANIMATION_LOOPING_TALK_INJURED = 27; -int ANIMATION_LOOPING_LISTEN_INJURED = 28; -int ANIMATION_LOOPING_TREAT_INJURED = 29; -int ANIMATION_LOOPING_DEAD_PRONE = 30; -int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; -int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; - -// NOTE: Choke is really a looping animation. The fire and forget constant has -// been left in because it has already been used in many places. Please -// use this constant from now on. -int ANIMATION_LOOPING_CHOKE = 116; - -// Fire and forget animation constants. -int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; -int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; -int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; -int ANIMATION_FIREFORGET_PAUSE_BORED = 103; -int ANIMATION_FIREFORGET_SALUTE = 104; -int ANIMATION_FIREFORGET_BOW = 105; -//int ANIMATION_FIREFORGET_STEAL = 106; -int ANIMATION_FIREFORGET_GREETING = 106; -int ANIMATION_FIREFORGET_TAUNT = 107; -int ANIMATION_FIREFORGET_VICTORY1 = 108; -int ANIMATION_FIREFORGET_VICTORY2 = 109; -int ANIMATION_FIREFORGET_VICTORY3 = 110; -//int ANIMATION_FIREFORGET_READ = 111; -int ANIMATION_FIREFORGET_INJECT = 112; -int ANIMATION_FIREFORGET_USE_COMPUTER = 113; -int ANIMATION_FIREFORGET_PERSUADE = 114; -int ANIMATION_FIREFORGET_ACTIVATE = 115; -// NOTE: Please do not use this choke constant anymore. The choke is not a fire -// and forget animation. The looping choke constant above should be used -// instead. -int ANIMATION_FIREFORGET_CHOKE = 116; -int ANIMATION_FIREFORGET_THROW_HIGH = 117; -int ANIMATION_FIREFORGET_THROW_LOW = 118; -int ANIMATION_FIREFORGET_CUSTOM01 = 119; -int ANIMATION_FIREFORGET_TREAT_INJURED = 120; - -// Placeable animation constants -int ANIMATION_PLACEABLE_ACTIVATE = 200; -int ANIMATION_PLACEABLE_DEACTIVATE = 201; -int ANIMATION_PLACEABLE_OPEN = 202; -int ANIMATION_PLACEABLE_CLOSE = 203; -int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; -int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; -int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; -int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; -int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; -int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; -int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; -int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; -int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; -int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; - - -// Room Animation Constants -int ANIMATION_ROOM_SCRIPTLOOP01 = 1; -int ANIMATION_ROOM_SCRIPTLOOP02 = 2; -int ANIMATION_ROOM_SCRIPTLOOP03 = 3; -int ANIMATION_ROOM_SCRIPTLOOP04 = 4; -int ANIMATION_ROOM_SCRIPTLOOP05 = 5; -int ANIMATION_ROOM_SCRIPTLOOP06 = 6; -int ANIMATION_ROOM_SCRIPTLOOP07 = 7; -int ANIMATION_ROOM_SCRIPTLOOP08 = 8; -int ANIMATION_ROOM_SCRIPTLOOP09 = 9; -int ANIMATION_ROOM_SCRIPTLOOP10 = 10; -int ANIMATION_ROOM_SCRIPTLOOP11 = 11; -int ANIMATION_ROOM_SCRIPTLOOP12 = 12; -int ANIMATION_ROOM_SCRIPTLOOP13 = 13; -int ANIMATION_ROOM_SCRIPTLOOP14 = 14; -int ANIMATION_ROOM_SCRIPTLOOP15 = 15; -int ANIMATION_ROOM_SCRIPTLOOP16 = 16; -int ANIMATION_ROOM_SCRIPTLOOP17 = 17; -int ANIMATION_ROOM_SCRIPTLOOP18 = 18; -int ANIMATION_ROOM_SCRIPTLOOP19 = 19; -int ANIMATION_ROOM_SCRIPTLOOP20 = 20; - -int TALENT_TYPE_FORCE = 0; -int TALENT_TYPE_SPELL = 0; -int TALENT_TYPE_FEAT = 1; -int TALENT_TYPE_SKILL = 2; - -int TALENT_EXCLUDE_ALL_OF_TYPE = -1; - -int INVENTORY_DISTURB_TYPE_ADDED = 0; -int INVENTORY_DISTURB_TYPE_REMOVED = 1; -int INVENTORY_DISTURB_TYPE_STOLEN = 2; - -int GUI_PANEL_PLAYER_DEATH = 0; - -int POLYMORPH_TYPE_WEREWOLF = 0; -int POLYMORPH_TYPE_WERERAT = 1; -int POLYMORPH_TYPE_WERECAT = 2; -int POLYMORPH_TYPE_GIANT_SPIDER = 3; -int POLYMORPH_TYPE_TROLL = 4; -int POLYMORPH_TYPE_UMBER_HULK = 5; -int POLYMORPH_TYPE_PIXIE = 6; -int POLYMORPH_TYPE_ZOMBIE = 7; -int POLYMORPH_TYPE_RED_DRAGON = 8; -int POLYMORPH_TYPE_FIRE_GIANT = 9; -int POLYMORPH_TYPE_BALOR = 10; -int POLYMORPH_TYPE_DEATH_SLAAD = 11; -int POLYMORPH_TYPE_IRON_GOLEM = 12; -int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; -int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; -int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; -int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; -int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; -int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; -int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; -int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; -int POLYMORPH_TYPE_BROWN_BEAR = 21; -int POLYMORPH_TYPE_PANTHER = 22; -int POLYMORPH_TYPE_WOLF = 23; -int POLYMORPH_TYPE_BOAR = 24; -int POLYMORPH_TYPE_BADGER = 25; -int POLYMORPH_TYPE_PENGUIN = 26; -int POLYMORPH_TYPE_COW = 27; -int POLYMORPH_TYPE_DOOM_KNIGHT = 28; -int POLYMORPH_TYPE_YUANTI = 29; -int POLYMORPH_TYPE_IMP = 30; -int POLYMORPH_TYPE_QUASIT = 31; -int POLYMORPH_TYPE_SUCCUBUS = 32; -int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; -int POLYMORPH_TYPE_DIRE_PANTHER = 34; -int POLYMORPH_TYPE_DIRE_WOLF = 35; -int POLYMORPH_TYPE_DIRE_BOAR = 36; -int POLYMORPH_TYPE_DIRE_BADGER = 37; - -int INVISIBILITY_TYPE_NORMAL = 1; -int INVISIBILITY_TYPE_DARKNESS = 2; -int INVISIBILITY_TYPE_IMPROVED = 4; - -int CREATURE_SIZE_INVALID = 0; -int CREATURE_SIZE_TINY = 1; -int CREATURE_SIZE_SMALL = 2; -int CREATURE_SIZE_MEDIUM = 3; -int CREATURE_SIZE_LARGE = 4; -int CREATURE_SIZE_HUGE = 5; - -int CAMERA_MODE_CHASE_CAMERA = 0; -int CAMERA_MODE_TOP_DOWN = 1; -int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; - -int PROJECTILE_PATH_TYPE_DEFAULT = 0; -int PROJECTILE_PATH_TYPE_HOMING = 1; -int PROJECTILE_PATH_TYPE_BALLISTIC = 2; -int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; -int PROJECTILE_PATH_TYPE_ACCELERATING = 4; - -int GAME_DIFFICULTY_VERY_EASY = 0; -int GAME_DIFFICULTY_EASY = 1; -int GAME_DIFFICULTY_NORMAL = 2; -int GAME_DIFFICULTY_CORE_RULES = 3; -int GAME_DIFFICULTY_DIFFICULT = 4; - -int ACTION_MOVETOPOINT = 0; -int ACTION_PICKUPITEM = 1; -int ACTION_DROPITEM = 2; -int ACTION_ATTACKOBJECT = 3; -int ACTION_CASTSPELL = 4; -int ACTION_OPENDOOR = 5; -int ACTION_CLOSEDOOR = 6; -int ACTION_DIALOGOBJECT = 7; -int ACTION_DISABLETRAP = 8; -int ACTION_RECOVERTRAP = 9; -int ACTION_FLAGTRAP = 10; -int ACTION_EXAMINETRAP = 11; -int ACTION_SETTRAP = 12; -int ACTION_OPENLOCK = 13; -int ACTION_LOCK = 14; -int ACTION_USEOBJECT = 15; -int ACTION_ANIMALEMPATHY = 16; -int ACTION_REST = 17; -int ACTION_TAUNT = 18; -int ACTION_ITEMCASTSPELL = 19; -int ACTION_COUNTERSPELL = 31; -int ACTION_HEAL = 33; -int ACTION_PICKPOCKET = 34; -int ACTION_FOLLOW = 35; -int ACTION_WAIT = 36; -int ACTION_SIT = 37; -int ACTION_FOLLOWLEADER = 38; - -int ACTION_INVALID = 65535; -int ACTION_QUEUEEMPTY = 65534; - -int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; -int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; -int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; -int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; -int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; -int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; -int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; -int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; -int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; - -int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; -int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; - -int CONVERSATION_TYPE_CINEMATIC = 0; -int CONVERSATION_TYPE_COMPUTER = 1; - -int PLANET_ENDAR_SPIRE = 0; -int PLANET_TARIS = 1; -int PLANET_EBON_HAWK = 2; -int PLANET_DANTOOINE = 3; -int PLANET_TATOOINE = 4; -int PLANET_KASHYYYK = 5; -int PLANET_MANAAN = 6; -int PLANET_KORRIBAN = 7; -int PLANET_LEVIATHAN = 8; -int PLANET_UNKNOWN_WORLD = 9; -int PLANET_STAR_FORGE = 10; -int PLANET_LIVE_01 = 11; -int PLANET_LIVE_02 = 12; -int PLANET_LIVE_03 = 13; -int PLANET_LIVE_04 = 14; -int PLANET_LIVE_05 = 15; - -int NPC_PLAYER = -1; -int NPC_BASTILA = 0; -int NPC_CANDEROUS = 1; -int NPC_CARTH = 2; -int NPC_HK_47 = 3; -int NPC_JOLEE = 4; -int NPC_JUHANI = 5; -int NPC_MISSION = 6; -int NPC_T3_M4 = 7; -int NPC_ZAALBAR = 8; - - -int PARTY_AISTYLE_AGGRESSIVE = 0; -int PARTY_AISTYLE_DEFENSIVE = 1; -int PARTY_AISTYLE_PASSIVE = 2; - -int NPC_AISTYLE_DEFAULT_ATTACK = 0; -int NPC_AISTYLE_RANGED_ATTACK = 1; -int NPC_AISTYLE_MELEE_ATTACK = 2; -int NPC_AISTYLE_AID = 3; -int NPC_AISTYLE_GRENADE_THROWER = 4; -int NPC_AISTYLE_JEDI_SUPPORT = 5; - -int DISGUISE_TYPE_TEST = 1; -int DISGUISE_TYPE_P_T3M3 = 2; -int DISGUISE_TYPE_P_HK47 = 3; -int DISGUISE_TYPE_P_BASTILLA = 4; -int DISGUISE_TYPE_P_CAND = 5; -int DISGUISE_TYPE_P_CARTH = 6; -int DISGUISE_TYPE_P_JOLEE = 7; -int DISGUISE_TYPE_P_JUHANI = 8; -int DISGUISE_TYPE_P_ZAALBAR = 9; -int DISGUISE_TYPE_P_MISSION = 10; -int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; -int DISGUISE_TYPE_N_BITH = 12; -int DISGUISE_TYPE_N_CALONORD = 13; -int DISGUISE_TYPE_N_COMMF = 14; -int DISGUISE_TYPE_N_COMMKIDF = 15; -int DISGUISE_TYPE_N_COMMKIDM = 16; -int DISGUISE_TYPE_N_COMMM = 17; -int DISGUISE_TYPE_N_CZERLAOFF = 18; -int DISGUISE_TYPE_N_DARKJEDIF = 19; -int DISGUISE_TYPE_N_DARKJEDIM = 20; -int DISGUISE_TYPE_N_DARTHMALAK = 21; -int DISGUISE_TYPE_N_DARTHREVAN = 22; -int DISGUISE_TYPE_N_DODONNA = 23; -int DISGUISE_TYPE_N_DUROS = 24; -int DISGUISE_TYPE_N_FATCOMF = 25; -int DISGUISE_TYPE_N_FATCOMM = 26; -int DISGUISE_TYPE_N_SMUGGLER = 27; -int DISGUISE_TYPE_N_SITHSOLDIER = 28; -// int DISGUISE_TYPE_ = 29; -int DISGUISE_TYPE_N_JEDICOUNTF = 30; -int DISGUISE_TYPE_N_JEDICOUNTM = 31; -int DISGUISE_TYPE_N_JEDIMALEK = 32; -int DISGUISE_TYPE_N_JEDIMEMF = 33; -int DISGUISE_TYPE_N_JEDIMEMM = 34; -int DISGUISE_TYPE_N_MANDALORIAN = 35; -int DISGUISE_TYPE_N_RAKATA = 36; -int DISGUISE_TYPE_N_REPOFF = 37; -int DISGUISE_TYPE_N_REPSOLD = 38; -int DISGUISE_TYPE_N_RODIAN = 39; -int DISGUISE_TYPE_C_SELKATH = 40; -int DISGUISE_TYPE_N_SITHAPPREN = 41; -int DISGUISE_TYPE_N_SITHCOMF = 42; -int DISGUISE_TYPE_N_SITHCOMM = 43; -//int DISGUISE_TYPE_N_SITHSOLDIER = 44; -int DISGUISE_TYPE_N_SWOOPGANG = 45; -int DISGUISE_TYPE_N_TUSKEN = 46; -int DISGUISE_TYPE_N_TWILEKF = 47; -int DISGUISE_TYPE_N_TWILEKM = 48; -int DISGUISE_TYPE_N_WALRUSMAN = 49; -int DISGUISE_TYPE_N_WOOKIEF = 50; -int DISGUISE_TYPE_N_WOOKIEM = 51; -int DISGUISE_TYPE_N_YODA = 52; -int DISGUISE_TYPE_C_BANTHA = 53; -int DISGUISE_TYPE_C_BRITH = 54; -int DISGUISE_TYPE_C_DEWBACK = 55; -int DISGUISE_TYPE_C_DRDASSASSIN = 56; -int DISGUISE_TYPE_C_DRDASTRO = 57; -int DISGUISE_TYPE_C_DRDG = 58; -int DISGUISE_TYPE_C_DRDMKFOUR = 59; -int DISGUISE_TYPE_C_DRDMKONE = 60; -int DISGUISE_TYPE_C_DRDMKTWO = 61; -int DISGUISE_TYPE_C_DRDPROBE = 62; -int DISGUISE_TYPE_C_DRDPROT = 63; -int DISGUISE_TYPE_C_DRDSENTRY = 64; -int DISGUISE_TYPE_C_DRDSPYDER = 65; -int DISGUISE_TYPE_C_DRDWAR = 66; -int DISGUISE_TYPE_C_FIRIXA = 67; -int DISGUISE_TYPE_C_GAMMOREAN = 68; -int DISGUISE_TYPE_C_GIZKA = 69; -int DISGUISE_TYPE_C_HUTT = 70; -int DISGUISE_TYPE_C_IRIAZ = 71; -int DISGUISE_TYPE_C_ITHORIAN = 72; -int DISGUISE_TYPE_C_JAWA = 73; -int DISGUISE_TYPE_C_KATAARN = 74; -int DISGUISE_TYPE_C_KHOUNDA = 75; -int DISGUISE_TYPE_C_KHOUNDB = 76; -int DISGUISE_TYPE_C_KRAYTDRAGON = 77; -int DISGUISE_TYPE_C_MYKAL = 78; -int DISGUISE_TYPE_C_RAKGHOUL = 79; -int DISGUISE_TYPE_C_RANCOR = 80; -int DISGUISE_TYPE_C_SEABEAST = 81; -//int DISGUISE_TYPE_ = 82; -int DISGUISE_TYPE_C_TACH = 83; -int DISGUISE_TYPE_C_TWOHEAD = 84; -int DISGUISE_TYPE_C_VERKAAL = 85; -int DISGUISE_TYPE_C_WRAID = 86; -int DISGUISE_TYPE_C_RONTO = 87; -int DISGUISE_TYPE_C_KINRATH = 88; -int DISGUISE_TYPE_C_TUKATA = 89; -int DISGUISE_TYPE_N_TUSKENF = 90; -int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; -int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; -int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; -int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; -int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; -int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; -int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; -int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; -int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; -int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; -int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; -int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; -int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; -int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; -int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; -int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; -int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; -int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; -int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; -int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; -int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; -int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; -int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; -int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; -int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; -int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; -int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; -int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; -int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; -int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; -int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; -int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; -int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; -int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; -int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; -int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; -int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; -int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; -int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; -int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; -int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; -int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; -int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; -int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; -int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; -int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; -int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; -int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; -int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; -int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; -int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; -int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; -int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; -int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; -int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; -int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; -int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; -int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; -int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; -int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; -int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; -int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; -int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; -int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; -int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; -int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; -int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; -int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; -int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; -int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; -int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; -int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; -int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; -int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; -int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; -int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; -int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; -int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; -int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; -int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; -int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; -int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; -int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; -int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; -int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; -int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; -int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; -int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; -int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; -int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; -int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; -int DISGUISE_TYPE_TURRET = 182; -int DISGUISE_TYPE_TURRET2 = 183; -int DISGUISE_TYPE_N_DARTHBAND = 184; -int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; -int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; -int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; -int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; -int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; -int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; -int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; -int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; -int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; -int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; -int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; -int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; -int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; -int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; -int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; -int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; -int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; -int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; -int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; -int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; -int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; -int DISGUISE_TYPE_HUTT_02 = 228; -int DISGUISE_TYPE_HUTT_03 = 229; -int DISGUISE_TYPE_HUTT_04 = 230; -int DISGUISE_TYPE_DROID_ASTRO_02 = 231; -int DISGUISE_TYPE_DROID_ASTRO_03 = 232; -int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; -int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; -int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; -int DISGUISE_TYPE_DROID_WAR_02 = 236; -int DISGUISE_TYPE_DROID_WAR_03 = 237; -int DISGUISE_TYPE_DROID_WAR_04 = 238; -int DISGUISE_TYPE_DROID_WAR_05 = 239; -int DISGUISE_TYPE_GAMMOREAN_02 = 240; -int DISGUISE_TYPE_GAMMOREAN_03 = 241; -int DISGUISE_TYPE_GAMMOREAN_04 = 242; -int DISGUISE_TYPE_ITHORIAN_02 = 243; -int DISGUISE_TYPE_ITHORIAN_03 = 244; -int DISGUISE_TYPE_KATH_HOUND_A02 = 245; -int DISGUISE_TYPE_KATH_HOUND_A03 = 246; -int DISGUISE_TYPE_KATH_HOUND_A04 = 247; -int DISGUISE_TYPE_KATH_HOUND_B02 = 248; -int DISGUISE_TYPE_KATH_HOUND_B03 = 249; -int DISGUISE_TYPE_KATH_HOUND_B04 = 250; -int DISGUISE_TYPE_WRAID_02 = 251; -int DISGUISE_TYPE_WRAID_03 = 252; -int DISGUISE_TYPE_WRAID_04 = 253; -int DISGUISE_TYPE_RAKATA_02 = 254; -int DISGUISE_TYPE_RAKATA_03 = 255; -int DISGUISE_TYPE_RODIAN_02 = 256; -int DISGUISE_TYPE_RODIAN_03 = 257; -int DISGUISE_TYPE_RODIAN_04 = 258; -int DISGUISE_TYPE_SELKATH_02 = 259; -int DISGUISE_TYPE_SELKATH_03 = 260; -int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; -int DISGUISE_TYPE_SWOOP_GANG_02 = 262; -int DISGUISE_TYPE_SWOOP_GANG_03 = 263; -int DISGUISE_TYPE_SWOOP_GANG_04 = 264; -int DISGUISE_TYPE_SWOOP_GANG_05 = 265; -int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; -int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; -int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; -int DISGUISE_TYPE_TWILEK_MALE_02 = 269; -int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; -int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; -int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; -int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; -int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; -int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; -int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; -int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; -int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; -int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; -int DISGUISE_TYPE_YUTHURA_BAN = 280; -int DISGUISE_TYPE_SHYRACK_01 = 281; -int DISGUISE_TYPE_SHYRACK_02 = 282; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; -int DISGUISE_TYPE_SITH_FEM_WHITE = 291; -int DISGUISE_TYPE_SITH_FEM_BLACK = 292; -int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; -int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; -int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; -int DISGUISE_TYPE_SITH_MAL_WHITE = 296; -int DISGUISE_TYPE_SITH_MAL_BLACK = 297; -int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; -int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; -int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; -int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; -int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; -int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; -int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; -int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; -int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; - -int PLOT_O_DOOM = 0; -int PLOT_O_SCARY_STUFF = 1; -int PLOT_O_BIG_MONSTERS = 2; - -int FORMATION_WEDGE = 0; -int FORMATION_LINE = 1; - -int SUBSCREEN_ID_NONE = 0; -int SUBSCREEN_ID_EQUIP = 1; -int SUBSCREEN_ID_ITEM = 2; -int SUBSCREEN_ID_CHARACTER_RECORD = 3; -int SUBSCREEN_ID_ABILITY = 4; -int SUBSCREEN_ID_MAP = 5; -int SUBSCREEN_ID_QUEST = 6; -int SUBSCREEN_ID_OPTIONS = 7; -int SUBSCREEN_ID_MESSAGES = 8; - -int SHIELD_DROID_ENERGY_1 = 0; -int SHIELD_DROID_ENERGY_2 = 1; -int SHIELD_DROID_ENERGY_3 = 2; -int SHIELD_DROID_ENVIRO_1 = 3; -int SHIELD_DROID_ENVIRO_2 = 4; -int SHIELD_DROID_ENVIRO_3 = 5; -int SHIELD_ENERGY = 6; -int SHIELD_ENERGY_SITH = 7; -int SHIELD_ENERGY_ARKANIAN = 8; -int SHIELD_ECHANI = 9; -int SHIELD_MANDALORIAN_MELEE = 10; -int SHIELD_MANDALORIAN_POWER = 11; -int SHIELD_DUELING_ECHANI = 12; -int SHIELD_DUELING_YUSANIS = 13; -int SHIELD_VERPINE_PROTOTYPE = 14; -int SHIELD_ANTIQUE_DROID = 15; -int SHIELD_PLOT_TAR_M09AA = 16; -int SHIELD_PLOT_UNK_M44AA = 17; - -int SUBRACE_NONE = 0; -int SUBRACE_WOOKIE = 1; - -int VIDEO_EFFECT_NONE = -1; -int VIDEO_EFFECT_SECURITY_CAMERA = 0; -int VIDEO_EFFECT_FREELOOK_T3M4 = 1; -int VIDEO_EFFECT_FREELOOK_HK47 = 2; - -int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; -int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; -int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; - -int MOVEMENT_SPEED_PC = 0; -int MOVEMENT_SPEED_IMMOBILE = 1; -int MOVEMENT_SPEED_VERYSLOW = 2; -int MOVEMENT_SPEED_SLOW = 3; -int MOVEMENT_SPEED_NORMAL = 4; -int MOVEMENT_SPEED_FAST = 5; -int MOVEMENT_SPEED_VERYFAST = 6; -int MOVEMENT_SPEED_DEFAULT = 7; -int MOVEMENT_SPEED_DMFAST = 8; - -int LIVE_CONTENT_PKG1 = 1; -int LIVE_CONTENT_PKG2 = 2; -int LIVE_CONTENT_PKG3 = 3; -int LIVE_CONTENT_PKG4 = 4; -int LIVE_CONTENT_PKG5 = 5; -int LIVE_CONTENT_PKG6 = 6; - - -string sLanguage = "nwscript"; - - -// 0: Get an integer between 0 and nMaxInteger-1. -// Return value on error: 0 -int Random(int nMaxInteger); - -// 1: Output sString to the log file. -void PrintString(string sString); - -// 2: Output a formatted float to the log file. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); - -// 3: Convert fFloat into a string. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); - -// 4: Output nInteger to the log file. -void PrintInteger(int nInteger); - -// 5: Output oObject's ID to the log file. -void PrintObject(object oObject); - -// 6: Assign aActionToAssign to oActionSubject. -// * No return value, but if an error occurs, the log file will contain -// "AssignCommand failed." -// (If the object doesn't exist, nothing happens.) -void AssignCommand(object oActionSubject,action aActionToAssign); - -// 7: Delay aActionToDelay by fSeconds. -// * No return value, but if an error occurs, the log file will contain -// "DelayCommand failed.". -void DelayCommand(float fSeconds, action aActionToDelay); - -// 8: Make oTarget run sScript and then return execution to the calling script. -// If sScript does not specify a compiled script, nothing happens. -// - nScriptVar: This value will be returned by calls to GetRunScriptVar. -void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); - -// 9: Clear all the actions of the caller. (This will only work on Creatures) -// * No return value, but if an error occurs, the log file will contain -// "ClearAllActions failed.". -void ClearAllActions(); - -// 10: Cause the caller to face fDirection. -// - fDirection is expressed as anticlockwise degrees from Due East. -// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are -// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -void SetFacing(float fDirection); - -// 11: Switches the main character to a specified NPC -// -1 specifies to switch back to the original PC -int SwitchPlayerCharacter(int nNPC); - -// 12: Set the time to the time specified. -// - nHour should be from 0 to 23 inclusive -// - nMinute should be from 0 to 59 inclusive -// - nSecond should be from 0 to 59 inclusive -// - nMillisecond should be from 0 to 999 inclusive -// 1) Time can only be advanced forwards; attempting to set the time backwards -// will result in the day advancing and then the time being set to that -// specified, e.g. if the current hour is 15 and then the hour is set to 3, -// the day will be advanced by 1 and the hour will be set to 3. -// 2) If values larger than the max hour, minute, second or millisecond are -// specified, they will be wrapped around and the overflow will be used to -// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds -// and 10 milliseconds will result in the calendar day being advanced by 2 -// and the time being set to 18 hours, 10 minutes, 10 milliseconds. -void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); - -// 13: Sets (by NPC constant) which party member should be the controlled -// character -int SetPartyLeader(int nNPC); - -// 14: Sets whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -void SetAreaUnescapable(int bUnescapable); - -// 15: Returns whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -int GetAreaUnescapable(); - -// 16: Get the current hour. -int GetTimeHour(); - -// 17: Get the current minute -int GetTimeMinute(); - -// 18: Get the current second -int GetTimeSecond(); - -// 19: Get the current millisecond -int GetTimeMillisecond(); - -// 20: The action subject will generate a random location near its current location -// and pathfind to it. All commands will remove a RandomWalk() from the action -// queue if there is one in place. -// * No return value, but if an error occurs the log file will contain -// "ActionRandomWalk failed." -void ActionRandomWalk(); - -// 21: The action subject will move to lDestination. -// - lDestination: The object will move to this location. If the location is -// invalid or a path cannot be found to it, the command does nothing. -// - bRun: If this is TRUE, the action subject will run rather than walk -// * No return value, but if an error occurs the log file will contain -// "MoveToPoint failed." -void ActionMoveToLocation(location lDestination, int bRun=FALSE); - -// 22: Cause the action subject to move to a certain distance from oMoveTo. -// If there is no path to oMoveTo, this command will do nothing. -// - oMoveTo: This is the object we wish the action subject to move to -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fRange: This is the desired distance between the action subject and oMoveTo -// * No return value, but if an error occurs the log file will contain -// "ActionMoveToObject failed." -void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); - -// 23: Cause the action subject to move to a certain distance away from oFleeFrom. -// - oFleeFrom: This is the object we wish the action subject to move away from. -// If oFleeFrom is not in the same area as the action subject, nothing will -// happen. -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fMoveAwayRange: This is the distance we wish the action subject to put -// between themselves and oFleeFrom -// * No return value, but if an error occurs the log file will contain -// "ActionMoveAwayFromObject failed." -void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 24: Get the area that oTarget is currently in -// * Return value on error: OBJECT_INVALID -object GetArea(object oTarget); - -// 25: The value returned by this function depends on the object type of the caller: -// 1) If the caller is a door or placeable it returns the object that last -// triggered it. -// 2) If the caller is a trigger, area of effect, module, area or encounter it -// returns the object that last entered it. -// * Return value on error: OBJECT_INVALID -object GetEnteringObject(); - -// 26: Get the object that last left the caller. This function works on triggers, -// areas of effect, modules, areas and encounters. -// * Return value on error: OBJECT_INVALID -object GetExitingObject(); - -// 27: Get the position of oTarget -// * Return value on error: vector (0.0f, 0.0f, 0.0f) -vector GetPosition(object oTarget); - -// 28: Get the direction in which oTarget is facing, expressed as a float between -// 0.0f and 360.0f -// * Return value on error: -1.0f -float GetFacing(object oTarget); - -// 29: Get the possessor of oItem -// * Return value on error: OBJECT_INVALID -object GetItemPossessor(object oItem); - -// 30: Get the object possessed by oCreature with the tag sItemTag -// * Return value on error: OBJECT_INVALID -object GetItemPossessedBy(object oCreature, string sItemTag); - -// 31: Create an item with the template sItemTemplate in oTarget's inventory. -// - nStackSize: This is the stack size of the item to be created -// * Return value: The object that has been created. On error, this returns -// OBJECT_INVALID. -object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); - -// 32: Equip oItem into nInventorySlot. -// - nInventorySlot: INVENTORY_SLOT_* -// * No return value, but if an error occurs the log file will contain -// "ActionEquipItem failed." -void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); - -// 33: Unequip oItem from whatever slot it is currently in. -void ActionUnequipItem( object oItem, int bInstant = FALSE ); - -// 34: Pick up oItem from the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPickUpItem failed." -void ActionPickUpItem(object oItem); - -// 35: Put down oItem on the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPutDownItem failed." -void ActionPutDownItem(object oItem); - -// 36: Get the last attacker of oAttackee. This should only be used ONLY in the -// OnAttacked events for creatures, placeables and doors. -// * Return value on error: OBJECT_INVALID -object GetLastAttacker(object oAttackee=OBJECT_SELF); - -// 37: Attack oAttackee. -// - bPassive: If this is TRUE, attack is in passive mode. -void ActionAttack(object oAttackee, int bPassive=FALSE); - -// 38: Get the creature nearest to oTarget, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -effect EffectResurrection(); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: 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. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -void AdjustAlignment(object oSubject, int nAlignment, int nShift); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -int GetIsInCombat(object oCreature=OBJECT_SELF); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -void ShowUpgradeScreen(object oItem = OBJECT_INVALID); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef); - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 0 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 0 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 0 and 0 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 0 and 0 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); - -// 768. IsMoviePlaying -// Checks if a movie is currently playing. -int IsMoviePlaying(); - -// 769. QueueMovie -// Queues up a movie to be played using PlayMovieQueue. -// If bSkippable is TRUE, the player can cancel the movie by hitting escape. -// If bSkippable is FALSE, the player cannot cancel the movie and must wait -// for it to finish playing. -void QueueMovie( string sMovie, int bSkippable ); - -// 770. PlayMovieQueue -// Plays the movies that have been added to the queue by QueueMovie -// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only -// cancels out of the currently playing movie rather than the entire queue -// of movies (assuming the currently playing movie is flagged as skippable). -// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled -// if the player hits escape (assuming the currently playing movie is flagged -// as skippable). -void PlayMovieQueue( int bAllowSeparateSkips ); - -// 771. YavinHackCloseDoor -// This is an incredibly hacky function to allow the doors to be properly -// closed on Yavin without running into the problems we've had. It is too -// late in development to fix it correctly, so thus we do this. Life is -// hard. You'll get over it -void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/TSL/nwnnsscomp/KScript/nwnnsscomp.exe b/TSL/nwnnsscomp/KScript/nwnnsscomp.exe deleted file mode 100644 index 668bbeddcbc2eaa83e475838d8f53166caee3043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266240 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 diff --git a/TSL/nwnnsscomp/KScript/nwscript-kotor.nss b/TSL/nwnnsscomp/KScript/nwscript-kotor.nss deleted file mode 100644 index 7a9b4f12d..000000000 --- a/TSL/nwnnsscomp/KScript/nwscript-kotor.nss +++ /dev/null @@ -1,5173 +0,0 @@ -//////////////////////////////////////////////////////// -// -// NWScript -// -// The list of actions and pre-defined constants. -// -// (c) BioWare Corp, 1999 -// -//////////////////////////////////////////////////////// - -#define ENGINE_NUM_STRUCTURES 4 -#define ENGINE_STRUCTURE_0 effect -#define ENGINE_STRUCTURE_1 event -#define ENGINE_STRUCTURE_2 location -#define ENGINE_STRUCTURE_3 talent - -// Constants - -int NUM_INVENTORY_SLOTS = 18; - -int TRUE = 1; -int FALSE = 0; - -float DIRECTION_EAST = 0.0; -float DIRECTION_NORTH = 90.0; -float DIRECTION_WEST = 180.0; -float DIRECTION_SOUTH = 270.0; -float PI = 3.141592; - -int ATTITUDE_NEUTRAL = 0; -int ATTITUDE_AGGRESSIVE = 1; -int ATTITUDE_DEFENSIVE = 2; -int ATTITUDE_SPECIAL = 3; - -int TALKVOLUME_TALK = 0; -int TALKVOLUME_WHISPER = 1; -int TALKVOLUME_SHOUT = 2; -int TALKVOLUME_SILENT_TALK = 3; -int TALKVOLUME_SILENT_SHOUT = 4; - -int INVENTORY_SLOT_HEAD = 0; -int INVENTORY_SLOT_BODY = 1; -int INVENTORY_SLOT_HANDS = 3; -int INVENTORY_SLOT_RIGHTWEAPON = 4; -int INVENTORY_SLOT_LEFTWEAPON = 5; -int INVENTORY_SLOT_LEFTARM = 7; -int INVENTORY_SLOT_RIGHTARM = 8; -int INVENTORY_SLOT_IMPLANT = 9; -int INVENTORY_SLOT_BELT = 10; -int INVENTORY_SLOT_CWEAPON_L = 14; -int INVENTORY_SLOT_CWEAPON_R = 15; -int INVENTORY_SLOT_CWEAPON_B = 16; -int INVENTORY_SLOT_CARMOUR = 17; - -//Effect type constants -int DURATION_TYPE_INSTANT = 0; -int DURATION_TYPE_TEMPORARY = 1; -int DURATION_TYPE_PERMANENT = 2; - -int SUBTYPE_MAGICAL = 8; -int SUBTYPE_SUPERNATURAL = 16; -int SUBTYPE_EXTRAORDINARY = 24; - -int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp -int ABILITY_DEXTERITY = 1; -int ABILITY_CONSTITUTION = 2; -int ABILITY_INTELLIGENCE = 3; -int ABILITY_WISDOM = 4; -int ABILITY_CHARISMA = 5; - -int SHAPE_SPELLCYLINDER = 0; -int SHAPE_CONE = 1; -int SHAPE_CUBE = 2; -int SHAPE_SPELLCONE = 3; -int SHAPE_SPHERE = 4; - -int OBJECT_TYPE_CREATURE = 1; -int OBJECT_TYPE_ITEM = 2; -int OBJECT_TYPE_TRIGGER = 4; -int OBJECT_TYPE_DOOR = 8; -int OBJECT_TYPE_AREA_OF_EFFECT = 16; -int OBJECT_TYPE_WAYPOINT = 32; -int OBJECT_TYPE_PLACEABLE = 64; -int OBJECT_TYPE_STORE = 128; -int OBJECT_TYPE_ENCOUNTER = 256; -int OBJECT_TYPE_SOUND = 512; -int OBJECT_TYPE_ALL = 32767; - -int OBJECT_TYPE_INVALID = 32767; - -int GENDER_MALE = 0; -int GENDER_FEMALE = 1; -int GENDER_BOTH = 2; -int GENDER_OTHER = 3; -int GENDER_NONE = 4; - -int DAMAGE_TYPE_BLUDGEONING = 1; -int DAMAGE_TYPE_PIERCING = 2; -int DAMAGE_TYPE_SLASHING = 4; -int DAMAGE_TYPE_UNIVERSAL = 8; -int DAMAGE_TYPE_ACID = 16; -int DAMAGE_TYPE_COLD = 32; -int DAMAGE_TYPE_LIGHT_SIDE = 64; -int DAMAGE_TYPE_ELECTRICAL = 128; -int DAMAGE_TYPE_FIRE = 256; -int DAMAGE_TYPE_DARK_SIDE = 512; -int DAMAGE_TYPE_SONIC = 1024; -int DAMAGE_TYPE_ION = 2048; -int DAMAGE_TYPE_BLASTER = 4096; - -// Special versus flag just for AC effects -int AC_VS_DAMAGE_TYPE_ALL = 8199; - -int DAMAGE_BONUS_1 = 1; -int DAMAGE_BONUS_2 = 2; -int DAMAGE_BONUS_3 = 3; -int DAMAGE_BONUS_4 = 4; -int DAMAGE_BONUS_5 = 5; -int DAMAGE_BONUS_1d4 = 6; -int DAMAGE_BONUS_1d6 = 7; -int DAMAGE_BONUS_1d8 = 8; -int DAMAGE_BONUS_1d10 = 9; -int DAMAGE_BONUS_2d6 = 10; - -int DAMAGE_POWER_NORMAL = 0; -int DAMAGE_POWER_PLUS_ONE = 1; -int DAMAGE_POWER_PLUS_TWO = 2; -int DAMAGE_POWER_PLUS_THREE = 3; -int DAMAGE_POWER_PLUS_FOUR = 4; -int DAMAGE_POWER_PLUS_FIVE = 5; -int DAMAGE_POWER_ENERGY = 6; - -int ATTACK_BONUS_MISC = 0; -int ATTACK_BONUS_ONHAND = 1; -int ATTACK_BONUS_OFFHAND = 2; - -int AC_DODGE_BONUS = 0; -int AC_NATURAL_BONUS = 1; -int AC_ARMOUR_ENCHANTMENT_BONUS = 2; -int AC_SHIELD_ENCHANTMENT_BONUS = 3; -int AC_DEFLECTION_BONUS = 4; - -int DOOR_ACTION_OPEN = 0; -int DOOR_ACTION_UNLOCK = 1; -int DOOR_ACTION_BASH = 2; -int DOOR_ACTION_IGNORE = 3; -int DOOR_ACTION_KNOCK = 4; - -int PLACEABLE_ACTION_USE = 0; -int PLACEABLE_ACTION_UNLOCK = 1; -int PLACEABLE_ACTION_BASH = 2; -int PLACEABLE_ACTION_KNOCK = 4; - - -int RACIAL_TYPE_UNKNOWN = 0; -int RACIAL_TYPE_ELF = 1; -int RACIAL_TYPE_GNOME = 2; -int RACIAL_TYPE_HALFLING = 3; -int RACIAL_TYPE_HALFELF = 4; -int RACIAL_TYPE_DROID = 5; -int RACIAL_TYPE_HUMAN = 6; -int RACIAL_TYPE_ALL = 7; -int RACIAL_TYPE_INVALID = 8; - -int ALIGNMENT_ALL = 0; -int ALIGNMENT_NEUTRAL = 1; -int ALIGNMENT_LIGHT_SIDE = 2; -int ALIGNMENT_DARK_SIDE = 3; - -int SAVING_THROW_ALL = 0; -int SAVING_THROW_FORT = 1; -int SAVING_THROW_REFLEX = 2; -int SAVING_THROW_WILL = 3; - -int SAVING_THROW_TYPE_ALL = 0; -int SAVING_THROW_TYPE_NONE = 0; -int SAVING_THROW_TYPE_ACID = 1; -int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; -int SAVING_THROW_TYPE_COLD = 3; -int SAVING_THROW_TYPE_DEATH = 4; -int SAVING_THROW_TYPE_DISEASE = 5; -int SAVING_THROW_TYPE_LIGHT_SIDE = 6; -int SAVING_THROW_TYPE_ELECTRICAL = 7; -int SAVING_THROW_TYPE_FEAR = 8; -int SAVING_THROW_TYPE_FIRE = 9; -int SAVING_THROW_TYPE_MIND_AFFECTING = 10; -int SAVING_THROW_TYPE_DARK_SIDE = 11; -int SAVING_THROW_TYPE_POISON = 12; -int SAVING_THROW_TYPE_SONIC = 13; -int SAVING_THROW_TYPE_TRAP = 14; -int SAVING_THROW_TYPE_FORCE_POWER = 15; -int SAVING_THROW_TYPE_ION = 16; -int SAVING_THROW_TYPE_BLASTER = 17; -int SAVING_THROW_TYPE_PARALYSIS = 18; - -int IMMUNITY_TYPE_NONE = 0; -int IMMUNITY_TYPE_MIND_SPELLS = 1; -int IMMUNITY_TYPE_POISON = 2; -int IMMUNITY_TYPE_DISEASE = 3; -int IMMUNITY_TYPE_FEAR = 4; -int IMMUNITY_TYPE_TRAP = 5; -int IMMUNITY_TYPE_PARALYSIS = 6; -int IMMUNITY_TYPE_BLINDNESS = 7; -int IMMUNITY_TYPE_DEAFNESS = 8; -int IMMUNITY_TYPE_SLOW = 9; -int IMMUNITY_TYPE_ENTANGLE = 10; -int IMMUNITY_TYPE_SILENCE = 11; -int IMMUNITY_TYPE_STUN = 12; -int IMMUNITY_TYPE_SLEEP = 13; -int IMMUNITY_TYPE_CHARM = 14; -int IMMUNITY_TYPE_DOMINATE = 15; -int IMMUNITY_TYPE_CONFUSED = 16; -int IMMUNITY_TYPE_CURSED = 17; -int IMMUNITY_TYPE_DAZED = 18; -int IMMUNITY_TYPE_ABILITY_DECREASE = 19; -int IMMUNITY_TYPE_ATTACK_DECREASE = 20; -int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; -int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; -int IMMUNITY_TYPE_AC_DECREASE = 23; -int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; -int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; -int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; -int IMMUNITY_TYPE_SKILL_DECREASE = 27; -int IMMUNITY_TYPE_KNOCKDOWN = 28; -int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; -int IMMUNITY_TYPE_SNEAK_ATTACK = 30; -int IMMUNITY_TYPE_CRITICAL_HIT = 31; -int IMMUNITY_TYPE_DEATH = 32; - -int AREA_TRANSITION_RANDOM = 0; -int AREA_TRANSITION_USER_DEFINED = 1; -int AREA_TRANSITION_CITY_01 = 2; -int AREA_TRANSITION_CITY_02 = 3; -int AREA_TRANSITION_CITY_03 = 4; -int AREA_TRANSITION_CITY_04 = 5; -int AREA_TRANSITION_CITY_05 = 6; -int AREA_TRANSITION_CRYPT_01 = 7; -int AREA_TRANSITION_CRYPT_02 = 8; -int AREA_TRANSITION_CRYPT_03 = 9; -int AREA_TRANSITION_CRYPT_04 = 10; -int AREA_TRANSITION_CRYPT_05 = 11; -int AREA_TRANSITION_DUNGEON_01 = 12; -int AREA_TRANSITION_DUNGEON_02 = 13; -int AREA_TRANSITION_DUNGEON_03 = 14; -int AREA_TRANSITION_DUNGEON_04 = 15; -int AREA_TRANSITION_DUNGEON_05 = 16; -int AREA_TRANSITION_DUNGEON_06 = 17; -int AREA_TRANSITION_DUNGEON_07 = 18; -int AREA_TRANSITION_DUNGEON_08 = 19; -int AREA_TRANSITION_MINES_01 = 20; -int AREA_TRANSITION_MINES_02 = 21; -int AREA_TRANSITION_MINES_03 = 22; -int AREA_TRANSITION_MINES_04 = 23; -int AREA_TRANSITION_MINES_05 = 24; -int AREA_TRANSITION_MINES_06 = 25; -int AREA_TRANSITION_MINES_07 = 26; -int AREA_TRANSITION_MINES_08 = 27; -int AREA_TRANSITION_MINES_09 = 28; -int AREA_TRANSITION_SEWER_01 = 29; -int AREA_TRANSITION_SEWER_02 = 30; -int AREA_TRANSITION_SEWER_03 = 31; -int AREA_TRANSITION_SEWER_04 = 32; -int AREA_TRANSITION_SEWER_05 = 33; -int AREA_TRANSITION_CASTLE_01 = 34; -int AREA_TRANSITION_CASTLE_02 = 35; -int AREA_TRANSITION_CASTLE_03 = 36; -int AREA_TRANSITION_CASTLE_04 = 37; -int AREA_TRANSITION_CASTLE_05 = 38; -int AREA_TRANSITION_CASTLE_06 = 39; -int AREA_TRANSITION_CASTLE_07 = 40; -int AREA_TRANSITION_CASTLE_08 = 41; -int AREA_TRANSITION_INTERIOR_01 = 42; -int AREA_TRANSITION_INTERIOR_02 = 43; -int AREA_TRANSITION_INTERIOR_03 = 44; -int AREA_TRANSITION_INTERIOR_04 = 45; -int AREA_TRANSITION_INTERIOR_05 = 46; -int AREA_TRANSITION_INTERIOR_06 = 47; -int AREA_TRANSITION_INTERIOR_07 = 48; -int AREA_TRANSITION_INTERIOR_08 = 49; -int AREA_TRANSITION_INTERIOR_09 = 50; -int AREA_TRANSITION_INTERIOR_10 = 51; -int AREA_TRANSITION_INTERIOR_11 = 52; -int AREA_TRANSITION_INTERIOR_12 = 53; -int AREA_TRANSITION_INTERIOR_13 = 54; -int AREA_TRANSITION_INTERIOR_14 = 55; -int AREA_TRANSITION_INTERIOR_15 = 56; -int AREA_TRANSITION_INTERIOR_16 = 57; -int AREA_TRANSITION_FOREST_01 = 58; -int AREA_TRANSITION_FOREST_02 = 59; -int AREA_TRANSITION_FOREST_03 = 60; -int AREA_TRANSITION_FOREST_04 = 61; -int AREA_TRANSITION_FOREST_05 = 62; -int AREA_TRANSITION_RURAL_01 = 63; -int AREA_TRANSITION_RURAL_02 = 64; -int AREA_TRANSITION_RURAL_03 = 65; -int AREA_TRANSITION_RURAL_04 = 66; -int AREA_TRANSITION_RURAL_05 = 67; - -// Legacy area-transition constants. Do not delete these. -int AREA_TRANSITION_CITY = 2; -int AREA_TRANSITION_CRYPT = 7; -int AREA_TRANSITION_FOREST = 58; -int AREA_TRANSITION_RURAL = 63; - -// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. -int BODY_NODE_HAND = 0; -int BODY_NODE_CHEST = 1; -int BODY_NODE_HEAD = 2; -// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The -// nodes used with be 'lhand' and 'rhand'. -int BODY_NODE_HAND_LEFT = 3; -int BODY_NODE_HAND_RIGHT = 4; - -float RADIUS_SIZE_SMALL = 1.67f; -float RADIUS_SIZE_MEDIUM = 3.33f; -float RADIUS_SIZE_LARGE = 5.0f; -float RADIUS_SIZE_HUGE = 6.67f; -float RADIUS_SIZE_GARGANTUAN = 8.33f; -float RADIUS_SIZE_COLOSSAL = 10.0f; - -// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType -int EFFECT_TYPE_INVALIDEFFECT = 0; -int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; -//int EFFECT_TYPE_ABILITY_BONUS = 2; -int EFFECT_TYPE_REGENERATE = 3; -//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; -//int EFFECT_TYPE_MODIFY_AC = 5; -//int EFFECT_TYPE_ATTACK_BONUS = 6; -int EFFECT_TYPE_DAMAGE_REDUCTION = 7; -//int EFFECT_TYPE_DAMAGE_BONUS = 8; -int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; -//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; -int EFFECT_TYPE_ENTANGLE = 11; -int EFFECT_TYPE_INVULNERABLE = 12; -int EFFECT_TYPE_DEAF = 13; -int EFFECT_TYPE_RESURRECTION = 14; -int EFFECT_TYPE_IMMUNITY = 15; -//int EFFECT_TYPE_BLIND = 16; -int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; -int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; -//int EFFECT_TYPE_MOVEMENT_SPEED = 19; -int EFFECT_TYPE_AREA_OF_EFFECT = 20; -int EFFECT_TYPE_BEAM = 21; -//int EFFECT_TYPE_FORCE_RESISTANCE = 22; -int EFFECT_TYPE_CHARMED = 23; -int EFFECT_TYPE_CONFUSED = 24; -int EFFECT_TYPE_FRIGHTENED = 25; -int EFFECT_TYPE_DOMINATED = 26; -int EFFECT_TYPE_PARALYZE = 27; -int EFFECT_TYPE_DAZED = 28; -int EFFECT_TYPE_STUNNED = 29; -int EFFECT_TYPE_SLEEP = 30; -int EFFECT_TYPE_POISON = 31; -int EFFECT_TYPE_DISEASE = 32; -int EFFECT_TYPE_CURSE = 33; -int EFFECT_TYPE_SILENCE = 34; -int EFFECT_TYPE_TURNED = 35; -int EFFECT_TYPE_HASTE = 36; -int EFFECT_TYPE_SLOW = 37; -int EFFECT_TYPE_ABILITY_INCREASE = 38; -int EFFECT_TYPE_ABILITY_DECREASE = 39; -int EFFECT_TYPE_ATTACK_INCREASE = 40; -int EFFECT_TYPE_ATTACK_DECREASE = 41; -int EFFECT_TYPE_DAMAGE_INCREASE = 42; -int EFFECT_TYPE_DAMAGE_DECREASE = 43; -int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; -int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; -int EFFECT_TYPE_AC_INCREASE = 46; -int EFFECT_TYPE_AC_DECREASE = 47; -int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; -int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; -int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; -int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; -int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; -int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; -int EFFECT_TYPE_SKILL_INCREASE = 54; -int EFFECT_TYPE_SKILL_DECREASE = 55; -int EFFECT_TYPE_INVISIBILITY = 56; -int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; -int EFFECT_TYPE_DARKNESS = 58; -int EFFECT_TYPE_DISPELMAGICALL = 59; -int EFFECT_TYPE_ELEMENTALSHIELD = 60; -int EFFECT_TYPE_NEGATIVELEVEL = 61; -int EFFECT_TYPE_DISGUISE = 62; -int EFFECT_TYPE_SANCTUARY = 63; -int EFFECT_TYPE_TRUESEEING = 64; -int EFFECT_TYPE_SEEINVISIBLE = 65; -int EFFECT_TYPE_TIMESTOP = 66; -int EFFECT_TYPE_BLINDNESS = 67; -int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; -int EFFECT_TYPE_DISPELMAGICBEST = 69; -int EFFECT_TYPE_ULTRAVISION = 70; -int EFFECT_TYPE_MISS_CHANCE = 71; -int EFFECT_TYPE_CONCEALMENT = 72; -int EFFECT_TYPE_SPELL_IMMUNITY = 73; -int EFFECT_TYPE_ASSUREDHIT = 74; -int EFFECT_TYPE_VISUAL = 75; -int EFFECT_TYPE_LIGHTSABERTHROW = 76; -int EFFECT_TYPE_FORCEJUMP = 77; -int EFFECT_TYPE_ASSUREDDEFLECTION = 78; - - -int ITEM_PROPERTY_ABILITY_BONUS = 0 ; -int ITEM_PROPERTY_AC_BONUS = 1 ; -int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; -int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; -int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; -int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; -int ITEM_PROPERTY_BONUS_FEAT = 9 ; -int ITEM_PROPERTY_ACTIVATE_ITEM = 10; -int ITEM_PROPERTY_DAMAGE_BONUS = 11; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; -int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; -int ITEM_PROPERTY_DECREASED_DAMAGE = 15; -int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; -int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; -int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; -int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; -int ITEM_PROPERTY_DECREASED_AC = 20; -int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; -int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; -int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; -int ITEM_PROPERTY_IMMUNITY = 24; -int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; -int ITEM_PROPERTY_KEEN = 28; -int ITEM_PROPERTY_LIGHT = 29; -int ITEM_PROPERTY_MIGHTY = 30; -int ITEM_PROPERTY_NO_DAMAGE = 31; -int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; -int ITEM_PROPERTY_REGENERATION = 35; -int ITEM_PROPERTY_SKILL_BONUS = 36; -int ITEM_PROPERTY_SECURITY_SPIKE = 37; -int ITEM_PROPERTY_ATTACK_BONUS = 38; -int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; -int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; -int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; -int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; -int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; -int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; -int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; -int ITEM_PROPERTY_TRAP = 46; -int ITEM_PROPERTY_TRUE_SEEING = 47; -int ITEM_PROPERTY_ON_MONSTER_HIT = 48; -int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; -int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; -int ITEM_PROPERTY_MONSTER_DAMAGE = 51; -int ITEM_PROPERTY_SPECIAL_WALK = 52; -int ITEM_PROPERTY_COMPUTER_SPIKE = 53; -int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; -int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; -int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; - -int BASE_ITEM_QUARTER_STAFF = 0; -int BASE_ITEM_STUN_BATON = 1; -int BASE_ITEM_LONG_SWORD = 2; -int BASE_ITEM_VIBRO_SWORD = 3; -int BASE_ITEM_SHORT_SWORD = 4; -int BASE_ITEM_VIBRO_BLADE = 5; -int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; -int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; -int BASE_ITEM_LIGHTSABER = 8; -int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; -int BASE_ITEM_SHORT_LIGHTSABER = 10; -int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; -int BASE_ITEM_BLASTER_PISTOL = 12; -int BASE_ITEM_HEAVY_BLASTER = 13; -int BASE_ITEM_HOLD_OUT_BLASTER = 14; -int BASE_ITEM_ION_BLASTER = 15; -int BASE_ITEM_DISRUPTER_PISTOL = 16; -int BASE_ITEM_SONIC_PISTOL = 17; -int BASE_ITEM_ION_RIFLE = 18; -int BASE_ITEM_BOWCASTER = 19; -int BASE_ITEM_BLASTER_CARBINE = 20; -int BASE_ITEM_DISRUPTER_RIFLE = 21; -int BASE_ITEM_SONIC_RIFLE = 22; -int BASE_ITEM_REPEATING_BLASTER = 23; -int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; -int BASE_ITEM_FRAGMENTATION_GRENADES = 25; -int BASE_ITEM_STUN_GRENADES = 26; -int BASE_ITEM_THERMAL_DETONATOR = 27; -int BASE_ITEM_POISON_GRENADE = 28; -int BASE_ITEM_FLASH_GRENADE = 29; -int BASE_ITEM_SONIC_GRENADE = 30; -int BASE_ITEM_ADHESIVE_GRENADE = 31; -int BASE_ITEM_CRYOBAN_GRENADE = 32; -int BASE_ITEM_FIRE_GRENADE = 33; -int BASE_ITEM_ION_GRENADE = 34; -int BASE_ITEM_JEDI_ROBE = 35; -int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; -int BASE_ITEM_JEDI_MASTER_ROBE = 37; -int BASE_ITEM_ARMOR_CLASS_4 = 38; -int BASE_ITEM_ARMOR_CLASS_5 = 39; -int BASE_ITEM_ARMOR_CLASS_6 = 40; -int BASE_ITEM_ARMOR_CLASS_7 = 41; -int BASE_ITEM_ARMOR_CLASS_8 = 42; -int BASE_ITEM_ARMOR_CLASS_9 = 43; -int BASE_ITEM_MASK = 44; -int BASE_ITEM_GAUNTLETS = 45; -int BASE_ITEM_FOREARM_BANDS = 46; -int BASE_ITEM_BELT = 47; -int BASE_ITEM_IMPLANT_1 = 48; -int BASE_ITEM_IMPLANT_2 = 49; -int BASE_ITEM_IMPLANT_3 = 50; -int BASE_ITEM_DATA_PAD = 52; -int BASE_ITEM_ADRENALINE = 53; -int BASE_ITEM_COMBAT_SHOTS = 54; -int BASE_ITEM_MEDICAL_EQUIPMENT = 55; -int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; -int BASE_ITEM_CREDITS = 57; -int BASE_ITEM_TRAP_KIT = 58; -int BASE_ITEM_SECURITY_SPIKES = 59; -int BASE_ITEM_PROGRAMMING_SPIKES = 60; -int BASE_ITEM_GLOW_ROD = 61; -int BASE_ITEM_COLLAR_LIGHT = 62; -int BASE_ITEM_TORCH = 63; -int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; -int BASE_ITEM_AESTHETIC_ITEM = 65; -int BASE_ITEM_DROID_LIGHT_PLATING = 66; -int BASE_ITEM_DROID_MEDIUM_PLATING = 67; -int BASE_ITEM_DROID_HEAVY_PLATING = 68; -int BASE_ITEM_DROID_SEARCH_SCOPE = 69; -int BASE_ITEM_DROID_MOTION_SENSORS = 70; -int BASE_ITEM_DROID_SONIC_SENSORS = 71; -int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; -int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; -int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; -int BASE_ITEM_DROID_SHIELD = 75; -int BASE_ITEM_DROID_UTILITY_DEVICE = 76; -int BASE_ITEM_BLASTER_RIFLE = 77; -int BASE_ITEM_GHAFFI_STICK = 78; -int BASE_ITEM_WOOKIE_WARBLADE = 79; -int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; -int BASE_ITEM_CREATURE_ITEM_SLASH = 81; -int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; -int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; -int BASE_ITEM_CREATURE_HIDE_ITEM = 84; -int BASE_ITEM_BASIC_CLOTHING = 85; - -int BASE_ITEM_INVALID = 256; - - -// AMF: These constants define attack results -int ATTACK_RESULT_INVALID = 0; -int ATTACK_RESULT_HIT_SUCCESSFUL = 1; -int ATTACK_RESULT_CRITICAL_HIT = 2; -int ATTACK_RESULT_AUTOMATIC_HIT = 3; - -int ATTACK_RESULT_MISS = 4; -int ATTACK_RESULT_ATTACK_RESISTED = 5; -int ATTACK_RESULT_ATTACK_FAILED = 6; - -int ATTACK_RESULT_PARRIED = 8; -int ATTACK_RESULT_DEFLECTED = 9; - - -// these match the constants in visualeffects.2da -int VFX_NONE = -1; - -int VFX_IMP_HEALING_SMALL = 1001; -int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; -int VFX_PRO_AFFLICT = 1003; -int VFX_IMP_CHOKE = 1004; -int VFX_IMP_CURE = 1005; -int VFX_PRO_DEATH_FIELD = 1006; -int VFX_PRO_DROID_DISABLE = 1007; -int VFX_PRO_DROID_KILL = 1008; -int VFX_PRO_DRAIN = 1009; -int VFX_PRO_FORCE_ARMOR = 1010; -int VFX_PRO_FORCE_AURA = 1011; -int VFX_IMP_FORCE_BREACH = 1012; -int VFX_IMP_FORCE_PUSH = 1014; -int VFX_PRO_FORCE_SHIELD = 1015; -int VFX_IMP_FORCE_WAVE = 1017; -int VFX_IMP_FORCE_WHIRLWIND = 1018; -int VFX_IMP_HEAL = 1019; -int VFX_IMP_SPEED_KNIGHT = 1020; -int VFX_PRO_LIGHTNING_L = 1021; -int VFX_IMP_SPEED_MASTERY = 1022; -int VFX_PRO_RESIST_ELEMENTS = 1025; -int VFX_PRO_RESIST_FORCE = 1026; -int VFX_PRO_RESIST_POISON = 1027; -int VFX_PRO_LIGHTNING_S = 1028; -int VFX_IMP_MIND_FORCE = 1031; -int VFX_IMP_SUPPRESS_FORCE = 1032; -int VFX_IMP_MIND_KINIGHT = 1033; -int VFX_IMP_MIND_MASTERY = 1034; -int VFX_PRO_LIGHTNING_JEDI = 1035; -int VFX_PRO_LIGHTNING_L_SOUND = 1036; -int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; -int VFX_IMP_FLAME = 1039; -int VFX_IMP_STUN = 1040; - -int VFX_DUR_STEALTH_PULSE = 2000; -int VFX_DUR_INVISIBILITY = 2001; -int VFX_DUR_SPEED = 2004; -int VFX_DUR_FORCE_WHIRLWIND = 2007; -int VFX_DUR_HOLD = 2008; -int VFX_DUR_BODY_FUAL = 2024; -int VFX_DUR_PSYCHIC_STATIC = 2025; -int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; -int VFX_BEAM_DROID_DISABLE = 2027; -int VFX_BEAM_DROID_DESTROY = 2028; -int VFX_BEAM_DRAIN_LIFE = 2029; -int VFX_DUR_KNIGHTS_SPEED = 2031; -int VFX_DUR_SHIELD_RED_MARK_I = 2032; -int VFX_DUR_SHIELD_RED_MARK_II = 2034; -int VFX_DUR_SHIELD_RED_MARK_IV = 2035; -int VFX_BEAM_LIGHTNING_DARK_S = 2037; -int VFX_BEAM_LIGHTNING_DARK_L = 2038; -int VFX_DUR_SHIELD_BLUE_01 = 2040; -int VFX_DUR_SHIELD_BLUE_02 = 2041; -int VFX_DUR_SHIELD_BLUE_03 = 2042; -int VFX_DUR_SHIELD_BLUE_04 = 2043; -int VFX_DUR_SHIELD_GREEN_01 = 2044; -int VFX_DUR_SHIELD_RED_01 = 2045; -int VFX_DUR_SHIELD_RED_02 = 2046; -int VFX_DUR_SHIELD_CHROME_01 = 2047; -int VFX_DUR_SHIELD_CHROME_02 = 2048; -int VFX_BEAM_ION_RAY_01 = 2049; -int VFX_BEAM_ION_RAY_02 = 2050; -int VFX_BEAM_COLD_RAY = 2051; -int VFX_BEAM_STUN_RAY = 2052; -int VFX_BEAM_FLAME_SPRAY = 2053; -int VFX_DUR_CARBONITE_ENCASING = 2054; -int VFX_DUR_CARBONITE_CHUNKS = 2055; -int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; -int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; -int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; - -int VFX_FNF_FORCE_WAVE = 3001; -int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; -int VFX_FNF_GRENADE_FRAGMENTATION = 3003; -int VFX_FNF_GRENADE_STUN = 3004; -int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; -int VFX_FNF_GRENADE_POISON = 3006; -int VFX_FNF_GRENADE_SONIC = 3007; -int VFX_FNF_GRENADE_ADHESIVE = 3008; -int VFX_FNF_GRENADE_CRYOBAN = 3009; -int VFX_FNF_GRENADE_PLASMA = 3010; -int VFX_FNF_GRENADE_ION = 3011; -int VFX_FNF_GRAVITY_GENERATOR = 3013; - -int VFX_COM_SPARKS_LARGE = 4003; -int VFX_COM_SPARKS_LIGHTSABER = 4004; -int VFX_COM_SPARKS_PARRY_METAL = 4011; -int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; -int VFX_COM_POWER_BLAST_IMPROVED = 4013; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; -int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; -int VFX_COM_MULTI_SHOT = 4016; -int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; -int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; -int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; -int VFX_COM_SNIPER_SHOT_MASTERY = 4020; -int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; -int VFX_COM_RAPID_SHOT_IMPROVED = 4022; -int VFX_COM_BLASTER_DEFLECTION = 4023; -int VFX_COM_BLASTER_IMPACT = 4024; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; -int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; -int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; -int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; -int VFX_COM_POWER_BLAST_MASTERY = 4029; -int VFX_COM_FLURRY_IMPROVED_SABER = 4030; -int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; -int VFX_COM_BLASTER_IMPACT_GROUND = 4032; -int VFX_COM_SPARKS_BLASTER = 4033; -int VFX_COM_DROID_EXPLOSION_1 = 4034; -int VFX_COM_DROID_EXPLOSION_2 = 4035; -int VFX_COM_JEDI_FORCE_FIZZLE = 4036; -int VFX_COM_FORCE_RESISTED = 4037; - -int VFX_ARD_LIGHT_YELLOW_10 = 5000; -int VFX_ARD_LIGHT_YELLOW_20 = 5001; -int VFX_ARD_LIGHT_BLIND = 5002; -int VFX_ARD_HEAT_SHIMMER = 5003; - -int VFX_IMP_MIRV = 6000; -int VFX_IMP_MIRV_IMPACT = 6001; -int VFX_IMP_SCREEN_SHAKE = 6002; - - -int AOE_PER_FOGACID = 0; -int AOE_PER_FOGFIRE = 1; -int AOE_PER_FOGSTINK = 2; -int AOE_PER_FOGKILL = 3; -int AOE_PER_FOGMIND = 4; -int AOE_PER_WALLFIRE = 5; -int AOE_PER_WALLWIND = 6; -int AOE_PER_WALLBLADE = 7; -int AOE_PER_WEB = 8; -int AOE_PER_ENTANGLE = 9; -//int AOE_PER_CHAOS = 10; -int AOE_PER_DARKNESS = 11; -int AOE_MOB_CIRCEVIL = 12; -int AOE_MOB_CIRCGOOD = 13; -int AOE_MOB_CIRCLAW = 14; -int AOE_MOB_CIRCCHAOS = 15; -int AOE_MOB_FEAR = 16; -int AOE_MOB_BLINDING = 17; -int AOE_MOB_UNEARTHLY = 18; -int AOE_MOB_MENACE = 19; -int AOE_MOB_UNNATURAL = 20; -int AOE_MOB_STUN = 21; -int AOE_MOB_PROTECTION = 22; -int AOE_MOB_FIRE = 23; -int AOE_MOB_FROST = 24; -int AOE_MOB_ELECTRICAL = 25; -int AOE_PER_FOGGHOUL = 26; -int AOE_MOB_TYRANT_FOG = 27; -int AOE_PER_STORM = 28; -int AOE_PER_INVIS_SPHERE = 29; -int AOE_MOB_SILENCE = 30; -int AOE_PER_DELAY_BLAST_FIREBALL = 31; -int AOE_PER_GREASE = 32; -int AOE_PER_CREEPING_DOOM = 33; -int AOE_PER_EVARDS_BLACK_TENTACLES = 34; -int AOE_MOB_INVISIBILITY_PURGE = 35; -int AOE_MOB_DRAGON_FEAR = 36; - -// these constants match those in spell.2da -int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. -int FORCE_POWER_MASTER_ALTER = 0; -int FORCE_POWER_MASTER_CONTROL = 1; -int FORCE_POWER_MASTER_SENSE = 2; -int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; -int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; -int FORCE_POWER_REGNERATION_ADVANCED = 5; -int FORCE_POWER_AFFECT_MIND = 6; -int FORCE_POWER_AFFLICTION = 7; -int FORCE_POWER_SPEED_BURST = 8; -int FORCE_POWER_CHOKE = 9; -int FORCE_POWER_CURE = 10; -int FORCE_POWER_DEATH_FIELD = 11; -int FORCE_POWER_DROID_DISABLE = 12; -int FORCE_POWER_DROID_DESTROY = 13; -int FORCE_POWER_DOMINATE = 14; -int FORCE_POWER_DRAIN_LIFE = 15; -int FORCE_POWER_FEAR = 16; -int FORCE_POWER_FORCE_ARMOR = 17; -int FORCE_POWER_FORCE_AURA = 18; -int FORCE_POWER_FORCE_BREACH = 19; -int FORCE_POWER_FORCE_IMMUNITY = 20; -int FORCE_POWER_FORCE_JUMP = 21; -int FORCE_POWER_FORCE_MIND = 22; -int FORCE_POWER_FORCE_PUSH = 23; -int FORCE_POWER_FORCE_SHIELD = 24; -int FORCE_POWER_FORCE_STORM = 25; -int FORCE_POWER_FORCE_WAVE = 26; -int FORCE_POWER_FORCE_WHIRLWIND = 27; -int FORCE_POWER_HEAL = 28; -int FORCE_POWER_HOLD = 29; -int FORCE_POWER_HORROR = 30; -int FORCE_POWER_INSANITY = 31; -int FORCE_POWER_KILL = 32; -int FORCE_POWER_KNIGHT_MIND = 33; -int FORCE_POWER_KNIGHT_SPEED = 34; -int FORCE_POWER_LIGHTNING = 35; -int FORCE_POWER_MIND_MASTERY = 36; -int FORCE_POWER_SPEED_MASTERY = 37; -int FORCE_POWER_PLAGUE = 38; -int FORCE_POWER_REGENERATION = 39; -int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; -int FORCE_POWER_RESIST_FORCE = 41; -int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; -int FORCE_POWER_SHOCK = 43; -int FORCE_POWER_SLEEP = 44; -int FORCE_POWER_SLOW = 45; -int FORCE_POWER_STUN = 46; -int FORCE_POWER_DROID_STUN = 47; -int FORCE_POWER_SUPRESS_FORCE = 48; -int FORCE_POWER_LIGHT_SABER_THROW = 49; -int FORCE_POWER_WOUND = 50; -int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; -int SPECIAL_ABILITY_BODY_FUEL = 52; -int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; -int SPECIAL_ABILITY_WARRIOR_STANCE = 54; -int SPECIAL_ABILITY_SENTINEL_STANCE = 55; -int SPECIAL_ABILITY_DOMINATE_MIND = 56; -int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; -int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; -int SPECIAL_ABILITY_ENHANCED_SENSES = 59; -int SPECIAL_ABILITY_CAMOFLAGE = 60; -int SPECIAL_ABILITY_TAUNT = 61; -int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; -int SPECIAL_ABILITY_RAGE = 63; - -// these constants must match those in poison.2da - -int POISON_ABILITY_SCORE_MILD = 0; -int POISON_ABILITY_SCORE_AVERAGE = 1; -int POISON_ABILITY_SCORE_VIRULENT = 2; -int POISON_DAMAGE_MILD = 3; -int POISON_DAMAGE_AVERAGE = 4; -int POISON_DAMAGE_VIRULENT = 5; - -// the thing after CREATURE_TYPE_ should refer to the -// actual "subtype" in the lists given above. -int CREATURE_TYPE_RACIAL_TYPE = 0; -int CREATURE_TYPE_PLAYER_CHAR = 1; -int CREATURE_TYPE_CLASS = 2; -int CREATURE_TYPE_REPUTATION = 3; -int CREATURE_TYPE_IS_ALIVE = 4; -int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; -int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; -int CREATURE_TYPE_PERCEPTION = 7; -//int CREATURE_TYPE_ALIGNMENT = 2; - -int REPUTATION_TYPE_FRIEND = 0; -int REPUTATION_TYPE_ENEMY = 1; -int REPUTATION_TYPE_NEUTRAL = 2; - -int PERCEPTION_SEEN_AND_HEARD = 0; -int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; -int PERCEPTION_HEARD_AND_NOT_SEEN = 2; -int PERCEPTION_SEEN_AND_NOT_HEARD = 3; -int PERCEPTION_NOT_HEARD = 4; -int PERCEPTION_HEARD = 5; -int PERCEPTION_NOT_SEEN = 6; -int PERCEPTION_SEEN = 7; - -int PLAYER_CHAR_NOT_PC = FALSE; -int PLAYER_CHAR_IS_PC = TRUE; - -int CLASS_TYPE_SOLDIER = 0; -int CLASS_TYPE_SCOUT = 1; -int CLASS_TYPE_SCOUNDREL = 2; -int CLASS_TYPE_JEDIGUARDIAN = 3; -int CLASS_TYPE_JEDICONSULAR = 4; -int CLASS_TYPE_JEDISENTINEL = 5; -int CLASS_TYPE_COMBATDROID = 6; -int CLASS_TYPE_EXPERTDROID = 7; -int CLASS_TYPE_MINION = 8; - -int CLASS_TYPE_INVALID = 255; - -// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() -int PERSISTENT_ZONE_ACTIVE = 0; -int PERSISTENT_ZONE_FOLLOW = 1; - -int INVALID_STANDARD_FACTION = -1; -int STANDARD_FACTION_HOSTILE_1 = 1; -int STANDARD_FACTION_FRIENDLY_1 = 2; -int STANDARD_FACTION_HOSTILE_2 = 3; -int STANDARD_FACTION_FRIENDLY_2 = 4; -int STANDARD_FACTION_NEUTRAL = 5; -int STANDARD_FACTION_INSANE = 6; -int STANDARD_FACTION_PTAT_TUSKAN = 7; -int STANDARD_FACTION_GLB_XOR = 8; -int STANDARD_FACTION_SURRENDER_1 = 9; -int STANDARD_FACTION_SURRENDER_2 = 10; -int STANDARD_FACTION_PREDATOR = 11; -int STANDARD_FACTION_PREY = 12; -int STANDARD_FACTION_TRAP = 13; -int STANDARD_FACTION_ENDAR_SPIRE = 14; -int STANDARD_FACTION_RANCOR = 15; -int STANDARD_FACTION_GIZKA_1 = 16; -int STANDARD_FACTION_GIZKA_2 = 17; - -// Skill defines -int SKILL_COMPUTER_USE = 0; -int SKILL_DEMOLITIONS = 1; -int SKILL_STEALTH = 2; -int SKILL_AWARENESS = 3; -int SKILL_PERSUADE = 4; -int SKILL_REPAIR = 5; -int SKILL_SECURITY = 6; -int SKILL_TREAT_INJURY = 7; -int SKILL_MAX_SKILLS = 8; - -int SUBSKILL_FLAGTRAP = 100; -int SUBSKILL_RECOVERTRAP = 101; -int SUBSKILL_EXAMINETRAP = 102; - -// FEATS -//int FEAT_ADVANCED_DODGE = 0; -int FEAT_ADVANCED_JEDI_DEFENSE = 1; -int FEAT_ADVANCED_GUARD_STANCE = 2; -int FEAT_AMBIDEXTERITY = 3; -int FEAT_ARMOUR_PROF_HEAVY = 4; -int FEAT_ARMOUR_PROF_LIGHT = 5; -int FEAT_ARMOUR_PROF_MEDIUM = 6; -int FEAT_CAUTIOUS = 7; -int FEAT_CRITICAL_STRIKE = 8; -int FEAT_DOUBLE_WEAPON_FIGHTING = 9; -int FEAT_EMPATHY = 10; -int FEAT_FLURRY = 11; -int FEAT_GEAR_HEAD = 12; -int FEAT_GREAT_FORTITUDE = 13; -int FEAT_IMPLANT_LEVEL_1 = 14; -int FEAT_IMPLANT_LEVEL_2 = 15; -int FEAT_IMPLANT_LEVEL_3 = 16; -int FEAT_IMPROVED_POWER_ATTACK = 17; -int FEAT_IMPROVED_POWER_BLAST = 18; -int FEAT_IMPROVED_CRITICAL_STRIKE = 19; -int FEAT_IMPROVED_SNIPER_SHOT = 20; -int FEAT_IRON_WILL = 21; -int FEAT_LIGHTNING_REFLEXES = 22; -//int FEAT_MASTER_DODGE = 23; -int FEAT_MASTER_JEDI_DEFENSE = 24; -int FEAT_MASTER_GUARD_STANCE = 25; -int FEAT_MULTI_SHOT = 26; -int FEAT_PERCEPTIVE = 27; -int FEAT_POWER_ATTACK = 28; -int FEAT_POWER_BLAST = 29; -int FEAT_RAPID_SHOT = 30; -int FEAT_SNIPER_SHOT = 31; -int FEAT_WEAPON_FOCUS_BLASTER = 32; -int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; -int FEAT_WEAPON_FOCUS_GRENADE = 34; -int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; -int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; -int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; -int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; -int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; -int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; -int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; -int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; -int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; -int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; -int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; -int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; -int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; -int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; -int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; -int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; -int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; -int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; -int FEAT_WHIRLWIND_ATTACK = 53; -int FEAT_GUARD_STANCE = 54; -int FEAT_JEDI_DEFENSE = 55; -int FEAT_UNCANNY_DODGE_1 = 56; -int FEAT_UNCANNY_DODGE_2 = 57; -int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; -//int FEAT_DODGE = 59; -int FEAT_SNEAK_ATTACK_1D6 = 60; -int FEAT_SNEAK_ATTACK_2D6 = 61; -int FEAT_SNEAK_ATTACK_3D6 = 62; -int FEAT_SNEAK_ATTACK_4D6 = 63; -int FEAT_SNEAK_ATTACK_5D6 = 64; -int FEAT_SNEAK_ATTACK_6D6 = 65; -int FEAT_SNEAK_ATTACK_7D6 = 66; -int FEAT_SNEAK_ATTACK_8D6 = 67; -int FEAT_SNEAK_ATTACK_9D6 = 68; -int FEAT_SNEAK_ATTACK_10D6 = 69; -int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; -int FEAT_SKILL_FOCUS_STEALTH = 71; -int FEAT_SKILL_FOCUS_AWARENESS = 72; -int FEAT_SKILL_FOCUS_PERSUADE = 73; -int FEAT_SKILL_FOCUS_REPAIR = 74; -int FEAT_SKILL_FOCUS_SECURITY = 75; -int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; -int FEAT_MASTER_SNIPER_SHOT = 77; -int FEAT_DROID_UPGRADE_1 = 78; -int FEAT_DROID_UPGRADE_2 = 79; -int FEAT_DROID_UPGRADE_3 = 80; -int FEAT_MASTER_CRITICAL_STRIKE = 81; -int FEAT_MASTER_POWER_BLAST = 82; -int FEAT_MASTER_POWER_ATTACK = 83; -int FEAT_TOUGHNESS = 84; -int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; -int FEAT_FORCE_FOCUS_ALTER = 86; -int FEAT_FORCE_FOCUS_CONTROL = 87; -int FEAT_FORCE_FOCUS_SENSE = 88; -int FEAT_FORCE_FOCUS_ADVANCED = 89; -int FEAT_FORCE_FOCUS_MASTERY = 90; -int FEAT_IMPROVED_FLURRY = 91; -int FEAT_IMPROVED_RAPID_SHOT = 92; -int FEAT_PROFICIENCY_ALL = 93; -int FEAT_BATTLE_MEDITATION = 94; - -// Special Attack Defines -int SPECIAL_ATTACK_INVALID = 0; -int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; -int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; -int SPECIAL_ATTACK_SAP = 3; -int SPECIAL_ATTACK_DISARM = 4; -int SPECIAL_ATTACK_IMPROVED_DISARM = 5; -int SPECIAL_ATTACK_KNOCKDOWN = 6; -int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; -int SPECIAL_ATTACK_STUNNING_FIST = 8; -int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; -int SPECIAL_ATTACK_RAPID_SHOT = 10; - -// Combat Mode Defines -int COMBAT_MODE_INVALID = 0; -int COMBAT_MODE_PARRY = 1; -int COMBAT_MODE_POWER_ATTACK = 2; -int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; -int COMBAT_MODE_FLURRY_OF_BLOWS = 4; -int COMBAT_MODE_RAPID_SHOT = 5; - -// These represent the row in the difficulty 2da, rather than -// a difficulty value. -int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; -int ENCOUNTER_DIFFICULTY_EASY = 1; -int ENCOUNTER_DIFFICULTY_NORMAL = 2; -int ENCOUNTER_DIFFICULTY_HARD = 3; -int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; - -// Looping animation constants. -int ANIMATION_LOOPING_PAUSE = 0; -int ANIMATION_LOOPING_PAUSE2 = 1; -int ANIMATION_LOOPING_LISTEN = 2; -int ANIMATION_LOOPING_MEDITATE = 3; -int ANIMATION_LOOPING_WORSHIP = 4; -//int ANIMATION_LOOPING_LOOK_FAR = 5; -//int ANIMATION_LOOPING_SIT_CHAIR = 6; -//int ANIMATION_LOOPING_SIT_CROSS = 7; -int ANIMATION_LOOPING_TALK_NORMAL = 5; -int ANIMATION_LOOPING_TALK_PLEADING = 6; -int ANIMATION_LOOPING_TALK_FORCEFUL = 7; -int ANIMATION_LOOPING_TALK_LAUGHING = 8; -int ANIMATION_LOOPING_TALK_SAD = 9; -int ANIMATION_LOOPING_GET_LOW = 10; -int ANIMATION_LOOPING_GET_MID = 11; -int ANIMATION_LOOPING_PAUSE_TIRED = 12; -int ANIMATION_LOOPING_PAUSE_DRUNK = 13; -int ANIMATION_LOOPING_FLIRT = 14; -int ANIMATION_LOOPING_USE_COMPUTER = 15; -int ANIMATION_LOOPING_DANCE = 16; -int ANIMATION_LOOPING_DANCE1 = 17; -int ANIMATION_LOOPING_HORROR = 18; -int ANIMATION_LOOPING_READY = 19; -int ANIMATION_LOOPING_DEACTIVATE = 20; -int ANIMATION_LOOPING_SPASM = 21; -int ANIMATION_LOOPING_SLEEP = 22; -int ANIMATION_LOOPING_PRONE = 23; -int ANIMATION_LOOPING_PAUSE3 = 24; -int ANIMATION_LOOPING_WELD = 25; -int ANIMATION_LOOPING_DEAD = 26; -int ANIMATION_LOOPING_TALK_INJURED = 27; -int ANIMATION_LOOPING_LISTEN_INJURED = 28; -int ANIMATION_LOOPING_TREAT_INJURED = 29; -int ANIMATION_LOOPING_DEAD_PRONE = 30; -int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; -int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; - -// NOTE: Choke is really a looping animation. The fire and forget constant has -// been left in because it has already been used in many places. Please -// use this constant from now on. -int ANIMATION_LOOPING_CHOKE = 116; - -// Fire and forget animation constants. -int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; -int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; -int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; -int ANIMATION_FIREFORGET_PAUSE_BORED = 103; -int ANIMATION_FIREFORGET_SALUTE = 104; -int ANIMATION_FIREFORGET_BOW = 105; -//int ANIMATION_FIREFORGET_STEAL = 106; -int ANIMATION_FIREFORGET_GREETING = 106; -int ANIMATION_FIREFORGET_TAUNT = 107; -int ANIMATION_FIREFORGET_VICTORY1 = 108; -int ANIMATION_FIREFORGET_VICTORY2 = 109; -int ANIMATION_FIREFORGET_VICTORY3 = 110; -//int ANIMATION_FIREFORGET_READ = 111; -int ANIMATION_FIREFORGET_INJECT = 112; -int ANIMATION_FIREFORGET_USE_COMPUTER = 113; -int ANIMATION_FIREFORGET_PERSUADE = 114; -int ANIMATION_FIREFORGET_ACTIVATE = 115; -// NOTE: Please do not use this choke constant anymore. The choke is not a fire -// and forget animation. The looping choke constant above should be used -// instead. -int ANIMATION_FIREFORGET_CHOKE = 116; -int ANIMATION_FIREFORGET_THROW_HIGH = 117; -int ANIMATION_FIREFORGET_THROW_LOW = 118; -int ANIMATION_FIREFORGET_CUSTOM01 = 119; -int ANIMATION_FIREFORGET_TREAT_INJURED = 120; - -// Placeable animation constants -int ANIMATION_PLACEABLE_ACTIVATE = 200; -int ANIMATION_PLACEABLE_DEACTIVATE = 201; -int ANIMATION_PLACEABLE_OPEN = 202; -int ANIMATION_PLACEABLE_CLOSE = 203; -int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; -int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; -int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; -int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; -int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; -int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; -int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; -int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; -int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; -int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; - - -// Room Animation Constants -int ANIMATION_ROOM_SCRIPTLOOP01 = 1; -int ANIMATION_ROOM_SCRIPTLOOP02 = 2; -int ANIMATION_ROOM_SCRIPTLOOP03 = 3; -int ANIMATION_ROOM_SCRIPTLOOP04 = 4; -int ANIMATION_ROOM_SCRIPTLOOP05 = 5; -int ANIMATION_ROOM_SCRIPTLOOP06 = 6; -int ANIMATION_ROOM_SCRIPTLOOP07 = 7; -int ANIMATION_ROOM_SCRIPTLOOP08 = 8; -int ANIMATION_ROOM_SCRIPTLOOP09 = 9; -int ANIMATION_ROOM_SCRIPTLOOP10 = 10; -int ANIMATION_ROOM_SCRIPTLOOP11 = 11; -int ANIMATION_ROOM_SCRIPTLOOP12 = 12; -int ANIMATION_ROOM_SCRIPTLOOP13 = 13; -int ANIMATION_ROOM_SCRIPTLOOP14 = 14; -int ANIMATION_ROOM_SCRIPTLOOP15 = 15; -int ANIMATION_ROOM_SCRIPTLOOP16 = 16; -int ANIMATION_ROOM_SCRIPTLOOP17 = 17; -int ANIMATION_ROOM_SCRIPTLOOP18 = 18; -int ANIMATION_ROOM_SCRIPTLOOP19 = 19; -int ANIMATION_ROOM_SCRIPTLOOP20 = 20; - -int TALENT_TYPE_FORCE = 0; -int TALENT_TYPE_SPELL = 0; -int TALENT_TYPE_FEAT = 1; -int TALENT_TYPE_SKILL = 2; - -int TALENT_EXCLUDE_ALL_OF_TYPE = -1; - -int INVENTORY_DISTURB_TYPE_ADDED = 0; -int INVENTORY_DISTURB_TYPE_REMOVED = 1; -int INVENTORY_DISTURB_TYPE_STOLEN = 2; - -int GUI_PANEL_PLAYER_DEATH = 0; - -int POLYMORPH_TYPE_WEREWOLF = 0; -int POLYMORPH_TYPE_WERERAT = 1; -int POLYMORPH_TYPE_WERECAT = 2; -int POLYMORPH_TYPE_GIANT_SPIDER = 3; -int POLYMORPH_TYPE_TROLL = 4; -int POLYMORPH_TYPE_UMBER_HULK = 5; -int POLYMORPH_TYPE_PIXIE = 6; -int POLYMORPH_TYPE_ZOMBIE = 7; -int POLYMORPH_TYPE_RED_DRAGON = 8; -int POLYMORPH_TYPE_FIRE_GIANT = 9; -int POLYMORPH_TYPE_BALOR = 10; -int POLYMORPH_TYPE_DEATH_SLAAD = 11; -int POLYMORPH_TYPE_IRON_GOLEM = 12; -int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; -int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; -int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; -int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; -int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; -int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; -int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; -int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; -int POLYMORPH_TYPE_BROWN_BEAR = 21; -int POLYMORPH_TYPE_PANTHER = 22; -int POLYMORPH_TYPE_WOLF = 23; -int POLYMORPH_TYPE_BOAR = 24; -int POLYMORPH_TYPE_BADGER = 25; -int POLYMORPH_TYPE_PENGUIN = 26; -int POLYMORPH_TYPE_COW = 27; -int POLYMORPH_TYPE_DOOM_KNIGHT = 28; -int POLYMORPH_TYPE_YUANTI = 29; -int POLYMORPH_TYPE_IMP = 30; -int POLYMORPH_TYPE_QUASIT = 31; -int POLYMORPH_TYPE_SUCCUBUS = 32; -int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; -int POLYMORPH_TYPE_DIRE_PANTHER = 34; -int POLYMORPH_TYPE_DIRE_WOLF = 35; -int POLYMORPH_TYPE_DIRE_BOAR = 36; -int POLYMORPH_TYPE_DIRE_BADGER = 37; - -int INVISIBILITY_TYPE_NORMAL = 1; -int INVISIBILITY_TYPE_DARKNESS = 2; -int INVISIBILITY_TYPE_IMPROVED = 4; - -int CREATURE_SIZE_INVALID = 0; -int CREATURE_SIZE_TINY = 1; -int CREATURE_SIZE_SMALL = 2; -int CREATURE_SIZE_MEDIUM = 3; -int CREATURE_SIZE_LARGE = 4; -int CREATURE_SIZE_HUGE = 5; - -int CAMERA_MODE_CHASE_CAMERA = 0; -int CAMERA_MODE_TOP_DOWN = 1; -int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; - -int PROJECTILE_PATH_TYPE_DEFAULT = 0; -int PROJECTILE_PATH_TYPE_HOMING = 1; -int PROJECTILE_PATH_TYPE_BALLISTIC = 2; -int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; -int PROJECTILE_PATH_TYPE_ACCELERATING = 4; - -int GAME_DIFFICULTY_VERY_EASY = 0; -int GAME_DIFFICULTY_EASY = 1; -int GAME_DIFFICULTY_NORMAL = 2; -int GAME_DIFFICULTY_CORE_RULES = 3; -int GAME_DIFFICULTY_DIFFICULT = 4; - -int ACTION_MOVETOPOINT = 0; -int ACTION_PICKUPITEM = 1; -int ACTION_DROPITEM = 2; -int ACTION_ATTACKOBJECT = 3; -int ACTION_CASTSPELL = 4; -int ACTION_OPENDOOR = 5; -int ACTION_CLOSEDOOR = 6; -int ACTION_DIALOGOBJECT = 7; -int ACTION_DISABLETRAP = 8; -int ACTION_RECOVERTRAP = 9; -int ACTION_FLAGTRAP = 10; -int ACTION_EXAMINETRAP = 11; -int ACTION_SETTRAP = 12; -int ACTION_OPENLOCK = 13; -int ACTION_LOCK = 14; -int ACTION_USEOBJECT = 15; -int ACTION_ANIMALEMPATHY = 16; -int ACTION_REST = 17; -int ACTION_TAUNT = 18; -int ACTION_ITEMCASTSPELL = 19; -int ACTION_COUNTERSPELL = 31; -int ACTION_HEAL = 33; -int ACTION_PICKPOCKET = 34; -int ACTION_FOLLOW = 35; -int ACTION_WAIT = 36; -int ACTION_SIT = 37; -int ACTION_FOLLOWLEADER = 38; - -int ACTION_INVALID = 65535; -int ACTION_QUEUEEMPTY = 65534; - -int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; -int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; -int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; -int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; -int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; -int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; -int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; -int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; -int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; - -int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; -int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; - -int CONVERSATION_TYPE_CINEMATIC = 0; -int CONVERSATION_TYPE_COMPUTER = 1; - -int PLANET_ENDAR_SPIRE = 0; -int PLANET_TARIS = 1; -int PLANET_EBON_HAWK = 2; -int PLANET_DANTOOINE = 3; -int PLANET_TATOOINE = 4; -int PLANET_KASHYYYK = 5; -int PLANET_MANAAN = 6; -int PLANET_KORRIBAN = 7; -int PLANET_LEVIATHAN = 8; -int PLANET_UNKNOWN_WORLD = 9; -int PLANET_STAR_FORGE = 10; -int PLANET_LIVE_01 = 11; -int PLANET_LIVE_02 = 12; -int PLANET_LIVE_03 = 13; -int PLANET_LIVE_04 = 14; -int PLANET_LIVE_05 = 15; - -int NPC_PLAYER = -1; -int NPC_BASTILA = 0; -int NPC_CANDEROUS = 1; -int NPC_CARTH = 2; -int NPC_HK_47 = 3; -int NPC_JOLEE = 4; -int NPC_JUHANI = 5; -int NPC_MISSION = 6; -int NPC_T3_M4 = 7; -int NPC_ZAALBAR = 8; - - -int PARTY_AISTYLE_AGGRESSIVE = 0; -int PARTY_AISTYLE_DEFENSIVE = 1; -int PARTY_AISTYLE_PASSIVE = 2; - -int NPC_AISTYLE_DEFAULT_ATTACK = 0; -int NPC_AISTYLE_RANGED_ATTACK = 1; -int NPC_AISTYLE_MELEE_ATTACK = 2; -int NPC_AISTYLE_AID = 3; -int NPC_AISTYLE_GRENADE_THROWER = 4; -int NPC_AISTYLE_JEDI_SUPPORT = 5; - -int DISGUISE_TYPE_TEST = 1; -int DISGUISE_TYPE_P_T3M3 = 2; -int DISGUISE_TYPE_P_HK47 = 3; -int DISGUISE_TYPE_P_BASTILLA = 4; -int DISGUISE_TYPE_P_CAND = 5; -int DISGUISE_TYPE_P_CARTH = 6; -int DISGUISE_TYPE_P_JOLEE = 7; -int DISGUISE_TYPE_P_JUHANI = 8; -int DISGUISE_TYPE_P_ZAALBAR = 9; -int DISGUISE_TYPE_P_MISSION = 10; -int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; -int DISGUISE_TYPE_N_BITH = 12; -int DISGUISE_TYPE_N_CALONORD = 13; -int DISGUISE_TYPE_N_COMMF = 14; -int DISGUISE_TYPE_N_COMMKIDF = 15; -int DISGUISE_TYPE_N_COMMKIDM = 16; -int DISGUISE_TYPE_N_COMMM = 17; -int DISGUISE_TYPE_N_CZERLAOFF = 18; -int DISGUISE_TYPE_N_DARKJEDIF = 19; -int DISGUISE_TYPE_N_DARKJEDIM = 20; -int DISGUISE_TYPE_N_DARTHMALAK = 21; -int DISGUISE_TYPE_N_DARTHREVAN = 22; -int DISGUISE_TYPE_N_DODONNA = 23; -int DISGUISE_TYPE_N_DUROS = 24; -int DISGUISE_TYPE_N_FATCOMF = 25; -int DISGUISE_TYPE_N_FATCOMM = 26; -int DISGUISE_TYPE_N_SMUGGLER = 27; -int DISGUISE_TYPE_N_SITHSOLDIER = 28; -// int DISGUISE_TYPE_ = 29; -int DISGUISE_TYPE_N_JEDICOUNTF = 30; -int DISGUISE_TYPE_N_JEDICOUNTM = 31; -int DISGUISE_TYPE_N_JEDIMALEK = 32; -int DISGUISE_TYPE_N_JEDIMEMF = 33; -int DISGUISE_TYPE_N_JEDIMEMM = 34; -int DISGUISE_TYPE_N_MANDALORIAN = 35; -int DISGUISE_TYPE_N_RAKATA = 36; -int DISGUISE_TYPE_N_REPOFF = 37; -int DISGUISE_TYPE_N_REPSOLD = 38; -int DISGUISE_TYPE_N_RODIAN = 39; -int DISGUISE_TYPE_C_SELKATH = 40; -int DISGUISE_TYPE_N_SITHAPPREN = 41; -int DISGUISE_TYPE_N_SITHCOMF = 42; -int DISGUISE_TYPE_N_SITHCOMM = 43; -//int DISGUISE_TYPE_N_SITHSOLDIER = 44; -int DISGUISE_TYPE_N_SWOOPGANG = 45; -int DISGUISE_TYPE_N_TUSKEN = 46; -int DISGUISE_TYPE_N_TWILEKF = 47; -int DISGUISE_TYPE_N_TWILEKM = 48; -int DISGUISE_TYPE_N_WALRUSMAN = 49; -int DISGUISE_TYPE_N_WOOKIEF = 50; -int DISGUISE_TYPE_N_WOOKIEM = 51; -int DISGUISE_TYPE_N_YODA = 52; -int DISGUISE_TYPE_C_BANTHA = 53; -int DISGUISE_TYPE_C_BRITH = 54; -int DISGUISE_TYPE_C_DEWBACK = 55; -int DISGUISE_TYPE_C_DRDASSASSIN = 56; -int DISGUISE_TYPE_C_DRDASTRO = 57; -int DISGUISE_TYPE_C_DRDG = 58; -int DISGUISE_TYPE_C_DRDMKFOUR = 59; -int DISGUISE_TYPE_C_DRDMKONE = 60; -int DISGUISE_TYPE_C_DRDMKTWO = 61; -int DISGUISE_TYPE_C_DRDPROBE = 62; -int DISGUISE_TYPE_C_DRDPROT = 63; -int DISGUISE_TYPE_C_DRDSENTRY = 64; -int DISGUISE_TYPE_C_DRDSPYDER = 65; -int DISGUISE_TYPE_C_DRDWAR = 66; -int DISGUISE_TYPE_C_FIRIXA = 67; -int DISGUISE_TYPE_C_GAMMOREAN = 68; -int DISGUISE_TYPE_C_GIZKA = 69; -int DISGUISE_TYPE_C_HUTT = 70; -int DISGUISE_TYPE_C_IRIAZ = 71; -int DISGUISE_TYPE_C_ITHORIAN = 72; -int DISGUISE_TYPE_C_JAWA = 73; -int DISGUISE_TYPE_C_KATAARN = 74; -int DISGUISE_TYPE_C_KHOUNDA = 75; -int DISGUISE_TYPE_C_KHOUNDB = 76; -int DISGUISE_TYPE_C_KRAYTDRAGON = 77; -int DISGUISE_TYPE_C_MYKAL = 78; -int DISGUISE_TYPE_C_RAKGHOUL = 79; -int DISGUISE_TYPE_C_RANCOR = 80; -int DISGUISE_TYPE_C_SEABEAST = 81; -//int DISGUISE_TYPE_ = 82; -int DISGUISE_TYPE_C_TACH = 83; -int DISGUISE_TYPE_C_TWOHEAD = 84; -int DISGUISE_TYPE_C_VERKAAL = 85; -int DISGUISE_TYPE_C_WRAID = 86; -int DISGUISE_TYPE_C_RONTO = 87; -int DISGUISE_TYPE_C_KINRATH = 88; -int DISGUISE_TYPE_C_TUKATA = 89; -int DISGUISE_TYPE_N_TUSKENF = 90; -int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; -int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; -int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; -int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; -int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; -int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; -int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; -int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; -int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; -int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; -int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; -int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; -int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; -int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; -int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; -int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; -int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; -int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; -int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; -int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; -int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; -int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; -int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; -int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; -int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; -int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; -int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; -int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; -int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; -int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; -int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; -int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; -int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; -int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; -int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; -int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; -int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; -int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; -int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; -int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; -int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; -int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; -int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; -int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; -int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; -int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; -int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; -int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; -int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; -int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; -int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; -int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; -int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; -int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; -int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; -int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; -int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; -int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; -int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; -int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; -int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; -int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; -int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; -int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; -int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; -int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; -int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; -int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; -int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; -int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; -int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; -int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; -int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; -int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; -int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; -int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; -int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; -int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; -int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; -int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; -int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; -int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; -int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; -int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; -int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; -int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; -int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; -int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; -int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; -int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; -int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; -int DISGUISE_TYPE_TURRET = 182; -int DISGUISE_TYPE_TURRET2 = 183; -int DISGUISE_TYPE_N_DARTHBAND = 184; -int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; -int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; -int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; -int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; -int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; -int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; -int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; -int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; -int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; -int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; -int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; -int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; -int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; -int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; -int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; -int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; -int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; -int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; -int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; -int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; -int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; -int DISGUISE_TYPE_HUTT_02 = 228; -int DISGUISE_TYPE_HUTT_03 = 229; -int DISGUISE_TYPE_HUTT_04 = 230; -int DISGUISE_TYPE_DROID_ASTRO_02 = 231; -int DISGUISE_TYPE_DROID_ASTRO_03 = 232; -int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; -int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; -int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; -int DISGUISE_TYPE_DROID_WAR_02 = 236; -int DISGUISE_TYPE_DROID_WAR_03 = 237; -int DISGUISE_TYPE_DROID_WAR_04 = 238; -int DISGUISE_TYPE_DROID_WAR_05 = 239; -int DISGUISE_TYPE_GAMMOREAN_02 = 240; -int DISGUISE_TYPE_GAMMOREAN_03 = 241; -int DISGUISE_TYPE_GAMMOREAN_04 = 242; -int DISGUISE_TYPE_ITHORIAN_02 = 243; -int DISGUISE_TYPE_ITHORIAN_03 = 244; -int DISGUISE_TYPE_KATH_HOUND_A02 = 245; -int DISGUISE_TYPE_KATH_HOUND_A03 = 246; -int DISGUISE_TYPE_KATH_HOUND_A04 = 247; -int DISGUISE_TYPE_KATH_HOUND_B02 = 248; -int DISGUISE_TYPE_KATH_HOUND_B03 = 249; -int DISGUISE_TYPE_KATH_HOUND_B04 = 250; -int DISGUISE_TYPE_WRAID_02 = 251; -int DISGUISE_TYPE_WRAID_03 = 252; -int DISGUISE_TYPE_WRAID_04 = 253; -int DISGUISE_TYPE_RAKATA_02 = 254; -int DISGUISE_TYPE_RAKATA_03 = 255; -int DISGUISE_TYPE_RODIAN_02 = 256; -int DISGUISE_TYPE_RODIAN_03 = 257; -int DISGUISE_TYPE_RODIAN_04 = 258; -int DISGUISE_TYPE_SELKATH_02 = 259; -int DISGUISE_TYPE_SELKATH_03 = 260; -int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; -int DISGUISE_TYPE_SWOOP_GANG_02 = 262; -int DISGUISE_TYPE_SWOOP_GANG_03 = 263; -int DISGUISE_TYPE_SWOOP_GANG_04 = 264; -int DISGUISE_TYPE_SWOOP_GANG_05 = 265; -int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; -int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; -int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; -int DISGUISE_TYPE_TWILEK_MALE_02 = 269; -int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; -int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; -int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; -int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; -int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; -int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; -int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; -int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; -int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; -int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; -int DISGUISE_TYPE_YUTHURA_BAN = 280; -int DISGUISE_TYPE_SHYRACK_01 = 281; -int DISGUISE_TYPE_SHYRACK_02 = 282; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; -int DISGUISE_TYPE_SITH_FEM_WHITE = 291; -int DISGUISE_TYPE_SITH_FEM_BLACK = 292; -int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; -int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; -int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; -int DISGUISE_TYPE_SITH_MAL_WHITE = 296; -int DISGUISE_TYPE_SITH_MAL_BLACK = 297; -int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; -int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; -int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; -int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; -int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; -int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; -int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; -int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; -int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; - -int PLOT_O_DOOM = 0; -int PLOT_O_SCARY_STUFF = 1; -int PLOT_O_BIG_MONSTERS = 2; - -int FORMATION_WEDGE = 0; -int FORMATION_LINE = 1; - -int SUBSCREEN_ID_NONE = 0; -int SUBSCREEN_ID_EQUIP = 1; -int SUBSCREEN_ID_ITEM = 2; -int SUBSCREEN_ID_CHARACTER_RECORD = 3; -int SUBSCREEN_ID_ABILITY = 4; -int SUBSCREEN_ID_MAP = 5; -int SUBSCREEN_ID_QUEST = 6; -int SUBSCREEN_ID_OPTIONS = 7; -int SUBSCREEN_ID_MESSAGES = 8; - -int SHIELD_DROID_ENERGY_1 = 0; -int SHIELD_DROID_ENERGY_2 = 1; -int SHIELD_DROID_ENERGY_3 = 2; -int SHIELD_DROID_ENVIRO_1 = 3; -int SHIELD_DROID_ENVIRO_2 = 4; -int SHIELD_DROID_ENVIRO_3 = 5; -int SHIELD_ENERGY = 6; -int SHIELD_ENERGY_SITH = 7; -int SHIELD_ENERGY_ARKANIAN = 8; -int SHIELD_ECHANI = 9; -int SHIELD_MANDALORIAN_MELEE = 10; -int SHIELD_MANDALORIAN_POWER = 11; -int SHIELD_DUELING_ECHANI = 12; -int SHIELD_DUELING_YUSANIS = 13; -int SHIELD_VERPINE_PROTOTYPE = 14; -int SHIELD_ANTIQUE_DROID = 15; -int SHIELD_PLOT_TAR_M09AA = 16; -int SHIELD_PLOT_UNK_M44AA = 17; - -int SUBRACE_NONE = 0; -int SUBRACE_WOOKIE = 1; - -int VIDEO_EFFECT_NONE = -1; -int VIDEO_EFFECT_SECURITY_CAMERA = 0; -int VIDEO_EFFECT_FREELOOK_T3M4 = 1; -int VIDEO_EFFECT_FREELOOK_HK47 = 2; - -int TUTORIAL_WINDOW_START_SWOOP_RACE = 0; -int TUTORIAL_WINDOW_RETURN_TO_BASE = 1; -int TUTORIAL_WINDOW_MOVEMENT_KEYS = 2; - -int MOVEMENT_SPEED_PC = 0; -int MOVEMENT_SPEED_IMMOBILE = 1; -int MOVEMENT_SPEED_VERYSLOW = 2; -int MOVEMENT_SPEED_SLOW = 3; -int MOVEMENT_SPEED_NORMAL = 4; -int MOVEMENT_SPEED_FAST = 5; -int MOVEMENT_SPEED_VERYFAST = 6; -int MOVEMENT_SPEED_DEFAULT = 7; -int MOVEMENT_SPEED_DMFAST = 8; - -int LIVE_CONTENT_PKG1 = 1; -int LIVE_CONTENT_PKG2 = 2; -int LIVE_CONTENT_PKG3 = 3; -int LIVE_CONTENT_PKG4 = 4; -int LIVE_CONTENT_PKG5 = 5; -int LIVE_CONTENT_PKG6 = 6; - - -string sLanguage = "nwscript"; - - -// 0: Get an integer between 0 and nMaxInteger-1. -// Return value on error: 0 -int Random(int nMaxInteger); - -// 1: Output sString to the log file. -void PrintString(string sString); - -// 2: Output a formatted float to the log file. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); - -// 3: Convert fFloat into a string. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); - -// 4: Output nInteger to the log file. -void PrintInteger(int nInteger); - -// 5: Output oObject's ID to the log file. -void PrintObject(object oObject); - -// 6: Assign aActionToAssign to oActionSubject. -// * No return value, but if an error occurs, the log file will contain -// "AssignCommand failed." -// (If the object doesn't exist, nothing happens.) -void AssignCommand(object oActionSubject,action aActionToAssign); - -// 7: Delay aActionToDelay by fSeconds. -// * No return value, but if an error occurs, the log file will contain -// "DelayCommand failed.". -void DelayCommand(float fSeconds, action aActionToDelay); - -// 8: Make oTarget run sScript and then return execution to the calling script. -// If sScript does not specify a compiled script, nothing happens. -// - nScriptVar: This value will be returned by calls to GetRunScriptVar. -void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); - -// 9: Clear all the actions of the caller. (This will only work on Creatures) -// * No return value, but if an error occurs, the log file will contain -// "ClearAllActions failed.". -void ClearAllActions(); - -// 10: Cause the caller to face fDirection. -// - fDirection is expressed as anticlockwise degrees from Due East. -// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are -// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -void SetFacing(float fDirection); - -// 11: Switches the main character to a specified NPC -// -1 specifies to switch back to the original PC -int SwitchPlayerCharacter(int nNPC); - -// 12: Set the time to the time specified. -// - nHour should be from 0 to 23 inclusive -// - nMinute should be from 0 to 59 inclusive -// - nSecond should be from 0 to 59 inclusive -// - nMillisecond should be from 0 to 999 inclusive -// 1) Time can only be advanced forwards; attempting to set the time backwards -// will result in the day advancing and then the time being set to that -// specified, e.g. if the current hour is 15 and then the hour is set to 3, -// the day will be advanced by 1 and the hour will be set to 3. -// 2) If values larger than the max hour, minute, second or millisecond are -// specified, they will be wrapped around and the overflow will be used to -// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds -// and 10 milliseconds will result in the calendar day being advanced by 2 -// and the time being set to 18 hours, 10 minutes, 10 milliseconds. -void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); - -// 13: Sets (by NPC constant) which party member should be the controlled -// character -int SetPartyLeader(int nNPC); - -// 14: Sets whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -void SetAreaUnescapable(int bUnescapable); - -// 15: Returns whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -int GetAreaUnescapable(); - -// 16: Get the current hour. -int GetTimeHour(); - -// 17: Get the current minute -int GetTimeMinute(); - -// 18: Get the current second -int GetTimeSecond(); - -// 19: Get the current millisecond -int GetTimeMillisecond(); - -// 20: The action subject will generate a random location near its current location -// and pathfind to it. All commands will remove a RandomWalk() from the action -// queue if there is one in place. -// * No return value, but if an error occurs the log file will contain -// "ActionRandomWalk failed." -void ActionRandomWalk(); - -// 21: The action subject will move to lDestination. -// - lDestination: The object will move to this location. If the location is -// invalid or a path cannot be found to it, the command does nothing. -// - bRun: If this is TRUE, the action subject will run rather than walk -// * No return value, but if an error occurs the log file will contain -// "MoveToPoint failed." -void ActionMoveToLocation(location lDestination, int bRun=FALSE); - -// 22: Cause the action subject to move to a certain distance from oMoveTo. -// If there is no path to oMoveTo, this command will do nothing. -// - oMoveTo: This is the object we wish the action subject to move to -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fRange: This is the desired distance between the action subject and oMoveTo -// * No return value, but if an error occurs the log file will contain -// "ActionMoveToObject failed." -void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); - -// 23: Cause the action subject to move to a certain distance away from oFleeFrom. -// - oFleeFrom: This is the object we wish the action subject to move away from. -// If oFleeFrom is not in the same area as the action subject, nothing will -// happen. -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fMoveAwayRange: This is the distance we wish the action subject to put -// between themselves and oFleeFrom -// * No return value, but if an error occurs the log file will contain -// "ActionMoveAwayFromObject failed." -void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 24: Get the area that oTarget is currently in -// * Return value on error: OBJECT_INVALID -object GetArea(object oTarget); - -// 25: The value returned by this function depends on the object type of the caller: -// 1) If the caller is a door or placeable it returns the object that last -// triggered it. -// 2) If the caller is a trigger, area of effect, module, area or encounter it -// returns the object that last entered it. -// * Return value on error: OBJECT_INVALID -object GetEnteringObject(); - -// 26: Get the object that last left the caller. This function works on triggers, -// areas of effect, modules, areas and encounters. -// * Return value on error: OBJECT_INVALID -object GetExitingObject(); - -// 27: Get the position of oTarget -// * Return value on error: vector (0.0f, 0.0f, 0.0f) -vector GetPosition(object oTarget); - -// 28: Get the direction in which oTarget is facing, expressed as a float between -// 0.0f and 360.0f -// * Return value on error: -1.0f -float GetFacing(object oTarget); - -// 29: Get the possessor of oItem -// * Return value on error: OBJECT_INVALID -object GetItemPossessor(object oItem); - -// 30: Get the object possessed by oCreature with the tag sItemTag -// * Return value on error: OBJECT_INVALID -object GetItemPossessedBy(object oCreature, string sItemTag); - -// 31: Create an item with the template sItemTemplate in oTarget's inventory. -// - nStackSize: This is the stack size of the item to be created -// * Return value: The object that has been created. On error, this returns -// OBJECT_INVALID. -object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); - -// 32: Equip oItem into nInventorySlot. -// - nInventorySlot: INVENTORY_SLOT_* -// * No return value, but if an error occurs the log file will contain -// "ActionEquipItem failed." -void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); - -// 33: Unequip oItem from whatever slot it is currently in. -void ActionUnequipItem( object oItem, int bInstant = FALSE ); - -// 34: Pick up oItem from the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPickUpItem failed." -void ActionPickUpItem(object oItem); - -// 35: Put down oItem on the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPutDownItem failed." -void ActionPutDownItem(object oItem); - -// 36: Get the last attacker of oAttackee. This should only be used ONLY in the -// OnAttacked events for creatures, placeables and doors. -// * Return value on error: OBJECT_INVALID -object GetLastAttacker(object oAttackee=OBJECT_SELF); - -// 37: Attack oAttackee. -// - bPassive: If this is TRUE, attack is in passive mode. -void ActionAttack(object oAttackee, int bPassive=FALSE); - -// 38: Get the creature nearest to oTarget, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -effect EffectResurrection(); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: 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. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -void AdjustAlignment(object oSubject, int nAlignment, int nShift); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -int GetIsInCombat(object oCreature=OBJECT_SELF); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -void ShowUpgradeScreen(object oItem = OBJECT_INVALID); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef); - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 0 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 0 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 0 and 0 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 0 and 0 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(INT nNPC, OBJECT_ID oidNPC); - -// 768. IsMoviePlaying -// Checks if a movie is currently playing. -int IsMoviePlaying(); - -// 769. QueueMovie -// Queues up a movie to be played using PlayMovieQueue. -// If bSkippable is TRUE, the player can cancel the movie by hitting escape. -// If bSkippable is FALSE, the player cannot cancel the movie and must wait -// for it to finish playing. -void QueueMovie( string sMovie, int bSkippable ); - -// 770. PlayMovieQueue -// Plays the movies that have been added to the queue by QueueMovie -// If bAllowSeparateSkips is TRUE, hitting escape to cancel a movie only -// cancels out of the currently playing movie rather than the entire queue -// of movies (assuming the currently playing movie is flagged as skippable). -// If bAllowSeparateSkips is FALSE, the entire movie queue will be cancelled -// if the player hits escape (assuming the currently playing movie is flagged -// as skippable). -void PlayMovieQueue( int bAllowSeparateSkips ); - -// 771. YavinHackCloseDoor -// This is an incredibly hacky function to allow the doors to be properly -// closed on Yavin without running into the problems we've had. It is too -// late in development to fix it correctly, so thus we do this. Life is -// hard. You'll get over it -void YavinHackCloseDoor( object oidDoor ); \ No newline at end of file diff --git a/TSL/nwnnsscomp/KScript/nwscript-tsl.nss b/TSL/nwnnsscomp/KScript/nwscript-tsl.nss deleted file mode 100644 index 94e753a63..000000000 --- a/TSL/nwnnsscomp/KScript/nwscript-tsl.nss +++ /dev/null @@ -1,6325 +0,0 @@ -//////////////////////////////////////////////////////// -// -// NWScript -// -// The list of actions and pre-defined constants. -// -// (c) BioWare Corp, 1999 -// -//////////////////////////////////////////////////////// - -#define ENGINE_NUM_STRUCTURES 4 -#define ENGINE_STRUCTURE_0 effect -#define ENGINE_STRUCTURE_1 event -#define ENGINE_STRUCTURE_2 location -#define ENGINE_STRUCTURE_3 talent - -// Constants - -int NUM_INVENTORY_SLOTS = 20; - -int TRUE = 1; -int FALSE = 0; - -float DIRECTION_EAST = 0.0; -float DIRECTION_NORTH = 90.0; -float DIRECTION_WEST = 180.0; -float DIRECTION_SOUTH = 270.0; -float PI = 3.141592; - -int ATTITUDE_NEUTRAL = 0; -int ATTITUDE_AGGRESSIVE = 1; -int ATTITUDE_DEFENSIVE = 2; -int ATTITUDE_SPECIAL = 3; - -int TALKVOLUME_TALK = 0; -int TALKVOLUME_WHISPER = 1; -int TALKVOLUME_SHOUT = 2; -int TALKVOLUME_SILENT_TALK = 3; -int TALKVOLUME_SILENT_SHOUT = 4; - -int INVENTORY_SLOT_HEAD = 0; -int INVENTORY_SLOT_BODY = 1; -int INVENTORY_SLOT_HANDS = 3; -int INVENTORY_SLOT_RIGHTWEAPON = 4; -int INVENTORY_SLOT_LEFTWEAPON = 5; -int INVENTORY_SLOT_LEFTARM = 7; -int INVENTORY_SLOT_RIGHTARM = 8; -int INVENTORY_SLOT_IMPLANT = 9; -int INVENTORY_SLOT_BELT = 10; -int INVENTORY_SLOT_CWEAPON_L = 14; -int INVENTORY_SLOT_CWEAPON_R = 15; -int INVENTORY_SLOT_CWEAPON_B = 16; -int INVENTORY_SLOT_CARMOUR = 17; -int INVENTORY_SLOT_RIGHTWEAPON2= 18; -int INVENTORY_SLOT_LEFTWEAPON2 = 19; - -//Effect type constants -int DURATION_TYPE_INSTANT = 0; -int DURATION_TYPE_TEMPORARY = 1; -int DURATION_TYPE_PERMANENT = 2; - -int SUBTYPE_MAGICAL = 8; -int SUBTYPE_SUPERNATURAL = 16; -int SUBTYPE_EXTRAORDINARY = 24; - -int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp -int ABILITY_DEXTERITY = 1; -int ABILITY_CONSTITUTION = 2; -int ABILITY_INTELLIGENCE = 3; -int ABILITY_WISDOM = 4; -int ABILITY_CHARISMA = 5; - -int SHAPE_SPELLCYLINDER = 0; -int SHAPE_CONE = 1; -int SHAPE_CUBE = 2; -int SHAPE_SPELLCONE = 3; -int SHAPE_SPHERE = 4; - -int OBJECT_TYPE_CREATURE = 1; -int OBJECT_TYPE_ITEM = 2; -int OBJECT_TYPE_TRIGGER = 4; -int OBJECT_TYPE_DOOR = 8; -int OBJECT_TYPE_AREA_OF_EFFECT = 16; -int OBJECT_TYPE_WAYPOINT = 32; -int OBJECT_TYPE_PLACEABLE = 64; -int OBJECT_TYPE_STORE = 128; -int OBJECT_TYPE_ENCOUNTER = 256; -int OBJECT_TYPE_SOUND = 512; -int OBJECT_TYPE_ALL = 32767; - -int OBJECT_TYPE_INVALID = 32767; - -int GENDER_MALE = 0; -int GENDER_FEMALE = 1; -int GENDER_BOTH = 2; -int GENDER_OTHER = 3; -int GENDER_NONE = 4; - -int DAMAGE_TYPE_BLUDGEONING = 1; -int DAMAGE_TYPE_PIERCING = 2; -int DAMAGE_TYPE_SLASHING = 4; -int DAMAGE_TYPE_UNIVERSAL = 8; -int DAMAGE_TYPE_ACID = 16; -int DAMAGE_TYPE_COLD = 32; -int DAMAGE_TYPE_LIGHT_SIDE = 64; -int DAMAGE_TYPE_ELECTRICAL = 128; -int DAMAGE_TYPE_FIRE = 256; -int DAMAGE_TYPE_DARK_SIDE = 512; -int DAMAGE_TYPE_SONIC = 1024; -int DAMAGE_TYPE_ION = 2048; -int DAMAGE_TYPE_BLASTER = 4096; - -// Special versus flag just for AC effects -int AC_VS_DAMAGE_TYPE_ALL = 8199; - -int DAMAGE_BONUS_1 = 1; -int DAMAGE_BONUS_2 = 2; -int DAMAGE_BONUS_3 = 3; -int DAMAGE_BONUS_4 = 4; -int DAMAGE_BONUS_5 = 5; -int DAMAGE_BONUS_1d4 = 6; -int DAMAGE_BONUS_1d6 = 7; -int DAMAGE_BONUS_1d8 = 8; -int DAMAGE_BONUS_1d10 = 9; -int DAMAGE_BONUS_2d6 = 10; - -int DAMAGE_POWER_NORMAL = 0; -int DAMAGE_POWER_PLUS_ONE = 1; -int DAMAGE_POWER_PLUS_TWO = 2; -int DAMAGE_POWER_PLUS_THREE = 3; -int DAMAGE_POWER_PLUS_FOUR = 4; -int DAMAGE_POWER_PLUS_FIVE = 5; -int DAMAGE_POWER_ENERGY = 6; - -int ATTACK_BONUS_MISC = 0; -int ATTACK_BONUS_ONHAND = 1; -int ATTACK_BONUS_OFFHAND = 2; - -int AC_DODGE_BONUS = 0; -int AC_NATURAL_BONUS = 1; -int AC_ARMOUR_ENCHANTMENT_BONUS = 2; -int AC_SHIELD_ENCHANTMENT_BONUS = 3; -int AC_DEFLECTION_BONUS = 4; - -int DOOR_ACTION_OPEN = 0; -int DOOR_ACTION_UNLOCK = 1; -int DOOR_ACTION_BASH = 2; -int DOOR_ACTION_IGNORE = 3; -int DOOR_ACTION_KNOCK = 4; - -int PLACEABLE_ACTION_USE = 0; -int PLACEABLE_ACTION_UNLOCK = 1; -int PLACEABLE_ACTION_BASH = 2; -int PLACEABLE_ACTION_KNOCK = 4; - - -int RACIAL_TYPE_UNKNOWN = 0; -int RACIAL_TYPE_ELF = 1; -int RACIAL_TYPE_GNOME = 2; -int RACIAL_TYPE_HALFLING = 3; -int RACIAL_TYPE_HALFELF = 4; -int RACIAL_TYPE_DROID = 5; -int RACIAL_TYPE_HUMAN = 6; -int RACIAL_TYPE_ALL = 7; -int RACIAL_TYPE_INVALID = 8; - -int ALIGNMENT_ALL = 0; -int ALIGNMENT_NEUTRAL = 1; -int ALIGNMENT_LIGHT_SIDE = 2; -int ALIGNMENT_DARK_SIDE = 3; - -int SAVING_THROW_ALL = 0; -int SAVING_THROW_FORT = 1; -int SAVING_THROW_REFLEX = 2; -int SAVING_THROW_WILL = 3; - -int SAVING_THROW_TYPE_ALL = 0; -int SAVING_THROW_TYPE_NONE = 0; -int SAVING_THROW_TYPE_ACID = 1; -int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; -int SAVING_THROW_TYPE_COLD = 3; -int SAVING_THROW_TYPE_DEATH = 4; -int SAVING_THROW_TYPE_DISEASE = 5; -int SAVING_THROW_TYPE_LIGHT_SIDE = 6; -int SAVING_THROW_TYPE_ELECTRICAL = 7; -int SAVING_THROW_TYPE_FEAR = 8; -int SAVING_THROW_TYPE_FIRE = 9; -int SAVING_THROW_TYPE_MIND_AFFECTING = 10; -int SAVING_THROW_TYPE_DARK_SIDE = 11; -int SAVING_THROW_TYPE_POISON = 12; -int SAVING_THROW_TYPE_SONIC = 13; -int SAVING_THROW_TYPE_TRAP = 14; -int SAVING_THROW_TYPE_FORCE_POWER = 15; -int SAVING_THROW_TYPE_ION = 16; -int SAVING_THROW_TYPE_BLASTER = 17; -int SAVING_THROW_TYPE_PARALYSIS = 18; - -int IMMUNITY_TYPE_NONE = 0; -int IMMUNITY_TYPE_MIND_SPELLS = 1; -int IMMUNITY_TYPE_POISON = 2; -int IMMUNITY_TYPE_DISEASE = 3; -int IMMUNITY_TYPE_FEAR = 4; -int IMMUNITY_TYPE_TRAP = 5; -int IMMUNITY_TYPE_PARALYSIS = 6; -int IMMUNITY_TYPE_BLINDNESS = 7; -int IMMUNITY_TYPE_DEAFNESS = 8; -int IMMUNITY_TYPE_SLOW = 9; -int IMMUNITY_TYPE_ENTANGLE = 10; -int IMMUNITY_TYPE_SILENCE = 11; -int IMMUNITY_TYPE_STUN = 12; -int IMMUNITY_TYPE_SLEEP = 13; -int IMMUNITY_TYPE_CHARM = 14; -int IMMUNITY_TYPE_DOMINATE = 15; -int IMMUNITY_TYPE_CONFUSED = 16; -int IMMUNITY_TYPE_CURSED = 17; -int IMMUNITY_TYPE_DAZED = 18; -int IMMUNITY_TYPE_ABILITY_DECREASE = 19; -int IMMUNITY_TYPE_ATTACK_DECREASE = 20; -int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; -int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; -int IMMUNITY_TYPE_AC_DECREASE = 23; -int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; -int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; -int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; -int IMMUNITY_TYPE_SKILL_DECREASE = 27; -int IMMUNITY_TYPE_KNOCKDOWN = 28; -int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; -int IMMUNITY_TYPE_SNEAK_ATTACK = 30; -int IMMUNITY_TYPE_CRITICAL_HIT = 31; -int IMMUNITY_TYPE_DEATH = 32; -int IMMUNITY_TYPE_DROID_CONFUSED = 33; - -int AREA_TRANSITION_RANDOM = 0; -int AREA_TRANSITION_USER_DEFINED = 1; -int AREA_TRANSITION_CITY_01 = 2; -int AREA_TRANSITION_CITY_02 = 3; -int AREA_TRANSITION_CITY_03 = 4; -int AREA_TRANSITION_CITY_04 = 5; -int AREA_TRANSITION_CITY_05 = 6; -int AREA_TRANSITION_CRYPT_01 = 7; -int AREA_TRANSITION_CRYPT_02 = 8; -int AREA_TRANSITION_CRYPT_03 = 9; -int AREA_TRANSITION_CRYPT_04 = 10; -int AREA_TRANSITION_CRYPT_05 = 11; -int AREA_TRANSITION_DUNGEON_01 = 12; -int AREA_TRANSITION_DUNGEON_02 = 13; -int AREA_TRANSITION_DUNGEON_03 = 14; -int AREA_TRANSITION_DUNGEON_04 = 15; -int AREA_TRANSITION_DUNGEON_05 = 16; -int AREA_TRANSITION_DUNGEON_06 = 17; -int AREA_TRANSITION_DUNGEON_07 = 18; -int AREA_TRANSITION_DUNGEON_08 = 19; -int AREA_TRANSITION_MINES_01 = 20; -int AREA_TRANSITION_MINES_02 = 21; -int AREA_TRANSITION_MINES_03 = 22; -int AREA_TRANSITION_MINES_04 = 23; -int AREA_TRANSITION_MINES_05 = 24; -int AREA_TRANSITION_MINES_06 = 25; -int AREA_TRANSITION_MINES_07 = 26; -int AREA_TRANSITION_MINES_08 = 27; -int AREA_TRANSITION_MINES_09 = 28; -int AREA_TRANSITION_SEWER_01 = 29; -int AREA_TRANSITION_SEWER_02 = 30; -int AREA_TRANSITION_SEWER_03 = 31; -int AREA_TRANSITION_SEWER_04 = 32; -int AREA_TRANSITION_SEWER_05 = 33; -int AREA_TRANSITION_CASTLE_01 = 34; -int AREA_TRANSITION_CASTLE_02 = 35; -int AREA_TRANSITION_CASTLE_03 = 36; -int AREA_TRANSITION_CASTLE_04 = 37; -int AREA_TRANSITION_CASTLE_05 = 38; -int AREA_TRANSITION_CASTLE_06 = 39; -int AREA_TRANSITION_CASTLE_07 = 40; -int AREA_TRANSITION_CASTLE_08 = 41; -int AREA_TRANSITION_INTERIOR_01 = 42; -int AREA_TRANSITION_INTERIOR_02 = 43; -int AREA_TRANSITION_INTERIOR_03 = 44; -int AREA_TRANSITION_INTERIOR_04 = 45; -int AREA_TRANSITION_INTERIOR_05 = 46; -int AREA_TRANSITION_INTERIOR_06 = 47; -int AREA_TRANSITION_INTERIOR_07 = 48; -int AREA_TRANSITION_INTERIOR_08 = 49; -int AREA_TRANSITION_INTERIOR_09 = 50; -int AREA_TRANSITION_INTERIOR_10 = 51; -int AREA_TRANSITION_INTERIOR_11 = 52; -int AREA_TRANSITION_INTERIOR_12 = 53; -int AREA_TRANSITION_INTERIOR_13 = 54; -int AREA_TRANSITION_INTERIOR_14 = 55; -int AREA_TRANSITION_INTERIOR_15 = 56; -int AREA_TRANSITION_INTERIOR_16 = 57; -int AREA_TRANSITION_FOREST_01 = 58; -int AREA_TRANSITION_FOREST_02 = 59; -int AREA_TRANSITION_FOREST_03 = 60; -int AREA_TRANSITION_FOREST_04 = 61; -int AREA_TRANSITION_FOREST_05 = 62; -int AREA_TRANSITION_RURAL_01 = 63; -int AREA_TRANSITION_RURAL_02 = 64; -int AREA_TRANSITION_RURAL_03 = 65; -int AREA_TRANSITION_RURAL_04 = 66; -int AREA_TRANSITION_RURAL_05 = 67; - -// Legacy area-transition constants. Do not delete these. -int AREA_TRANSITION_CITY = 2; -int AREA_TRANSITION_CRYPT = 7; -int AREA_TRANSITION_FOREST = 58; -int AREA_TRANSITION_RURAL = 63; - -// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. -int BODY_NODE_HAND = 0; -int BODY_NODE_CHEST = 1; -int BODY_NODE_HEAD = 2; -// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The -// nodes used with be 'lhand' and 'rhand'. -int BODY_NODE_HAND_LEFT = 3; -int BODY_NODE_HAND_RIGHT = 4; - -float RADIUS_SIZE_SMALL = 1.67f; -float RADIUS_SIZE_MEDIUM = 3.33f; -float RADIUS_SIZE_LARGE = 5.0f; -float RADIUS_SIZE_HUGE = 6.67f; -float RADIUS_SIZE_GARGANTUAN = 8.33f; -float RADIUS_SIZE_COLOSSAL = 10.0f; - -// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType -int EFFECT_TYPE_INVALIDEFFECT = 0; -int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; -//int EFFECT_TYPE_ABILITY_BONUS = 2; -int EFFECT_TYPE_REGENERATE = 3; -//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; -//int EFFECT_TYPE_MODIFY_AC = 5; -//int EFFECT_TYPE_ATTACK_BONUS = 6; -int EFFECT_TYPE_DAMAGE_REDUCTION = 7; -//int EFFECT_TYPE_DAMAGE_BONUS = 8; -int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; -//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; -int EFFECT_TYPE_ENTANGLE = 11; -int EFFECT_TYPE_INVULNERABLE = 12; -int EFFECT_TYPE_DEAF = 13; -int EFFECT_TYPE_RESURRECTION = 14; -int EFFECT_TYPE_IMMUNITY = 15; -//int EFFECT_TYPE_BLIND = 16; -int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; -int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; -//int EFFECT_TYPE_MOVEMENT_SPEED = 19; -int EFFECT_TYPE_AREA_OF_EFFECT = 20; -int EFFECT_TYPE_BEAM = 21; -//int EFFECT_TYPE_FORCE_RESISTANCE = 22; -int EFFECT_TYPE_CHARMED = 23; -int EFFECT_TYPE_CONFUSED = 24; -int EFFECT_TYPE_FRIGHTENED = 25; -int EFFECT_TYPE_DOMINATED = 26; -int EFFECT_TYPE_PARALYZE = 27; -int EFFECT_TYPE_DAZED = 28; -int EFFECT_TYPE_STUNNED = 29; -int EFFECT_TYPE_SLEEP = 30; -int EFFECT_TYPE_POISON = 31; -int EFFECT_TYPE_DISEASE = 32; -int EFFECT_TYPE_CURSE = 33; -int EFFECT_TYPE_SILENCE = 34; -int EFFECT_TYPE_TURNED = 35; -int EFFECT_TYPE_HASTE = 36; -int EFFECT_TYPE_SLOW = 37; -int EFFECT_TYPE_ABILITY_INCREASE = 38; -int EFFECT_TYPE_ABILITY_DECREASE = 39; -int EFFECT_TYPE_ATTACK_INCREASE = 40; -int EFFECT_TYPE_ATTACK_DECREASE = 41; -int EFFECT_TYPE_DAMAGE_INCREASE = 42; -int EFFECT_TYPE_DAMAGE_DECREASE = 43; -int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; -int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; -int EFFECT_TYPE_AC_INCREASE = 46; -int EFFECT_TYPE_AC_DECREASE = 47; -int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; -int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; -int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; -int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; -int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; -int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; -int EFFECT_TYPE_SKILL_INCREASE = 54; -int EFFECT_TYPE_SKILL_DECREASE = 55; -int EFFECT_TYPE_INVISIBILITY = 56; -int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; -int EFFECT_TYPE_DARKNESS = 58; -int EFFECT_TYPE_DISPELMAGICALL = 59; -int EFFECT_TYPE_ELEMENTALSHIELD = 60; -int EFFECT_TYPE_NEGATIVELEVEL = 61; -int EFFECT_TYPE_DISGUISE = 62; -int EFFECT_TYPE_SANCTUARY = 63; -int EFFECT_TYPE_TRUESEEING = 64; -int EFFECT_TYPE_SEEINVISIBLE = 65; -int EFFECT_TYPE_TIMESTOP = 66; -int EFFECT_TYPE_BLINDNESS = 67; -int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; -int EFFECT_TYPE_DISPELMAGICBEST = 69; -int EFFECT_TYPE_ULTRAVISION = 70; -int EFFECT_TYPE_MISS_CHANCE = 71; -int EFFECT_TYPE_CONCEALMENT = 72; -int EFFECT_TYPE_SPELL_IMMUNITY = 73; -int EFFECT_TYPE_ASSUREDHIT = 74; -int EFFECT_TYPE_VISUAL = 75; -int EFFECT_TYPE_LIGHTSABERTHROW = 76; -int EFFECT_TYPE_FORCEJUMP = 77; -int EFFECT_TYPE_ASSUREDDEFLECTION = 78; -int EFFECT_TYPE_DROID_CONFUSED = 79; -int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 -int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 - - -int ITEM_PROPERTY_ABILITY_BONUS = 0 ; -int ITEM_PROPERTY_AC_BONUS = 1 ; -int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; -int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; -int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; -int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; -int ITEM_PROPERTY_BONUS_FEAT = 9 ; -int ITEM_PROPERTY_ACTIVATE_ITEM = 10; -int ITEM_PROPERTY_DAMAGE_BONUS = 11; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; -int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; -int ITEM_PROPERTY_DECREASED_DAMAGE = 15; -int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; -int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; -int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; -int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; -int ITEM_PROPERTY_DECREASED_AC = 20; -int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; -int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; -int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; -int ITEM_PROPERTY_IMMUNITY = 24; -int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; -int ITEM_PROPERTY_KEEN = 28; -int ITEM_PROPERTY_LIGHT = 29; -int ITEM_PROPERTY_MIGHTY = 30; -int ITEM_PROPERTY_NO_DAMAGE = 31; -int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; -int ITEM_PROPERTY_REGENERATION = 35; -int ITEM_PROPERTY_SKILL_BONUS = 36; -int ITEM_PROPERTY_SECURITY_SPIKE = 37; -int ITEM_PROPERTY_ATTACK_BONUS = 38; -int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; -int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; -int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; -int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; -int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; -int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; -int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; -int ITEM_PROPERTY_TRAP = 46; -int ITEM_PROPERTY_TRUE_SEEING = 47; -int ITEM_PROPERTY_ON_MONSTER_HIT = 48; -int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; -int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; -int ITEM_PROPERTY_MONSTER_DAMAGE = 51; -int ITEM_PROPERTY_SPECIAL_WALK = 52; -int ITEM_PROPERTY_COMPUTER_SPIKE = 53; -int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; -int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; -int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; -int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code -int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; -int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; -int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; -int ITEM_PROPERTY_DAMPEN_SOUND = 63; -int ITEM_PROPERTY_DOORCUTTING = 64; -int ITEM_PROPERTY_DOORSABERING = 65; - -int BASE_ITEM_QUARTER_STAFF = 0; -int BASE_ITEM_STUN_BATON = 1; -int BASE_ITEM_LONG_SWORD = 2; -int BASE_ITEM_VIBRO_SWORD = 3; -int BASE_ITEM_SHORT_SWORD = 4; -int BASE_ITEM_VIBRO_BLADE = 5; -int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; -int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; -int BASE_ITEM_LIGHTSABER = 8; -int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; -int BASE_ITEM_SHORT_LIGHTSABER = 10; -int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; -int BASE_ITEM_BLASTER_PISTOL = 12; -int BASE_ITEM_HEAVY_BLASTER = 13; -int BASE_ITEM_HOLD_OUT_BLASTER = 14; -int BASE_ITEM_ION_BLASTER = 15; -int BASE_ITEM_DISRUPTER_PISTOL = 16; -int BASE_ITEM_SONIC_PISTOL = 17; -int BASE_ITEM_ION_RIFLE = 18; -int BASE_ITEM_BOWCASTER = 19; -int BASE_ITEM_BLASTER_CARBINE = 20; -int BASE_ITEM_DISRUPTER_RIFLE = 21; -int BASE_ITEM_SONIC_RIFLE = 22; -int BASE_ITEM_REPEATING_BLASTER = 23; -int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; -int BASE_ITEM_FRAGMENTATION_GRENADES = 25; -int BASE_ITEM_STUN_GRENADES = 26; -int BASE_ITEM_THERMAL_DETONATOR = 27; -int BASE_ITEM_POISON_GRENADE = 28; -int BASE_ITEM_FLASH_GRENADE = 29; -int BASE_ITEM_SONIC_GRENADE = 30; -int BASE_ITEM_ADHESIVE_GRENADE = 31; -int BASE_ITEM_CRYOBAN_GRENADE = 32; -int BASE_ITEM_FIRE_GRENADE = 33; -int BASE_ITEM_ION_GRENADE = 34; -int BASE_ITEM_JEDI_ROBE = 35; -int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; -int BASE_ITEM_JEDI_MASTER_ROBE = 37; -int BASE_ITEM_ARMOR_CLASS_4 = 38; -int BASE_ITEM_ARMOR_CLASS_5 = 39; -int BASE_ITEM_ARMOR_CLASS_6 = 40; -int BASE_ITEM_ARMOR_CLASS_7 = 41; -int BASE_ITEM_ARMOR_CLASS_8 = 42; -int BASE_ITEM_ARMOR_CLASS_9 = 43; -int BASE_ITEM_MASK = 44; -int BASE_ITEM_GAUNTLETS = 45; -int BASE_ITEM_FOREARM_BANDS = 46; -int BASE_ITEM_BELT = 47; -int BASE_ITEM_IMPLANT_1 = 48; -int BASE_ITEM_IMPLANT_2 = 49; -int BASE_ITEM_IMPLANT_3 = 50; -int BASE_ITEM_DATA_PAD = 52; -int BASE_ITEM_ADRENALINE = 53; -int BASE_ITEM_COMBAT_SHOTS = 54; -int BASE_ITEM_MEDICAL_EQUIPMENT = 55; -int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; -int BASE_ITEM_CREDITS = 57; -int BASE_ITEM_TRAP_KIT = 58; -int BASE_ITEM_SECURITY_SPIKES = 59; -int BASE_ITEM_PROGRAMMING_SPIKES = 60; -int BASE_ITEM_GLOW_ROD = 61; -int BASE_ITEM_COLLAR_LIGHT = 62; -int BASE_ITEM_TORCH = 63; -int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; -int BASE_ITEM_AESTHETIC_ITEM = 65; -int BASE_ITEM_DROID_LIGHT_PLATING = 66; -int BASE_ITEM_DROID_MEDIUM_PLATING = 67; -int BASE_ITEM_DROID_HEAVY_PLATING = 68; -int BASE_ITEM_DROID_SEARCH_SCOPE = 69; -int BASE_ITEM_DROID_MOTION_SENSORS = 70; -int BASE_ITEM_DROID_SONIC_SENSORS = 71; -int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; -int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; -int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; -int BASE_ITEM_DROID_SHIELD = 75; -int BASE_ITEM_DROID_UTILITY_DEVICE = 76; -int BASE_ITEM_BLASTER_RIFLE = 77; -int BASE_ITEM_GHAFFI_STICK = 78; -int BASE_ITEM_WOOKIE_WARBLADE = 79; -int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; -int BASE_ITEM_CREATURE_ITEM_SLASH = 81; -int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; -int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; -int BASE_ITEM_CREATURE_HIDE_ITEM = 84; -int BASE_ITEM_BASIC_CLOTHING = 85; -int BASE_ITEM_WRIST_LAUNCHER = 91; -int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 - -int BASE_ITEM_INVALID = 256; - - -// AMF: These constants define attack results -int ATTACK_RESULT_INVALID = 0; -int ATTACK_RESULT_HIT_SUCCESSFUL = 1; -int ATTACK_RESULT_CRITICAL_HIT = 2; -int ATTACK_RESULT_AUTOMATIC_HIT = 3; - -int ATTACK_RESULT_MISS = 4; -int ATTACK_RESULT_ATTACK_RESISTED = 5; -int ATTACK_RESULT_ATTACK_FAILED = 6; - -int ATTACK_RESULT_PARRIED = 8; -int ATTACK_RESULT_DEFLECTED = 9; - - -// these match the constants in visualeffects.2da -int VFX_NONE = -1; - -int VFX_IMP_HEALING_SMALL = 1001; -int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; -int VFX_PRO_AFFLICT = 1003; -int VFX_IMP_CHOKE = 1004; -int VFX_IMP_CURE = 1005; -int VFX_PRO_DEATH_FIELD = 1006; -int VFX_PRO_DROID_DISABLE = 1007; -int VFX_PRO_DROID_KILL = 1008; -int VFX_PRO_DRAIN = 1009; -int VFX_PRO_FORCE_ARMOR = 1010; -int VFX_PRO_FORCE_AURA = 1011; -int VFX_IMP_FORCE_BREACH = 1012; -int VFX_IMP_FORCE_PUSH = 1014; -int VFX_PRO_FORCE_SHIELD = 1015; -int VFX_IMP_FORCE_WAVE = 1017; -int VFX_IMP_FORCE_WHIRLWIND = 1018; -int VFX_IMP_HEAL = 1019; -int VFX_IMP_SPEED_KNIGHT = 1020; -int VFX_PRO_LIGHTNING_L = 1021; -int VFX_IMP_SPEED_MASTERY = 1022; -int VFX_PRO_RESIST_ELEMENTS = 1025; -int VFX_PRO_RESIST_FORCE = 1026; -int VFX_PRO_RESIST_POISON = 1027; -int VFX_PRO_LIGHTNING_S = 1028; -int VFX_IMP_MIND_FORCE = 1031; -int VFX_IMP_SUPPRESS_FORCE = 1032; -int VFX_IMP_MIND_KINIGHT = 1033; -int VFX_IMP_MIND_MASTERY = 1034; -int VFX_PRO_LIGHTNING_JEDI = 1035; -int VFX_PRO_LIGHTNING_L_SOUND = 1036; -int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; -int VFX_IMP_FLAME = 1039; -int VFX_IMP_STUN = 1040; - -int VFX_DUR_STEALTH_PULSE = 2000; -int VFX_DUR_INVISIBILITY = 2001; -int VFX_DUR_SPEED = 2004; -int VFX_DUR_FORCE_WHIRLWIND = 2007; -int VFX_DUR_HOLD = 2008; -int VFX_DUR_BODY_FUAL = 2024; -int VFX_DUR_PSYCHIC_STATIC = 2025; -int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; -int VFX_BEAM_DROID_DISABLE = 2027; -int VFX_BEAM_DROID_DESTROY = 2028; -int VFX_BEAM_DRAIN_LIFE = 2029; -int VFX_DUR_KNIGHTS_SPEED = 2031; -int VFX_DUR_SHIELD_RED_MARK_I = 2032; -int VFX_DUR_SHIELD_RED_MARK_II = 2034; -int VFX_DUR_SHIELD_RED_MARK_IV = 2035; -int VFX_BEAM_LIGHTNING_DARK_S = 2037; -int VFX_BEAM_LIGHTNING_DARK_L = 2038; -int VFX_DUR_SHIELD_BLUE_01 = 2040; -int VFX_DUR_SHIELD_BLUE_02 = 2041; -int VFX_DUR_SHIELD_BLUE_03 = 2042; -int VFX_DUR_SHIELD_BLUE_04 = 2043; -int VFX_DUR_SHIELD_GREEN_01 = 2044; -int VFX_DUR_SHIELD_RED_01 = 2045; -int VFX_DUR_SHIELD_RED_02 = 2046; -int VFX_DUR_SHIELD_CHROME_01 = 2047; -int VFX_DUR_SHIELD_CHROME_02 = 2048; -int VFX_BEAM_ION_RAY_01 = 2049; -int VFX_BEAM_ION_RAY_02 = 2050; -int VFX_BEAM_COLD_RAY = 2051; -int VFX_BEAM_STUN_RAY = 2052; -int VFX_BEAM_FLAME_SPRAY = 2053; -int VFX_DUR_CARBONITE_ENCASING = 2054; -int VFX_DUR_CARBONITE_CHUNKS = 2055; -int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; -int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; -int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; -int VFX_DUR_ELECTRICAL_SPARK = 2067; - -int VFX_FNF_FORCE_WAVE = 3001; -int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; -int VFX_FNF_GRENADE_FRAGMENTATION = 3003; -int VFX_FNF_GRENADE_STUN = 3004; -int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; -int VFX_FNF_GRENADE_POISON = 3006; -int VFX_FNF_GRENADE_SONIC = 3007; -int VFX_FNF_GRENADE_ADHESIVE = 3008; -int VFX_FNF_GRENADE_CRYOBAN = 3009; -int VFX_FNF_GRENADE_PLASMA = 3010; -int VFX_FNF_GRENADE_ION = 3011; -int VFX_FNF_GRAVITY_GENERATOR = 3013; - -int VFX_COM_SPARKS_LARGE = 4003; -int VFX_COM_SPARKS_LIGHTSABER = 4004; -int VFX_COM_SPARKS_PARRY_METAL = 4011; -int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; -int VFX_COM_POWER_BLAST_IMPROVED = 4013; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; -int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; -int VFX_COM_MULTI_SHOT = 4016; -int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; -int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; -int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; -int VFX_COM_SNIPER_SHOT_MASTERY = 4020; -int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; -int VFX_COM_RAPID_SHOT_IMPROVED = 4022; -int VFX_COM_BLASTER_DEFLECTION = 4023; -int VFX_COM_BLASTER_IMPACT = 4024; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; -int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; -int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; -int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; -int VFX_COM_POWER_BLAST_MASTERY = 4029; -int VFX_COM_FLURRY_IMPROVED_SABER = 4030; -int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; -int VFX_COM_BLASTER_IMPACT_GROUND = 4032; -int VFX_COM_SPARKS_BLASTER = 4033; -int VFX_COM_DROID_EXPLOSION_1 = 4034; -int VFX_COM_DROID_EXPLOSION_2 = 4035; -int VFX_COM_JEDI_FORCE_FIZZLE = 4036; -int VFX_COM_FORCE_RESISTED = 4037; - -int VFX_ARD_LIGHT_YELLOW_10 = 5000; -int VFX_ARD_LIGHT_YELLOW_20 = 5001; -int VFX_ARD_LIGHT_BLIND = 5002; -int VFX_ARD_HEAT_SHIMMER = 5003; - -int VFX_IMP_MIRV = 6000; -int VFX_IMP_MIRV_IMPACT = 6001; -int VFX_IMP_SCREEN_SHAKE = 6002; - -int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 - -int AOE_PER_FOGACID = 0; -int AOE_PER_FOGFIRE = 1; -int AOE_PER_FOGSTINK = 2; -int AOE_PER_FOGKILL = 3; -int AOE_PER_FOGMIND = 4; -int AOE_PER_WALLFIRE = 5; -int AOE_PER_WALLWIND = 6; -int AOE_PER_WALLBLADE = 7; -int AOE_PER_WEB = 8; -int AOE_PER_ENTANGLE = 9; -//int AOE_PER_CHAOS = 10; -int AOE_PER_DARKNESS = 11; -int AOE_MOB_CIRCEVIL = 12; -int AOE_MOB_CIRCGOOD = 13; -int AOE_MOB_CIRCLAW = 14; -int AOE_MOB_CIRCCHAOS = 15; -int AOE_MOB_FEAR = 16; -int AOE_MOB_BLINDING = 17; -int AOE_MOB_UNEARTHLY = 18; -int AOE_MOB_MENACE = 19; -int AOE_MOB_UNNATURAL = 20; -int AOE_MOB_STUN = 21; -int AOE_MOB_PROTECTION = 22; -int AOE_MOB_FIRE = 23; -int AOE_MOB_FROST = 24; -int AOE_MOB_ELECTRICAL = 25; -int AOE_PER_FOGGHOUL = 26; -int AOE_MOB_TYRANT_FOG = 27; -int AOE_PER_STORM = 28; -int AOE_PER_INVIS_SPHERE = 29; -int AOE_MOB_SILENCE = 30; -int AOE_PER_DELAY_BLAST_FIREBALL = 31; -int AOE_PER_GREASE = 32; -int AOE_PER_CREEPING_DOOM = 33; -int AOE_PER_EVARDS_BLACK_TENTACLES = 34; -int AOE_MOB_INVISIBILITY_PURGE = 35; -int AOE_MOB_DRAGON_FEAR = 36; - -// DJS-OEI 7/21/2004 -// Form re-design. -/* -// DJS-OEI 3/28/2004 -// These masks are used in Spells.2DA to indicate which spells -// can be affected by which Forms. Unfortunately, the script compiler -// won't let me make a constant with a Hex value, so I've had to use -// decimal. -int FORM_MASK_FORCE_FOCUS = 1; -int FORM_MASK_ENDURING_FORCE = 2; -int FORM_MASK_FORCE_AMPLIFICATION = 4; -int FORM_MASK_FORCE_POTENCY = 8; -int FORM_MASK_REGENERATION = 16; -int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; -*/ - -// these constants match those in spell.2da -int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. -int FORCE_POWER_MASTER_ALTER = 0; -int FORCE_POWER_MASTER_CONTROL = 1; -int FORCE_POWER_MASTER_SENSE = 2; -int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; -int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; -int FORCE_POWER_REGNERATION_ADVANCED = 5; -int FORCE_POWER_AFFECT_MIND = 6; -int FORCE_POWER_AFFLICTION = 7; -int FORCE_POWER_SPEED_BURST = 8; -int FORCE_POWER_CHOKE = 9; -int FORCE_POWER_CURE = 10; -int FORCE_POWER_DEATH_FIELD = 11; -int FORCE_POWER_DROID_DISABLE = 12; -int FORCE_POWER_DROID_DESTROY = 13; -int FORCE_POWER_DOMINATE = 14; -int FORCE_POWER_DRAIN_LIFE = 15; -int FORCE_POWER_FEAR = 16; -int FORCE_POWER_FORCE_ARMOR = 17; -int FORCE_POWER_FORCE_AURA = 18; -int FORCE_POWER_FORCE_BREACH = 19; -int FORCE_POWER_FORCE_IMMUNITY = 20; -int FORCE_POWER_FORCE_JUMP = 21; -int FORCE_POWER_FORCE_MIND = 22; -int FORCE_POWER_FORCE_PUSH = 23; -int FORCE_POWER_FORCE_SHIELD = 24; -int FORCE_POWER_FORCE_STORM = 25; -int FORCE_POWER_FORCE_WAVE = 26; -int FORCE_POWER_FORCE_WHIRLWIND = 27; -int FORCE_POWER_HEAL = 28; -int FORCE_POWER_HOLD = 29; -int FORCE_POWER_HORROR = 30; -int FORCE_POWER_INSANITY = 31; -int FORCE_POWER_KILL = 32; -int FORCE_POWER_KNIGHT_MIND = 33; -int FORCE_POWER_KNIGHT_SPEED = 34; -int FORCE_POWER_LIGHTNING = 35; -int FORCE_POWER_MIND_MASTERY = 36; -int FORCE_POWER_SPEED_MASTERY = 37; -int FORCE_POWER_PLAGUE = 38; -int FORCE_POWER_REGENERATION = 39; -int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; -int FORCE_POWER_RESIST_FORCE = 41; -int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; -int FORCE_POWER_SHOCK = 43; -int FORCE_POWER_SLEEP = 44; -int FORCE_POWER_SLOW = 45; -int FORCE_POWER_STUN = 46; -int FORCE_POWER_DROID_STUN = 47; -int FORCE_POWER_SUPRESS_FORCE = 48; -int FORCE_POWER_LIGHT_SABER_THROW = 49; -int FORCE_POWER_WOUND = 50; -int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; -int SPECIAL_ABILITY_BODY_FUEL = 52; -int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; -int SPECIAL_ABILITY_WARRIOR_STANCE = 54; -int SPECIAL_ABILITY_SENTINEL_STANCE = 55; -int SPECIAL_ABILITY_DOMINATE_MIND = 56; -int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; -int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; -int SPECIAL_ABILITY_ENHANCED_SENSES = 59; -int SPECIAL_ABILITY_CAMOFLAGE = 60; -int SPECIAL_ABILITY_TAUNT = 61; -int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; -int SPECIAL_ABILITY_RAGE = 63; - -// DJS-OEI 12/9/2003 -// New Force Powers -int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; -int FORCE_POWER_MASTER_HEAL = 134; -int FORCE_POWER_FORCE_BARRIER = 135; -int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; -int FORCE_POWER_MASTER_FORCE_BARRIER = 137; -int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast -int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. -int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // -int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast -int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. -int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // -int FORCE_POWER_CRUSH_OPPOSITION_I = 144; -int FORCE_POWER_CRUSH_OPPOSITION_II = 145; -int FORCE_POWER_CRUSH_OPPOSITION_III = 146; -int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; -int FORCE_POWER_CRUSH_OPPOSITION_V = 148; -int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; -int FORCE_POWER_FORCE_BODY = 150; -int FORCE_POWER_IMPROVED_FORCE_BODY = 151; -int FORCE_POWER_MASTER_FORCE_BODY = 152; -int FORCE_POWER_DRAIN_FORCE = 153; -int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; -int FORCE_POWER_MASTER_DRAIN_FORCE = 155; -int FORCE_POWER_FORCE_CAMOUFLAGE = 156; -int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; -int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; -int FORCE_POWER_FORCE_SCREAM = 159; -int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; -int FORCE_POWER_MASTER_FORCE_SCREAM = 161; -int FORCE_POWER_FORCE_REPULSION = 162; -int FORCE_POWER_FORCE_REDIRECTION = 163; -int FORCE_POWER_FURY = 164; -int FORCE_POWER_IMPROVED_FURY = 165; -int FORCE_POWER_MASTER_FURY = 166; -int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; -int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; -int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; -int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; -int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; -int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; -int FORCE_POWER_REVITALIZE = 173; -int FORCE_POWER_IMPROVED_REVITALIZE = 174; -int FORCE_POWER_MASTER_REVITALIZE = 175; -int FORCE_POWER_FORCE_SIGHT = 176; -int FORCE_POWER_FORCE_CRUSH = 177; -int FORCE_POWER_PRECOGNITION = 178; -int FORCE_POWER_BATTLE_PRECOGNITION = 179; -int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; -int FORCE_POWER_MIND_TRICK = 181; -int FORCE_POWER_CONFUSION = 200; -int FORCE_POWER_BEAST_TRICK = 182; -int FORCE_POWER_BEAST_CONFUSION = 184; -int FORCE_POWER_DROID_TRICK = 201; -int FORCE_POWER_DROID_CONFUSION = 269; -int FORCE_POWER_BREATH_CONTROL = 270; -int FORCE_POWER_WOOKIEE_RAGE_I = 271; -int FORCE_POWER_WOOKIEE_RAGE_II = 272; -int FORCE_POWER_WOOKIEE_RAGE_III = 273; - -// DJS-OEI 7/21/2004 -// Form re-design. -/* -// DJS-OEI 3/25/2004 -int FORM_LIGHTSABER_PADAWAN_I = 205; -int FORM_LIGHTSABER_PADAWAN_II = 206; -int FORM_LIGHTSABER_PADAWAN_III = 207; -int FORM_LIGHTSABER_DAKLEAN_I = 208; -int FORM_LIGHTSABER_DAKLEAN_II = 209; -int FORM_LIGHTSABER_DAKLEAN_III = 210; -int FORM_LIGHTSABER_SENTINEL_I = 211; -int FORM_LIGHTSABER_SENTINEL_II = 212; -int FORM_LIGHTSABER_SENTINEL_III = 213; -int FORM_LIGHTSABER_SODAK_I = 214; -int FORM_LIGHTSABER_SODAK_II = 215; -int FORM_LIGHTSABER_SODAK_III = 216; -int FORM_LIGHTSABER_ANCIENT_I = 217; -int FORM_LIGHTSABER_ANCIENT_II = 218; -int FORM_LIGHTSABER_ANCIENT_III = 219; -int FORM_LIGHTSABER_MASTER_I = 220; -int FORM_LIGHTSABER_MASTER_II = 221; -int FORM_LIGHTSABER_MASTER_III = 222; -int FORM_CONSULAR_FORCE_FOCUS_I = 223; -int FORM_CONSULAR_FORCE_FOCUS_II = 224; -int FORM_CONSULAR_FORCE_FOCUS_III = 225; -int FORM_CONSULAR_ENDURING_FORCE_I = 226; -int FORM_CONSULAR_ENDURING_FORCE_II = 227; -int FORM_CONSULAR_ENDURING_FORCE_III = 228; -int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; -int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; -int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; -int FORM_CONSULAR_FORCE_SHELL_I = 232; -int FORM_CONSULAR_FORCE_SHELL_II = 233; -int FORM_CONSULAR_FORCE_SHELL_III = 234; -int FORM_CONSULAR_FORCE_POTENCY_I = 235; -int FORM_CONSULAR_FORCE_POTENCY_II = 236; -int FORM_CONSULAR_FORCE_POTENCY_III = 237; -int FORM_CONSULAR_REGENERATION_I = 238; -int FORM_CONSULAR_REGENERATION_II = 239; -int FORM_CONSULAR_REGENERATION_III = 240; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; -*/ - -int FORM_SABER_I_SHII_CHO = 258; -int FORM_SABER_II_MAKASHI = 259; -int FORM_SABER_III_SORESU = 260; -int FORM_SABER_IV_ATARU = 261; -int FORM_SABER_V_SHIEN = 262; -int FORM_SABER_VI_NIMAN = 263; -int FORM_SABER_VII_JUYO = 264; -int FORM_FORCE_I_FOCUS = 265; -int FORM_FORCE_II_POTENCY = 266; -int FORM_FORCE_III_AFFINITY = 267; -int FORM_FORCE_IV_MASTERY = 268; - -// these constants must match those in poison.2da - -int POISON_ABILITY_SCORE_MILD = 0; -int POISON_ABILITY_SCORE_AVERAGE = 1; -int POISON_ABILITY_SCORE_VIRULENT = 2; -int POISON_DAMAGE_MILD = 3; -int POISON_DAMAGE_AVERAGE = 4; -int POISON_DAMAGE_VIRULENT = 5; -int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; -int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; -int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 -int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 -int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 -int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 - -// the thing after CREATURE_TYPE_ should refer to the -// actual "subtype" in the lists given above. -int CREATURE_TYPE_RACIAL_TYPE = 0; -int CREATURE_TYPE_PLAYER_CHAR = 1; -int CREATURE_TYPE_CLASS = 2; -int CREATURE_TYPE_REPUTATION = 3; -int CREATURE_TYPE_IS_ALIVE = 4; -int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; -int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; -int CREATURE_TYPE_PERCEPTION = 7; -//int CREATURE_TYPE_ALIGNMENT = 2; - -int REPUTATION_TYPE_FRIEND = 0; -int REPUTATION_TYPE_ENEMY = 1; -int REPUTATION_TYPE_NEUTRAL = 2; - -int PERCEPTION_SEEN_AND_HEARD = 0; -int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; -int PERCEPTION_HEARD_AND_NOT_SEEN = 2; -int PERCEPTION_SEEN_AND_NOT_HEARD = 3; -int PERCEPTION_NOT_HEARD = 4; -int PERCEPTION_HEARD = 5; -int PERCEPTION_NOT_SEEN = 6; -int PERCEPTION_SEEN = 7; - -int PLAYER_CHAR_NOT_PC = FALSE; -int PLAYER_CHAR_IS_PC = TRUE; - -int CLASS_TYPE_SOLDIER = 0; -int CLASS_TYPE_SCOUT = 1; -int CLASS_TYPE_SCOUNDREL = 2; -int CLASS_TYPE_JEDIGUARDIAN = 3; -int CLASS_TYPE_JEDICONSULAR = 4; -int CLASS_TYPE_JEDISENTINEL = 5; -int CLASS_TYPE_COMBATDROID = 6; -int CLASS_TYPE_EXPERTDROID = 7; -int CLASS_TYPE_MINION = 8; - -// DJS-OEI 2/11/2004 -int CLASS_TYPE_TECHSPECIALIST = 9; -int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe -int CLASS_TYPE_JEDIWEAPONMASTER = 11; -int CLASS_TYPE_JEDIMASTER = 12; -int CLASS_TYPE_JEDIWATCHMAN = 13; -int CLASS_TYPE_SITHMARAUDER = 14; -int CLASS_TYPE_SITHLORD = 15; -int CLASS_TYPE_SITHASSASSIN = 16; - - -int CLASS_TYPE_INVALID = 255; - -// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() -int PERSISTENT_ZONE_ACTIVE = 0; -int PERSISTENT_ZONE_FOLLOW = 1; - -int INVALID_STANDARD_FACTION = -1; -int STANDARD_FACTION_HOSTILE_1 = 1; -int STANDARD_FACTION_FRIENDLY_1 = 2; -int STANDARD_FACTION_HOSTILE_2 = 3; -int STANDARD_FACTION_FRIENDLY_2 = 4; -int STANDARD_FACTION_NEUTRAL = 5; -int STANDARD_FACTION_INSANE = 6; -int STANDARD_FACTION_PTAT_TUSKAN = 7; -int STANDARD_FACTION_GLB_XOR = 8; -int STANDARD_FACTION_SURRENDER_1 = 9; -int STANDARD_FACTION_SURRENDER_2 = 10; -int STANDARD_FACTION_PREDATOR = 11; -int STANDARD_FACTION_PREY = 12; -int STANDARD_FACTION_TRAP = 13; -int STANDARD_FACTION_ENDAR_SPIRE = 14; -int STANDARD_FACTION_RANCOR = 15; -int STANDARD_FACTION_GIZKA_1 = 16; -int STANDARD_FACTION_GIZKA_2 = 17; -// DJS-OEI 2/25/2004 -int STANDARD_FACTION_SELF_LOATHING = 21; -int STANDARD_FACTION_ONE_ON_ONE = 22; -int STANDARD_FACTION_PARTYPUPPET = 23; - -// Skill defines -int SKILL_COMPUTER_USE = 0; -int SKILL_DEMOLITIONS = 1; -int SKILL_STEALTH = 2; -int SKILL_AWARENESS = 3; -int SKILL_PERSUADE = 4; -int SKILL_REPAIR = 5; -int SKILL_SECURITY = 6; -int SKILL_TREAT_INJURY = 7; -int SKILL_MAX_SKILLS = 8; - -int SUBSKILL_FLAGTRAP = 100; -int SUBSKILL_RECOVERTRAP = 101; -int SUBSKILL_EXAMINETRAP = 102; - -// FEATS -//int FEAT_ADVANCED_DODGE = 0; -int FEAT_ADVANCED_JEDI_DEFENSE = 1; -int FEAT_ADVANCED_GUARD_STANCE = 2; -int FEAT_AMBIDEXTERITY = 3; -int FEAT_ARMOUR_PROF_HEAVY = 4; -int FEAT_ARMOUR_PROF_LIGHT = 5; -int FEAT_ARMOUR_PROF_MEDIUM = 6; -int FEAT_CAUTIOUS = 7; -int FEAT_CRITICAL_STRIKE = 8; -int FEAT_DOUBLE_WEAPON_FIGHTING = 9; -int FEAT_EMPATHY = 10; -int FEAT_FLURRY = 11; -int FEAT_GEAR_HEAD = 12; -int FEAT_GREAT_FORTITUDE = 13; -int FEAT_IMPLANT_LEVEL_1 = 14; -int FEAT_IMPLANT_LEVEL_2 = 15; -int FEAT_IMPLANT_LEVEL_3 = 16; -int FEAT_IMPROVED_POWER_ATTACK = 17; -int FEAT_IMPROVED_POWER_BLAST = 18; -int FEAT_IMPROVED_CRITICAL_STRIKE = 19; -int FEAT_IMPROVED_SNIPER_SHOT = 20; -int FEAT_IRON_WILL = 21; -int FEAT_LIGHTNING_REFLEXES = 22; -//int FEAT_MASTER_DODGE = 23; -int FEAT_MASTER_JEDI_DEFENSE = 24; -int FEAT_MASTER_GUARD_STANCE = 25; -int FEAT_MULTI_SHOT = 26; -int FEAT_PERCEPTIVE = 27; -int FEAT_POWER_ATTACK = 28; -int FEAT_POWER_BLAST = 29; -int FEAT_RAPID_SHOT = 30; -int FEAT_SNIPER_SHOT = 31; -int FEAT_WEAPON_FOCUS_BLASTER = 32; -int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; -int FEAT_WEAPON_FOCUS_GRENADE = 34; -int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; -int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; -int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; -int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; -int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; -int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; -int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; -int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; -int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; -int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; -int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; -int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; -int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; -int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; -int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; -int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; -int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; -int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; -int FEAT_WHIRLWIND_ATTACK = 53; -int FEAT_GUARD_STANCE = 54; -int FEAT_JEDI_DEFENSE = 55; -int FEAT_UNCANNY_DODGE_1 = 56; -int FEAT_UNCANNY_DODGE_2 = 57; -int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; -//int FEAT_DODGE = 59; -int FEAT_SNEAK_ATTACK_1D6 = 60; -int FEAT_SNEAK_ATTACK_2D6 = 61; -int FEAT_SNEAK_ATTACK_3D6 = 62; -int FEAT_SNEAK_ATTACK_4D6 = 63; -int FEAT_SNEAK_ATTACK_5D6 = 64; -int FEAT_SNEAK_ATTACK_6D6 = 65; -int FEAT_SNEAK_ATTACK_7D6 = 66; -int FEAT_SNEAK_ATTACK_8D6 = 67; -int FEAT_SNEAK_ATTACK_9D6 = 68; -int FEAT_SNEAK_ATTACK_10D6 = 69; -int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; -int FEAT_SKILL_FOCUS_STEALTH = 71; -int FEAT_SKILL_FOCUS_AWARENESS = 72; -int FEAT_SKILL_FOCUS_PERSUADE = 73; -int FEAT_SKILL_FOCUS_REPAIR = 74; -int FEAT_SKILL_FOCUS_SECURITY = 75; -int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; -int FEAT_MASTER_SNIPER_SHOT = 77; -int FEAT_DROID_UPGRADE_1 = 78; -int FEAT_DROID_UPGRADE_2 = 79; -int FEAT_DROID_UPGRADE_3 = 80; -int FEAT_MASTER_CRITICAL_STRIKE = 81; -int FEAT_MASTER_POWER_BLAST = 82; -int FEAT_MASTER_POWER_ATTACK = 83; -int FEAT_TOUGHNESS = 84; -int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; -int FEAT_FORCE_FOCUS_ALTER = 86; -int FEAT_FORCE_FOCUS_CONTROL = 87; -int FEAT_FORCE_FOCUS_SENSE = 88; -int FEAT_FORCE_FOCUS_ADVANCED = 89; -int FEAT_FORCE_FOCUS_MASTERY = 90; -int FEAT_IMPROVED_FLURRY = 91; -int FEAT_IMPROVED_RAPID_SHOT = 92; -int FEAT_PROFICIENCY_ALL = 93; -int FEAT_BATTLE_MEDITATION = 94; -// DJS-OEI 11/12/2003 -int FEAT_EVASION = 125; -int FEAT_TARGETING_1 = 126; -int FEAT_TARGETING_2 = 127; -int FEAT_TARGETING_3 = 128; -int FEAT_TARGETING_4 = 129; -int FEAT_TARGETING_5 = 130; -int FEAT_TARGETING_6 = 131; -int FEAT_TARGETING_7 = 132; -int FEAT_TARGETING_8 = 133; -int FEAT_TARGETING_9 = 134; -int FEAT_TARGETING_10 = 135; -// DJS-OEI 10/5/2004 -// Moved down to 240+ -/* -int FEAT_PRECISE_SHOT = 136; -int FEAT_IMPROVED_PRECISE_SHOT = 137; -int FEAT_MASTER_PRECISE_SHOT = 138; -*/ -int FEAT_CLOSE_COMBAT = 139; -int FEAT_IMPROVED_CLOSE_COMBAT = 140; -int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; -int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; -int FEAT_REGENERATE_FORCE_POINTS = 143; -int FEAT_DARK_SIDE_CORRUPTION = 149; -int FEAT_IGNORE_PAIN_1 = 150; -int FEAT_IGNORE_PAIN_2 = 151; -int FEAT_IGNORE_PAIN_3 = 152; -int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; -int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; -int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; -int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; -int FEAT_DEFLECT = 168; -int FEAT_INNER_STRENGTH_1 = 169; -int FEAT_INNER_STRENGTH_2 = 170; -int FEAT_INNER_STRENGTH_3 = 171; -int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; -int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; -int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; -int FEAT_CRAFT = 175; -int FEAT_MASTERCRAFT_WEAPONS_1 = 176; -int FEAT_MASTERCRAFT_WEAPONS_2 = 177; -int FEAT_MASTERCRAFT_WEAPONS_3 = 178; -int FEAT_MASTERCRAFT_ARMOR_1 = 179; -int FEAT_MASTERCRAFT_ARMOR_2 = 180; -int FEAT_MASTERCRAFT_ARMOR_3 = 181; -int FEAT_DROID_INTERFACE = 182; -int FEAT_CLASS_SKILL_AWARENESS = 183; -int FEAT_CLASS_SKILL_COMPUTER_USE = 184; -int FEAT_CLASS_SKILL_DEMOLITIONS = 185; -int FEAT_CLASS_SKILL_REPAIR = 186; -int FEAT_CLASS_SKILL_SECURITY = 187; -int FEAT_CLASS_SKILL_STEALTH = 188; -int FEAT_CLASS_SKILL_TREAT_INJURY = 189; -int FEAT_DUAL_STRIKE = 190; -int FEAT_IMPROVED_DUAL_STRIKE = 191; -int FEAT_MASTER_DUAL_STRIKE = 192; -int FEAT_FINESSE_LIGHTSABERS = 193; -int FEAT_FINESSE_MELEE_WEAPONS = 194; -int FEAT_MOBILITY = 195; -int FEAT_REGENERATE_VITALITY_POINTS = 196; -int FEAT_STEALTH_RUN = 197; -int FEAT_KINETIC_COMBAT = 198; -int FEAT_SURVIVAL = 199; -int FEAT_MANDALORIAN_COURAGE = 200; -int FEAT_PERSONAL_CLOAKING_SHIELD = 201; -int FEAT_MENTOR = 202; -int FEAT_IMPLANT_SWITCHING = 203; -int FEAT_SPIRIT = 204; -int FEAT_FORCE_CHAIN = 205; -int FEAT_WAR_VETERAN = 206; -// DJS-OEI 10/5/2004 -// Moved down to 240+ -/* -int FEAT_PRECISE_SHOT_IV = 226; -int FEAT_PRECISE_SHOT_V = 227; -*/ -int FEAT_FIGHTING_SPIRIT = 236; -int FEAT_HEROIC_RESOLVE = 237; -int FEAT_PRECISE_SHOT = 240; -int FEAT_IMPROVED_PRECISE_SHOT = 241; -int FEAT_MASTER_PRECISE_SHOT = 242; -int FEAT_PRECISE_SHOT_IV = 243; -int FEAT_PRECISE_SHOT_V = 244; - -// Special Attack Defines -int SPECIAL_ATTACK_INVALID = 0; -int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; -int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; -int SPECIAL_ATTACK_SAP = 3; -int SPECIAL_ATTACK_DISARM = 4; -int SPECIAL_ATTACK_IMPROVED_DISARM = 5; -int SPECIAL_ATTACK_KNOCKDOWN = 6; -int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; -int SPECIAL_ATTACK_STUNNING_FIST = 8; -int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; -int SPECIAL_ATTACK_RAPID_SHOT = 10; - -// Combat Mode Defines -int COMBAT_MODE_INVALID = 0; -int COMBAT_MODE_PARRY = 1; -int COMBAT_MODE_POWER_ATTACK = 2; -int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; -int COMBAT_MODE_FLURRY_OF_BLOWS = 4; -int COMBAT_MODE_RAPID_SHOT = 5; - -// These represent the row in the difficulty 2da, rather than -// a difficulty value. -int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; -int ENCOUNTER_DIFFICULTY_EASY = 1; -int ENCOUNTER_DIFFICULTY_NORMAL = 2; -int ENCOUNTER_DIFFICULTY_HARD = 3; -int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; - -// Looping animation constants. -int ANIMATION_LOOPING_PAUSE = 0; -int ANIMATION_LOOPING_PAUSE2 = 1; -int ANIMATION_LOOPING_LISTEN = 2; -int ANIMATION_LOOPING_MEDITATE = 3; -int ANIMATION_LOOPING_WORSHIP = 4; -//int ANIMATION_LOOPING_LOOK_FAR = 5; -//int ANIMATION_LOOPING_SIT_CHAIR = 6; -//int ANIMATION_LOOPING_SIT_CROSS = 7; -int ANIMATION_LOOPING_TALK_NORMAL = 5; -int ANIMATION_LOOPING_TALK_PLEADING = 6; -int ANIMATION_LOOPING_TALK_FORCEFUL = 7; -int ANIMATION_LOOPING_TALK_LAUGHING = 8; -int ANIMATION_LOOPING_TALK_SAD = 9; -int ANIMATION_LOOPING_GET_LOW = 10; -int ANIMATION_LOOPING_GET_MID = 11; -int ANIMATION_LOOPING_PAUSE_TIRED = 12; -int ANIMATION_LOOPING_PAUSE_DRUNK = 13; -int ANIMATION_LOOPING_FLIRT = 14; -int ANIMATION_LOOPING_USE_COMPUTER = 15; -int ANIMATION_LOOPING_DANCE = 16; -int ANIMATION_LOOPING_DANCE1 = 17; -int ANIMATION_LOOPING_HORROR = 18; -int ANIMATION_LOOPING_READY = 19; -int ANIMATION_LOOPING_DEACTIVATE = 20; -int ANIMATION_LOOPING_SPASM = 21; -int ANIMATION_LOOPING_SLEEP = 22; -int ANIMATION_LOOPING_PRONE = 23; -int ANIMATION_LOOPING_PAUSE3 = 24; -int ANIMATION_LOOPING_WELD = 25; -int ANIMATION_LOOPING_DEAD = 26; -int ANIMATION_LOOPING_TALK_INJURED = 27; -int ANIMATION_LOOPING_LISTEN_INJURED = 28; -int ANIMATION_LOOPING_TREAT_INJURED = 29; -int ANIMATION_LOOPING_DEAD_PRONE = 30; -int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; -int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; -int ANIMATION_LOOPING_CHECK_BODY = 33; -int ANIMATION_LOOPING_UNLOCK_DOOR = 34; -int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; - -int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 - -int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 -//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 -int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 -int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 -int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 -int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 - -// NOTE: Choke is really a looping animation. The fire and forget constant has -// been left in because it has already been used in many places. Please -// use this constant from now on. -int ANIMATION_LOOPING_CHOKE = 116; - -// Fire and forget animation constants. -int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; -int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; -int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; -int ANIMATION_FIREFORGET_PAUSE_BORED = 103; -int ANIMATION_FIREFORGET_SALUTE = 104; -int ANIMATION_FIREFORGET_BOW = 105; -//int ANIMATION_FIREFORGET_STEAL = 106; -int ANIMATION_FIREFORGET_GREETING = 106; -int ANIMATION_FIREFORGET_TAUNT = 107; -int ANIMATION_FIREFORGET_VICTORY1 = 108; -int ANIMATION_FIREFORGET_VICTORY2 = 109; -int ANIMATION_FIREFORGET_VICTORY3 = 110; -//int ANIMATION_FIREFORGET_READ = 111; -int ANIMATION_FIREFORGET_INJECT = 112; -int ANIMATION_FIREFORGET_USE_COMPUTER = 113; -int ANIMATION_FIREFORGET_PERSUADE = 114; -int ANIMATION_FIREFORGET_ACTIVATE = 115; -// NOTE: Please do not use this choke constant anymore. The choke is not a fire -// and forget animation. The looping choke constant above should be used -// instead. -int ANIMATION_FIREFORGET_CHOKE = 116; -int ANIMATION_FIREFORGET_THROW_HIGH = 117; -int ANIMATION_FIREFORGET_THROW_LOW = 118; -int ANIMATION_FIREFORGET_CUSTOM01 = 119; -int ANIMATION_FIREFORGET_TREAT_INJURED = 120; -int ANIMATION_FIREFORGET_FORCE_CAST = 121; -int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 -int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 -int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 - -// Placeable animation constants -int ANIMATION_PLACEABLE_ACTIVATE = 200; -int ANIMATION_PLACEABLE_DEACTIVATE = 201; -int ANIMATION_PLACEABLE_OPEN = 202; -int ANIMATION_PLACEABLE_CLOSE = 203; -int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; -int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; -int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; -int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; -int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; -int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; -int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; -int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; -int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; -int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; - - -// Room Animation Constants -int ANIMATION_ROOM_SCRIPTLOOP01 = 1; -int ANIMATION_ROOM_SCRIPTLOOP02 = 2; -int ANIMATION_ROOM_SCRIPTLOOP03 = 3; -int ANIMATION_ROOM_SCRIPTLOOP04 = 4; -int ANIMATION_ROOM_SCRIPTLOOP05 = 5; -int ANIMATION_ROOM_SCRIPTLOOP06 = 6; -int ANIMATION_ROOM_SCRIPTLOOP07 = 7; -int ANIMATION_ROOM_SCRIPTLOOP08 = 8; -int ANIMATION_ROOM_SCRIPTLOOP09 = 9; -int ANIMATION_ROOM_SCRIPTLOOP10 = 10; -int ANIMATION_ROOM_SCRIPTLOOP11 = 11; -int ANIMATION_ROOM_SCRIPTLOOP12 = 12; -int ANIMATION_ROOM_SCRIPTLOOP13 = 13; -int ANIMATION_ROOM_SCRIPTLOOP14 = 14; -int ANIMATION_ROOM_SCRIPTLOOP15 = 15; -int ANIMATION_ROOM_SCRIPTLOOP16 = 16; -int ANIMATION_ROOM_SCRIPTLOOP17 = 17; -int ANIMATION_ROOM_SCRIPTLOOP18 = 18; -int ANIMATION_ROOM_SCRIPTLOOP19 = 19; -int ANIMATION_ROOM_SCRIPTLOOP20 = 20; - -int TALENT_TYPE_FORCE = 0; -int TALENT_TYPE_SPELL = 0; -int TALENT_TYPE_FEAT = 1; -int TALENT_TYPE_SKILL = 2; - -int TALENT_EXCLUDE_ALL_OF_TYPE = -1; - -int INVENTORY_DISTURB_TYPE_ADDED = 0; -int INVENTORY_DISTURB_TYPE_REMOVED = 1; -int INVENTORY_DISTURB_TYPE_STOLEN = 2; - -int GUI_PANEL_PLAYER_DEATH = 0; - -int POLYMORPH_TYPE_WEREWOLF = 0; -int POLYMORPH_TYPE_WERERAT = 1; -int POLYMORPH_TYPE_WERECAT = 2; -int POLYMORPH_TYPE_GIANT_SPIDER = 3; -int POLYMORPH_TYPE_TROLL = 4; -int POLYMORPH_TYPE_UMBER_HULK = 5; -int POLYMORPH_TYPE_PIXIE = 6; -int POLYMORPH_TYPE_ZOMBIE = 7; -int POLYMORPH_TYPE_RED_DRAGON = 8; -int POLYMORPH_TYPE_FIRE_GIANT = 9; -int POLYMORPH_TYPE_BALOR = 10; -int POLYMORPH_TYPE_DEATH_SLAAD = 11; -int POLYMORPH_TYPE_IRON_GOLEM = 12; -int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; -int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; -int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; -int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; -int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; -int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; -int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; -int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; -int POLYMORPH_TYPE_BROWN_BEAR = 21; -int POLYMORPH_TYPE_PANTHER = 22; -int POLYMORPH_TYPE_WOLF = 23; -int POLYMORPH_TYPE_BOAR = 24; -int POLYMORPH_TYPE_BADGER = 25; -int POLYMORPH_TYPE_PENGUIN = 26; -int POLYMORPH_TYPE_COW = 27; -int POLYMORPH_TYPE_DOOM_KNIGHT = 28; -int POLYMORPH_TYPE_YUANTI = 29; -int POLYMORPH_TYPE_IMP = 30; -int POLYMORPH_TYPE_QUASIT = 31; -int POLYMORPH_TYPE_SUCCUBUS = 32; -int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; -int POLYMORPH_TYPE_DIRE_PANTHER = 34; -int POLYMORPH_TYPE_DIRE_WOLF = 35; -int POLYMORPH_TYPE_DIRE_BOAR = 36; -int POLYMORPH_TYPE_DIRE_BADGER = 37; - -int INVISIBILITY_TYPE_NORMAL = 1; -int INVISIBILITY_TYPE_DARKNESS = 2; -int INVISIBILITY_TYPE_IMPROVED = 4; - -int CREATURE_SIZE_INVALID = 0; -int CREATURE_SIZE_TINY = 1; -int CREATURE_SIZE_SMALL = 2; -int CREATURE_SIZE_MEDIUM = 3; -int CREATURE_SIZE_LARGE = 4; -int CREATURE_SIZE_HUGE = 5; - -int CAMERA_MODE_CHASE_CAMERA = 0; -int CAMERA_MODE_TOP_DOWN = 1; -int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; - -int PROJECTILE_PATH_TYPE_DEFAULT = 0; -int PROJECTILE_PATH_TYPE_HOMING = 1; -int PROJECTILE_PATH_TYPE_BALLISTIC = 2; -int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; -int PROJECTILE_PATH_TYPE_ACCELERATING = 4; - -int GAME_DIFFICULTY_VERY_EASY = 0; -int GAME_DIFFICULTY_EASY = 1; -int GAME_DIFFICULTY_NORMAL = 2; -int GAME_DIFFICULTY_CORE_RULES = 3; -int GAME_DIFFICULTY_DIFFICULT = 4; - -int ACTION_MOVETOPOINT = 0; -int ACTION_PICKUPITEM = 1; -int ACTION_DROPITEM = 2; -int ACTION_ATTACKOBJECT = 3; -int ACTION_CASTSPELL = 4; -int ACTION_OPENDOOR = 5; -int ACTION_CLOSEDOOR = 6; -int ACTION_DIALOGOBJECT = 7; -int ACTION_DISABLETRAP = 8; -int ACTION_RECOVERTRAP = 9; -int ACTION_FLAGTRAP = 10; -int ACTION_EXAMINETRAP = 11; -int ACTION_SETTRAP = 12; -int ACTION_OPENLOCK = 13; -int ACTION_LOCK = 14; -int ACTION_USEOBJECT = 15; -int ACTION_ANIMALEMPATHY = 16; -int ACTION_REST = 17; -int ACTION_TAUNT = 18; -int ACTION_ITEMCASTSPELL = 19; -int ACTION_COUNTERSPELL = 31; -int ACTION_HEAL = 33; -int ACTION_PICKPOCKET = 34; -int ACTION_FOLLOW = 35; -int ACTION_WAIT = 36; -int ACTION_SIT = 37; -int ACTION_FOLLOWLEADER = 38; -int ACTION_FOLLOWOWNER = 43; - - -int ACTION_INVALID = 65535; -int ACTION_QUEUEEMPTY = 65534; - -int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; -int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; -int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; -int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; -int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; -int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; -int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; -int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; -int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; -int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; -int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; -int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; -// DJS-OEI 1/20/2004 -int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; -int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; -int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; -int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; -int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; -int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; -int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; -int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; - -int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; -int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; - -int CONVERSATION_TYPE_CINEMATIC = 0; -int CONVERSATION_TYPE_COMPUTER = 1; - -int PLANET_DANTOOINE = 0; -int PLANET_DXUN = 1; -int PLANET_EBON_HAWK = 2; -int PLANET_KORRIBAN = 3; -int PLANET_M4_78 = 4; -int PLANET_MALACHOR_V = 5; -int PLANET_NAR_SHADDAA = 6; -int PLANET_ONDERON = 7; -int PLANET_PERAGUS = 8; -int PLANET_TELOS = 9; -int PLANET_HARBINGER = 10; -int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers -int PLANET_LIVE_02 = 12; -int PLANET_LIVE_03 = 13; -int PLANET_LIVE_04 = 14; -int PLANET_LIVE_05 = 15; -int PLANET_LIVE_06 = 16; - -int NPC_PLAYER =-1; -int NPC_ATTON = 0; -int NPC_BAO_DUR = 1; -int NPC_CANDEROUS = 2; -int NPC_G0T0 = 3; -int NPC_HANDMAIDEN = 4; -int NPC_HK_47 = 5; -int NPC_KREIA = 6; -int NPC_MIRA = 7; -int NPC_T3_M4 = 8; -int NPC_VISAS = 9; -int NPC_HANHARR = 10; -int NPC_DISCIPLE = 11; - -int PUP_SENSORBALL = 0; -int PUP_OTHER1 = 1; -int PUP_OTHER2 = 2; - - -int PARTY_AISTYLE_AGGRESSIVE = 0; -int PARTY_AISTYLE_DEFENSIVE = 1; -int PARTY_AISTYLE_PASSIVE = 2; - -int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_RANGED_ATTACK = 1; -int NPC_AISTYLE_MELEE_ATTACK = 2; -int NPC_AISTYLE_AID = 3; -int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals -int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots -int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack -int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member -int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. -int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. -int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. -int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff -int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. -int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. - -int DISGUISE_TYPE_TEST = 1; -int DISGUISE_TYPE_P_T3M3 = 2; -int DISGUISE_TYPE_P_HK47 = 3; -int DISGUISE_TYPE_P_BASTILLA = 4; -int DISGUISE_TYPE_P_CAND = 5; -int DISGUISE_TYPE_P_CARTH = 6; -int DISGUISE_TYPE_P_JOLEE = 7; -int DISGUISE_TYPE_P_JUHANI = 8; -int DISGUISE_TYPE_P_ZAALBAR = 9; -int DISGUISE_TYPE_P_MISSION = 10; -int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; -int DISGUISE_TYPE_N_BITH = 12; -int DISGUISE_TYPE_N_CALONORD = 13; -int DISGUISE_TYPE_N_COMMF = 14; -int DISGUISE_TYPE_N_COMMKIDF = 15; -int DISGUISE_TYPE_N_COMMKIDM = 16; -int DISGUISE_TYPE_N_COMMM = 17; -int DISGUISE_TYPE_N_CZERLAOFF = 18; -int DISGUISE_TYPE_N_DARKJEDIF = 19; -int DISGUISE_TYPE_N_DARKJEDIM = 20; -int DISGUISE_TYPE_N_DARTHMALAK = 21; -int DISGUISE_TYPE_N_DARTHREVAN = 22; -int DISGUISE_TYPE_N_DODONNA = 23; -int DISGUISE_TYPE_N_DUROS = 24; -int DISGUISE_TYPE_N_FATCOMF = 25; -int DISGUISE_TYPE_N_FATCOMM = 26; -int DISGUISE_TYPE_N_SMUGGLER = 27; -int DISGUISE_TYPE_N_SITHSOLDIER = 28; -// int DISGUISE_TYPE_ = 29; -int DISGUISE_TYPE_N_JEDICOUNTF = 30; -int DISGUISE_TYPE_N_JEDICOUNTM = 31; -int DISGUISE_TYPE_N_JEDIMALEK = 32; -int DISGUISE_TYPE_N_JEDIMEMF = 33; -int DISGUISE_TYPE_N_JEDIMEMM = 34; -int DISGUISE_TYPE_N_MANDALORIAN = 35; -int DISGUISE_TYPE_N_RAKATA = 36; -int DISGUISE_TYPE_N_REPOFF = 37; -int DISGUISE_TYPE_N_REPSOLD = 38; -int DISGUISE_TYPE_N_RODIAN = 39; -int DISGUISE_TYPE_C_SELKATH = 40; -int DISGUISE_TYPE_N_SITHAPPREN = 41; -int DISGUISE_TYPE_N_SITHCOMF = 42; -int DISGUISE_TYPE_N_SITHCOMM = 43; -//int DISGUISE_TYPE_N_SITHSOLDIER = 44; -int DISGUISE_TYPE_N_SWOOPGANG = 45; -int DISGUISE_TYPE_N_TUSKEN = 46; -int DISGUISE_TYPE_N_TWILEKF = 47; -int DISGUISE_TYPE_N_TWILEKM = 48; -int DISGUISE_TYPE_N_WALRUSMAN = 49; -int DISGUISE_TYPE_N_WOOKIEF = 50; -int DISGUISE_TYPE_N_WOOKIEM = 51; -int DISGUISE_TYPE_N_YODA = 52; -int DISGUISE_TYPE_C_BANTHA = 53; -int DISGUISE_TYPE_C_BRITH = 54; -int DISGUISE_TYPE_C_DEWBACK = 55; -int DISGUISE_TYPE_C_DRDASSASSIN = 56; -int DISGUISE_TYPE_C_DRDASTRO = 57; -int DISGUISE_TYPE_C_DRDG = 58; -int DISGUISE_TYPE_C_DRDMKFOUR = 59; -int DISGUISE_TYPE_C_DRDMKONE = 60; -int DISGUISE_TYPE_C_DRDMKTWO = 61; -int DISGUISE_TYPE_C_DRDPROBE = 62; -int DISGUISE_TYPE_C_DRDPROT = 63; -int DISGUISE_TYPE_C_DRDSENTRY = 64; -int DISGUISE_TYPE_C_DRDSPYDER = 65; -int DISGUISE_TYPE_C_DRDWAR = 66; -int DISGUISE_TYPE_C_FIRIXA = 67; -int DISGUISE_TYPE_C_GAMMOREAN = 68; -int DISGUISE_TYPE_C_GIZKA = 69; -int DISGUISE_TYPE_C_HUTT = 70; -int DISGUISE_TYPE_C_IRIAZ = 71; -int DISGUISE_TYPE_C_ITHORIAN = 72; -int DISGUISE_TYPE_C_JAWA = 73; -int DISGUISE_TYPE_C_KATAARN = 74; -int DISGUISE_TYPE_C_KHOUNDA = 75; -int DISGUISE_TYPE_C_KHOUNDB = 76; -int DISGUISE_TYPE_C_KRAYTDRAGON = 77; -int DISGUISE_TYPE_C_MYKAL = 78; -int DISGUISE_TYPE_C_RAKGHOUL = 79; -int DISGUISE_TYPE_C_RANCOR = 80; -int DISGUISE_TYPE_C_SEABEAST = 81; -//int DISGUISE_TYPE_ = 82; -int DISGUISE_TYPE_C_TACH = 83; -int DISGUISE_TYPE_C_TWOHEAD = 84; -int DISGUISE_TYPE_C_VERKAAL = 85; -int DISGUISE_TYPE_C_WRAID = 86; -int DISGUISE_TYPE_C_RONTO = 87; -int DISGUISE_TYPE_C_KINRATH = 88; -int DISGUISE_TYPE_C_TUKATA = 89; -int DISGUISE_TYPE_N_TUSKENF = 90; -int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; -int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; -int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; -int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; -int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; -int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; -int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; -int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; -int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; -int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; -int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; -int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; -int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; -int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; -int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; -int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; -int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; -int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; -int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; -int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; -int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; -int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; -int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; -int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; -int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; -int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; -int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; -int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; -int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; -int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; -int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; -int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; -int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; -int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; -int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; -int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; -int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; -int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; -int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; -int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; -int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; -int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; -int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; -int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; -int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; -int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; -int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; -int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; -int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; -int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; -int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; -int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; -int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; -int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; -int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; -int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; -int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; -int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; -int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; -int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; -int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; -int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; -int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; -int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; -int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; -int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; -int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; -int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; -int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; -int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; -int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; -int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; -int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; -int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; -int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; -int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; -int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; -int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; -int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; -int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; -int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; -int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; -int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; -int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; -int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; -int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; -int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; -int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; -int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; -int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; -int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; -int DISGUISE_TYPE_TURRET = 182; -int DISGUISE_TYPE_TURRET2 = 183; -int DISGUISE_TYPE_N_DARTHBAND = 184; -int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; -int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; -int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; -int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; -int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; -int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; -int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; -int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; -int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; -int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; -int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; -int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; -int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; -int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; -int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; -int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; -int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; -int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; -int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; -int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; -int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; -int DISGUISE_TYPE_HUTT_02 = 228; -int DISGUISE_TYPE_HUTT_03 = 229; -int DISGUISE_TYPE_HUTT_04 = 230; -int DISGUISE_TYPE_DROID_ASTRO_02 = 231; -int DISGUISE_TYPE_DROID_ASTRO_03 = 232; -int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; -int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; -int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; -int DISGUISE_TYPE_DROID_WAR_02 = 236; -int DISGUISE_TYPE_DROID_WAR_03 = 237; -int DISGUISE_TYPE_DROID_WAR_04 = 238; -int DISGUISE_TYPE_DROID_WAR_05 = 239; -int DISGUISE_TYPE_GAMMOREAN_02 = 240; -int DISGUISE_TYPE_GAMMOREAN_03 = 241; -int DISGUISE_TYPE_GAMMOREAN_04 = 242; -int DISGUISE_TYPE_ITHORIAN_02 = 243; -int DISGUISE_TYPE_ITHORIAN_03 = 244; -int DISGUISE_TYPE_KATH_HOUND_A02 = 245; -int DISGUISE_TYPE_KATH_HOUND_A03 = 246; -int DISGUISE_TYPE_KATH_HOUND_A04 = 247; -int DISGUISE_TYPE_KATH_HOUND_B02 = 248; -int DISGUISE_TYPE_KATH_HOUND_B03 = 249; -int DISGUISE_TYPE_KATH_HOUND_B04 = 250; -int DISGUISE_TYPE_WRAID_02 = 251; -int DISGUISE_TYPE_WRAID_03 = 252; -int DISGUISE_TYPE_WRAID_04 = 253; -int DISGUISE_TYPE_RAKATA_02 = 254; -int DISGUISE_TYPE_RAKATA_03 = 255; -int DISGUISE_TYPE_RODIAN_02 = 256; -int DISGUISE_TYPE_RODIAN_03 = 257; -int DISGUISE_TYPE_RODIAN_04 = 258; -int DISGUISE_TYPE_SELKATH_02 = 259; -int DISGUISE_TYPE_SELKATH_03 = 260; -int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; -int DISGUISE_TYPE_SWOOP_GANG_02 = 262; -int DISGUISE_TYPE_SWOOP_GANG_03 = 263; -int DISGUISE_TYPE_SWOOP_GANG_04 = 264; -int DISGUISE_TYPE_SWOOP_GANG_05 = 265; -int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; -int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; -int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; -int DISGUISE_TYPE_TWILEK_MALE_02 = 269; -int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; -int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; -int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; -int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; -int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; -int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; -int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; -int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; -int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; -int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; -int DISGUISE_TYPE_YUTHURA_BAN = 280; -int DISGUISE_TYPE_SHYRACK_01 = 281; -int DISGUISE_TYPE_SHYRACK_02 = 282; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; -int DISGUISE_TYPE_SITH_FEM_WHITE = 291; -int DISGUISE_TYPE_SITH_FEM_BLACK = 292; -int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; -int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; -int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; -int DISGUISE_TYPE_SITH_MAL_WHITE = 296; -int DISGUISE_TYPE_SITH_MAL_BLACK = 297; -int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; -int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; -int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; -int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; -int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; -int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; -int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; -int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; -int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; - -int PLOT_O_DOOM = 0; -int PLOT_O_SCARY_STUFF = 1; -int PLOT_O_BIG_MONSTERS = 2; - -int FORMATION_WEDGE = 0; -int FORMATION_LINE = 1; - -int SUBSCREEN_ID_NONE = 0; -int SUBSCREEN_ID_EQUIP = 1; -int SUBSCREEN_ID_ITEM = 2; -int SUBSCREEN_ID_CHARACTER_RECORD = 3; -int SUBSCREEN_ID_ABILITY = 4; -int SUBSCREEN_ID_MAP = 5; -int SUBSCREEN_ID_QUEST = 6; -int SUBSCREEN_ID_OPTIONS = 7; -int SUBSCREEN_ID_MESSAGES = 8; - -int SHIELD_DROID_ENERGY_1 = 0; -int SHIELD_DROID_ENERGY_2 = 1; -int SHIELD_DROID_ENERGY_3 = 2; -int SHIELD_DROID_ENVIRO_1 = 3; -int SHIELD_DROID_ENVIRO_2 = 4; -int SHIELD_DROID_ENVIRO_3 = 5; -int SHIELD_ENERGY = 6; -int SHIELD_ENERGY_SITH = 7; -int SHIELD_ENERGY_ARKANIAN = 8; -int SHIELD_ECHANI = 9; -int SHIELD_MANDALORIAN_MELEE = 10; -int SHIELD_MANDALORIAN_POWER = 11; -int SHIELD_DUELING_ECHANI = 12; -int SHIELD_DUELING_YUSANIS = 13; -int SHIELD_VERPINE_PROTOTYPE = 14; -int SHIELD_ANTIQUE_DROID = 15; -int SHIELD_PLOT_TAR_M09AA = 16; -int SHIELD_PLOT_UNK_M44AA = 17; -int SHIELD_PLOT_MAN_M28AA = 18; -int SHIELD_HEAT = 19; -int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 - - -int SUBRACE_NONE = 0; -int SUBRACE_WOOKIE = 1; - -int VIDEO_EFFECT_NONE = -1; -int VIDEO_EFFECT_SECURITY_CAMERA = 0; -int VIDEO_EFFECT_FREELOOK_T3M4 = 1; -int VIDEO_EFFECT_FREELOOK_HK47 = 2; -int VIDEO_EFFECT_CLAIRVOYANCE = 3; -int VIDEO_EFFECT_FORCESIGHT = 4; -int VIDEO_EFFECT_VISAS_FREELOOK = 5; -int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; -int VIDEO_EFFECT_FURY_1 = 7; -int VIDEO_EFFECT_FURY_2 = 8; -int VIDEO_EFFECT_FURY_3 = 9; -int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. - -// DJS-OEI 1/14/2004 -// Modified the way these work. The values -// listed here are now direct references to -// rows in Tutorial.2DA. Originally these -// would have to be converted to .2DA ids -// in the code. -int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; -int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; -// DJS-OEI 11/21/2003 -int TUTORIAL_WINDOW_TEMP1 = 42; -int TUTORIAL_WINDOW_TEMP2 = 43; -int TUTORIAL_WINDOW_TEMP3 = 44; -int TUTORIAL_WINDOW_TEMP4 = 45; -int TUTORIAL_WINDOW_TEMP5 = 46; -int TUTORIAL_WINDOW_TEMP6 = 47; -int TUTORIAL_WINDOW_TEMP7 = 48; -int TUTORIAL_WINDOW_TEMP8 = 49; -int TUTORIAL_WINDOW_TEMP9 = 50; -int TUTORIAL_WINDOW_TEMP10 = 51; -int TUTORIAL_WINDOW_TEMP11 = 52; -int TUTORIAL_WINDOW_TEMP12 = 53; -int TUTORIAL_WINDOW_TEMP13 = 54; -int TUTORIAL_WINDOW_TEMP14 = 55; -int TUTORIAL_WINDOW_TEMP15 = 56; - -int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 -int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 -int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 -int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 -int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 - -int MOVEMENT_SPEED_PC = 0; -int MOVEMENT_SPEED_IMMOBILE = 1; -int MOVEMENT_SPEED_VERYSLOW = 2; -int MOVEMENT_SPEED_SLOW = 3; -int MOVEMENT_SPEED_NORMAL = 4; -int MOVEMENT_SPEED_FAST = 5; -int MOVEMENT_SPEED_VERYFAST = 6; -int MOVEMENT_SPEED_DEFAULT = 7; -int MOVEMENT_SPEED_DMFAST = 8; - -int LIVE_CONTENT_PKG1 = 1; -int LIVE_CONTENT_PKG2 = 2; -int LIVE_CONTENT_PKG3 = 3; -int LIVE_CONTENT_PKG4 = 4; -int LIVE_CONTENT_PKG5 = 5; -int LIVE_CONTENT_PKG6 = 6; - -//RWT-OEI 12/16/03 -// These constants are for the Implant Swapping support in a_swapimplant -// They correspond directly with the ACTIONIDs in the game for each of the -// implant swapping actions. -int IMPLANT_NONE = 0; -int IMPLANT_REGEN = 1; -int IMPLANT_STR = 2; -int IMPLANT_END = 3; -int IMPLANT_AGI = 4; - -// DJS-OEI 6/12/2004 -// These constants can be OR'ed together and sent to SetForfeitConditions() -// in order to set up flagging situations that will alert the area script that -// the player has violated them. This is usually used for Battle Arena restrictions. -int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers -int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) -int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. -int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start - // of one of the Dxun Battle Circle fights, or no weapon at all. -int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. -int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. -int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. -int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. - -string sLanguage = "nwscript"; - - -// 0: Get an integer between 0 and nMaxInteger-1. -// Return value on error: 0 -int Random(int nMaxInteger); - -// 1: Output sString to the log file. -void PrintString(string sString); - -// 2: Output a formatted float to the log file. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); - -// 3: Convert fFloat into a string. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); - -// 4: Output nInteger to the log file. -void PrintInteger(int nInteger); - -// 5: Output oObject's ID to the log file. -void PrintObject(object oObject); - -// 6: Assign aActionToAssign to oActionSubject. -// * No return value, but if an error occurs, the log file will contain -// "AssignCommand failed." -// (If the object doesn't exist, nothing happens.) -void AssignCommand(object oActionSubject,action aActionToAssign); - -// 7: Delay aActionToDelay by fSeconds. -// * No return value, but if an error occurs, the log file will contain -// "DelayCommand failed.". -void DelayCommand(float fSeconds, action aActionToDelay); - -// 8: Make oTarget run sScript and then return execution to the calling script. -// If sScript does not specify a compiled script, nothing happens. -// - nScriptVar: This value will be returned by calls to GetRunScriptVar. -void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); - -// 9: Clear all the actions of the caller. (This will only work on Creatures) -// * No return value, but if an error occurs, the log file will contain -// "ClearAllActions failed.". -void ClearAllActions(); - -// 10: Cause the caller to face fDirection. -// - fDirection is expressed as anticlockwise degrees from Due East. -// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are -// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -void SetFacing(float fDirection); - -// 11: Switches the main character to a specified NPC -// -1 specifies to switch back to the original PC -int SwitchPlayerCharacter(int nNPC); - -// 12: Set the time to the time specified. -// - nHour should be from 0 to 23 inclusive -// - nMinute should be from 0 to 59 inclusive -// - nSecond should be from 0 to 59 inclusive -// - nMillisecond should be from 0 to 999 inclusive -// 1) Time can only be advanced forwards; attempting to set the time backwards -// will result in the day advancing and then the time being set to that -// specified, e.g. if the current hour is 15 and then the hour is set to 3, -// the day will be advanced by 1 and the hour will be set to 3. -// 2) If values larger than the max hour, minute, second or millisecond are -// specified, they will be wrapped around and the overflow will be used to -// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds -// and 10 milliseconds will result in the calendar day being advanced by 2 -// and the time being set to 18 hours, 10 minutes, 10 milliseconds. -void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); - -// 13: Sets (by NPC constant) which party member should be the controlled -// character -int SetPartyLeader(int nNPC); - -// 14: Sets whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -void SetAreaUnescapable(int bUnescapable); - -// 15: Returns whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -int GetAreaUnescapable(); - -// 16: Get the current hour. -int GetTimeHour(); - -// 17: Get the current minute -int GetTimeMinute(); - -// 18: Get the current second -int GetTimeSecond(); - -// 19: Get the current millisecond -int GetTimeMillisecond(); - -// 20: The action subject will generate a random location near its current location -// and pathfind to it. All commands will remove a RandomWalk() from the action -// queue if there is one in place. -// * No return value, but if an error occurs the log file will contain -// "ActionRandomWalk failed." -void ActionRandomWalk(); - -// 21: The action subject will move to lDestination. -// - lDestination: The object will move to this location. If the location is -// invalid or a path cannot be found to it, the command does nothing. -// - bRun: If this is TRUE, the action subject will run rather than walk -// * No return value, but if an error occurs the log file will contain -// "MoveToPoint failed." -void ActionMoveToLocation(location lDestination, int bRun=FALSE); - -// 22: Cause the action subject to move to a certain distance from oMoveTo. -// If there is no path to oMoveTo, this command will do nothing. -// - oMoveTo: This is the object we wish the action subject to move to -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fRange: This is the desired distance between the action subject and oMoveTo -// * No return value, but if an error occurs the log file will contain -// "ActionMoveToObject failed." -void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); - -// 23: Cause the action subject to move to a certain distance away from oFleeFrom. -// - oFleeFrom: This is the object we wish the action subject to move away from. -// If oFleeFrom is not in the same area as the action subject, nothing will -// happen. -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fMoveAwayRange: This is the distance we wish the action subject to put -// between themselves and oFleeFrom -// * No return value, but if an error occurs the log file will contain -// "ActionMoveAwayFromObject failed." -void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 24: Get the area that oTarget is currently in -// * Return value on error: OBJECT_INVALID -object GetArea(object oTarget); - -// 25: The value returned by this function depends on the object type of the caller: -// 1) If the caller is a door or placeable it returns the object that last -// triggered it. -// 2) If the caller is a trigger, area of effect, module, area or encounter it -// returns the object that last entered it. -// * Return value on error: OBJECT_INVALID -object GetEnteringObject(); - -// 26: Get the object that last left the caller. This function works on triggers, -// areas of effect, modules, areas and encounters. -// * Return value on error: OBJECT_INVALID -object GetExitingObject(); - -// 27: Get the position of oTarget -// * Return value on error: vector (0.0f, 0.0f, 0.0f) -vector GetPosition(object oTarget); - -// 28: Get the direction in which oTarget is facing, expressed as a float between -// 0.0f and 360.0f -// * Return value on error: -1.0f -float GetFacing(object oTarget); - -// 29: Get the possessor of oItem -// * Return value on error: OBJECT_INVALID -object GetItemPossessor(object oItem); - -// 30: Get the object possessed by oCreature with the tag sItemTag -// * Return value on error: OBJECT_INVALID -object GetItemPossessedBy(object oCreature, string sItemTag); - -// 31: Create an item with the template sItemTemplate in oTarget's inventory. -// - nStackSize: This is the stack size of the item to be created -// * Return value: The object that has been created. On error, this returns -// OBJECT_INVALID. -//RWT-OEI 12/16/03 - Added the bHideMessage parameter -object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); - -// 32: Equip oItem into nInventorySlot. -// - nInventorySlot: INVENTORY_SLOT_* -// * No return value, but if an error occurs the log file will contain -// "ActionEquipItem failed." -void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); - -// 33: Unequip oItem from whatever slot it is currently in. -void ActionUnequipItem( object oItem, int bInstant = FALSE ); - -// 34: Pick up oItem from the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPickUpItem failed." -void ActionPickUpItem(object oItem); - -// 35: Put down oItem on the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPutDownItem failed." -void ActionPutDownItem(object oItem); - -// 36: Get the last attacker of oAttackee. This should only be used ONLY in the -// OnAttacked events for creatures, placeables and doors. -// * Return value on error: OBJECT_INVALID -object GetLastAttacker(object oAttackee=OBJECT_SELF); - -// 37: Attack oAttackee. -// - bPassive: If this is TRUE, attack is in passive mode. -void ActionAttack(object oAttackee, int bPassive=FALSE); - -// 38: Get the creature nearest to oTarget, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -// DJS-OEI 8/26/2004 -// Added a parameter for the percentage of HP the target -// should receive when they are revived. -effect EffectResurrection( int nHPPercent=0 ); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). -// This can be called by a creature or by an Area of Effect object. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature -// dies. Note that NO XP will be awarded if the creature is killed with this parameter. -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust -// the playercharacter's alignment without impacting the rest of the NPCs -void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. -// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the feat due to daily limits or -// other restrictions. Use GetFeatAcquired() if you just want to -// know if they've got it or not. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then -//this function will only return true if the character is in REAL combat. -//If you don't know what that means, don't pass in TRUE. -int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. -// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* -// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen -// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able -// to access Item Upgrading. -void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the spell due to lack of sufficient -// Force Points. Use GetSpellAcquired() if you just want to -// know if they've got it or not. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// nWindow - A row index from Tutorial.2DA specifying the message to display. -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); - - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 20 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 20 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 12 and 28 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 12 and 28 -// the value range is 0 to 255 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -// nNPC - NPC_ -// returns 1 if in current party, 0 if selectable as a party member -// -1 if not in party at all -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE -// to this parameter makes it possible for the player to cancel out -// of the party selection GUI, so be careful that you are okay with -// them cancelling out of it before you pass TRUE. -// Also, in the sExitScript that gets called after the Party Select -// GUI exits, you can use GetRunScriptVar to find out if they -// cancelled. If it returns TRUE, they didn't cancel. If it returns -// FALSE, they cancelled. See me if there's questions. -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(int nNPC, object oidNPC); - -// DJS-OEI -// 768. GetScriptParameter -// This function will take the index of a script parameter -// and return the value associated with it. The index -// of the first parameter is 1. -int GetScriptParameter( int nIndex ); - -//RWT-OEI 12/10/03 -// 769. SetFadeUntilScript -// This script function will make it so that the fade cannot be lifted under any circumstances -// other than a call to the SetGlobalFadeIn() script. -// This function should be called AFTER the fade has already been called. For example, you would -// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() -// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new -// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript -// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. -void SetFadeUntilScript(); - -// DJS-OEI 12/15/2003 -// 770: Create a Force Body effect -// - nLevel: The level of the Force Body effect. -// 0 = Force Body -// 1 = Improved Force Body -// 2 = Master Force Body -effect EffectForceBody(int nLevel); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item -int GetItemComponent( ); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item in pieces -int GetItemComponentPieceValue( ); - -// FAK-OEI 12/15/2003 -// 773: Start the GUI for Chemical Workshop -void ShowChemicalUpgradeScreen(object oCharacter ); - -// FAK-OEI 12/15/2003 -// 774: Get the number of chemicals for an item -int GetChemicals( ); - -// FAK-OEI 12/15/2003 -// 775: Get the number of chemicals for an item in pieces -int GetChemicalPieceValue( ); - -// DJS-OEI 12/30/2003 -// 776: Get the number of Force Points that were required to -// cast this spell. This includes modifiers such as Room Force -// Ratings and the Force Body power. -// * Return value on error: 0 -int GetSpellForcePointCost( ); - -// DJS-OEI 1/2/2004 -// 777: Create a Fury effect. -effect EffectFury(); - -// DJS-OEI 1/3/2004 -// 778: Create a Blind effect. -effect EffectBlind(); - -// DJS-OEI 1/4/2004 -// 779: Create an FP regeneration modifier effect. -effect EffectFPRegenModifier( int nPercent ); - -// DJS-OEI 1/4/2004 -// 780: Create a VP regeneration modifier effect. -effect EffectVPRegenModifier( int nPercent ); - -// DJS-OEI 1/9/2004 -// 781: Create a Force Crush effect. -effect EffectCrush(); - -// FAK - OEI 1/12/04 -// 782: Minigame grabs a swoop bike upgrade -int SWMG_GetSwoopUpgrade( int nSlot ); - -// DJS-OEI 1/12/2004 -// 783: Returns whether or not the target has access to a feat, -// even if they can't use it right now due to daily limits or -// other restrictions. -int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); - -// DJS-OEI 1/12/2004 -// 784: Returns whether or not the target has access to a spell, -// even if they can't use it right now due to lack of Force Points. -int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); - -// FAK-OEI 1/12/2004 -// 785: Displays the Swoop Bike upgrade screen. -void ShowSwoopUpgradeScreen( ); - -// DJS-OEI 1/13/2004 -// 786: Grants the target a feat without regard for prerequisites. -void GrantFeat( int nFeat, object oCreature ); - -// DJS-OEI 1/13/2004 -// 787: Grants the target a spell without regard for prerequisites. -void GrantSpell( int nSpell, object oCreature ); - -// DJS-OEI 1/13/2004 -// 788: Places an active mine on the map. -// nMineType - Mine Type from Traps.2DA -// lPoint - The location in the world to place the mine. -// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA -// results in the final DC for creatures to detect this mine. -// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA -// results in the final DC for creatures to disarm this mine. -// oCreator - The object that should be considered the owner of the mine. -// If oCreator is set to OBJECT_INVALID, the faction of the mine will be -// considered Hostile1, meaning the party will be vulnerable to it. -void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); - -// FAK - OEI 1/15/04 -// 789: Yet another minigame function. Returns the object's track's position. -vector SWMG_GetTrackPosition(object oFollower); - -// FAK - OEI 1/15/04 -// 790: minigame function that lets you psuedo-set the position of a follower object -vector SWMG_SetFollowerPosition(vector vPos); - -//RWT-OEI 01/16/04 -// 791: A function to put the character into a true combat state but the reason set to -// not real combat. This should help us control animations in cutscenes with a bit -// more precision. -- Not totally sure this is doing anything just yet. Seems -// the combat condition gets cleared shortly after anyway. -// If nEnable is 1, it enables fake combat mode. If 0, it disables it. -// WARNING: Whenever using this function to enable fake combat mode, you should -// have a matching call to it to disable it. (pass 0 for nEnable). -void SetFakeCombatState( object oObject, int nEnable ); - -// FAK - OEI 1/23/04 -// 792: minigame function that deletes a minigame object -void SWMG_DestroyMiniGameObject(object oObject); - -// DJS-OEI 1/26/2004 -// 793: Returns the Demolitions skill of the creature that -// placed this mine. This will often be 0. This function accepts -// the object that the mine is attached to (Door, Placeable, or Trigger) -// and will determine which one it actually is at runtime. -int GetOwnerDemolitionsSkill( object oObject ); - -// RWT-OEI 01/29/04 -// 794: Disables or Enables the Orient On Click behavior in creatures. If -// disabled, they will not orient to face the player when clicked on -// for dialogue. The default behavior is TRUE. -void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); - -// DJS-OEI 1/29/2004 -// 795: Gets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, the return -// value with be 0. If the character is in the party, but has an -// attitude of Ambivalent, this will be -1. -int GetInfluence( int nNPC ); - -// DJS-OEI 1/29/2004 -// 796: Sets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nInfluence - The new value for the influence on this CNPC. -void SetInfluence( int nNPC, int nInfluence ); - -// DJS-OEI 1/29/2004 -// 797: Modifies the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nModifier - The modifier to the current influence on this CNPC. -// This may be a negative value to reduce the influence. -void ModifyInfluence( int nNPC, int nModifier ); - -// FAK - OEI 2/3/04 -// 798: returns the racial sub-type of the oTarget object -int GetRacialSubType(object oTarget); - -// DJS-OEI 2/3/2004 -// 799: Increases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is greater than the max -// of 127. -void IncrementGlobalNumber( string sIdentifier, int nAmount ); - -// DJS-OEI 2/3/2004 -// 800: Decreases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is less than the minimum -// of -128. -void DecrementGlobalNumber( string sIdentifier, int nAmount ); - -// RWT-OEI 02/06/04 -// 801: SetBonusForcePoints - This sets the number of bonus force points -// that will always be added to that character's total calculated -// force points. -void SetBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 802: AddBonusForcePoints - This adds nBonusFP to the current total -// bonus that the player has. The Bonus Force Points are a pool -// of force points that will always be added after the player's -// total force points are calculated (based on level, force dice, -// etc.) -void AddBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 803: GetBonusForcePoints - This returns the total number of bonus -// force points a player has. Bonus Force Points are a pool of -// points that are always added to a player's Max Force Points. -// ST: Please explain how a function returning VOID could return a -// numerical value? Hope it works changing the return type... -// void GetBonusForcePoints( object oCreature ); -int GetBonusForcePoints( object oCreature ); - -// FAK - OEI 2/11/04 -// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop -// bike races. Gravity will act upon this velocity. -void SWMG_SetJumpSpeed(float fSpeed); - -// PC CODE MERGER -// 805. IsMoviePlaying--dummy func so we can compile -int IsMoviePlaying(); - -// 806 QueueMovie -void QueueMovie(string sMovie, int nSkippable = TRUE); - -// 807 -void PlayMovieQueue(int nAllowSkips = TRUE); - -// 808 -void YavinHackDoorClose(object oCreature); - -// 809 -// new function for droid confusion so inherint mind immunity can be -// avoided. -effect EffectDroidConfused(); -// END PC CODE MERGER - -// 810 -// DJS-OEI 3/8/2004 -// Determines if the given creature is in Stealth mode or not. -// 0 = Creature is not stealthed. -// 1 = Creature is stealthed. -// This function will return 0 for any non-creature. -int IsStealthed( object oCreature ); - -// 811 -// DJS-OEI 3/12/2004 -// Determines if the given creature is using any Meditation Tree -// Force Power. -// 0 = Creature is not meditating. -// 1 = Creature is meditating. -// This function will return 0 for any non-creature. -int IsMeditating( object oCreature ); - -// 812 -// DJS-OEI 3/16/2004 -// Determines if the given creature is using the Total Defense -// Stance. -// 0 = Creature is not in Total Defense. -// 1 = Creature is in Total Defense. -// This function will return 0 for any non-creature. -int IsInTotalDefense( object oCreature ); - -// 813 -// RWT-OEI 03/19/04 -// Stores a Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -void SetHealTarget( object oidHealer, object oidTarget ); - -// 814 -// RWT-OEI 03/19/04 -// Retrieves the Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -object GetHealTarget( object oidHealer ); - -// 815 -// RWT-OEI 03/23/04 -// Returns a vector containing a random destination that the -// given creature can walk to that's within the range of the -// passed parameter. -vector GetRandomDestination( object oCreature, int rangeLimit ); - -// 816 -// DJS-OEI 3/25/2004 -// Returns whether the given creature is currently in the -// requested Lightsaber/Consular Form and can make use of -// its benefits. This function will perform trumping checks -// and lightsaber-wielding checks for those Forms that require -// them. -int IsFormActive( object oCreature, int nFormID ); - -// 817 -// DJS-OEI 3/28/2004 -// Returns the Form Mask of the requested spell. This is used -// to determine if a spell is affected by various Forms, usually -// Consular forms that modify duration/range. -int GetSpellFormMask( int nSpellID ); - -// 818 -// DJS-OEI 3/29/2004 -// Return the base number of Force Points required to cast -// the given spell. This does not take into account modifiers -// of any kind. -int GetSpellBaseForcePointCost( int nSpellID ); - -// 819 -// RWT-OEI 04/05/04 -// Setting this to TRUE makes it so that the Stealth status is -// left on characters even when entering cutscenes. By default, -// stealth is removed from anyone taking part in a cutscene. -// ALWAYS set this back to FALSE on every End Dialog node in -// the cutscene you wanted to stay stealthed in. This isn't a -// flag that should be left on indefinitely. In fact, it isn't -// saved, so needs to be set/unset on a case by case basis. -void SetKeepStealthInDialog( int nStealthState ); - -// 820 -// RWT-OEI 04/06/04 -// This returns TRUE or FALSE if there is a clear line of sight from -// the source vector to the target vector. This is used in the AI to -// help the creatures using ranged weapons find better places to shoot -// when the player moves out of sight. -int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); - -// 821 -// FAK - OEI 5/3/04 -// ShowDemoScreen, displays a texture, timeout, string and xy for string -int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); - -// 822 -// DJS-OEI 5/4/2004 -// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES -// AT THE MOMENT. This heartbeat should force perception updates to occur. -void ForceHeartbeat( object oCreature ); - -// 823 -// DJS-OEI 5/5/2004 -// Creates a Force Sight effect. -effect EffectForceSight(); - -// 824 -// FAK - OEI 5/7/04 -// gets the walk state of the creature: 0 walk or standing, 1 is running -int IsRunning( object oCreature ); - -// 825 -// FAK - OEI 5/24/04 -// applies a velocity to the player object -void SWMG_PlayerApplyForce(vector vForce); - -// 826 -// DJS-OEI 6/12/2004 -// This function allows a script to set the conditions which constitute -// a combat forfeit by a member of the player's party. This is typically -// used to handle Battle Circle behavior or other challenge-based combats. -// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. -void SetForfeitConditions( int nForfeitFlags ); - -// 827 -// DJS-OEI 6/12/2004 -// This function returns the last FORFEIT_* condition that the player -// has violated. -int GetLastForfeitViolation(); - -// 828 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the REFLEX saving throw for aObject -void ModifyReflexSavingThrowBase(object aObject, int aModValue); - -// 829 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the FORTITUDE saving throw for aObject -void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); - -// 830 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the WILL saving throw for aObject -void ModifyWillSavingThrowBase(object aObject, int aModValue); - -// DJS-OEI 6/21/2004 -// 831 -// This function will return the one CExoString parameter -// allowed for the currently running script. -string GetScriptStringParameter(); - -// 832 -// AWD-OEI 6/29/2004 -// This function returns the personal space value of an object -float GetObjectPersonalSpace(object aObject); - -// 833 -// AWD-OEI 7/06/2004 -// This function adjusts a creatures stats. -// oObject is the creature that will have it's attribute adjusted -// The following constants are acceptable for the nAttribute parameter: -// ABILITY_STRENGTH -// ABILITY_DEXTERITY -// ABILITY_CONSTITUTION -// ABILITY_INTELLIGENCE -// ABILITY_WISDOM -// ABILITY_CHARISMA -// nAmount is the integer vlaue to adjust the stat by (negative values will work). -void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); - -// 834 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void SetCreatureAILevel(object oObject, int nPriority); - -// 835 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void ResetCreatureAILevel(object oObject); - -// 836 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// template. -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); - -// 837 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// creature ID -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByObject( int nPUP, object oPuppet ); - -// 838 -// RWT-OEI 07/17/04 -// This function assigns a PUPPET constant to a -// Party NPC. The party NPC -MUST- be in the game -// before calling this. -// Both the PUP and the NPC have -// to be available in their respective tables -// Returns 1 if successful, 0 if there was an error -int AssignPUP( int nPUP, int nNPC ); - -// 839 -// RWT-OEI 07/17/04 -// This function spawns a Party PUPPET. -// This must be used whenever you want a copy -// of the puppet around to manipulate in the game -// since the puppet is stored in the party table -// just like NPCs are. Once a puppet is assigned -// to a party NPC (see AssignPUP), it will spawn -// or disappear whenever its owner joins or leaves -// the party. -// This does not add it to the party automatically, -// just like SpawnNPC doesn't. You must call AddPuppet() -// to actually add it to the party -object SpawnAvailablePUP( int nPUP, location lLocation ); - -// 840 -// RWT-OEI 07/18/04 -// This adds an existing puppet object to the party. The -// puppet object must already exist via SpawnAvailablePUP -// and must already be available via AddAvailablePUP* -// functions. -int AddPartyPuppet(int nPUP, object oidCreature); - -// 841 -// RWT-OEI 07/19/04 -// This returns the object ID of the puppet's owner. -// The Puppet's owner must exist and must be in the party -// in order to be found. -// Returns invalid object Id if the owner cannot be found. -object GetPUPOwner(object oPUP = OBJECT_SELF); - -// 842 -// RWT-OEI 07/19/04 -// Returns 1 if the creature is a Puppet in the party. -// Otherwise returns 0. It is possible for a 'party puppet' -// to exist without actually being in the party table. -// such as when SpawnAvailablePUP is used without subsequently -// using AddPartyPuppet to add the newly spawned puppet to -// the party table. A puppet in that in-between state would -// return 0 from this function -int GetIsPuppet(object oPUP = OBJECT_SELF ); - -// 843 -// RWT-OEI 07/20/04 -// Similiar to ActionFollowLeader() except the creature -// follows its owner -//nRange is how close it should follow. Note that once this -//action is queued, it will be the only thing this creature -//does until a ClearAllActions() is used. -void ActionFollowOwner(float fRange = 2.5); - -// 844 -// RWT-OEI 07/21/04 -// Returns TRUE if the object ID passed is the character -// that the player is actively controlling at that point. -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -int GetIsPartyLeader(object oCharacter = OBJECT_SELF); - -// 845 -// RWT-OEI 07/21/04 -// Returns the object ID of the character that the player -// is actively controlling. This is the 'Party Leader'. -// Returns object Invalid on error -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -object GetPartyLeader(); - -// 846 -// JAB-OEI 07/22/04 -// Will remove the CNPC from the 3 person party, and remove -// him/her from the area, effectively sending the CNPC back -// to the base. The CNPC data is still stored in the -// party table, and calling this function will not destroy -// the CNPC in any way. -// Returns TRUE for success. -int RemoveNPCFromPartyToBase(int nNPC); - -// 847 -// AWD-OEI 7/22/2004 -// This causes a creature to flourish with it's currently equipped weapon. -void CreatureFlourishWeapon(object oObject); - -// 848 -// Create a Mind Trick effect -effect EffectMindTrick(); - -// 849 -// Create a Faction Modifier effect. -effect EffectFactionModifier( int nNewFaction ); - -// 850 -// ChangeObjectAppearance -// oObjectToChange = Object to change appearance of -// nAppearance = appearance to change to (from appearance.2da) -void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); - -// 851 -// GetIsXBox -// Returns TRUE if this script is being executed on the X-Box. Returns FALSE -// if this is the PC build. -int GetIsXBox(); - -// 852 -// Create a Droid Scramble effect -effect EffectDroidScramble(); - -// 853 -// ActionSwitchWeapons -// Forces the creature to switch between Config 1 and Config 2 -// of their equipment. Does not work in dialogs. Works with -// AssignCommand() -void ActionSwitchWeapons(); - -// 854 -// DJS-OEI 8/29/2004 -// PlayOverlayAnimation -// This function will play an overlay animation on a character -// even if the character is moving. This does not cause an action -// to be placed on the queue. The animation passed in must be -// designated as an overlay in Animations.2DA. -void PlayOverlayAnimation( object oTarget, int nAnimation ); - -// 855 -// RWT-OEI 08/30/04 -// UnlockAllSongs -// Calling this will set all songs as having been unlocked. -// It is INTENDED to be used in the end-game scripts to unlock -// any end-game songs as well as the KotOR1 sound track. -void UnlockAllSongs(); - -// 856 -// RWT-OEI 08/31/04 -// Passing TRUE into this function turns off the player's maps. -// Passing FALSE into this function re-enables them. This change -// is permanent once called, so it is important that there *is* -// a matching call to DisableMap(FALSE) somewhere or else the -// player is stuck without a map indefinitely. -void DisableMap(int nFlag = FALSE); - -// 857 -// RWT-OEI 08/31/04 -// This function schedules a mine to play its DETONATION -// animation once it is destroyed. Note that this detonates -// the mine immediately but has nothing to do with causing -// the mine to do any damage to anything around it. To -// get the mine to damage things around it when it detonates -// do: -// AssignCommand(,ExecuteScript( "k_trp_generic",)); -// right before you call DetonateMine(). By my experience so far -// you don't need any kind of delay between the two. -void DetonateMine(object oMine); - -// 858 -// RWT-OEI 09/06/04 -// This function turns off the innate health regeneration that all party -// members have. The health regen will *stay* off until it is turned back -// on by passing FALSE to this function. -void DisableHealthRegen(int nFlag = FALSE); - -// 859 -// DJS-OEI 9/7/2004 -// This function sets the current Jedi Form on the given creature. This -// call will do nothing if the target does not know the Form itself. -void SetCurrentForm( object oCreature, int nFormID ); - -// 860 -// RWT-OEI 09/09/04 -// This will disable or enable area transit -void SetDisableTransit(int nFlag = FALSE); - -// 861 -//RWT-OEI 09/09/04 -// This will set the specific input class. -// The valid options are: -// 0 - Normal PC control -// 1 - Mini game control -// 2 - GUI control -// 3 - Dialog Control -// 4 - Freelook control -void SetInputClass(int nClass); - -// 862 -//RWT-OEI 09/15/04 -// This script allows an object to recieve updates even if it is outside -//the normal range limit of 250.0f meters away from the player. This should -//ONLY be used for cutscenes that involve objects that are more than 250 -//meters away from the player. It needs to be used on a object by object -//basis. -//This flag should *always* be set to false once the cutscene it is needed -//for is over, or else the game will spend CPU time updating the object -//when it doesn't need to. -//For questions on use of this function, or what its purpose is, check -//with me. -void SetForceAlwaysUpdate(object oObject, int nFlag); - -//863 -//RWT-OEI 09/15/04 -//This function enables or disables rain -void EnableRain( int nFlag ); - -//864 -//RWT-OEI 09/27/04 -//This function displays the generic Message Box with the strref -//message in it -//sIcon is the resref for an icon you would like to display. -void DisplayMessageBox(int nStrRef, string sIcon = ""); - -//865 -//RWT-OEI 09/28/04 -//This function displays a datapad popup. Just pass it the -//object ID of a datapad. -void DisplayDatapad(object oDatapad); - -// 866 -// CTJ-OEI 09-29-04 -// Removes the heartbeat script on the placeable. Useful for -// placeables whose contents get populated in the heartbeat -// script and then the heartbeat no longer needs to be called. -void RemoveHeartbeat(object oPlaceable); - - -//867 -// JF-OEI 10-07-2004 -// Remove an effect by ID -void RemoveEffectByID( object oCreature, int nEffectID ); - -//868 -// RWT-OEI 10/07/04 -// This script removes an effect by an identical match -// based on: -// Must have matching EffectID types. -// Must have the same value in Integer(0) -// Must have the same value in Integer(1) -// I'm specifically using this function for Mandalore's implant swapping -// script and it will probably not be useful for anyone else. If you're -// not sure what this script function does, see me before using it. -void RemoveEffectByExactMatch( object oCreature, effect eEffect); - -// 869 -// DJS-OEI 10/9/2004 -// This function adjusts a creature's skills. -// oObject is the creature that will have its skill adjusted -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// nAmount is the integer value to adjust the stat by (negative values will work). -void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); - -// 870 -// DJS-OEI 10/10/2004 -// This function returns the base Skill Rank for the requested -// skill. It does not include modifiers from effects/items. -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// oObject is the creature that will have its skill base returned. -int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); - -// 871 -// DJS-OEI 10/15/2004 -// This function will allow the caller to modify the rendering behavior -// of the target object. -// oObject - The object to change rendering state on. -// bEnable - If 0, the object will stop rendering. Else, the object will render. -void EnableRendering( object oObject, int bEnable ); - -// 872 -// RWT-OEI 10/19/04 -// This function returns TRUE if the creature has actions in its -// Combat Action queue. -int GetCombatActionsPending(object oCreature); - -// 873 -// RWT-OEI 10/26/04 -// This function saves the party member at that index with the object -// that is passed in. -void SaveNPCByObject( int nNPC, object oidCharacter); - -// 874 -// RWT-OEI 10/26/04 -// This function saves the party puppet at that index with the object -// that is passed in. For the Remote, just use '0' for nPUP -void SavePUPByObject( int nPUP, object oidPuppet ); - -// 875 -// RWT-OEI 10/29/04 -// Returns TRUE if the object passed in is the character that the player -// made at the start of the game -int GetIsPlayerMadeCharacter(object oidCharacter); - -// 876 -// RWT-OEI 11/12/04 -// This repopulates the NPCObject table in CSWPartyTable. Do not use this -// unless you understand exactly what it is doing. -void RebuildPartyTable(); diff --git a/TSL/nwnnsscomp/KTool/nwnnsscomp.exe b/TSL/nwnnsscomp/KTool/nwnnsscomp.exe deleted file mode 100644 index ff8140fe25306725263b249f0f60656550b0749e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266240 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

yHU#pT_#B(`_;`PmclN(P4A#>B)7^-l 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≈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 CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -// DJS-OEI 8/26/2004 -// Added a parameter for the percentage of HP the target -// should receive when they are revived. -effect EffectResurrection( int nHPPercent=0 ); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). -// This can be called by a creature or by an Area of Effect object. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature -// dies. Note that NO XP will be awarded if the creature is killed with this parameter. -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust -// the playercharacter's alignment without impacting the rest of the NPCs -void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. -// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the feat due to daily limits or -// other restrictions. Use GetFeatAcquired() if you just want to -// know if they've got it or not. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then -//this function will only return true if the character is in REAL combat. -//If you don't know what that means, don't pass in TRUE. -int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. -// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* -// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen -// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able -// to access Item Upgrading. -void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the spell due to lack of sufficient -// Force Points. Use GetSpellAcquired() if you just want to -// know if they've got it or not. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// nWindow - A row index from Tutorial.2DA specifying the message to display. -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); - - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 20 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 20 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 12 and 28 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 12 and 28 -// the value range is 0 to 255 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -// nNPC - NPC_ -// returns 1 if in current party, 0 if selectable as a party member -// -1 if not in party at all -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE -// to this parameter makes it possible for the player to cancel out -// of the party selection GUI, so be careful that you are okay with -// them cancelling out of it before you pass TRUE. -// Also, in the sExitScript that gets called after the Party Select -// GUI exits, you can use GetRunScriptVar to find out if they -// cancelled. If it returns TRUE, they didn't cancel. If it returns -// FALSE, they cancelled. See me if there's questions. -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(int nNPC, object oidNPC); - -// DJS-OEI -// 768. GetScriptParameter -// This function will take the index of a script parameter -// and return the value associated with it. The index -// of the first parameter is 1. -int GetScriptParameter( int nIndex ); - -//RWT-OEI 12/10/03 -// 769. SetFadeUntilScript -// This script function will make it so that the fade cannot be lifted under any circumstances -// other than a call to the SetGlobalFadeIn() script. -// This function should be called AFTER the fade has already been called. For example, you would -// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() -// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new -// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript -// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. -void SetFadeUntilScript(); - -// DJS-OEI 12/15/2003 -// 770: Create a Force Body effect -// - nLevel: The level of the Force Body effect. -// 0 = Force Body -// 1 = Improved Force Body -// 2 = Master Force Body -effect EffectForceBody(int nLevel); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item -int GetItemComponent( ); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item in pieces -int GetItemComponentPieceValue( ); - -// FAK-OEI 12/15/2003 -// 773: Start the GUI for Chemical Workshop -void ShowChemicalUpgradeScreen(object oCharacter ); - -// FAK-OEI 12/15/2003 -// 774: Get the number of chemicals for an item -int GetChemicals( ); - -// FAK-OEI 12/15/2003 -// 775: Get the number of chemicals for an item in pieces -int GetChemicalPieceValue( ); - -// DJS-OEI 12/30/2003 -// 776: Get the number of Force Points that were required to -// cast this spell. This includes modifiers such as Room Force -// Ratings and the Force Body power. -// * Return value on error: 0 -int GetSpellForcePointCost( ); - -// DJS-OEI 1/2/2004 -// 777: Create a Fury effect. -effect EffectFury(); - -// DJS-OEI 1/3/2004 -// 778: Create a Blind effect. -effect EffectBlind(); - -// DJS-OEI 1/4/2004 -// 779: Create an FP regeneration modifier effect. -effect EffectFPRegenModifier( int nPercent ); - -// DJS-OEI 1/4/2004 -// 780: Create a VP regeneration modifier effect. -effect EffectVPRegenModifier( int nPercent ); - -// DJS-OEI 1/9/2004 -// 781: Create a Force Crush effect. -effect EffectCrush(); - -// FAK - OEI 1/12/04 -// 782: Minigame grabs a swoop bike upgrade -int SWMG_GetSwoopUpgrade( int nSlot ); - -// DJS-OEI 1/12/2004 -// 783: Returns whether or not the target has access to a feat, -// even if they can't use it right now due to daily limits or -// other restrictions. -int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); - -// DJS-OEI 1/12/2004 -// 784: Returns whether or not the target has access to a spell, -// even if they can't use it right now due to lack of Force Points. -int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); - -// FAK-OEI 1/12/2004 -// 785: Displays the Swoop Bike upgrade screen. -void ShowSwoopUpgradeScreen( ); - -// DJS-OEI 1/13/2004 -// 786: Grants the target a feat without regard for prerequisites. -void GrantFeat( int nFeat, object oCreature ); - -// DJS-OEI 1/13/2004 -// 787: Grants the target a spell without regard for prerequisites. -void GrantSpell( int nSpell, object oCreature ); - -// DJS-OEI 1/13/2004 -// 788: Places an active mine on the map. -// nMineType - Mine Type from Traps.2DA -// lPoint - The location in the world to place the mine. -// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA -// results in the final DC for creatures to detect this mine. -// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA -// results in the final DC for creatures to disarm this mine. -// oCreator - The object that should be considered the owner of the mine. -// If oCreator is set to OBJECT_INVALID, the faction of the mine will be -// considered Hostile1, meaning the party will be vulnerable to it. -void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); - -// FAK - OEI 1/15/04 -// 789: Yet another minigame function. Returns the object's track's position. -vector SWMG_GetTrackPosition(object oFollower); - -// FAK - OEI 1/15/04 -// 790: minigame function that lets you psuedo-set the position of a follower object -vector SWMG_SetFollowerPosition(vector vPos); - -//RWT-OEI 01/16/04 -// 791: A function to put the character into a true combat state but the reason set to -// not real combat. This should help us control animations in cutscenes with a bit -// more precision. -- Not totally sure this is doing anything just yet. Seems -// the combat condition gets cleared shortly after anyway. -// If nEnable is 1, it enables fake combat mode. If 0, it disables it. -// WARNING: Whenever using this function to enable fake combat mode, you should -// have a matching call to it to disable it. (pass 0 for nEnable). -void SetFakeCombatState( object oObject, int nEnable ); - -// FAK - OEI 1/23/04 -// 792: minigame function that deletes a minigame object -void SWMG_DestroyMiniGameObject(object oObject); - -// DJS-OEI 1/26/2004 -// 793: Returns the Demolitions skill of the creature that -// placed this mine. This will often be 0. This function accepts -// the object that the mine is attached to (Door, Placeable, or Trigger) -// and will determine which one it actually is at runtime. -int GetOwnerDemolitionsSkill( object oObject ); - -// RWT-OEI 01/29/04 -// 794: Disables or Enables the Orient On Click behavior in creatures. If -// disabled, they will not orient to face the player when clicked on -// for dialogue. The default behavior is TRUE. -void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); - -// DJS-OEI 1/29/2004 -// 795: Gets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, the return -// value with be 0. If the character is in the party, but has an -// attitude of Ambivalent, this will be -1. -int GetInfluence( int nNPC ); - -// DJS-OEI 1/29/2004 -// 796: Sets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nInfluence - The new value for the influence on this CNPC. -void SetInfluence( int nNPC, int nInfluence ); - -// DJS-OEI 1/29/2004 -// 797: Modifies the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nModifier - The modifier to the current influence on this CNPC. -// This may be a negative value to reduce the influence. -void ModifyInfluence( int nNPC, int nModifier ); - -// FAK - OEI 2/3/04 -// 798: returns the racial sub-type of the oTarget object -int GetRacialSubType(object oTarget); - -// DJS-OEI 2/3/2004 -// 799: Increases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is greater than the max -// of 127. -void IncrementGlobalNumber( string sIdentifier, int nAmount ); - -// DJS-OEI 2/3/2004 -// 800: Decreases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is less than the minimum -// of -128. -void DecrementGlobalNumber( string sIdentifier, int nAmount ); - -// RWT-OEI 02/06/04 -// 801: SetBonusForcePoints - This sets the number of bonus force points -// that will always be added to that character's total calculated -// force points. -void SetBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 802: AddBonusForcePoints - This adds nBonusFP to the current total -// bonus that the player has. The Bonus Force Points are a pool -// of force points that will always be added after the player's -// total force points are calculated (based on level, force dice, -// etc.) -void AddBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 803: GetBonusForcePoints - This returns the total number of bonus -// force points a player has. Bonus Force Points are a pool of -// points that are always added to a player's Max Force Points. -// ST: Please explain how a function returning VOID could return a -// numerical value? Hope it works changing the return type... -// void GetBonusForcePoints( object oCreature ); -int GetBonusForcePoints( object oCreature ); - -// FAK - OEI 2/11/04 -// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop -// bike races. Gravity will act upon this velocity. -void SWMG_SetJumpSpeed(float fSpeed); - -// PC CODE MERGER -// 805. IsMoviePlaying--dummy func so we can compile -int IsMoviePlaying(); - -// 806 QueueMovie -void QueueMovie(string sMovie, int nSkippable = TRUE); - -// 807 -void PlayMovieQueue(int nAllowSkips = TRUE); - -// 808 -void YavinHackDoorClose(object oCreature); - -// 809 -// new function for droid confusion so inherint mind immunity can be -// avoided. -effect EffectDroidConfused(); -// END PC CODE MERGER - -// 810 -// DJS-OEI 3/8/2004 -// Determines if the given creature is in Stealth mode or not. -// 0 = Creature is not stealthed. -// 1 = Creature is stealthed. -// This function will return 0 for any non-creature. -int IsStealthed( object oCreature ); - -// 811 -// DJS-OEI 3/12/2004 -// Determines if the given creature is using any Meditation Tree -// Force Power. -// 0 = Creature is not meditating. -// 1 = Creature is meditating. -// This function will return 0 for any non-creature. -int IsMeditating( object oCreature ); - -// 812 -// DJS-OEI 3/16/2004 -// Determines if the given creature is using the Total Defense -// Stance. -// 0 = Creature is not in Total Defense. -// 1 = Creature is in Total Defense. -// This function will return 0 for any non-creature. -int IsInTotalDefense( object oCreature ); - -// 813 -// RWT-OEI 03/19/04 -// Stores a Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -void SetHealTarget( object oidHealer, object oidTarget ); - -// 814 -// RWT-OEI 03/19/04 -// Retrieves the Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -object GetHealTarget( object oidHealer ); - -// 815 -// RWT-OEI 03/23/04 -// Returns a vector containing a random destination that the -// given creature can walk to that's within the range of the -// passed parameter. -vector GetRandomDestination( object oCreature, int rangeLimit ); - -// 816 -// DJS-OEI 3/25/2004 -// Returns whether the given creature is currently in the -// requested Lightsaber/Consular Form and can make use of -// its benefits. This function will perform trumping checks -// and lightsaber-wielding checks for those Forms that require -// them. -int IsFormActive( object oCreature, int nFormID ); - -// 817 -// DJS-OEI 3/28/2004 -// Returns the Form Mask of the requested spell. This is used -// to determine if a spell is affected by various Forms, usually -// Consular forms that modify duration/range. -int GetSpellFormMask( int nSpellID ); - -// 818 -// DJS-OEI 3/29/2004 -// Return the base number of Force Points required to cast -// the given spell. This does not take into account modifiers -// of any kind. -int GetSpellBaseForcePointCost( int nSpellID ); - -// 819 -// RWT-OEI 04/05/04 -// Setting this to TRUE makes it so that the Stealth status is -// left on characters even when entering cutscenes. By default, -// stealth is removed from anyone taking part in a cutscene. -// ALWAYS set this back to FALSE on every End Dialog node in -// the cutscene you wanted to stay stealthed in. This isn't a -// flag that should be left on indefinitely. In fact, it isn't -// saved, so needs to be set/unset on a case by case basis. -void SetKeepStealthInDialog( int nStealthState ); - -// 820 -// RWT-OEI 04/06/04 -// This returns TRUE or FALSE if there is a clear line of sight from -// the source vector to the target vector. This is used in the AI to -// help the creatures using ranged weapons find better places to shoot -// when the player moves out of sight. -int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); - -// 821 -// FAK - OEI 5/3/04 -// ShowDemoScreen, displays a texture, timeout, string and xy for string -int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); - -// 822 -// DJS-OEI 5/4/2004 -// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES -// AT THE MOMENT. This heartbeat should force perception updates to occur. -void ForceHeartbeat( object oCreature ); - -// 823 -// DJS-OEI 5/5/2004 -// Creates a Force Sight effect. -effect EffectForceSight(); - -// 824 -// FAK - OEI 5/7/04 -// gets the walk state of the creature: 0 walk or standing, 1 is running -int IsRunning( object oCreature ); - -// 825 -// FAK - OEI 5/24/04 -// applies a velocity to the player object -void SWMG_PlayerApplyForce(vector vForce); - -// 826 -// DJS-OEI 6/12/2004 -// This function allows a script to set the conditions which constitute -// a combat forfeit by a member of the player's party. This is typically -// used to handle Battle Circle behavior or other challenge-based combats. -// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. -void SetForfeitConditions( int nForfeitFlags ); - -// 827 -// DJS-OEI 6/12/2004 -// This function returns the last FORFEIT_* condition that the player -// has violated. -int GetLastForfeitViolation(); - -// 828 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the REFLEX saving throw for aObject -void ModifyReflexSavingThrowBase(object aObject, int aModValue); - -// 829 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the FORTITUDE saving throw for aObject -void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); - -// 830 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the WILL saving throw for aObject -void ModifyWillSavingThrowBase(object aObject, int aModValue); - -// DJS-OEI 6/21/2004 -// 831 -// This function will return the one CExoString parameter -// allowed for the currently running script. -string GetScriptStringParameter(); - -// 832 -// AWD-OEI 6/29/2004 -// This function returns the personal space value of an object -float GetObjectPersonalSpace(object aObject); - -// 833 -// AWD-OEI 7/06/2004 -// This function adjusts a creatures stats. -// oObject is the creature that will have it's attribute adjusted -// The following constants are acceptable for the nAttribute parameter: -// ABILITY_STRENGTH -// ABILITY_DEXTERITY -// ABILITY_CONSTITUTION -// ABILITY_INTELLIGENCE -// ABILITY_WISDOM -// ABILITY_CHARISMA -// nAmount is the integer vlaue to adjust the stat by (negative values will work). -void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); - -// 834 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void SetCreatureAILevel(object oObject, int nPriority); - -// 835 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void ResetCreatureAILevel(object oObject); - -// 836 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// template. -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); - -// 837 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// creature ID -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByObject( int nPUP, object oPuppet ); - -// 838 -// RWT-OEI 07/17/04 -// This function assigns a PUPPET constant to a -// Party NPC. The party NPC -MUST- be in the game -// before calling this. -// Both the PUP and the NPC have -// to be available in their respective tables -// Returns 1 if successful, 0 if there was an error -int AssignPUP( int nPUP, int nNPC ); - -// 839 -// RWT-OEI 07/17/04 -// This function spawns a Party PUPPET. -// This must be used whenever you want a copy -// of the puppet around to manipulate in the game -// since the puppet is stored in the party table -// just like NPCs are. Once a puppet is assigned -// to a party NPC (see AssignPUP), it will spawn -// or disappear whenever its owner joins or leaves -// the party. -// This does not add it to the party automatically, -// just like SpawnNPC doesn't. You must call AddPuppet() -// to actually add it to the party -object SpawnAvailablePUP( int nPUP, location lLocation ); - -// 840 -// RWT-OEI 07/18/04 -// This adds an existing puppet object to the party. The -// puppet object must already exist via SpawnAvailablePUP -// and must already be available via AddAvailablePUP* -// functions. -int AddPartyPuppet(int nPUP, object oidCreature); - -// 841 -// RWT-OEI 07/19/04 -// This returns the object ID of the puppet's owner. -// The Puppet's owner must exist and must be in the party -// in order to be found. -// Returns invalid object Id if the owner cannot be found. -object GetPUPOwner(object oPUP = OBJECT_SELF); - -// 842 -// RWT-OEI 07/19/04 -// Returns 1 if the creature is a Puppet in the party. -// Otherwise returns 0. It is possible for a 'party puppet' -// to exist without actually being in the party table. -// such as when SpawnAvailablePUP is used without subsequently -// using AddPartyPuppet to add the newly spawned puppet to -// the party table. A puppet in that in-between state would -// return 0 from this function -int GetIsPuppet(object oPUP = OBJECT_SELF ); - -// 843 -// RWT-OEI 07/20/04 -// Similiar to ActionFollowLeader() except the creature -// follows its owner -//nRange is how close it should follow. Note that once this -//action is queued, it will be the only thing this creature -//does until a ClearAllActions() is used. -void ActionFollowOwner(float fRange = 2.5); - -// 844 -// RWT-OEI 07/21/04 -// Returns TRUE if the object ID passed is the character -// that the player is actively controlling at that point. -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -int GetIsPartyLeader(object oCharacter = OBJECT_SELF); - -// 845 -// RWT-OEI 07/21/04 -// Returns the object ID of the character that the player -// is actively controlling. This is the 'Party Leader'. -// Returns object Invalid on error -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -object GetPartyLeader(); - -// 846 -// JAB-OEI 07/22/04 -// Will remove the CNPC from the 3 person party, and remove -// him/her from the area, effectively sending the CNPC back -// to the base. The CNPC data is still stored in the -// party table, and calling this function will not destroy -// the CNPC in any way. -// Returns TRUE for success. -int RemoveNPCFromPartyToBase(int nNPC); - -// 847 -// AWD-OEI 7/22/2004 -// This causes a creature to flourish with it's currently equipped weapon. -void CreatureFlourishWeapon(object oObject); - -// 848 -// Create a Mind Trick effect -effect EffectMindTrick(); - -// 849 -// Create a Faction Modifier effect. -effect EffectFactionModifier( int nNewFaction ); - -// 850 -// ChangeObjectAppearance -// oObjectToChange = Object to change appearance of -// nAppearance = appearance to change to (from appearance.2da) -void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); - -// 851 -// GetIsXBox -// Returns TRUE if this script is being executed on the X-Box. Returns FALSE -// if this is the PC build. -int GetIsXBox(); - -// 852 -// Create a Droid Scramble effect -effect EffectDroidScramble(); - -// 853 -// ActionSwitchWeapons -// Forces the creature to switch between Config 1 and Config 2 -// of their equipment. Does not work in dialogs. Works with -// AssignCommand() -void ActionSwitchWeapons(); - -// 854 -// DJS-OEI 8/29/2004 -// PlayOverlayAnimation -// This function will play an overlay animation on a character -// even if the character is moving. This does not cause an action -// to be placed on the queue. The animation passed in must be -// designated as an overlay in Animations.2DA. -void PlayOverlayAnimation( object oTarget, int nAnimation ); - -// 855 -// RWT-OEI 08/30/04 -// UnlockAllSongs -// Calling this will set all songs as having been unlocked. -// It is INTENDED to be used in the end-game scripts to unlock -// any end-game songs as well as the KotOR1 sound track. -void UnlockAllSongs(); - -// 856 -// RWT-OEI 08/31/04 -// Passing TRUE into this function turns off the player's maps. -// Passing FALSE into this function re-enables them. This change -// is permanent once called, so it is important that there *is* -// a matching call to DisableMap(FALSE) somewhere or else the -// player is stuck without a map indefinitely. -void DisableMap(int nFlag = FALSE); - -// 857 -// RWT-OEI 08/31/04 -// This function schedules a mine to play its DETONATION -// animation once it is destroyed. Note that this detonates -// the mine immediately but has nothing to do with causing -// the mine to do any damage to anything around it. To -// get the mine to damage things around it when it detonates -// do: -// AssignCommand(,ExecuteScript( "k_trp_generic",)); -// right before you call DetonateMine(). By my experience so far -// you don't need any kind of delay between the two. -void DetonateMine(object oMine); - -// 858 -// RWT-OEI 09/06/04 -// This function turns off the innate health regeneration that all party -// members have. The health regen will *stay* off until it is turned back -// on by passing FALSE to this function. -void DisableHealthRegen(int nFlag = FALSE); - -// 859 -// DJS-OEI 9/7/2004 -// This function sets the current Jedi Form on the given creature. This -// call will do nothing if the target does not know the Form itself. -void SetCurrentForm( object oCreature, int nFormID ); - -// 860 -// RWT-OEI 09/09/04 -// This will disable or enable area transit -void SetDisableTransit(int nFlag = FALSE); - -// 861 -//RWT-OEI 09/09/04 -// This will set the specific input class. -// The valid options are: -// 0 - Normal PC control -// 1 - Mini game control -// 2 - GUI control -// 3 - Dialog Control -// 4 - Freelook control -void SetInputClass(int nClass); - -// 862 -//RWT-OEI 09/15/04 -// This script allows an object to recieve updates even if it is outside -//the normal range limit of 250.0f meters away from the player. This should -//ONLY be used for cutscenes that involve objects that are more than 250 -//meters away from the player. It needs to be used on a object by object -//basis. -//This flag should *always* be set to false once the cutscene it is needed -//for is over, or else the game will spend CPU time updating the object -//when it doesn't need to. -//For questions on use of this function, or what its purpose is, check -//with me. -void SetForceAlwaysUpdate(object oObject, int nFlag); - -//863 -//RWT-OEI 09/15/04 -//This function enables or disables rain -void EnableRain( int nFlag ); - -//864 -//RWT-OEI 09/27/04 -//This function displays the generic Message Box with the strref -//message in it -//sIcon is the resref for an icon you would like to display. -void DisplayMessageBox(int nStrRef, string sIcon = ""); - -//865 -//RWT-OEI 09/28/04 -//This function displays a datapad popup. Just pass it the -//object ID of a datapad. -void DisplayDatapad(object oDatapad); - -// 866 -// CTJ-OEI 09-29-04 -// Removes the heartbeat script on the placeable. Useful for -// placeables whose contents get populated in the heartbeat -// script and then the heartbeat no longer needs to be called. -void RemoveHeartbeat(object oPlaceable); - - -//867 -// JF-OEI 10-07-2004 -// Remove an effect by ID -void RemoveEffectByID( object oCreature, int nEffectID ); - -//868 -// RWT-OEI 10/07/04 -// This script removes an effect by an identical match -// based on: -// Must have matching EffectID types. -// Must have the same value in Integer(0) -// Must have the same value in Integer(1) -// I'm specifically using this function for Mandalore's implant swapping -// script and it will probably not be useful for anyone else. If you're -// not sure what this script function does, see me before using it. -void RemoveEffectByExactMatch( object oCreature, effect eEffect); - -// 869 -// DJS-OEI 10/9/2004 -// This function adjusts a creature's skills. -// oObject is the creature that will have its skill adjusted -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// nAmount is the integer value to adjust the stat by (negative values will work). -void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); - -// 870 -// DJS-OEI 10/10/2004 -// This function returns the base Skill Rank for the requested -// skill. It does not include modifiers from effects/items. -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// oObject is the creature that will have its skill base returned. -int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); - -// 871 -// DJS-OEI 10/15/2004 -// This function will allow the caller to modify the rendering behavior -// of the target object. -// oObject - The object to change rendering state on. -// bEnable - If 0, the object will stop rendering. Else, the object will render. -void EnableRendering( object oObject, int bEnable ); - -// 872 -// RWT-OEI 10/19/04 -// This function returns TRUE if the creature has actions in its -// Combat Action queue. -int GetCombatActionsPending(object oCreature); - -// 873 -// RWT-OEI 10/26/04 -// This function saves the party member at that index with the object -// that is passed in. -void SaveNPCByObject( int nNPC, object oidCharacter); - -// 874 -// RWT-OEI 10/26/04 -// This function saves the party puppet at that index with the object -// that is passed in. For the Remote, just use '0' for nPUP -void SavePUPByObject( int nPUP, object oidPuppet ); - -// 875 -// RWT-OEI 10/29/04 -// Returns TRUE if the object passed in is the character that the player -// made at the start of the game -int GetIsPlayerMadeCharacter(object oidCharacter); - -// 876 -// RWT-OEI 11/12/04 -// This repopulates the NPCObject table in CSWPartyTable. Do not use this -// unless you understand exactly what it is doing. -void RebuildPartyTable(); diff --git a/TSL/nwnnsscomp/V1/nwnnsscomp.exe b/TSL/nwnnsscomp/V1/nwnnsscomp.exe deleted file mode 100644 index bef40b7784055700f73bacf914f2ee7da27b4727..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462848 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

Ksy#d{!eNofyjh=yQbGYJFx`cNaUeaL7V&t17P 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 ^*V{oa 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 z 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

j{S0Wm8i3_` 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"VY&YEDr*rf? zeGiU20UkdAKULifT+DRyBl9%Wth2R)9M-jm+7s+A?4!;mD93DX4-VU74soXz#)kPx zMW$|EfCyrn$PQ?9Z)5%vc6R(I>xjV)9Ko#wp zCvTE>C=%Ns+5A+Gxwq5Uhw3|z-YWwyve=mF9By-t;f!XYOIDgqtZvpM61-bhfBPk} zr4w+h`EDC;iuVwtr>U=yLo|mScJ#aWJ^j8U)`MWpqx`WD+klj3agq!DkD)OD*-_-iVgqv99~ zudL9J?>iBlbck%MITJ9SBBT0PgW`>E%`+#m+*6dGr-DB=&E}tVkiwm=}$H{X4VfkSOv_IS_ zj0?H>9Uhh4y#3x`{Mt#f$@BD;%XF6O zki-h?h{pQ~e&RnlTq=Y}!HGD$p@8VV@r> zjYm1;vT?Qo?XW)FohX!chTkC`&YG;HXq(J@GtXXcZz2yq43jJkXKTc%;8b!Fog^pK z5gf;9?kKK7G8Swnq`8sHcb=n_)E2(dQ%Z(2wPM$!1TQgzo|BF8DZn8Gf1xn=8;~90 zG84sx)WcHPOc9$VCE`iyB97hJcu9c&87Q5A(hQNNN;5*GvtG*QbDqa}T#Q}NKqp2*SH^1N*+QMF&CqgT zuq(_wa~&I(!E+awg)rG7ZbvD(SUk_0686aK4=iws;Ko;+h?~gHn84HbB$pcN zPIY&ZOx8g1!U2sLLA9+qG*V%;9VKwaB(yz zo6C;jPW1N`CRJ2;ripYMft0Z)r`(4E zQXUVdS{I(^NzOB(M3LIWD~a4fMM*;+jiwG3vW;D+l%Rx4*#N$!M6u16s2XZVcE5V7 z8Em@p97$zEUPn^Sr>Vp{PLNW_R|M72TA68127GZi=QR3X?0N=ie-;^Q4rya9x&I0; zkJDSv`Q>wh|69F9{3t(;v;Ci|u9e@G&Y0$Ri%%*EVxh(H*|%R7uHlhgkmRjsYE@kma13a)KOXm zEnZ8cx>Cts9HvS~m{G9RHH7;(mb*AZ%hGb_T`RO;YtQ&EJA2*qbiF_Re7&*B7;8>6 zXP8-N!d!0cI&N$Mw{<^s_jI^jb&E}LfxYQUs6ig)?tgbr;O+_BJ%PI?aQ6i6p1|D` ZxO)P3PvGte+&zK2Cvf)!{vV&fe*i+5gg*cP diff --git a/TSL/nwnnsscomp/V1/nwscript.nss b/TSL/nwnnsscomp/V1/nwscript.nss deleted file mode 100644 index 94e753a63..000000000 --- a/TSL/nwnnsscomp/V1/nwscript.nss +++ /dev/null @@ -1,6325 +0,0 @@ -//////////////////////////////////////////////////////// -// -// NWScript -// -// The list of actions and pre-defined constants. -// -// (c) BioWare Corp, 1999 -// -//////////////////////////////////////////////////////// - -#define ENGINE_NUM_STRUCTURES 4 -#define ENGINE_STRUCTURE_0 effect -#define ENGINE_STRUCTURE_1 event -#define ENGINE_STRUCTURE_2 location -#define ENGINE_STRUCTURE_3 talent - -// Constants - -int NUM_INVENTORY_SLOTS = 20; - -int TRUE = 1; -int FALSE = 0; - -float DIRECTION_EAST = 0.0; -float DIRECTION_NORTH = 90.0; -float DIRECTION_WEST = 180.0; -float DIRECTION_SOUTH = 270.0; -float PI = 3.141592; - -int ATTITUDE_NEUTRAL = 0; -int ATTITUDE_AGGRESSIVE = 1; -int ATTITUDE_DEFENSIVE = 2; -int ATTITUDE_SPECIAL = 3; - -int TALKVOLUME_TALK = 0; -int TALKVOLUME_WHISPER = 1; -int TALKVOLUME_SHOUT = 2; -int TALKVOLUME_SILENT_TALK = 3; -int TALKVOLUME_SILENT_SHOUT = 4; - -int INVENTORY_SLOT_HEAD = 0; -int INVENTORY_SLOT_BODY = 1; -int INVENTORY_SLOT_HANDS = 3; -int INVENTORY_SLOT_RIGHTWEAPON = 4; -int INVENTORY_SLOT_LEFTWEAPON = 5; -int INVENTORY_SLOT_LEFTARM = 7; -int INVENTORY_SLOT_RIGHTARM = 8; -int INVENTORY_SLOT_IMPLANT = 9; -int INVENTORY_SLOT_BELT = 10; -int INVENTORY_SLOT_CWEAPON_L = 14; -int INVENTORY_SLOT_CWEAPON_R = 15; -int INVENTORY_SLOT_CWEAPON_B = 16; -int INVENTORY_SLOT_CARMOUR = 17; -int INVENTORY_SLOT_RIGHTWEAPON2= 18; -int INVENTORY_SLOT_LEFTWEAPON2 = 19; - -//Effect type constants -int DURATION_TYPE_INSTANT = 0; -int DURATION_TYPE_TEMPORARY = 1; -int DURATION_TYPE_PERMANENT = 2; - -int SUBTYPE_MAGICAL = 8; -int SUBTYPE_SUPERNATURAL = 16; -int SUBTYPE_EXTRAORDINARY = 24; - -int ABILITY_STRENGTH = 0; // should be the same as in nwseffectlist.cpp -int ABILITY_DEXTERITY = 1; -int ABILITY_CONSTITUTION = 2; -int ABILITY_INTELLIGENCE = 3; -int ABILITY_WISDOM = 4; -int ABILITY_CHARISMA = 5; - -int SHAPE_SPELLCYLINDER = 0; -int SHAPE_CONE = 1; -int SHAPE_CUBE = 2; -int SHAPE_SPELLCONE = 3; -int SHAPE_SPHERE = 4; - -int OBJECT_TYPE_CREATURE = 1; -int OBJECT_TYPE_ITEM = 2; -int OBJECT_TYPE_TRIGGER = 4; -int OBJECT_TYPE_DOOR = 8; -int OBJECT_TYPE_AREA_OF_EFFECT = 16; -int OBJECT_TYPE_WAYPOINT = 32; -int OBJECT_TYPE_PLACEABLE = 64; -int OBJECT_TYPE_STORE = 128; -int OBJECT_TYPE_ENCOUNTER = 256; -int OBJECT_TYPE_SOUND = 512; -int OBJECT_TYPE_ALL = 32767; - -int OBJECT_TYPE_INVALID = 32767; - -int GENDER_MALE = 0; -int GENDER_FEMALE = 1; -int GENDER_BOTH = 2; -int GENDER_OTHER = 3; -int GENDER_NONE = 4; - -int DAMAGE_TYPE_BLUDGEONING = 1; -int DAMAGE_TYPE_PIERCING = 2; -int DAMAGE_TYPE_SLASHING = 4; -int DAMAGE_TYPE_UNIVERSAL = 8; -int DAMAGE_TYPE_ACID = 16; -int DAMAGE_TYPE_COLD = 32; -int DAMAGE_TYPE_LIGHT_SIDE = 64; -int DAMAGE_TYPE_ELECTRICAL = 128; -int DAMAGE_TYPE_FIRE = 256; -int DAMAGE_TYPE_DARK_SIDE = 512; -int DAMAGE_TYPE_SONIC = 1024; -int DAMAGE_TYPE_ION = 2048; -int DAMAGE_TYPE_BLASTER = 4096; - -// Special versus flag just for AC effects -int AC_VS_DAMAGE_TYPE_ALL = 8199; - -int DAMAGE_BONUS_1 = 1; -int DAMAGE_BONUS_2 = 2; -int DAMAGE_BONUS_3 = 3; -int DAMAGE_BONUS_4 = 4; -int DAMAGE_BONUS_5 = 5; -int DAMAGE_BONUS_1d4 = 6; -int DAMAGE_BONUS_1d6 = 7; -int DAMAGE_BONUS_1d8 = 8; -int DAMAGE_BONUS_1d10 = 9; -int DAMAGE_BONUS_2d6 = 10; - -int DAMAGE_POWER_NORMAL = 0; -int DAMAGE_POWER_PLUS_ONE = 1; -int DAMAGE_POWER_PLUS_TWO = 2; -int DAMAGE_POWER_PLUS_THREE = 3; -int DAMAGE_POWER_PLUS_FOUR = 4; -int DAMAGE_POWER_PLUS_FIVE = 5; -int DAMAGE_POWER_ENERGY = 6; - -int ATTACK_BONUS_MISC = 0; -int ATTACK_BONUS_ONHAND = 1; -int ATTACK_BONUS_OFFHAND = 2; - -int AC_DODGE_BONUS = 0; -int AC_NATURAL_BONUS = 1; -int AC_ARMOUR_ENCHANTMENT_BONUS = 2; -int AC_SHIELD_ENCHANTMENT_BONUS = 3; -int AC_DEFLECTION_BONUS = 4; - -int DOOR_ACTION_OPEN = 0; -int DOOR_ACTION_UNLOCK = 1; -int DOOR_ACTION_BASH = 2; -int DOOR_ACTION_IGNORE = 3; -int DOOR_ACTION_KNOCK = 4; - -int PLACEABLE_ACTION_USE = 0; -int PLACEABLE_ACTION_UNLOCK = 1; -int PLACEABLE_ACTION_BASH = 2; -int PLACEABLE_ACTION_KNOCK = 4; - - -int RACIAL_TYPE_UNKNOWN = 0; -int RACIAL_TYPE_ELF = 1; -int RACIAL_TYPE_GNOME = 2; -int RACIAL_TYPE_HALFLING = 3; -int RACIAL_TYPE_HALFELF = 4; -int RACIAL_TYPE_DROID = 5; -int RACIAL_TYPE_HUMAN = 6; -int RACIAL_TYPE_ALL = 7; -int RACIAL_TYPE_INVALID = 8; - -int ALIGNMENT_ALL = 0; -int ALIGNMENT_NEUTRAL = 1; -int ALIGNMENT_LIGHT_SIDE = 2; -int ALIGNMENT_DARK_SIDE = 3; - -int SAVING_THROW_ALL = 0; -int SAVING_THROW_FORT = 1; -int SAVING_THROW_REFLEX = 2; -int SAVING_THROW_WILL = 3; - -int SAVING_THROW_TYPE_ALL = 0; -int SAVING_THROW_TYPE_NONE = 0; -int SAVING_THROW_TYPE_ACID = 1; -int SAVING_THROW_TYPE_SNEAK_ATTACK = 2; -int SAVING_THROW_TYPE_COLD = 3; -int SAVING_THROW_TYPE_DEATH = 4; -int SAVING_THROW_TYPE_DISEASE = 5; -int SAVING_THROW_TYPE_LIGHT_SIDE = 6; -int SAVING_THROW_TYPE_ELECTRICAL = 7; -int SAVING_THROW_TYPE_FEAR = 8; -int SAVING_THROW_TYPE_FIRE = 9; -int SAVING_THROW_TYPE_MIND_AFFECTING = 10; -int SAVING_THROW_TYPE_DARK_SIDE = 11; -int SAVING_THROW_TYPE_POISON = 12; -int SAVING_THROW_TYPE_SONIC = 13; -int SAVING_THROW_TYPE_TRAP = 14; -int SAVING_THROW_TYPE_FORCE_POWER = 15; -int SAVING_THROW_TYPE_ION = 16; -int SAVING_THROW_TYPE_BLASTER = 17; -int SAVING_THROW_TYPE_PARALYSIS = 18; - -int IMMUNITY_TYPE_NONE = 0; -int IMMUNITY_TYPE_MIND_SPELLS = 1; -int IMMUNITY_TYPE_POISON = 2; -int IMMUNITY_TYPE_DISEASE = 3; -int IMMUNITY_TYPE_FEAR = 4; -int IMMUNITY_TYPE_TRAP = 5; -int IMMUNITY_TYPE_PARALYSIS = 6; -int IMMUNITY_TYPE_BLINDNESS = 7; -int IMMUNITY_TYPE_DEAFNESS = 8; -int IMMUNITY_TYPE_SLOW = 9; -int IMMUNITY_TYPE_ENTANGLE = 10; -int IMMUNITY_TYPE_SILENCE = 11; -int IMMUNITY_TYPE_STUN = 12; -int IMMUNITY_TYPE_SLEEP = 13; -int IMMUNITY_TYPE_CHARM = 14; -int IMMUNITY_TYPE_DOMINATE = 15; -int IMMUNITY_TYPE_CONFUSED = 16; -int IMMUNITY_TYPE_CURSED = 17; -int IMMUNITY_TYPE_DAZED = 18; -int IMMUNITY_TYPE_ABILITY_DECREASE = 19; -int IMMUNITY_TYPE_ATTACK_DECREASE = 20; -int IMMUNITY_TYPE_DAMAGE_DECREASE = 21; -int IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE = 22; -int IMMUNITY_TYPE_AC_DECREASE = 23; -int IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE = 24; -int IMMUNITY_TYPE_SAVING_THROW_DECREASE = 25; -int IMMUNITY_TYPE_FORCE_RESISTANCE_DECREASE = 26; -int IMMUNITY_TYPE_SKILL_DECREASE = 27; -int IMMUNITY_TYPE_KNOCKDOWN = 28; -int IMMUNITY_TYPE_NEGATIVE_LEVEL = 29; -int IMMUNITY_TYPE_SNEAK_ATTACK = 30; -int IMMUNITY_TYPE_CRITICAL_HIT = 31; -int IMMUNITY_TYPE_DEATH = 32; -int IMMUNITY_TYPE_DROID_CONFUSED = 33; - -int AREA_TRANSITION_RANDOM = 0; -int AREA_TRANSITION_USER_DEFINED = 1; -int AREA_TRANSITION_CITY_01 = 2; -int AREA_TRANSITION_CITY_02 = 3; -int AREA_TRANSITION_CITY_03 = 4; -int AREA_TRANSITION_CITY_04 = 5; -int AREA_TRANSITION_CITY_05 = 6; -int AREA_TRANSITION_CRYPT_01 = 7; -int AREA_TRANSITION_CRYPT_02 = 8; -int AREA_TRANSITION_CRYPT_03 = 9; -int AREA_TRANSITION_CRYPT_04 = 10; -int AREA_TRANSITION_CRYPT_05 = 11; -int AREA_TRANSITION_DUNGEON_01 = 12; -int AREA_TRANSITION_DUNGEON_02 = 13; -int AREA_TRANSITION_DUNGEON_03 = 14; -int AREA_TRANSITION_DUNGEON_04 = 15; -int AREA_TRANSITION_DUNGEON_05 = 16; -int AREA_TRANSITION_DUNGEON_06 = 17; -int AREA_TRANSITION_DUNGEON_07 = 18; -int AREA_TRANSITION_DUNGEON_08 = 19; -int AREA_TRANSITION_MINES_01 = 20; -int AREA_TRANSITION_MINES_02 = 21; -int AREA_TRANSITION_MINES_03 = 22; -int AREA_TRANSITION_MINES_04 = 23; -int AREA_TRANSITION_MINES_05 = 24; -int AREA_TRANSITION_MINES_06 = 25; -int AREA_TRANSITION_MINES_07 = 26; -int AREA_TRANSITION_MINES_08 = 27; -int AREA_TRANSITION_MINES_09 = 28; -int AREA_TRANSITION_SEWER_01 = 29; -int AREA_TRANSITION_SEWER_02 = 30; -int AREA_TRANSITION_SEWER_03 = 31; -int AREA_TRANSITION_SEWER_04 = 32; -int AREA_TRANSITION_SEWER_05 = 33; -int AREA_TRANSITION_CASTLE_01 = 34; -int AREA_TRANSITION_CASTLE_02 = 35; -int AREA_TRANSITION_CASTLE_03 = 36; -int AREA_TRANSITION_CASTLE_04 = 37; -int AREA_TRANSITION_CASTLE_05 = 38; -int AREA_TRANSITION_CASTLE_06 = 39; -int AREA_TRANSITION_CASTLE_07 = 40; -int AREA_TRANSITION_CASTLE_08 = 41; -int AREA_TRANSITION_INTERIOR_01 = 42; -int AREA_TRANSITION_INTERIOR_02 = 43; -int AREA_TRANSITION_INTERIOR_03 = 44; -int AREA_TRANSITION_INTERIOR_04 = 45; -int AREA_TRANSITION_INTERIOR_05 = 46; -int AREA_TRANSITION_INTERIOR_06 = 47; -int AREA_TRANSITION_INTERIOR_07 = 48; -int AREA_TRANSITION_INTERIOR_08 = 49; -int AREA_TRANSITION_INTERIOR_09 = 50; -int AREA_TRANSITION_INTERIOR_10 = 51; -int AREA_TRANSITION_INTERIOR_11 = 52; -int AREA_TRANSITION_INTERIOR_12 = 53; -int AREA_TRANSITION_INTERIOR_13 = 54; -int AREA_TRANSITION_INTERIOR_14 = 55; -int AREA_TRANSITION_INTERIOR_15 = 56; -int AREA_TRANSITION_INTERIOR_16 = 57; -int AREA_TRANSITION_FOREST_01 = 58; -int AREA_TRANSITION_FOREST_02 = 59; -int AREA_TRANSITION_FOREST_03 = 60; -int AREA_TRANSITION_FOREST_04 = 61; -int AREA_TRANSITION_FOREST_05 = 62; -int AREA_TRANSITION_RURAL_01 = 63; -int AREA_TRANSITION_RURAL_02 = 64; -int AREA_TRANSITION_RURAL_03 = 65; -int AREA_TRANSITION_RURAL_04 = 66; -int AREA_TRANSITION_RURAL_05 = 67; - -// Legacy area-transition constants. Do not delete these. -int AREA_TRANSITION_CITY = 2; -int AREA_TRANSITION_CRYPT = 7; -int AREA_TRANSITION_FOREST = 58; -int AREA_TRANSITION_RURAL = 63; - -// NOTE: BODY_NODE_HAND should be used to attach to the 'handconjure' node. -int BODY_NODE_HAND = 0; -int BODY_NODE_CHEST = 1; -int BODY_NODE_HEAD = 2; -// NOTE: BODY_NODE_HAND_* should be used to attach specifically to either the left or right hand. The -// nodes used with be 'lhand' and 'rhand'. -int BODY_NODE_HAND_LEFT = 3; -int BODY_NODE_HAND_RIGHT = 4; - -float RADIUS_SIZE_SMALL = 1.67f; -float RADIUS_SIZE_MEDIUM = 3.33f; -float RADIUS_SIZE_LARGE = 5.0f; -float RADIUS_SIZE_HUGE = 6.67f; -float RADIUS_SIZE_GARGANTUAN = 8.33f; -float RADIUS_SIZE_COLOSSAL = 10.0f; - -// these are magic numbers. they should correspond to the values layed out in ExecuteCommandGetEffectType -int EFFECT_TYPE_INVALIDEFFECT = 0; -int EFFECT_TYPE_DAMAGE_RESISTANCE = 1; -//int EFFECT_TYPE_ABILITY_BONUS = 2; -int EFFECT_TYPE_REGENERATE = 3; -//int EFFECT_TYPE_SAVING_THROW_BONUS = 4; -//int EFFECT_TYPE_MODIFY_AC = 5; -//int EFFECT_TYPE_ATTACK_BONUS = 6; -int EFFECT_TYPE_DAMAGE_REDUCTION = 7; -//int EFFECT_TYPE_DAMAGE_BONUS = 8; -int EFFECT_TYPE_TEMPORARY_HITPOINTS = 9; -//int EFFECT_TYPE_DAMAGE_IMMUNITY = 10; -int EFFECT_TYPE_ENTANGLE = 11; -int EFFECT_TYPE_INVULNERABLE = 12; -int EFFECT_TYPE_DEAF = 13; -int EFFECT_TYPE_RESURRECTION = 14; -int EFFECT_TYPE_IMMUNITY = 15; -//int EFFECT_TYPE_BLIND = 16; -int EFFECT_TYPE_ENEMY_ATTACK_BONUS = 17; -int EFFECT_TYPE_ARCANE_SPELL_FAILURE = 18; -//int EFFECT_TYPE_MOVEMENT_SPEED = 19; -int EFFECT_TYPE_AREA_OF_EFFECT = 20; -int EFFECT_TYPE_BEAM = 21; -//int EFFECT_TYPE_FORCE_RESISTANCE = 22; -int EFFECT_TYPE_CHARMED = 23; -int EFFECT_TYPE_CONFUSED = 24; -int EFFECT_TYPE_FRIGHTENED = 25; -int EFFECT_TYPE_DOMINATED = 26; -int EFFECT_TYPE_PARALYZE = 27; -int EFFECT_TYPE_DAZED = 28; -int EFFECT_TYPE_STUNNED = 29; -int EFFECT_TYPE_SLEEP = 30; -int EFFECT_TYPE_POISON = 31; -int EFFECT_TYPE_DISEASE = 32; -int EFFECT_TYPE_CURSE = 33; -int EFFECT_TYPE_SILENCE = 34; -int EFFECT_TYPE_TURNED = 35; -int EFFECT_TYPE_HASTE = 36; -int EFFECT_TYPE_SLOW = 37; -int EFFECT_TYPE_ABILITY_INCREASE = 38; -int EFFECT_TYPE_ABILITY_DECREASE = 39; -int EFFECT_TYPE_ATTACK_INCREASE = 40; -int EFFECT_TYPE_ATTACK_DECREASE = 41; -int EFFECT_TYPE_DAMAGE_INCREASE = 42; -int EFFECT_TYPE_DAMAGE_DECREASE = 43; -int EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE = 44; -int EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE = 45; -int EFFECT_TYPE_AC_INCREASE = 46; -int EFFECT_TYPE_AC_DECREASE = 47; -int EFFECT_TYPE_MOVEMENT_SPEED_INCREASE = 48; -int EFFECT_TYPE_MOVEMENT_SPEED_DECREASE = 49; -int EFFECT_TYPE_SAVING_THROW_INCREASE = 50; -int EFFECT_TYPE_SAVING_THROW_DECREASE = 51; -int EFFECT_TYPE_FORCE_RESISTANCE_INCREASE = 52; -int EFFECT_TYPE_FORCE_RESISTANCE_DECREASE = 53; -int EFFECT_TYPE_SKILL_INCREASE = 54; -int EFFECT_TYPE_SKILL_DECREASE = 55; -int EFFECT_TYPE_INVISIBILITY = 56; -int EFFECT_TYPE_IMPROVEDINVISIBILITY = 57; -int EFFECT_TYPE_DARKNESS = 58; -int EFFECT_TYPE_DISPELMAGICALL = 59; -int EFFECT_TYPE_ELEMENTALSHIELD = 60; -int EFFECT_TYPE_NEGATIVELEVEL = 61; -int EFFECT_TYPE_DISGUISE = 62; -int EFFECT_TYPE_SANCTUARY = 63; -int EFFECT_TYPE_TRUESEEING = 64; -int EFFECT_TYPE_SEEINVISIBLE = 65; -int EFFECT_TYPE_TIMESTOP = 66; -int EFFECT_TYPE_BLINDNESS = 67; -int EFFECT_TYPE_SPELLLEVELABSORPTION = 68; -int EFFECT_TYPE_DISPELMAGICBEST = 69; -int EFFECT_TYPE_ULTRAVISION = 70; -int EFFECT_TYPE_MISS_CHANCE = 71; -int EFFECT_TYPE_CONCEALMENT = 72; -int EFFECT_TYPE_SPELL_IMMUNITY = 73; -int EFFECT_TYPE_ASSUREDHIT = 74; -int EFFECT_TYPE_VISUAL = 75; -int EFFECT_TYPE_LIGHTSABERTHROW = 76; -int EFFECT_TYPE_FORCEJUMP = 77; -int EFFECT_TYPE_ASSUREDDEFLECTION = 78; -int EFFECT_TYPE_DROID_CONFUSED = 79; -int EFFECT_TYPE_MINDTRICK = 80; // DJS-OEI 7/28/2004 -int EFFECT_TYPE_DROIDSCRAMBLE = 81; // DJS-OEI 8/21/2004 - - -int ITEM_PROPERTY_ABILITY_BONUS = 0 ; -int ITEM_PROPERTY_AC_BONUS = 1 ; -int ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP = 2 ; -int ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE = 3 ; -int ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP = 4 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS = 5 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = 6 ; -int ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = 7 ; -int ITEM_PROPERTY_ATTACK_PENALTY = 8 ; -int ITEM_PROPERTY_BONUS_FEAT = 9 ; -int ITEM_PROPERTY_ACTIVATE_ITEM = 10; -int ITEM_PROPERTY_DAMAGE_BONUS = 11; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = 12; -int ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP = 13; -int ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE = 14; -int ITEM_PROPERTY_DECREASED_DAMAGE = 15; -int ITEM_PROPERTY_DAMAGE_REDUCTION = 16; -int ITEM_PROPERTY_DAMAGE_RESISTANCE = 17; -int ITEM_PROPERTY_DAMAGE_VULNERABILITY = 18; -int ITEM_PROPERTY_DECREASED_ABILITY_SCORE = 19; -int ITEM_PROPERTY_DECREASED_AC = 20; -int ITEM_PROPERTY_DECREASED_SKILL_MODIFIER = 21; -int ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE = 22; -int ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE = 23; -int ITEM_PROPERTY_IMMUNITY = 24; -int ITEM_PROPERTY_IMPROVED_FORCE_RESISTANCE = 25; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW = 26; -int ITEM_PROPERTY_IMPROVED_SAVING_THROW_SPECIFIC = 27; -int ITEM_PROPERTY_KEEN = 28; -int ITEM_PROPERTY_LIGHT = 29; -int ITEM_PROPERTY_MIGHTY = 30; -int ITEM_PROPERTY_NO_DAMAGE = 31; -int ITEM_PROPERTY_ON_HIT_PROPERTIES = 32; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS = 33; -int ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC = 34; -int ITEM_PROPERTY_REGENERATION = 35; -int ITEM_PROPERTY_SKILL_BONUS = 36; -int ITEM_PROPERTY_SECURITY_SPIKE = 37; -int ITEM_PROPERTY_ATTACK_BONUS = 38; -int ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP = 39; -int ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP = 40; -int ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER = 41; -int ITEM_PROPERTY_UNLIMITED_AMMUNITION = 42; -int ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP = 43; -int ITEM_PROPERTY_USE_LIMITATION_CLASS = 44; -int ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE = 45; -int ITEM_PROPERTY_TRAP = 46; -int ITEM_PROPERTY_TRUE_SEEING = 47; -int ITEM_PROPERTY_ON_MONSTER_HIT = 48; -int ITEM_PROPERTY_MASSIVE_CRITICALS = 49; -int ITEM_PROPERTY_FREEDOM_OF_MOVEMENT = 50; -int ITEM_PROPERTY_MONSTER_DAMAGE = 51; -int ITEM_PROPERTY_SPECIAL_WALK = 52; -int ITEM_PROPERTY_COMPUTER_SPIKE = 53; -int ITEM_PROPERTY_REGENERATION_FORCE_POINTS = 54; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_INCREASE = 55; -int ITEM_PROPERTY_BLASTER_BOLT_DEFLECT_DECREASE = 56; -int ITEM_PROPERTY_USE_LIMITATION_FEAT = 57; -int ITEM_PROPERTY_DROID_REPAIR_KIT = 58; -int ITEM_PROPERTY_DISGUISE = 59;//RWT-OEI 12/03/03 - Caught this list up with the in-game code -int ITEM_PROPERTY_LIMIT_USE_BY_GENDER = 60; -int ITEM_PROPERTY_LIMIT_USE_BY_SUBRACE = 61; -int ITEM_PROPERTY_LIMIT_USE_BY_PC = 62; -int ITEM_PROPERTY_DAMPEN_SOUND = 63; -int ITEM_PROPERTY_DOORCUTTING = 64; -int ITEM_PROPERTY_DOORSABERING = 65; - -int BASE_ITEM_QUARTER_STAFF = 0; -int BASE_ITEM_STUN_BATON = 1; -int BASE_ITEM_LONG_SWORD = 2; -int BASE_ITEM_VIBRO_SWORD = 3; -int BASE_ITEM_SHORT_SWORD = 4; -int BASE_ITEM_VIBRO_BLADE = 5; -int BASE_ITEM_DOUBLE_BLADED_SWORD = 6; -int BASE_ITEM_VIBRO_DOUBLE_BLADE = 7; -int BASE_ITEM_LIGHTSABER = 8; -int BASE_ITEM_DOUBLE_BLADED_LIGHTSABER = 9; -int BASE_ITEM_SHORT_LIGHTSABER = 10; -int BASE_ITEM_LIGHTSABER_CRYSTALS = 11; -int BASE_ITEM_BLASTER_PISTOL = 12; -int BASE_ITEM_HEAVY_BLASTER = 13; -int BASE_ITEM_HOLD_OUT_BLASTER = 14; -int BASE_ITEM_ION_BLASTER = 15; -int BASE_ITEM_DISRUPTER_PISTOL = 16; -int BASE_ITEM_SONIC_PISTOL = 17; -int BASE_ITEM_ION_RIFLE = 18; -int BASE_ITEM_BOWCASTER = 19; -int BASE_ITEM_BLASTER_CARBINE = 20; -int BASE_ITEM_DISRUPTER_RIFLE = 21; -int BASE_ITEM_SONIC_RIFLE = 22; -int BASE_ITEM_REPEATING_BLASTER = 23; -int BASE_ITEM_HEAVY_REPEATING_BLASTER = 24; -int BASE_ITEM_FRAGMENTATION_GRENADES = 25; -int BASE_ITEM_STUN_GRENADES = 26; -int BASE_ITEM_THERMAL_DETONATOR = 27; -int BASE_ITEM_POISON_GRENADE = 28; -int BASE_ITEM_FLASH_GRENADE = 29; -int BASE_ITEM_SONIC_GRENADE = 30; -int BASE_ITEM_ADHESIVE_GRENADE = 31; -int BASE_ITEM_CRYOBAN_GRENADE = 32; -int BASE_ITEM_FIRE_GRENADE = 33; -int BASE_ITEM_ION_GRENADE = 34; -int BASE_ITEM_JEDI_ROBE = 35; -int BASE_ITEM_JEDI_KNIGHT_ROBE = 36; -int BASE_ITEM_JEDI_MASTER_ROBE = 37; -int BASE_ITEM_ARMOR_CLASS_4 = 38; -int BASE_ITEM_ARMOR_CLASS_5 = 39; -int BASE_ITEM_ARMOR_CLASS_6 = 40; -int BASE_ITEM_ARMOR_CLASS_7 = 41; -int BASE_ITEM_ARMOR_CLASS_8 = 42; -int BASE_ITEM_ARMOR_CLASS_9 = 43; -int BASE_ITEM_MASK = 44; -int BASE_ITEM_GAUNTLETS = 45; -int BASE_ITEM_FOREARM_BANDS = 46; -int BASE_ITEM_BELT = 47; -int BASE_ITEM_IMPLANT_1 = 48; -int BASE_ITEM_IMPLANT_2 = 49; -int BASE_ITEM_IMPLANT_3 = 50; -int BASE_ITEM_DATA_PAD = 52; -int BASE_ITEM_ADRENALINE = 53; -int BASE_ITEM_COMBAT_SHOTS = 54; -int BASE_ITEM_MEDICAL_EQUIPMENT = 55; -int BASE_ITEM_DROID_REPAIR_EQUIPMENT = 56; -int BASE_ITEM_CREDITS = 57; -int BASE_ITEM_TRAP_KIT = 58; -int BASE_ITEM_SECURITY_SPIKES = 59; -int BASE_ITEM_PROGRAMMING_SPIKES = 60; -int BASE_ITEM_GLOW_ROD = 61; -int BASE_ITEM_COLLAR_LIGHT = 62; -int BASE_ITEM_TORCH = 63; -int BASE_ITEM_PLOT_USEABLE_ITEMS = 64; -int BASE_ITEM_AESTHETIC_ITEM = 65; -int BASE_ITEM_DROID_LIGHT_PLATING = 66; -int BASE_ITEM_DROID_MEDIUM_PLATING = 67; -int BASE_ITEM_DROID_HEAVY_PLATING = 68; -int BASE_ITEM_DROID_SEARCH_SCOPE = 69; -int BASE_ITEM_DROID_MOTION_SENSORS = 70; -int BASE_ITEM_DROID_SONIC_SENSORS = 71; -int BASE_ITEM_DROID_TARGETING_COMPUTERS = 72; -int BASE_ITEM_DROID_COMPUTER_SPIKE_MOUNT = 73; -int BASE_ITEM_DROID_SECURITY_SPIKE_MOUNT = 74; -int BASE_ITEM_DROID_SHIELD = 75; -int BASE_ITEM_DROID_UTILITY_DEVICE = 76; -int BASE_ITEM_BLASTER_RIFLE = 77; -int BASE_ITEM_GHAFFI_STICK = 78; -int BASE_ITEM_WOOKIE_WARBLADE = 79; -int BASE_ITEM_GAMMOREAN_BATTLEAXE = 80; -int BASE_ITEM_CREATURE_ITEM_SLASH = 81; -int BASE_ITEM_CREATURE_ITEM_PIERCE = 82; -int BASE_ITEM_CREATURE_WEAPON_SL_PRC = 83; -int BASE_ITEM_CREATURE_HIDE_ITEM = 84; -int BASE_ITEM_BASIC_CLOTHING = 85; -int BASE_ITEM_WRIST_LAUNCHER = 91; -int BASE_ITEM_FORCE_PIKE = 93; // DJS-OEI 8/19/2004 - -int BASE_ITEM_INVALID = 256; - - -// AMF: These constants define attack results -int ATTACK_RESULT_INVALID = 0; -int ATTACK_RESULT_HIT_SUCCESSFUL = 1; -int ATTACK_RESULT_CRITICAL_HIT = 2; -int ATTACK_RESULT_AUTOMATIC_HIT = 3; - -int ATTACK_RESULT_MISS = 4; -int ATTACK_RESULT_ATTACK_RESISTED = 5; -int ATTACK_RESULT_ATTACK_FAILED = 6; - -int ATTACK_RESULT_PARRIED = 8; -int ATTACK_RESULT_DEFLECTED = 9; - - -// these match the constants in visualeffects.2da -int VFX_NONE = -1; - -int VFX_IMP_HEALING_SMALL = 1001; -int VFX_IMP_FORCE_JUMP_ADVANCED = 1002; -int VFX_PRO_AFFLICT = 1003; -int VFX_IMP_CHOKE = 1004; -int VFX_IMP_CURE = 1005; -int VFX_PRO_DEATH_FIELD = 1006; -int VFX_PRO_DROID_DISABLE = 1007; -int VFX_PRO_DROID_KILL = 1008; -int VFX_PRO_DRAIN = 1009; -int VFX_PRO_FORCE_ARMOR = 1010; -int VFX_PRO_FORCE_AURA = 1011; -int VFX_IMP_FORCE_BREACH = 1012; -int VFX_IMP_FORCE_PUSH = 1014; -int VFX_PRO_FORCE_SHIELD = 1015; -int VFX_IMP_FORCE_WAVE = 1017; -int VFX_IMP_FORCE_WHIRLWIND = 1018; -int VFX_IMP_HEAL = 1019; -int VFX_IMP_SPEED_KNIGHT = 1020; -int VFX_PRO_LIGHTNING_L = 1021; -int VFX_IMP_SPEED_MASTERY = 1022; -int VFX_PRO_RESIST_ELEMENTS = 1025; -int VFX_PRO_RESIST_FORCE = 1026; -int VFX_PRO_RESIST_POISON = 1027; -int VFX_PRO_LIGHTNING_S = 1028; -int VFX_IMP_MIND_FORCE = 1031; -int VFX_IMP_SUPPRESS_FORCE = 1032; -int VFX_IMP_MIND_KINIGHT = 1033; -int VFX_IMP_MIND_MASTERY = 1034; -int VFX_PRO_LIGHTNING_JEDI = 1035; -int VFX_PRO_LIGHTNING_L_SOUND = 1036; -int VFX_IMP_GRENADE_ADHESIVE_PERSONAL = 1038; -int VFX_IMP_FLAME = 1039; -int VFX_IMP_STUN = 1040; - -int VFX_DUR_STEALTH_PULSE = 2000; -int VFX_DUR_INVISIBILITY = 2001; -int VFX_DUR_SPEED = 2004; -int VFX_DUR_FORCE_WHIRLWIND = 2007; -int VFX_DUR_HOLD = 2008; -int VFX_DUR_BODY_FUAL = 2024; -int VFX_DUR_PSYCHIC_STATIC = 2025; -int VFX_BEAM_DEATH_FIELD_TENTACLE = 2026; -int VFX_BEAM_DROID_DISABLE = 2027; -int VFX_BEAM_DROID_DESTROY = 2028; -int VFX_BEAM_DRAIN_LIFE = 2029; -int VFX_DUR_KNIGHTS_SPEED = 2031; -int VFX_DUR_SHIELD_RED_MARK_I = 2032; -int VFX_DUR_SHIELD_RED_MARK_II = 2034; -int VFX_DUR_SHIELD_RED_MARK_IV = 2035; -int VFX_BEAM_LIGHTNING_DARK_S = 2037; -int VFX_BEAM_LIGHTNING_DARK_L = 2038; -int VFX_DUR_SHIELD_BLUE_01 = 2040; -int VFX_DUR_SHIELD_BLUE_02 = 2041; -int VFX_DUR_SHIELD_BLUE_03 = 2042; -int VFX_DUR_SHIELD_BLUE_04 = 2043; -int VFX_DUR_SHIELD_GREEN_01 = 2044; -int VFX_DUR_SHIELD_RED_01 = 2045; -int VFX_DUR_SHIELD_RED_02 = 2046; -int VFX_DUR_SHIELD_CHROME_01 = 2047; -int VFX_DUR_SHIELD_CHROME_02 = 2048; -int VFX_BEAM_ION_RAY_01 = 2049; -int VFX_BEAM_ION_RAY_02 = 2050; -int VFX_BEAM_COLD_RAY = 2051; -int VFX_BEAM_STUN_RAY = 2052; -int VFX_BEAM_FLAME_SPRAY = 2053; -int VFX_DUR_CARBONITE_ENCASING = 2054; -int VFX_DUR_CARBONITE_CHUNKS = 2055; -int VFX_DUR_SHIELD_BLUE_MARK_I = 2056; -int VFX_DUR_SHIELD_BLUE_MARK_II = 2058; -int VFX_DUR_SHIELD_BLUE_MARK_IV = 2059; -int VFX_DUR_ELECTRICAL_SPARK = 2067; - -int VFX_FNF_FORCE_WAVE = 3001; -int VFX_FNF_PLOT_MAN_SONIC_WAVE = 3002; -int VFX_FNF_GRENADE_FRAGMENTATION = 3003; -int VFX_FNF_GRENADE_STUN = 3004; -int VFX_FNF_GRENADE_THERMAL_DETONATOR = 3005; -int VFX_FNF_GRENADE_POISON = 3006; -int VFX_FNF_GRENADE_SONIC = 3007; -int VFX_FNF_GRENADE_ADHESIVE = 3008; -int VFX_FNF_GRENADE_CRYOBAN = 3009; -int VFX_FNF_GRENADE_PLASMA = 3010; -int VFX_FNF_GRENADE_ION = 3011; -int VFX_FNF_GRAVITY_GENERATOR = 3013; - -int VFX_COM_SPARKS_LARGE = 4003; -int VFX_COM_SPARKS_LIGHTSABER = 4004; -int VFX_COM_SPARKS_PARRY_METAL = 4011; -int VFX_COM_POWER_ATTACK_IMPROVED_STAFF = 4012; -int VFX_COM_POWER_BLAST_IMPROVED = 4013; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_STAFF = 4014; -int VFX_COM_SNIPER_SHOT_IMPROVED = 4015; -int VFX_COM_MULTI_SHOT = 4016; -int VFX_COM_WHIRLWIND_STRIKE_STAFF = 4017; -int VFX_COM_CRITICAL_STRIKE_MASTERY_STAFF = 4018; -int VFX_COM_POWER_ATTACK_MASTERY_STAFF = 4019; -int VFX_COM_SNIPER_SHOT_MASTERY = 4020; -int VFX_COM_FLURRY_IMPROVED_STAFF = 4021; -int VFX_COM_RAPID_SHOT_IMPROVED = 4022; -int VFX_COM_BLASTER_DEFLECTION = 4023; -int VFX_COM_BLASTER_IMPACT = 4024; -int VFX_COM_CRITICAL_STRIKE_IMPROVED_SABER = 4025; -int VFX_COM_CRITICAL_STRIKE_MASTERY_SABER = 4026; -int VFX_COM_POWER_ATTACK_IMPROVED_SABER = 4027; -int VFX_COM_POWER_ATTACK_MASTERY_SABER = 4028; -int VFX_COM_POWER_BLAST_MASTERY = 4029; -int VFX_COM_FLURRY_IMPROVED_SABER = 4030; -int VFX_COM_WHIRLWIND_STRIKE_SABER = 4031; -int VFX_COM_BLASTER_IMPACT_GROUND = 4032; -int VFX_COM_SPARKS_BLASTER = 4033; -int VFX_COM_DROID_EXPLOSION_1 = 4034; -int VFX_COM_DROID_EXPLOSION_2 = 4035; -int VFX_COM_JEDI_FORCE_FIZZLE = 4036; -int VFX_COM_FORCE_RESISTED = 4037; - -int VFX_ARD_LIGHT_YELLOW_10 = 5000; -int VFX_ARD_LIGHT_YELLOW_20 = 5001; -int VFX_ARD_LIGHT_BLIND = 5002; -int VFX_ARD_HEAT_SHIMMER = 5003; - -int VFX_IMP_MIRV = 6000; -int VFX_IMP_MIRV_IMPACT = 6001; -int VFX_IMP_SCREEN_SHAKE = 6002; - -int VFX_DUR_HOLO_PROJECT = 9010; // DJS-OEI 9/15/2004 - -int AOE_PER_FOGACID = 0; -int AOE_PER_FOGFIRE = 1; -int AOE_PER_FOGSTINK = 2; -int AOE_PER_FOGKILL = 3; -int AOE_PER_FOGMIND = 4; -int AOE_PER_WALLFIRE = 5; -int AOE_PER_WALLWIND = 6; -int AOE_PER_WALLBLADE = 7; -int AOE_PER_WEB = 8; -int AOE_PER_ENTANGLE = 9; -//int AOE_PER_CHAOS = 10; -int AOE_PER_DARKNESS = 11; -int AOE_MOB_CIRCEVIL = 12; -int AOE_MOB_CIRCGOOD = 13; -int AOE_MOB_CIRCLAW = 14; -int AOE_MOB_CIRCCHAOS = 15; -int AOE_MOB_FEAR = 16; -int AOE_MOB_BLINDING = 17; -int AOE_MOB_UNEARTHLY = 18; -int AOE_MOB_MENACE = 19; -int AOE_MOB_UNNATURAL = 20; -int AOE_MOB_STUN = 21; -int AOE_MOB_PROTECTION = 22; -int AOE_MOB_FIRE = 23; -int AOE_MOB_FROST = 24; -int AOE_MOB_ELECTRICAL = 25; -int AOE_PER_FOGGHOUL = 26; -int AOE_MOB_TYRANT_FOG = 27; -int AOE_PER_STORM = 28; -int AOE_PER_INVIS_SPHERE = 29; -int AOE_MOB_SILENCE = 30; -int AOE_PER_DELAY_BLAST_FIREBALL = 31; -int AOE_PER_GREASE = 32; -int AOE_PER_CREEPING_DOOM = 33; -int AOE_PER_EVARDS_BLACK_TENTACLES = 34; -int AOE_MOB_INVISIBILITY_PURGE = 35; -int AOE_MOB_DRAGON_FEAR = 36; - -// DJS-OEI 7/21/2004 -// Form re-design. -/* -// DJS-OEI 3/28/2004 -// These masks are used in Spells.2DA to indicate which spells -// can be affected by which Forms. Unfortunately, the script compiler -// won't let me make a constant with a Hex value, so I've had to use -// decimal. -int FORM_MASK_FORCE_FOCUS = 1; -int FORM_MASK_ENDURING_FORCE = 2; -int FORM_MASK_FORCE_AMPLIFICATION = 4; -int FORM_MASK_FORCE_POTENCY = 8; -int FORM_MASK_REGENERATION = 16; -int FORM_MASK_POWER_OF_THE_DARK_SIDE = 32; -*/ - -// these constants match those in spell.2da -int FORCE_POWER_ALL_FORCE_POWERS = -1; // used for spell immunity. -int FORCE_POWER_MASTER_ALTER = 0; -int FORCE_POWER_MASTER_CONTROL = 1; -int FORCE_POWER_MASTER_SENSE = 2; -int FORCE_POWER_FORCE_JUMP_ADVANCED = 3; -int FORCE_POWER_LIGHT_SABER_THROW_ADVANCED = 4; -int FORCE_POWER_REGNERATION_ADVANCED = 5; -int FORCE_POWER_AFFECT_MIND = 6; -int FORCE_POWER_AFFLICTION = 7; -int FORCE_POWER_SPEED_BURST = 8; -int FORCE_POWER_CHOKE = 9; -int FORCE_POWER_CURE = 10; -int FORCE_POWER_DEATH_FIELD = 11; -int FORCE_POWER_DROID_DISABLE = 12; -int FORCE_POWER_DROID_DESTROY = 13; -int FORCE_POWER_DOMINATE = 14; -int FORCE_POWER_DRAIN_LIFE = 15; -int FORCE_POWER_FEAR = 16; -int FORCE_POWER_FORCE_ARMOR = 17; -int FORCE_POWER_FORCE_AURA = 18; -int FORCE_POWER_FORCE_BREACH = 19; -int FORCE_POWER_FORCE_IMMUNITY = 20; -int FORCE_POWER_FORCE_JUMP = 21; -int FORCE_POWER_FORCE_MIND = 22; -int FORCE_POWER_FORCE_PUSH = 23; -int FORCE_POWER_FORCE_SHIELD = 24; -int FORCE_POWER_FORCE_STORM = 25; -int FORCE_POWER_FORCE_WAVE = 26; -int FORCE_POWER_FORCE_WHIRLWIND = 27; -int FORCE_POWER_HEAL = 28; -int FORCE_POWER_HOLD = 29; -int FORCE_POWER_HORROR = 30; -int FORCE_POWER_INSANITY = 31; -int FORCE_POWER_KILL = 32; -int FORCE_POWER_KNIGHT_MIND = 33; -int FORCE_POWER_KNIGHT_SPEED = 34; -int FORCE_POWER_LIGHTNING = 35; -int FORCE_POWER_MIND_MASTERY = 36; -int FORCE_POWER_SPEED_MASTERY = 37; -int FORCE_POWER_PLAGUE = 38; -int FORCE_POWER_REGENERATION = 39; -int FORCE_POWER_RESIST_COLD_HEAT_ENERGY = 40; -int FORCE_POWER_RESIST_FORCE = 41; -int FORCE_POWER_RESIST_POISON_DISEASE_SONIC = 42; -int FORCE_POWER_SHOCK = 43; -int FORCE_POWER_SLEEP = 44; -int FORCE_POWER_SLOW = 45; -int FORCE_POWER_STUN = 46; -int FORCE_POWER_DROID_STUN = 47; -int FORCE_POWER_SUPRESS_FORCE = 48; -int FORCE_POWER_LIGHT_SABER_THROW = 49; -int FORCE_POWER_WOUND = 50; -int SPECIAL_ABILITY_BATTLE_MEDITATION = 51; -int SPECIAL_ABILITY_BODY_FUEL = 52; -int SPECIAL_ABILITY_COMBAT_REGENERATION = 53; -int SPECIAL_ABILITY_WARRIOR_STANCE = 54; -int SPECIAL_ABILITY_SENTINEL_STANCE = 55; -int SPECIAL_ABILITY_DOMINATE_MIND = 56; -int SPECIAL_ABILITY_PSYCHIC_STANCE = 57; -int SPECIAL_ABILITY_CATHAR_REFLEXES = 58; -int SPECIAL_ABILITY_ENHANCED_SENSES = 59; -int SPECIAL_ABILITY_CAMOFLAGE = 60; -int SPECIAL_ABILITY_TAUNT = 61; -int SPECIAL_ABILITY_WHIRLING_DERVISH = 62; -int SPECIAL_ABILITY_RAGE = 63; - -// DJS-OEI 12/9/2003 -// New Force Powers -int FORCE_POWER_MASTER_ENERGY_RESISTANCE = 133; -int FORCE_POWER_MASTER_HEAL = 134; -int FORCE_POWER_FORCE_BARRIER = 135; -int FORCE_POWER_IMPROVED_FORCE_BARRIER = 136; -int FORCE_POWER_MASTER_FORCE_BARRIER = 137; -int FORCE_POWER_BATTLE_MEDITATION_PC = 138; // Only PCs, CNPCs, and Friendly allies should cast -int FORCE_POWER_IMPROVED_BATTLE_MEDITATION_PC = 139; // these versions of Battle Meditation. -int FORCE_POWER_MASTER_BATTLE_MEDITATION_PC = 140; // -int FORCE_POWER_BAT_MED_ENEMY = 141; // Only hostile creatures should cast -int FORCE_POWER_IMP_BAT_MED_ENEMY = 142; // these versions of Battle Meditation. -int FORCE_POWER_MAS_BAT_MED_ENEMY = 143; // -int FORCE_POWER_CRUSH_OPPOSITION_I = 144; -int FORCE_POWER_CRUSH_OPPOSITION_II = 145; -int FORCE_POWER_CRUSH_OPPOSITION_III = 146; -int FORCE_POWER_CRUSH_OPPOSITION_IV = 147; -int FORCE_POWER_CRUSH_OPPOSITION_V = 148; -int FORCE_POWER_CRUSH_OPPOSITION_VI = 149; -int FORCE_POWER_FORCE_BODY = 150; -int FORCE_POWER_IMPROVED_FORCE_BODY = 151; -int FORCE_POWER_MASTER_FORCE_BODY = 152; -int FORCE_POWER_DRAIN_FORCE = 153; -int FORCE_POWER_IMPROVED_DRAIN_FORCE = 154; -int FORCE_POWER_MASTER_DRAIN_FORCE = 155; -int FORCE_POWER_FORCE_CAMOUFLAGE = 156; -int FORCE_POWER_IMPROVED_FORCE_CAMOUFLAGE = 157; -int FORCE_POWER_MASTER_FORCE_CAMOUFLAGE = 158; -int FORCE_POWER_FORCE_SCREAM = 159; -int FORCE_POWER_IMPROVED_FORCE_SCREAM = 160; -int FORCE_POWER_MASTER_FORCE_SCREAM = 161; -int FORCE_POWER_FORCE_REPULSION = 162; -int FORCE_POWER_FORCE_REDIRECTION = 163; -int FORCE_POWER_FURY = 164; -int FORCE_POWER_IMPROVED_FURY = 165; -int FORCE_POWER_MASTER_FURY = 166; -int FORCE_POWER_INSPIRE_FOLLOWERS_I = 167; -int FORCE_POWER_INSPIRE_FOLLOWERS_II = 168; -int FORCE_POWER_INSPIRE_FOLLOWERS_III = 169; -int FORCE_POWER_INSPIRE_FOLLOWERS_IV = 170; -int FORCE_POWER_INSPIRE_FOLLOWERS_V = 171; -int FORCE_POWER_INSPIRE_FOLLOWERS_VI = 172; -int FORCE_POWER_REVITALIZE = 173; -int FORCE_POWER_IMPROVED_REVITALIZE = 174; -int FORCE_POWER_MASTER_REVITALIZE = 175; -int FORCE_POWER_FORCE_SIGHT = 176; -int FORCE_POWER_FORCE_CRUSH = 177; -int FORCE_POWER_PRECOGNITION = 178; -int FORCE_POWER_BATTLE_PRECOGNITION = 179; -int FORCE_POWER_FORCE_ENLIGHTENMENT = 180; -int FORCE_POWER_MIND_TRICK = 181; -int FORCE_POWER_CONFUSION = 200; -int FORCE_POWER_BEAST_TRICK = 182; -int FORCE_POWER_BEAST_CONFUSION = 184; -int FORCE_POWER_DROID_TRICK = 201; -int FORCE_POWER_DROID_CONFUSION = 269; -int FORCE_POWER_BREATH_CONTROL = 270; -int FORCE_POWER_WOOKIEE_RAGE_I = 271; -int FORCE_POWER_WOOKIEE_RAGE_II = 272; -int FORCE_POWER_WOOKIEE_RAGE_III = 273; - -// DJS-OEI 7/21/2004 -// Form re-design. -/* -// DJS-OEI 3/25/2004 -int FORM_LIGHTSABER_PADAWAN_I = 205; -int FORM_LIGHTSABER_PADAWAN_II = 206; -int FORM_LIGHTSABER_PADAWAN_III = 207; -int FORM_LIGHTSABER_DAKLEAN_I = 208; -int FORM_LIGHTSABER_DAKLEAN_II = 209; -int FORM_LIGHTSABER_DAKLEAN_III = 210; -int FORM_LIGHTSABER_SENTINEL_I = 211; -int FORM_LIGHTSABER_SENTINEL_II = 212; -int FORM_LIGHTSABER_SENTINEL_III = 213; -int FORM_LIGHTSABER_SODAK_I = 214; -int FORM_LIGHTSABER_SODAK_II = 215; -int FORM_LIGHTSABER_SODAK_III = 216; -int FORM_LIGHTSABER_ANCIENT_I = 217; -int FORM_LIGHTSABER_ANCIENT_II = 218; -int FORM_LIGHTSABER_ANCIENT_III = 219; -int FORM_LIGHTSABER_MASTER_I = 220; -int FORM_LIGHTSABER_MASTER_II = 221; -int FORM_LIGHTSABER_MASTER_III = 222; -int FORM_CONSULAR_FORCE_FOCUS_I = 223; -int FORM_CONSULAR_FORCE_FOCUS_II = 224; -int FORM_CONSULAR_FORCE_FOCUS_III = 225; -int FORM_CONSULAR_ENDURING_FORCE_I = 226; -int FORM_CONSULAR_ENDURING_FORCE_II = 227; -int FORM_CONSULAR_ENDURING_FORCE_III = 228; -int FORM_CONSULAR_FORCE_AMPLIFICATION_I = 229; -int FORM_CONSULAR_FORCE_AMPLIFICATION_II = 230; -int FORM_CONSULAR_FORCE_AMPLIFICATION_III = 231; -int FORM_CONSULAR_FORCE_SHELL_I = 232; -int FORM_CONSULAR_FORCE_SHELL_II = 233; -int FORM_CONSULAR_FORCE_SHELL_III = 234; -int FORM_CONSULAR_FORCE_POTENCY_I = 235; -int FORM_CONSULAR_FORCE_POTENCY_II = 236; -int FORM_CONSULAR_FORCE_POTENCY_III = 237; -int FORM_CONSULAR_REGENERATION_I = 238; -int FORM_CONSULAR_REGENERATION_II = 239; -int FORM_CONSULAR_REGENERATION_III = 240; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_I = 241; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_II = 242; -int FORM_CONSULAR_POWER_OF_THE_DARK_SIDE_III = 243; -*/ - -int FORM_SABER_I_SHII_CHO = 258; -int FORM_SABER_II_MAKASHI = 259; -int FORM_SABER_III_SORESU = 260; -int FORM_SABER_IV_ATARU = 261; -int FORM_SABER_V_SHIEN = 262; -int FORM_SABER_VI_NIMAN = 263; -int FORM_SABER_VII_JUYO = 264; -int FORM_FORCE_I_FOCUS = 265; -int FORM_FORCE_II_POTENCY = 266; -int FORM_FORCE_III_AFFINITY = 267; -int FORM_FORCE_IV_MASTERY = 268; - -// these constants must match those in poison.2da - -int POISON_ABILITY_SCORE_MILD = 0; -int POISON_ABILITY_SCORE_AVERAGE = 1; -int POISON_ABILITY_SCORE_VIRULENT = 2; -int POISON_DAMAGE_MILD = 3; -int POISON_DAMAGE_AVERAGE = 4; -int POISON_DAMAGE_VIRULENT = 5; -int POISON_ABILITY_AND_DAMAGE_AVERAGE = 6; -int POISON_ABILITY_AND_DAMAGE_VIRULENT = 7; -int POISON_DAMAGE_ROCKET = 8; // DJS-OEI 4/12/2004 -int POISON_DAMAGE_NORMAL_DART = 9; // DJS-OEI 4/13/2004 -int POISON_DAMAGE_KYBER_DART = 10; // DJS-OEI 4/13/2004 -int POISON_DAMAGE_KYBER_DART_HALF = 11; // DJS-OEI 4/13/2004 - -// the thing after CREATURE_TYPE_ should refer to the -// actual "subtype" in the lists given above. -int CREATURE_TYPE_RACIAL_TYPE = 0; -int CREATURE_TYPE_PLAYER_CHAR = 1; -int CREATURE_TYPE_CLASS = 2; -int CREATURE_TYPE_REPUTATION = 3; -int CREATURE_TYPE_IS_ALIVE = 4; -int CREATURE_TYPE_HAS_SPELL_EFFECT = 5; -int CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT = 6; -int CREATURE_TYPE_PERCEPTION = 7; -//int CREATURE_TYPE_ALIGNMENT = 2; - -int REPUTATION_TYPE_FRIEND = 0; -int REPUTATION_TYPE_ENEMY = 1; -int REPUTATION_TYPE_NEUTRAL = 2; - -int PERCEPTION_SEEN_AND_HEARD = 0; -int PERCEPTION_NOT_SEEN_AND_NOT_HEARD = 1; -int PERCEPTION_HEARD_AND_NOT_SEEN = 2; -int PERCEPTION_SEEN_AND_NOT_HEARD = 3; -int PERCEPTION_NOT_HEARD = 4; -int PERCEPTION_HEARD = 5; -int PERCEPTION_NOT_SEEN = 6; -int PERCEPTION_SEEN = 7; - -int PLAYER_CHAR_NOT_PC = FALSE; -int PLAYER_CHAR_IS_PC = TRUE; - -int CLASS_TYPE_SOLDIER = 0; -int CLASS_TYPE_SCOUT = 1; -int CLASS_TYPE_SCOUNDREL = 2; -int CLASS_TYPE_JEDIGUARDIAN = 3; -int CLASS_TYPE_JEDICONSULAR = 4; -int CLASS_TYPE_JEDISENTINEL = 5; -int CLASS_TYPE_COMBATDROID = 6; -int CLASS_TYPE_EXPERTDROID = 7; -int CLASS_TYPE_MINION = 8; - -// DJS-OEI 2/11/2004 -int CLASS_TYPE_TECHSPECIALIST = 9; -int CLASS_TYPE_BOUNTYHUNTER = 10; // Cut, I believe -int CLASS_TYPE_JEDIWEAPONMASTER = 11; -int CLASS_TYPE_JEDIMASTER = 12; -int CLASS_TYPE_JEDIWATCHMAN = 13; -int CLASS_TYPE_SITHMARAUDER = 14; -int CLASS_TYPE_SITHLORD = 15; -int CLASS_TYPE_SITHASSASSIN = 16; - - -int CLASS_TYPE_INVALID = 255; - -// These are for GetFirstInPersistentObject() and GetNextInPersistentObject() -int PERSISTENT_ZONE_ACTIVE = 0; -int PERSISTENT_ZONE_FOLLOW = 1; - -int INVALID_STANDARD_FACTION = -1; -int STANDARD_FACTION_HOSTILE_1 = 1; -int STANDARD_FACTION_FRIENDLY_1 = 2; -int STANDARD_FACTION_HOSTILE_2 = 3; -int STANDARD_FACTION_FRIENDLY_2 = 4; -int STANDARD_FACTION_NEUTRAL = 5; -int STANDARD_FACTION_INSANE = 6; -int STANDARD_FACTION_PTAT_TUSKAN = 7; -int STANDARD_FACTION_GLB_XOR = 8; -int STANDARD_FACTION_SURRENDER_1 = 9; -int STANDARD_FACTION_SURRENDER_2 = 10; -int STANDARD_FACTION_PREDATOR = 11; -int STANDARD_FACTION_PREY = 12; -int STANDARD_FACTION_TRAP = 13; -int STANDARD_FACTION_ENDAR_SPIRE = 14; -int STANDARD_FACTION_RANCOR = 15; -int STANDARD_FACTION_GIZKA_1 = 16; -int STANDARD_FACTION_GIZKA_2 = 17; -// DJS-OEI 2/25/2004 -int STANDARD_FACTION_SELF_LOATHING = 21; -int STANDARD_FACTION_ONE_ON_ONE = 22; -int STANDARD_FACTION_PARTYPUPPET = 23; - -// Skill defines -int SKILL_COMPUTER_USE = 0; -int SKILL_DEMOLITIONS = 1; -int SKILL_STEALTH = 2; -int SKILL_AWARENESS = 3; -int SKILL_PERSUADE = 4; -int SKILL_REPAIR = 5; -int SKILL_SECURITY = 6; -int SKILL_TREAT_INJURY = 7; -int SKILL_MAX_SKILLS = 8; - -int SUBSKILL_FLAGTRAP = 100; -int SUBSKILL_RECOVERTRAP = 101; -int SUBSKILL_EXAMINETRAP = 102; - -// FEATS -//int FEAT_ADVANCED_DODGE = 0; -int FEAT_ADVANCED_JEDI_DEFENSE = 1; -int FEAT_ADVANCED_GUARD_STANCE = 2; -int FEAT_AMBIDEXTERITY = 3; -int FEAT_ARMOUR_PROF_HEAVY = 4; -int FEAT_ARMOUR_PROF_LIGHT = 5; -int FEAT_ARMOUR_PROF_MEDIUM = 6; -int FEAT_CAUTIOUS = 7; -int FEAT_CRITICAL_STRIKE = 8; -int FEAT_DOUBLE_WEAPON_FIGHTING = 9; -int FEAT_EMPATHY = 10; -int FEAT_FLURRY = 11; -int FEAT_GEAR_HEAD = 12; -int FEAT_GREAT_FORTITUDE = 13; -int FEAT_IMPLANT_LEVEL_1 = 14; -int FEAT_IMPLANT_LEVEL_2 = 15; -int FEAT_IMPLANT_LEVEL_3 = 16; -int FEAT_IMPROVED_POWER_ATTACK = 17; -int FEAT_IMPROVED_POWER_BLAST = 18; -int FEAT_IMPROVED_CRITICAL_STRIKE = 19; -int FEAT_IMPROVED_SNIPER_SHOT = 20; -int FEAT_IRON_WILL = 21; -int FEAT_LIGHTNING_REFLEXES = 22; -//int FEAT_MASTER_DODGE = 23; -int FEAT_MASTER_JEDI_DEFENSE = 24; -int FEAT_MASTER_GUARD_STANCE = 25; -int FEAT_MULTI_SHOT = 26; -int FEAT_PERCEPTIVE = 27; -int FEAT_POWER_ATTACK = 28; -int FEAT_POWER_BLAST = 29; -int FEAT_RAPID_SHOT = 30; -int FEAT_SNIPER_SHOT = 31; -int FEAT_WEAPON_FOCUS_BLASTER = 32; -int FEAT_WEAPON_FOCUS_BLASTER_RIFLE = 33; -int FEAT_WEAPON_FOCUS_GRENADE = 34; -int FEAT_WEAPON_FOCUS_HEAVY_WEAPONS = 35; -int FEAT_WEAPON_FOCUS_LIGHTSABER = 36; -int FEAT_WEAPON_FOCUS_MELEE_WEAPONS = 37; -int FEAT_WEAPON_FOCUS_SIMPLE_WEAPONS = 38; -int FEAT_WEAPON_PROFICIENCY_BLASTER = 39; -int FEAT_WEAPON_PROFICIENCY_BLASTER_RIFLE = 40; -int FEAT_WEAPON_PROFICIENCY_GRENADE = 41; -int FEAT_WEAPON_PROFICIENCY_HEAVY_WEAPONS = 42; -int FEAT_WEAPON_PROFICIENCY_LIGHTSABER = 43; -int FEAT_WEAPON_PROFICIENCY_MELEE_WEAPONS = 44; -int FEAT_WEAPON_PROFICIENCY_SIMPLE_WEAPONS = 45; -int FEAT_WEAPON_SPECIALIZATION_BLASTER = 46; -int FEAT_WEAPON_SPECIALIZATION_BLASTER_RIFLE = 47; -int FEAT_WEAPON_SPECIALIZATION_GRENADE = 48; -int FEAT_WEAPON_SPECIALIZATION_HEAVY_WEAPONS = 49; -int FEAT_WEAPON_SPECIALIZATION_LIGHTSABER = 50; -int FEAT_WEAPON_SPECIALIZATION_MELEE_WEAPONS = 51; -int FEAT_WEAPON_SPECIALIZATION_SIMPLE_WEAPONS = 52; -int FEAT_WHIRLWIND_ATTACK = 53; -int FEAT_GUARD_STANCE = 54; -int FEAT_JEDI_DEFENSE = 55; -int FEAT_UNCANNY_DODGE_1 = 56; -int FEAT_UNCANNY_DODGE_2 = 57; -int FEAT_SKILL_FOCUS_COMPUTER_USE = 58; -//int FEAT_DODGE = 59; -int FEAT_SNEAK_ATTACK_1D6 = 60; -int FEAT_SNEAK_ATTACK_2D6 = 61; -int FEAT_SNEAK_ATTACK_3D6 = 62; -int FEAT_SNEAK_ATTACK_4D6 = 63; -int FEAT_SNEAK_ATTACK_5D6 = 64; -int FEAT_SNEAK_ATTACK_6D6 = 65; -int FEAT_SNEAK_ATTACK_7D6 = 66; -int FEAT_SNEAK_ATTACK_8D6 = 67; -int FEAT_SNEAK_ATTACK_9D6 = 68; -int FEAT_SNEAK_ATTACK_10D6 = 69; -int FEAT_SKILL_FOCUS_DEMOLITIONS = 70; -int FEAT_SKILL_FOCUS_STEALTH = 71; -int FEAT_SKILL_FOCUS_AWARENESS = 72; -int FEAT_SKILL_FOCUS_PERSUADE = 73; -int FEAT_SKILL_FOCUS_REPAIR = 74; -int FEAT_SKILL_FOCUS_SECURITY = 75; -int FEAT_SKILL_FOCUS_TREAT_INJUURY = 76; -int FEAT_MASTER_SNIPER_SHOT = 77; -int FEAT_DROID_UPGRADE_1 = 78; -int FEAT_DROID_UPGRADE_2 = 79; -int FEAT_DROID_UPGRADE_3 = 80; -int FEAT_MASTER_CRITICAL_STRIKE = 81; -int FEAT_MASTER_POWER_BLAST = 82; -int FEAT_MASTER_POWER_ATTACK = 83; -int FEAT_TOUGHNESS = 84; -int FEAT_ADVANCED_DOUBLE_WEAPON_FIGHTING = 85; -int FEAT_FORCE_FOCUS_ALTER = 86; -int FEAT_FORCE_FOCUS_CONTROL = 87; -int FEAT_FORCE_FOCUS_SENSE = 88; -int FEAT_FORCE_FOCUS_ADVANCED = 89; -int FEAT_FORCE_FOCUS_MASTERY = 90; -int FEAT_IMPROVED_FLURRY = 91; -int FEAT_IMPROVED_RAPID_SHOT = 92; -int FEAT_PROFICIENCY_ALL = 93; -int FEAT_BATTLE_MEDITATION = 94; -// DJS-OEI 11/12/2003 -int FEAT_EVASION = 125; -int FEAT_TARGETING_1 = 126; -int FEAT_TARGETING_2 = 127; -int FEAT_TARGETING_3 = 128; -int FEAT_TARGETING_4 = 129; -int FEAT_TARGETING_5 = 130; -int FEAT_TARGETING_6 = 131; -int FEAT_TARGETING_7 = 132; -int FEAT_TARGETING_8 = 133; -int FEAT_TARGETING_9 = 134; -int FEAT_TARGETING_10 = 135; -// DJS-OEI 10/5/2004 -// Moved down to 240+ -/* -int FEAT_PRECISE_SHOT = 136; -int FEAT_IMPROVED_PRECISE_SHOT = 137; -int FEAT_MASTER_PRECISE_SHOT = 138; -*/ -int FEAT_CLOSE_COMBAT = 139; -int FEAT_IMPROVED_CLOSE_COMBAT = 140; -int FEAT_IMPROVED_FORCE_CAMOUFLAGE = 141; -int FEAT_MASTER_FORCE_CAMOUFLAGE = 142; -int FEAT_REGENERATE_FORCE_POINTS = 143; -int FEAT_DARK_SIDE_CORRUPTION = 149; -int FEAT_IGNORE_PAIN_1 = 150; -int FEAT_IGNORE_PAIN_2 = 151; -int FEAT_IGNORE_PAIN_3 = 152; -int FEAT_INCREASE_COMBAT_DAMAGE_1 = 153; -int FEAT_INCREASE_COMBAT_DAMAGE_2 = 154; -int FEAT_INCREASE_COMBAT_DAMAGE_3 = 155; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_1 = 156; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_2 = 157; -int FEAT_SUPERIOR_WEAPON_FOCUS_LIGHTSABER_3 = 158; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_1 = 159; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_2 = 160; -int FEAT_SUPERIOR_WEAPON_FOCUS_TWO_WEAPON_3 = 161; -int FEAT_LIGHT_SIDE_ENLIGHTENMENT = 167; -int FEAT_DEFLECT = 168; -int FEAT_INNER_STRENGTH_1 = 169; -int FEAT_INNER_STRENGTH_2 = 170; -int FEAT_INNER_STRENGTH_3 = 171; -int FEAT_INCREASE_MELEE_DAMAGE_1 = 172; -int FEAT_INCREASE_MELEE_DAMAGE_2 = 173; -int FEAT_INCREASE_MELEE_DAMAGE_3 = 174; -int FEAT_CRAFT = 175; -int FEAT_MASTERCRAFT_WEAPONS_1 = 176; -int FEAT_MASTERCRAFT_WEAPONS_2 = 177; -int FEAT_MASTERCRAFT_WEAPONS_3 = 178; -int FEAT_MASTERCRAFT_ARMOR_1 = 179; -int FEAT_MASTERCRAFT_ARMOR_2 = 180; -int FEAT_MASTERCRAFT_ARMOR_3 = 181; -int FEAT_DROID_INTERFACE = 182; -int FEAT_CLASS_SKILL_AWARENESS = 183; -int FEAT_CLASS_SKILL_COMPUTER_USE = 184; -int FEAT_CLASS_SKILL_DEMOLITIONS = 185; -int FEAT_CLASS_SKILL_REPAIR = 186; -int FEAT_CLASS_SKILL_SECURITY = 187; -int FEAT_CLASS_SKILL_STEALTH = 188; -int FEAT_CLASS_SKILL_TREAT_INJURY = 189; -int FEAT_DUAL_STRIKE = 190; -int FEAT_IMPROVED_DUAL_STRIKE = 191; -int FEAT_MASTER_DUAL_STRIKE = 192; -int FEAT_FINESSE_LIGHTSABERS = 193; -int FEAT_FINESSE_MELEE_WEAPONS = 194; -int FEAT_MOBILITY = 195; -int FEAT_REGENERATE_VITALITY_POINTS = 196; -int FEAT_STEALTH_RUN = 197; -int FEAT_KINETIC_COMBAT = 198; -int FEAT_SURVIVAL = 199; -int FEAT_MANDALORIAN_COURAGE = 200; -int FEAT_PERSONAL_CLOAKING_SHIELD = 201; -int FEAT_MENTOR = 202; -int FEAT_IMPLANT_SWITCHING = 203; -int FEAT_SPIRIT = 204; -int FEAT_FORCE_CHAIN = 205; -int FEAT_WAR_VETERAN = 206; -// DJS-OEI 10/5/2004 -// Moved down to 240+ -/* -int FEAT_PRECISE_SHOT_IV = 226; -int FEAT_PRECISE_SHOT_V = 227; -*/ -int FEAT_FIGHTING_SPIRIT = 236; -int FEAT_HEROIC_RESOLVE = 237; -int FEAT_PRECISE_SHOT = 240; -int FEAT_IMPROVED_PRECISE_SHOT = 241; -int FEAT_MASTER_PRECISE_SHOT = 242; -int FEAT_PRECISE_SHOT_IV = 243; -int FEAT_PRECISE_SHOT_V = 244; - -// Special Attack Defines -int SPECIAL_ATTACK_INVALID = 0; -int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1; -int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2; -int SPECIAL_ATTACK_SAP = 3; -int SPECIAL_ATTACK_DISARM = 4; -int SPECIAL_ATTACK_IMPROVED_DISARM = 5; -int SPECIAL_ATTACK_KNOCKDOWN = 6; -int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7; -int SPECIAL_ATTACK_STUNNING_FIST = 8; -int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9; -int SPECIAL_ATTACK_RAPID_SHOT = 10; - -// Combat Mode Defines -int COMBAT_MODE_INVALID = 0; -int COMBAT_MODE_PARRY = 1; -int COMBAT_MODE_POWER_ATTACK = 2; -int COMBAT_MODE_IMPROVED_POWER_ATTACK = 3; -int COMBAT_MODE_FLURRY_OF_BLOWS = 4; -int COMBAT_MODE_RAPID_SHOT = 5; - -// These represent the row in the difficulty 2da, rather than -// a difficulty value. -int ENCOUNTER_DIFFICULTY_VERY_EASY = 0; -int ENCOUNTER_DIFFICULTY_EASY = 1; -int ENCOUNTER_DIFFICULTY_NORMAL = 2; -int ENCOUNTER_DIFFICULTY_HARD = 3; -int ENCOUNTER_DIFFICULTY_IMPOSSIBLE = 4; - -// Looping animation constants. -int ANIMATION_LOOPING_PAUSE = 0; -int ANIMATION_LOOPING_PAUSE2 = 1; -int ANIMATION_LOOPING_LISTEN = 2; -int ANIMATION_LOOPING_MEDITATE = 3; -int ANIMATION_LOOPING_WORSHIP = 4; -//int ANIMATION_LOOPING_LOOK_FAR = 5; -//int ANIMATION_LOOPING_SIT_CHAIR = 6; -//int ANIMATION_LOOPING_SIT_CROSS = 7; -int ANIMATION_LOOPING_TALK_NORMAL = 5; -int ANIMATION_LOOPING_TALK_PLEADING = 6; -int ANIMATION_LOOPING_TALK_FORCEFUL = 7; -int ANIMATION_LOOPING_TALK_LAUGHING = 8; -int ANIMATION_LOOPING_TALK_SAD = 9; -int ANIMATION_LOOPING_GET_LOW = 10; -int ANIMATION_LOOPING_GET_MID = 11; -int ANIMATION_LOOPING_PAUSE_TIRED = 12; -int ANIMATION_LOOPING_PAUSE_DRUNK = 13; -int ANIMATION_LOOPING_FLIRT = 14; -int ANIMATION_LOOPING_USE_COMPUTER = 15; -int ANIMATION_LOOPING_DANCE = 16; -int ANIMATION_LOOPING_DANCE1 = 17; -int ANIMATION_LOOPING_HORROR = 18; -int ANIMATION_LOOPING_READY = 19; -int ANIMATION_LOOPING_DEACTIVATE = 20; -int ANIMATION_LOOPING_SPASM = 21; -int ANIMATION_LOOPING_SLEEP = 22; -int ANIMATION_LOOPING_PRONE = 23; -int ANIMATION_LOOPING_PAUSE3 = 24; -int ANIMATION_LOOPING_WELD = 25; -int ANIMATION_LOOPING_DEAD = 26; -int ANIMATION_LOOPING_TALK_INJURED = 27; -int ANIMATION_LOOPING_LISTEN_INJURED = 28; -int ANIMATION_LOOPING_TREAT_INJURED = 29; -int ANIMATION_LOOPING_DEAD_PRONE = 30; -int ANIMATION_LOOPING_KNEEL_TALK_ANGRY = 31; -int ANIMATION_LOOPING_KNEEL_TALK_SAD = 32; -int ANIMATION_LOOPING_CHECK_BODY = 33; -int ANIMATION_LOOPING_UNLOCK_DOOR = 34; -int ANIMATION_LOOPING_SIT_AND_MEDITATE = 35; - -int ANIMATION_LOOPING_SIT_CHAIR = 36;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_DRINK = 37;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_PAZAK = 38;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_COMP1 = 39;//AWD-OEI 07/06/2004 -int ANIMATION_LOOPING_SIT_CHAIR_COMP2 = 40;//AWD-OEI 07/06/2004 - -int ANIMATION_LOOPING_RAGE = 41;//JAB-OEI 07/15/2004 -//int ANIMATION_LOOPING_DIVE_ROLL = 42;//BMA-OEI 08/18/2004 -int ANIMATION_LOOPING_CLOSED = 43;//AWD-OEI 08/23/2004 -int ANIMATION_LOOPING_STEALTH = 44;//BMA-OEI 08/31/2004 -int ANIMATION_LOOPING_CHOKE_WORKING = 45;//DJS-OEI 09/09/2004 -int ANIMATION_LOOPING_MEDITATE_STAND = 46;//DJS-OEI 9/10/2004 - -// NOTE: Choke is really a looping animation. The fire and forget constant has -// been left in because it has already been used in many places. Please -// use this constant from now on. -int ANIMATION_LOOPING_CHOKE = 116; - -// Fire and forget animation constants. -int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100; -int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101; -int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102; -int ANIMATION_FIREFORGET_PAUSE_BORED = 103; -int ANIMATION_FIREFORGET_SALUTE = 104; -int ANIMATION_FIREFORGET_BOW = 105; -//int ANIMATION_FIREFORGET_STEAL = 106; -int ANIMATION_FIREFORGET_GREETING = 106; -int ANIMATION_FIREFORGET_TAUNT = 107; -int ANIMATION_FIREFORGET_VICTORY1 = 108; -int ANIMATION_FIREFORGET_VICTORY2 = 109; -int ANIMATION_FIREFORGET_VICTORY3 = 110; -//int ANIMATION_FIREFORGET_READ = 111; -int ANIMATION_FIREFORGET_INJECT = 112; -int ANIMATION_FIREFORGET_USE_COMPUTER = 113; -int ANIMATION_FIREFORGET_PERSUADE = 114; -int ANIMATION_FIREFORGET_ACTIVATE = 115; -// NOTE: Please do not use this choke constant anymore. The choke is not a fire -// and forget animation. The looping choke constant above should be used -// instead. -int ANIMATION_FIREFORGET_CHOKE = 116; -int ANIMATION_FIREFORGET_THROW_HIGH = 117; -int ANIMATION_FIREFORGET_THROW_LOW = 118; -int ANIMATION_FIREFORGET_CUSTOM01 = 119; -int ANIMATION_FIREFORGET_TREAT_INJURED = 120; -int ANIMATION_FIREFORGET_FORCE_CAST = 121; -int ANIMATION_FIREFORGET_OPEN = 122;//AWD-OEI 08/23/2004 -int ANIMATION_FIREFORGET_DIVE_ROLL = 123;//DJS-OEI 08/29/2004 -int ANIMATION_FIREFORGET_SCREAM = 124;//DJS-OEI 09/09/2004 - -// Placeable animation constants -int ANIMATION_PLACEABLE_ACTIVATE = 200; -int ANIMATION_PLACEABLE_DEACTIVATE = 201; -int ANIMATION_PLACEABLE_OPEN = 202; -int ANIMATION_PLACEABLE_CLOSE = 203; -int ANIMATION_PLACEABLE_ANIMLOOP01 = 204; -int ANIMATION_PLACEABLE_ANIMLOOP02 = 205; -int ANIMATION_PLACEABLE_ANIMLOOP03 = 206; -int ANIMATION_PLACEABLE_ANIMLOOP04 = 207; -int ANIMATION_PLACEABLE_ANIMLOOP05 = 208; -int ANIMATION_PLACEABLE_ANIMLOOP06 = 209; -int ANIMATION_PLACEABLE_ANIMLOOP07 = 210; -int ANIMATION_PLACEABLE_ANIMLOOP08 = 211; -int ANIMATION_PLACEABLE_ANIMLOOP09 = 212; -int ANIMATION_PLACEABLE_ANIMLOOP10 = 213; - - -// Room Animation Constants -int ANIMATION_ROOM_SCRIPTLOOP01 = 1; -int ANIMATION_ROOM_SCRIPTLOOP02 = 2; -int ANIMATION_ROOM_SCRIPTLOOP03 = 3; -int ANIMATION_ROOM_SCRIPTLOOP04 = 4; -int ANIMATION_ROOM_SCRIPTLOOP05 = 5; -int ANIMATION_ROOM_SCRIPTLOOP06 = 6; -int ANIMATION_ROOM_SCRIPTLOOP07 = 7; -int ANIMATION_ROOM_SCRIPTLOOP08 = 8; -int ANIMATION_ROOM_SCRIPTLOOP09 = 9; -int ANIMATION_ROOM_SCRIPTLOOP10 = 10; -int ANIMATION_ROOM_SCRIPTLOOP11 = 11; -int ANIMATION_ROOM_SCRIPTLOOP12 = 12; -int ANIMATION_ROOM_SCRIPTLOOP13 = 13; -int ANIMATION_ROOM_SCRIPTLOOP14 = 14; -int ANIMATION_ROOM_SCRIPTLOOP15 = 15; -int ANIMATION_ROOM_SCRIPTLOOP16 = 16; -int ANIMATION_ROOM_SCRIPTLOOP17 = 17; -int ANIMATION_ROOM_SCRIPTLOOP18 = 18; -int ANIMATION_ROOM_SCRIPTLOOP19 = 19; -int ANIMATION_ROOM_SCRIPTLOOP20 = 20; - -int TALENT_TYPE_FORCE = 0; -int TALENT_TYPE_SPELL = 0; -int TALENT_TYPE_FEAT = 1; -int TALENT_TYPE_SKILL = 2; - -int TALENT_EXCLUDE_ALL_OF_TYPE = -1; - -int INVENTORY_DISTURB_TYPE_ADDED = 0; -int INVENTORY_DISTURB_TYPE_REMOVED = 1; -int INVENTORY_DISTURB_TYPE_STOLEN = 2; - -int GUI_PANEL_PLAYER_DEATH = 0; - -int POLYMORPH_TYPE_WEREWOLF = 0; -int POLYMORPH_TYPE_WERERAT = 1; -int POLYMORPH_TYPE_WERECAT = 2; -int POLYMORPH_TYPE_GIANT_SPIDER = 3; -int POLYMORPH_TYPE_TROLL = 4; -int POLYMORPH_TYPE_UMBER_HULK = 5; -int POLYMORPH_TYPE_PIXIE = 6; -int POLYMORPH_TYPE_ZOMBIE = 7; -int POLYMORPH_TYPE_RED_DRAGON = 8; -int POLYMORPH_TYPE_FIRE_GIANT = 9; -int POLYMORPH_TYPE_BALOR = 10; -int POLYMORPH_TYPE_DEATH_SLAAD = 11; -int POLYMORPH_TYPE_IRON_GOLEM = 12; -int POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL = 13; -int POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL = 14; -int POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL = 15; -int POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL = 16; -int POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL = 17; -int POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL = 18; -int POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL = 19; -int POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL = 20; -int POLYMORPH_TYPE_BROWN_BEAR = 21; -int POLYMORPH_TYPE_PANTHER = 22; -int POLYMORPH_TYPE_WOLF = 23; -int POLYMORPH_TYPE_BOAR = 24; -int POLYMORPH_TYPE_BADGER = 25; -int POLYMORPH_TYPE_PENGUIN = 26; -int POLYMORPH_TYPE_COW = 27; -int POLYMORPH_TYPE_DOOM_KNIGHT = 28; -int POLYMORPH_TYPE_YUANTI = 29; -int POLYMORPH_TYPE_IMP = 30; -int POLYMORPH_TYPE_QUASIT = 31; -int POLYMORPH_TYPE_SUCCUBUS = 32; -int POLYMORPH_TYPE_DIRE_BROWN_BEAR = 33; -int POLYMORPH_TYPE_DIRE_PANTHER = 34; -int POLYMORPH_TYPE_DIRE_WOLF = 35; -int POLYMORPH_TYPE_DIRE_BOAR = 36; -int POLYMORPH_TYPE_DIRE_BADGER = 37; - -int INVISIBILITY_TYPE_NORMAL = 1; -int INVISIBILITY_TYPE_DARKNESS = 2; -int INVISIBILITY_TYPE_IMPROVED = 4; - -int CREATURE_SIZE_INVALID = 0; -int CREATURE_SIZE_TINY = 1; -int CREATURE_SIZE_SMALL = 2; -int CREATURE_SIZE_MEDIUM = 3; -int CREATURE_SIZE_LARGE = 4; -int CREATURE_SIZE_HUGE = 5; - -int CAMERA_MODE_CHASE_CAMERA = 0; -int CAMERA_MODE_TOP_DOWN = 1; -int CAMERA_MODE_STIFF_CHASE_CAMERA = 2; - -int PROJECTILE_PATH_TYPE_DEFAULT = 0; -int PROJECTILE_PATH_TYPE_HOMING = 1; -int PROJECTILE_PATH_TYPE_BALLISTIC = 2; -int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC = 3; -int PROJECTILE_PATH_TYPE_ACCELERATING = 4; - -int GAME_DIFFICULTY_VERY_EASY = 0; -int GAME_DIFFICULTY_EASY = 1; -int GAME_DIFFICULTY_NORMAL = 2; -int GAME_DIFFICULTY_CORE_RULES = 3; -int GAME_DIFFICULTY_DIFFICULT = 4; - -int ACTION_MOVETOPOINT = 0; -int ACTION_PICKUPITEM = 1; -int ACTION_DROPITEM = 2; -int ACTION_ATTACKOBJECT = 3; -int ACTION_CASTSPELL = 4; -int ACTION_OPENDOOR = 5; -int ACTION_CLOSEDOOR = 6; -int ACTION_DIALOGOBJECT = 7; -int ACTION_DISABLETRAP = 8; -int ACTION_RECOVERTRAP = 9; -int ACTION_FLAGTRAP = 10; -int ACTION_EXAMINETRAP = 11; -int ACTION_SETTRAP = 12; -int ACTION_OPENLOCK = 13; -int ACTION_LOCK = 14; -int ACTION_USEOBJECT = 15; -int ACTION_ANIMALEMPATHY = 16; -int ACTION_REST = 17; -int ACTION_TAUNT = 18; -int ACTION_ITEMCASTSPELL = 19; -int ACTION_COUNTERSPELL = 31; -int ACTION_HEAL = 33; -int ACTION_PICKPOCKET = 34; -int ACTION_FOLLOW = 35; -int ACTION_WAIT = 36; -int ACTION_SIT = 37; -int ACTION_FOLLOWLEADER = 38; -int ACTION_FOLLOWOWNER = 43; - - -int ACTION_INVALID = 65535; -int ACTION_QUEUEEMPTY = 65534; - -int TRAP_BASE_TYPE_FLASH_STUN_MINOR = 0; -int TRAP_BASE_TYPE_FLASH_STUN_AVERAGE = 1; -int TRAP_BASE_TYPE_FLASH_STUN_DEADLY = 2; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_MINOR = 3; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_AVERAGE = 4; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEADLY = 5; -int TRAP_BASE_TYPE_LASER_SLICING_MINOR = 6; -int TRAP_BASE_TYPE_LASER_SLICING_AVERAGE = 7; -int TRAP_BASE_TYPE_LASER_SLICING_DEADLY = 8; -int TRAP_BASE_TYPE_POISON_GAS_MINOR = 9; -int TRAP_BASE_TYPE_POISON_GAS_AVERAGE = 10; -int TRAP_BASE_TYPE_POISON_GAS_DEADLY = 11; -int TRAP_BASE_TYPE_SONIC_CHARGE_MINOR = 14; -int TRAP_BASE_TYPE_SONIC_CHARGE_AVERAGE = 15; -int TRAP_BASE_TYPE_SONIC_CHARGE_DEADLY = 16; -// DJS-OEI 1/20/2004 -int TRAP_BASE_TYPE_FLASH_STUN_STRONG = 17; -int TRAP_BASE_TYPE_FLASH_STUN_DEVASTATING = 18; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_STRONG = 19; -int TRAP_BASE_TYPE_FRAGMENTATION_MINE_DEVASTATING = 20; -int TRAP_BASE_TYPE_LASER_SLICING_STRONG = 21; -int TRAP_BASE_TYPE_LASER_SLICING_DEVASTATING = 22; -int TRAP_BASE_TYPE_POISON_GAS_STRONG = 23; -int TRAP_BASE_TYPE_POISON_GAS_DEVASTATING = 24; -int TRAP_BASE_TYPE_SONIC_CHARGE_STRONG = 25; -int TRAP_BASE_TYPE_SONIC_CHARGE_DEVASTATING = 26; - -int SWMINIGAME_TRACKFOLLOWER_SOUND_ENGINE = 0; -int SWMINIGAME_TRACKFOLLOWER_SOUND_DEATH = 1; - -int CONVERSATION_TYPE_CINEMATIC = 0; -int CONVERSATION_TYPE_COMPUTER = 1; - -int PLANET_DANTOOINE = 0; -int PLANET_DXUN = 1; -int PLANET_EBON_HAWK = 2; -int PLANET_KORRIBAN = 3; -int PLANET_M4_78 = 4; -int PLANET_MALACHOR_V = 5; -int PLANET_NAR_SHADDAA = 6; -int PLANET_ONDERON = 7; -int PLANET_PERAGUS = 8; -int PLANET_TELOS = 9; -int PLANET_HARBINGER = 10; -int PLANET_LIVE_01 = 11;//The 'live' planets are just space fillers -int PLANET_LIVE_02 = 12; -int PLANET_LIVE_03 = 13; -int PLANET_LIVE_04 = 14; -int PLANET_LIVE_05 = 15; -int PLANET_LIVE_06 = 16; - -int NPC_PLAYER =-1; -int NPC_ATTON = 0; -int NPC_BAO_DUR = 1; -int NPC_CANDEROUS = 2; -int NPC_G0T0 = 3; -int NPC_HANDMAIDEN = 4; -int NPC_HK_47 = 5; -int NPC_KREIA = 6; -int NPC_MIRA = 7; -int NPC_T3_M4 = 8; -int NPC_VISAS = 9; -int NPC_HANHARR = 10; -int NPC_DISCIPLE = 11; - -int PUP_SENSORBALL = 0; -int PUP_OTHER1 = 1; -int PUP_OTHER2 = 2; - - -int PARTY_AISTYLE_AGGRESSIVE = 0; -int PARTY_AISTYLE_DEFENSIVE = 1; -int PARTY_AISTYLE_PASSIVE = 2; - -int NPC_AISTYLE_DEFAULT_ATTACK = 0;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_RANGED_ATTACK = 1; -int NPC_AISTYLE_MELEE_ATTACK = 2; -int NPC_AISTYLE_AID = 3; -int NPC_AISTYLE_GRENADE_THROWER = 4;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_JEDI_SUPPORT = 5;//Depricated, we don't use this anymore. RWT-OEI 08/18/04 -int NPC_AISTYLE_HEALER = 6;//RWT-OEI 03/18/04 - No fighting, just heals -int NPC_AISTYLE_SKIRMISH = 7;//RWT-OEI 03/22/04 - This AI moves and shoots -int NPC_AISTYLE_TURTLE = 8;//JAB-OEI 07/03/04 - Turtles then unleashes charged attack -int NPC_AISTYLE_PARTY_AGGRO = 9;//RWT-OEI 08/18/04 - All out attacking party member -int NPC_AISTYLE_PARTY_DEFENSE = 10;//RWT-OEI 08/18/04 - Attacks, but doesn't stray to far. -int NPC_AISTYLE_PARTY_RANGED = 11;//RWT-OEI 08/18/04 - Doesn't run around a lot, but does heal. -int NPC_AISTYLE_PARTY_STATIONARY= 12;//RWT-OEI 08/18/04 - Uses healing and defensive force powers. -int NPC_AISTYLE_PARTY_SUPPORT = 13;//RWT-OEI 08/28/04 - Revisiting party AI stuff -int NPC_AISTYLE_PARTY_REMOTE = 14;//RWT-OEI 09/08/04 - Combat AI for the floating remote. -int NPC_AISTYLE_MONSTER_POWERS = 15;//DJS-OEI 09/27/04 - Combat AI for the Malachor Storm Beasts and other ability-using monsters. - -int DISGUISE_TYPE_TEST = 1; -int DISGUISE_TYPE_P_T3M3 = 2; -int DISGUISE_TYPE_P_HK47 = 3; -int DISGUISE_TYPE_P_BASTILLA = 4; -int DISGUISE_TYPE_P_CAND = 5; -int DISGUISE_TYPE_P_CARTH = 6; -int DISGUISE_TYPE_P_JOLEE = 7; -int DISGUISE_TYPE_P_JUHANI = 8; -int DISGUISE_TYPE_P_ZAALBAR = 9; -int DISGUISE_TYPE_P_MISSION = 10; -int DISGUISE_TYPE_N_ADMRLSAULKAR = 11; -int DISGUISE_TYPE_N_BITH = 12; -int DISGUISE_TYPE_N_CALONORD = 13; -int DISGUISE_TYPE_N_COMMF = 14; -int DISGUISE_TYPE_N_COMMKIDF = 15; -int DISGUISE_TYPE_N_COMMKIDM = 16; -int DISGUISE_TYPE_N_COMMM = 17; -int DISGUISE_TYPE_N_CZERLAOFF = 18; -int DISGUISE_TYPE_N_DARKJEDIF = 19; -int DISGUISE_TYPE_N_DARKJEDIM = 20; -int DISGUISE_TYPE_N_DARTHMALAK = 21; -int DISGUISE_TYPE_N_DARTHREVAN = 22; -int DISGUISE_TYPE_N_DODONNA = 23; -int DISGUISE_TYPE_N_DUROS = 24; -int DISGUISE_TYPE_N_FATCOMF = 25; -int DISGUISE_TYPE_N_FATCOMM = 26; -int DISGUISE_TYPE_N_SMUGGLER = 27; -int DISGUISE_TYPE_N_SITHSOLDIER = 28; -// int DISGUISE_TYPE_ = 29; -int DISGUISE_TYPE_N_JEDICOUNTF = 30; -int DISGUISE_TYPE_N_JEDICOUNTM = 31; -int DISGUISE_TYPE_N_JEDIMALEK = 32; -int DISGUISE_TYPE_N_JEDIMEMF = 33; -int DISGUISE_TYPE_N_JEDIMEMM = 34; -int DISGUISE_TYPE_N_MANDALORIAN = 35; -int DISGUISE_TYPE_N_RAKATA = 36; -int DISGUISE_TYPE_N_REPOFF = 37; -int DISGUISE_TYPE_N_REPSOLD = 38; -int DISGUISE_TYPE_N_RODIAN = 39; -int DISGUISE_TYPE_C_SELKATH = 40; -int DISGUISE_TYPE_N_SITHAPPREN = 41; -int DISGUISE_TYPE_N_SITHCOMF = 42; -int DISGUISE_TYPE_N_SITHCOMM = 43; -//int DISGUISE_TYPE_N_SITHSOLDIER = 44; -int DISGUISE_TYPE_N_SWOOPGANG = 45; -int DISGUISE_TYPE_N_TUSKEN = 46; -int DISGUISE_TYPE_N_TWILEKF = 47; -int DISGUISE_TYPE_N_TWILEKM = 48; -int DISGUISE_TYPE_N_WALRUSMAN = 49; -int DISGUISE_TYPE_N_WOOKIEF = 50; -int DISGUISE_TYPE_N_WOOKIEM = 51; -int DISGUISE_TYPE_N_YODA = 52; -int DISGUISE_TYPE_C_BANTHA = 53; -int DISGUISE_TYPE_C_BRITH = 54; -int DISGUISE_TYPE_C_DEWBACK = 55; -int DISGUISE_TYPE_C_DRDASSASSIN = 56; -int DISGUISE_TYPE_C_DRDASTRO = 57; -int DISGUISE_TYPE_C_DRDG = 58; -int DISGUISE_TYPE_C_DRDMKFOUR = 59; -int DISGUISE_TYPE_C_DRDMKONE = 60; -int DISGUISE_TYPE_C_DRDMKTWO = 61; -int DISGUISE_TYPE_C_DRDPROBE = 62; -int DISGUISE_TYPE_C_DRDPROT = 63; -int DISGUISE_TYPE_C_DRDSENTRY = 64; -int DISGUISE_TYPE_C_DRDSPYDER = 65; -int DISGUISE_TYPE_C_DRDWAR = 66; -int DISGUISE_TYPE_C_FIRIXA = 67; -int DISGUISE_TYPE_C_GAMMOREAN = 68; -int DISGUISE_TYPE_C_GIZKA = 69; -int DISGUISE_TYPE_C_HUTT = 70; -int DISGUISE_TYPE_C_IRIAZ = 71; -int DISGUISE_TYPE_C_ITHORIAN = 72; -int DISGUISE_TYPE_C_JAWA = 73; -int DISGUISE_TYPE_C_KATAARN = 74; -int DISGUISE_TYPE_C_KHOUNDA = 75; -int DISGUISE_TYPE_C_KHOUNDB = 76; -int DISGUISE_TYPE_C_KRAYTDRAGON = 77; -int DISGUISE_TYPE_C_MYKAL = 78; -int DISGUISE_TYPE_C_RAKGHOUL = 79; -int DISGUISE_TYPE_C_RANCOR = 80; -int DISGUISE_TYPE_C_SEABEAST = 81; -//int DISGUISE_TYPE_ = 82; -int DISGUISE_TYPE_C_TACH = 83; -int DISGUISE_TYPE_C_TWOHEAD = 84; -int DISGUISE_TYPE_C_VERKAAL = 85; -int DISGUISE_TYPE_C_WRAID = 86; -int DISGUISE_TYPE_C_RONTO = 87; -int DISGUISE_TYPE_C_KINRATH = 88; -int DISGUISE_TYPE_C_TUKATA = 89; -int DISGUISE_TYPE_N_TUSKENF = 90; -int DISGUISE_TYPE_P_FEM_A_SML_01 = 91; -int DISGUISE_TYPE_P_FEM_A_MED_01 = 92; -int DISGUISE_TYPE_P_FEM_A_LRG_01 = 93; -int DISGUISE_TYPE_P_FEM_A_SML_02 = 94; -int DISGUISE_TYPE_P_FEM_A_MED_02 = 95; -int DISGUISE_TYPE_P_FEM_A_LRG_02 = 96; -int DISGUISE_TYPE_P_FEM_A_SML_03 = 97; -int DISGUISE_TYPE_P_FEM_A_MED_03 = 98; -int DISGUISE_TYPE_P_FEM_A_LRG_03 = 99; -int DISGUISE_TYPE_P_FEM_A_SML_04 = 100; -int DISGUISE_TYPE_P_FEM_A_MED_04 = 101; -int DISGUISE_TYPE_P_FEM_A_LRG_04 = 102; -int DISGUISE_TYPE_P_FEM_A_SML_05 = 103; -int DISGUISE_TYPE_P_FEM_A_MED_05 = 104; -int DISGUISE_TYPE_P_FEM_A_LRG_05 = 105; -int DISGUISE_TYPE_P_FEM_B_SML_01 = 106; -int DISGUISE_TYPE_P_FEM_B_MED_01 = 107; -int DISGUISE_TYPE_P_FEM_B_LRG_01 = 108; -int DISGUISE_TYPE_P_FEM_B_SML_02 = 109; -int DISGUISE_TYPE_P_FEM_B_MED_02 = 110; -int DISGUISE_TYPE_P_FEM_B_LRG_02 = 111; -int DISGUISE_TYPE_P_FEM_B_SML_03 = 112; -int DISGUISE_TYPE_P_FEM_B_MED_03 = 113; -int DISGUISE_TYPE_P_FEM_B_LRG_03 = 114; -int DISGUISE_TYPE_P_FEM_B_SML_04 = 115; -int DISGUISE_TYPE_P_FEM_B_MED_04 = 116; -int DISGUISE_TYPE_P_FEM_B_LRG_04 = 117; -int DISGUISE_TYPE_P_FEM_B_SML_05 = 118; -int DISGUISE_TYPE_P_FEM_B_MED_05 = 119; -int DISGUISE_TYPE_P_FEM_B_LRG_05 = 120; -int DISGUISE_TYPE_P_FEM_C_SML_01 = 121; -int DISGUISE_TYPE_P_FEM_C_MED_01 = 122; -int DISGUISE_TYPE_P_FEM_C_LRG_01 = 123; -int DISGUISE_TYPE_P_FEM_C_SML_02 = 124; -int DISGUISE_TYPE_P_FEM_C_MED_02 = 125; -int DISGUISE_TYPE_P_FEM_C_LRG_02 = 126; -int DISGUISE_TYPE_P_FEM_C_SML_03 = 127; -int DISGUISE_TYPE_P_FEM_C_MED_03 = 128; -int DISGUISE_TYPE_P_FEM_C_LRG_03 = 129; -int DISGUISE_TYPE_P_FEM_C_SML_04 = 130; -int DISGUISE_TYPE_P_FEM_C_MED_04 = 131; -int DISGUISE_TYPE_P_FEM_C_LRG_04 = 132; -int DISGUISE_TYPE_P_FEM_C_SML_05 = 133; -int DISGUISE_TYPE_P_FEM_C_MED_05 = 134; -int DISGUISE_TYPE_P_FEM_C_LRG_05 = 135; -int DISGUISE_TYPE_P_MAL_A_SML_01 = 136; -int DISGUISE_TYPE_P_MAL_A_MED_01 = 137; -int DISGUISE_TYPE_P_MAL_A_LRG_01 = 138; -int DISGUISE_TYPE_P_MAL_A_SML_02 = 139; -int DISGUISE_TYPE_P_MAL_A_MED_02 = 140; -int DISGUISE_TYPE_P_MAL_A_LRG_02 = 141; -int DISGUISE_TYPE_P_MAL_A_SML_03 = 142; -int DISGUISE_TYPE_P_MAL_A_MED_03 = 143; -int DISGUISE_TYPE_P_MAL_A_LRG_03 = 144; -int DISGUISE_TYPE_P_MAL_A_SML_04 = 145; -int DISGUISE_TYPE_P_MAL_A_MED_04 = 146; -int DISGUISE_TYPE_P_MAL_A_LRG_04 = 147; -int DISGUISE_TYPE_P_MAL_A_SML_05 = 148; -int DISGUISE_TYPE_P_MAL_A_MED_05 = 149; -int DISGUISE_TYPE_P_MAL_A_LRG_05 = 150; -int DISGUISE_TYPE_P_MAL_B_SML_01 = 151; -int DISGUISE_TYPE_P_MAL_B_MED_01 = 152; -int DISGUISE_TYPE_P_MAL_B_LRG_01 = 153; -int DISGUISE_TYPE_P_MAL_B_SML_02 = 154; -int DISGUISE_TYPE_P_MAL_B_MED_02 = 155; -int DISGUISE_TYPE_P_MAL_B_LRG_02 = 156; -int DISGUISE_TYPE_P_MAL_B_SML_03 = 157; -int DISGUISE_TYPE_P_MAL_B_MED_03 = 158; -int DISGUISE_TYPE_P_MAL_B_LRG_03 = 159; -int DISGUISE_TYPE_P_MAL_B_SML_04 = 160; -int DISGUISE_TYPE_P_MAL_B_MED_04 = 161; -int DISGUISE_TYPE_P_MAL_B_LRG_04 = 162; -int DISGUISE_TYPE_P_MAL_B_SML_05 = 163; -int DISGUISE_TYPE_P_MAL_B_MED_05 = 164; -int DISGUISE_TYPE_P_MAL_B_LRG_05 = 165; -int DISGUISE_TYPE_P_MAL_C_SML_01 = 166; -int DISGUISE_TYPE_P_MAL_C_MED_01 = 167; -int DISGUISE_TYPE_P_MAL_C_LRG_01 = 168; -int DISGUISE_TYPE_P_MAL_C_SML_02 = 169; -int DISGUISE_TYPE_P_MAL_C_MED_02 = 170; -int DISGUISE_TYPE_P_MAL_C_LRG_02 = 171; -int DISGUISE_TYPE_P_MAL_C_SML_03 = 172; -int DISGUISE_TYPE_P_MAL_C_MED_03 = 173; -int DISGUISE_TYPE_P_MAL_C_LRG_03 = 174; -int DISGUISE_TYPE_P_MAL_C_SML_04 = 175; -int DISGUISE_TYPE_P_MAL_C_MED_04 = 176; -int DISGUISE_TYPE_P_MAL_C_LRG_04 = 177; -int DISGUISE_TYPE_P_MAL_C_SML_05 = 178; -int DISGUISE_TYPE_P_MAL_C_MED_05 = 179; -int DISGUISE_TYPE_P_MAL_C_LRG_05 = 180; -int DISGUISE_TYPE_ENVIRONMENTSUIT = 181; -int DISGUISE_TYPE_TURRET = 182; -int DISGUISE_TYPE_TURRET2 = 183; -int DISGUISE_TYPE_N_DARTHBAND = 184; -int DISGUISE_TYPE_COMMONER_FEM_WHITE = 185; -int DISGUISE_TYPE_COMMONER_FEM_BLACK = 186; -int DISGUISE_TYPE_COMMONER_FEM_OLD_ASIAN = 187; -int DISGUISE_TYPE_COMMONER_FEM_OLD_WHITE = 188; -int DISGUISE_TYPE_COMMONER_FEM_OLD_BLACK = 189; -int DISGUISE_TYPE_COMMONER_MAL_WHITE = 190; -int DISGUISE_TYPE_COMMONER_MAL_BLACK = 191; -int DISGUISE_TYPE_COMMONER_MAL_OLD_ASIAN = 192; -int DISGUISE_TYPE_COMMONER_MAL_OLD_WHITE = 193; -int DISGUISE_TYPE_COMMONER_MAL_OLD_BLACK = 194; -int DISGUISE_TYPE_CZERKA_OFFICER_WHITE = 195; -int DISGUISE_TYPE_CZERKA_OFFICER_BLACK = 196; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_ASIAN = 197; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_WHITE = 198; -int DISGUISE_TYPE_CZERKA_OFFICER_OLD_BLACK = 199; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_02 = 200; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_03 = 201; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_04 = 202; -int DISGUISE_TYPE_JEDI_WHITE_FEMALE_05 = 203; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_01 = 204; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_02 = 205; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_03 = 206; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_04 = 207; -int DISGUISE_TYPE_JEDI_ASIAN_FEMALE_05 = 208; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_01 = 209; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_02 = 210; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_03 = 211; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_04 = 212; -int DISGUISE_TYPE_JEDI_BLACK_FEMALE_05 = 213; -int DISGUISE_TYPE_JEDI_WHITE_MALE_02 = 214; -int DISGUISE_TYPE_JEDI_WHITE_MALE_03 = 215; -int DISGUISE_TYPE_JEDI_WHITE_MALE_04 = 216; -int DISGUISE_TYPE_JEDI_WHITE_MALE_05 = 217; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_01 = 218; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_02 = 219; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_03 = 220; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_04 = 221; -int DISGUISE_TYPE_JEDI_ASIAN_MALE_05 = 222; -int DISGUISE_TYPE_JEDI_BLACK_MALE_01 = 223; -int DISGUISE_TYPE_JEDI_BLACK_MALE_02 = 224; -int DISGUISE_TYPE_JEDI_BLACK_MALE_03 = 225; -int DISGUISE_TYPE_JEDI_BLACK_MALE_04 = 226; -int DISGUISE_TYPE_JEDI_BLACK_MALE_05 = 227; -int DISGUISE_TYPE_HUTT_02 = 228; -int DISGUISE_TYPE_HUTT_03 = 229; -int DISGUISE_TYPE_HUTT_04 = 230; -int DISGUISE_TYPE_DROID_ASTRO_02 = 231; -int DISGUISE_TYPE_DROID_ASTRO_03 = 232; -int DISGUISE_TYPE_DROID_PROTOCOL_02 = 233; -int DISGUISE_TYPE_DROID_PROTOCOL_03 = 234; -int DISGUISE_TYPE_DROID_PROTOCOL_04 = 235; -int DISGUISE_TYPE_DROID_WAR_02 = 236; -int DISGUISE_TYPE_DROID_WAR_03 = 237; -int DISGUISE_TYPE_DROID_WAR_04 = 238; -int DISGUISE_TYPE_DROID_WAR_05 = 239; -int DISGUISE_TYPE_GAMMOREAN_02 = 240; -int DISGUISE_TYPE_GAMMOREAN_03 = 241; -int DISGUISE_TYPE_GAMMOREAN_04 = 242; -int DISGUISE_TYPE_ITHORIAN_02 = 243; -int DISGUISE_TYPE_ITHORIAN_03 = 244; -int DISGUISE_TYPE_KATH_HOUND_A02 = 245; -int DISGUISE_TYPE_KATH_HOUND_A03 = 246; -int DISGUISE_TYPE_KATH_HOUND_A04 = 247; -int DISGUISE_TYPE_KATH_HOUND_B02 = 248; -int DISGUISE_TYPE_KATH_HOUND_B03 = 249; -int DISGUISE_TYPE_KATH_HOUND_B04 = 250; -int DISGUISE_TYPE_WRAID_02 = 251; -int DISGUISE_TYPE_WRAID_03 = 252; -int DISGUISE_TYPE_WRAID_04 = 253; -int DISGUISE_TYPE_RAKATA_02 = 254; -int DISGUISE_TYPE_RAKATA_03 = 255; -int DISGUISE_TYPE_RODIAN_02 = 256; -int DISGUISE_TYPE_RODIAN_03 = 257; -int DISGUISE_TYPE_RODIAN_04 = 258; -int DISGUISE_TYPE_SELKATH_02 = 259; -int DISGUISE_TYPE_SELKATH_03 = 260; -int DISGUISE_TYPE_SITH_SOLDIER_03 = 261; -int DISGUISE_TYPE_SWOOP_GANG_02 = 262; -int DISGUISE_TYPE_SWOOP_GANG_03 = 263; -int DISGUISE_TYPE_SWOOP_GANG_04 = 264; -int DISGUISE_TYPE_SWOOP_GANG_05 = 265; -int DISGUISE_TYPE_TUSKAN_RAIDER_02 = 266; -int DISGUISE_TYPE_TUSKAN_RAIDER_03 = 267; -int DISGUISE_TYPE_TUSKAN_RAIDER_04 = 268; -int DISGUISE_TYPE_TWILEK_MALE_02 = 269; -int DISGUISE_TYPE_TWILEK_FEMALE_02 = 270; -int DISGUISE_TYPE_WOOKIE_MALE_02 = 271; -int DISGUISE_TYPE_WOOKIE_MALE_03 = 272; -int DISGUISE_TYPE_WOOKIE_MALE_04 = 273; -int DISGUISE_TYPE_WOOKIE_MALE_05 = 274; -int DISGUISE_TYPE_WOOKIE_FEMALE_02 = 275; -int DISGUISE_TYPE_WOOKIE_FEMALE_03 = 276; -int DISGUISE_TYPE_WOOKIE_FEMALE_04 = 277; -int DISGUISE_TYPE_WOOKIE_FEMALE_05 = 278; -int DISGUISE_TYPE_ENVIRONMENTSUIT_02 = 279; -int DISGUISE_TYPE_YUTHURA_BAN = 280; -int DISGUISE_TYPE_SHYRACK_01 = 281; -int DISGUISE_TYPE_SHYRACK_02 = 282; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_BLACK = 283; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_ASIAN = 284; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_WHITE = 285; -int DISGUISE_TYPE_REPUBLIC_SOLDIER_MAL_OLD_BLACK = 286; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_BLACK = 287; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_ASIAN = 288; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_WHITE = 289; -int DISGUISE_TYPE_REPUBLIC_OFFICER_MAL_OLD_BLACK = 290; -int DISGUISE_TYPE_SITH_FEM_WHITE = 291; -int DISGUISE_TYPE_SITH_FEM_BLACK = 292; -int DISGUISE_TYPE_SITH_FEM_OLD_ASIAN = 293; -int DISGUISE_TYPE_SITH_FEM_OLD_WHITE = 294; -int DISGUISE_TYPE_SITH_FEM_OLD_BLACK = 295; -int DISGUISE_TYPE_SITH_MAL_WHITE = 296; -int DISGUISE_TYPE_SITH_MAL_BLACK = 297; -int DISGUISE_TYPE_SITH_MAL_OLD_ASIAN = 298; -int DISGUISE_TYPE_SITH_MAL_OLD_WHITE = 299; -int DISGUISE_TYPE_SITH_MAL_OLD_BLACK = 300; -int DISGUISE_TYPE_SITH_FEM_ASIAN = 301; -int DISGUISE_TYPE_SITH_MAL_ASIAN = 302; -int DISGUISE_TYPE_JEDI_WHITE_OLD_MALE = 303; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_MALE = 304; -int DISGUISE_TYPE_JEDI_BLACK_OLD_MALE = 305; -int DISGUISE_TYPE_JEDI_WHITE_OLD_FEM = 306; -int DISGUISE_TYPE_JEDI_ASIAN_OLD_FEM = 307; -int DISGUISE_TYPE_JEDI_BLACK_OLD_FEM = 308; - -int PLOT_O_DOOM = 0; -int PLOT_O_SCARY_STUFF = 1; -int PLOT_O_BIG_MONSTERS = 2; - -int FORMATION_WEDGE = 0; -int FORMATION_LINE = 1; - -int SUBSCREEN_ID_NONE = 0; -int SUBSCREEN_ID_EQUIP = 1; -int SUBSCREEN_ID_ITEM = 2; -int SUBSCREEN_ID_CHARACTER_RECORD = 3; -int SUBSCREEN_ID_ABILITY = 4; -int SUBSCREEN_ID_MAP = 5; -int SUBSCREEN_ID_QUEST = 6; -int SUBSCREEN_ID_OPTIONS = 7; -int SUBSCREEN_ID_MESSAGES = 8; - -int SHIELD_DROID_ENERGY_1 = 0; -int SHIELD_DROID_ENERGY_2 = 1; -int SHIELD_DROID_ENERGY_3 = 2; -int SHIELD_DROID_ENVIRO_1 = 3; -int SHIELD_DROID_ENVIRO_2 = 4; -int SHIELD_DROID_ENVIRO_3 = 5; -int SHIELD_ENERGY = 6; -int SHIELD_ENERGY_SITH = 7; -int SHIELD_ENERGY_ARKANIAN = 8; -int SHIELD_ECHANI = 9; -int SHIELD_MANDALORIAN_MELEE = 10; -int SHIELD_MANDALORIAN_POWER = 11; -int SHIELD_DUELING_ECHANI = 12; -int SHIELD_DUELING_YUSANIS = 13; -int SHIELD_VERPINE_PROTOTYPE = 14; -int SHIELD_ANTIQUE_DROID = 15; -int SHIELD_PLOT_TAR_M09AA = 16; -int SHIELD_PLOT_UNK_M44AA = 17; -int SHIELD_PLOT_MAN_M28AA = 18; -int SHIELD_HEAT = 19; -int SHIELD_DREXL = 20; // JAB-OEI 7/2/04 - - -int SUBRACE_NONE = 0; -int SUBRACE_WOOKIE = 1; - -int VIDEO_EFFECT_NONE = -1; -int VIDEO_EFFECT_SECURITY_CAMERA = 0; -int VIDEO_EFFECT_FREELOOK_T3M4 = 1; -int VIDEO_EFFECT_FREELOOK_HK47 = 2; -int VIDEO_EFFECT_CLAIRVOYANCE = 3; -int VIDEO_EFFECT_FORCESIGHT = 4; -int VIDEO_EFFECT_VISAS_FREELOOK = 5; -int VIDEO_EFFECT_CLAIRVOYANCEFULL = 6; -int VIDEO_EFFECT_FURY_1 = 7; -int VIDEO_EFFECT_FURY_2 = 8; -int VIDEO_EFFECT_FURY_3 = 9; -int VIDEO_FFECT_SECURITY_NO_LABEL = 10;//RWT-OEI 05/05/04 - Same as the Security Camera, but turns off the 'Press A to...' label. - -// DJS-OEI 1/14/2004 -// Modified the way these work. The values -// listed here are now direct references to -// rows in Tutorial.2DA. Originally these -// would have to be converted to .2DA ids -// in the code. -int TUTORIAL_WINDOW_START_SWOOP_RACE = 9; -int TUTORIAL_WINDOW_RETURN_TO_BASE = 40; -// DJS-OEI 11/21/2003 -int TUTORIAL_WINDOW_TEMP1 = 42; -int TUTORIAL_WINDOW_TEMP2 = 43; -int TUTORIAL_WINDOW_TEMP3 = 44; -int TUTORIAL_WINDOW_TEMP4 = 45; -int TUTORIAL_WINDOW_TEMP5 = 46; -int TUTORIAL_WINDOW_TEMP6 = 47; -int TUTORIAL_WINDOW_TEMP7 = 48; -int TUTORIAL_WINDOW_TEMP8 = 49; -int TUTORIAL_WINDOW_TEMP9 = 50; -int TUTORIAL_WINDOW_TEMP10 = 51; -int TUTORIAL_WINDOW_TEMP11 = 52; -int TUTORIAL_WINDOW_TEMP12 = 53; -int TUTORIAL_WINDOW_TEMP13 = 54; -int TUTORIAL_WINDOW_TEMP14 = 55; -int TUTORIAL_WINDOW_TEMP15 = 56; - -int AI_LEVEL_VERY_HIGH = 4; // AWD-OEI 7/08/2004 -int AI_LEVEL_HIGH = 3; // AWD-OEI 7/08/2004 -int AI_LEVEL_NORMAL = 2; // AWD-OEI 7/08/2004 -int AI_LEVEL_LOW = 1; // AWD-OEI 7/08/2004 -int AI_LEVEL_VERY_LOW = 0; // AWD-OEI 7/08/2004 - -int MOVEMENT_SPEED_PC = 0; -int MOVEMENT_SPEED_IMMOBILE = 1; -int MOVEMENT_SPEED_VERYSLOW = 2; -int MOVEMENT_SPEED_SLOW = 3; -int MOVEMENT_SPEED_NORMAL = 4; -int MOVEMENT_SPEED_FAST = 5; -int MOVEMENT_SPEED_VERYFAST = 6; -int MOVEMENT_SPEED_DEFAULT = 7; -int MOVEMENT_SPEED_DMFAST = 8; - -int LIVE_CONTENT_PKG1 = 1; -int LIVE_CONTENT_PKG2 = 2; -int LIVE_CONTENT_PKG3 = 3; -int LIVE_CONTENT_PKG4 = 4; -int LIVE_CONTENT_PKG5 = 5; -int LIVE_CONTENT_PKG6 = 6; - -//RWT-OEI 12/16/03 -// These constants are for the Implant Swapping support in a_swapimplant -// They correspond directly with the ACTIONIDs in the game for each of the -// implant swapping actions. -int IMPLANT_NONE = 0; -int IMPLANT_REGEN = 1; -int IMPLANT_STR = 2; -int IMPLANT_END = 3; -int IMPLANT_AGI = 4; - -// DJS-OEI 6/12/2004 -// These constants can be OR'ed together and sent to SetForfeitConditions() -// in order to set up flagging situations that will alert the area script that -// the player has violated them. This is usually used for Battle Arena restrictions. -int FORFEIT_NO_FORCE_POWERS = 1; // Player cannot cast any Force Powers -int FORFEIT_NO_ITEMS = 2; // Player cannot use any items (medpacs, grenades, stims, grenades) -int FORFEIT_NO_WEAPONS = 4; // Player must fight unarmed. Equipping a weapon is a forfeit. -int FORFEIT_DXUN_SWORD_ONLY = 8; // Player can only use the sword with tag 'pl_sword' given to them at the start - // of one of the Dxun Battle Circle fights, or no weapon at all. -int FORFEIT_NO_ARMOR = 16; // Player cannot use any armor. -int FORFEIT_NO_RANGED = 32; // Player cannot use ranged weapons. -int FORFEIT_NO_LIGHTSABER = 64; // Player cannot use lightsabers. -int FORFEIT_NO_ITEM_BUT_SHIELD = 128; // Player cannot use items except for shields. - -string sLanguage = "nwscript"; - - -// 0: Get an integer between 0 and nMaxInteger-1. -// Return value on error: 0 -int Random(int nMaxInteger); - -// 1: Output sString to the log file. -void PrintString(string sString); - -// 2: Output a formatted float to the log file. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -void PrintFloat(float fFloat, int nWidth=18, int nDecimals=9); - -// 3: Convert fFloat into a string. -// - nWidth should be a value from 0 to 18 inclusive. -// - nDecimals should be a value from 0 to 9 inclusive. -string FloatToString(float fFloat, int nWidth=18, int nDecimals=9); - -// 4: Output nInteger to the log file. -void PrintInteger(int nInteger); - -// 5: Output oObject's ID to the log file. -void PrintObject(object oObject); - -// 6: Assign aActionToAssign to oActionSubject. -// * No return value, but if an error occurs, the log file will contain -// "AssignCommand failed." -// (If the object doesn't exist, nothing happens.) -void AssignCommand(object oActionSubject,action aActionToAssign); - -// 7: Delay aActionToDelay by fSeconds. -// * No return value, but if an error occurs, the log file will contain -// "DelayCommand failed.". -void DelayCommand(float fSeconds, action aActionToDelay); - -// 8: Make oTarget run sScript and then return execution to the calling script. -// If sScript does not specify a compiled script, nothing happens. -// - nScriptVar: This value will be returned by calls to GetRunScriptVar. -void ExecuteScript(string sScript, object oTarget, int nScriptVar=-1); - -// 9: Clear all the actions of the caller. (This will only work on Creatures) -// * No return value, but if an error occurs, the log file will contain -// "ClearAllActions failed.". -void ClearAllActions(); - -// 10: Cause the caller to face fDirection. -// - fDirection is expressed as anticlockwise degrees from Due East. -// DIRECTION_EAST, DIRECTION_NORTH, DIRECTION_WEST and DIRECTION_SOUTH are -// predefined. (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -void SetFacing(float fDirection); - -// 11: Switches the main character to a specified NPC -// -1 specifies to switch back to the original PC -int SwitchPlayerCharacter(int nNPC); - -// 12: Set the time to the time specified. -// - nHour should be from 0 to 23 inclusive -// - nMinute should be from 0 to 59 inclusive -// - nSecond should be from 0 to 59 inclusive -// - nMillisecond should be from 0 to 999 inclusive -// 1) Time can only be advanced forwards; attempting to set the time backwards -// will result in the day advancing and then the time being set to that -// specified, e.g. if the current hour is 15 and then the hour is set to 3, -// the day will be advanced by 1 and the hour will be set to 3. -// 2) If values larger than the max hour, minute, second or millisecond are -// specified, they will be wrapped around and the overflow will be used to -// advance the next field, e.g. specifying 62 hours, 250 minutes, 10 seconds -// and 10 milliseconds will result in the calendar day being advanced by 2 -// and the time being set to 18 hours, 10 minutes, 10 milliseconds. -void SetTime(int nHour,int nMinute,int nSecond,int nMillisecond); - -// 13: Sets (by NPC constant) which party member should be the controlled -// character -int SetPartyLeader(int nNPC); - -// 14: Sets whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -void SetAreaUnescapable(int bUnescapable); - -// 15: Returns whether the current area is escapable or not -// TRUE means you can not escape the area -// FALSE means you can escape the area -int GetAreaUnescapable(); - -// 16: Get the current hour. -int GetTimeHour(); - -// 17: Get the current minute -int GetTimeMinute(); - -// 18: Get the current second -int GetTimeSecond(); - -// 19: Get the current millisecond -int GetTimeMillisecond(); - -// 20: The action subject will generate a random location near its current location -// and pathfind to it. All commands will remove a RandomWalk() from the action -// queue if there is one in place. -// * No return value, but if an error occurs the log file will contain -// "ActionRandomWalk failed." -void ActionRandomWalk(); - -// 21: The action subject will move to lDestination. -// - lDestination: The object will move to this location. If the location is -// invalid or a path cannot be found to it, the command does nothing. -// - bRun: If this is TRUE, the action subject will run rather than walk -// * No return value, but if an error occurs the log file will contain -// "MoveToPoint failed." -void ActionMoveToLocation(location lDestination, int bRun=FALSE); - -// 22: Cause the action subject to move to a certain distance from oMoveTo. -// If there is no path to oMoveTo, this command will do nothing. -// - oMoveTo: This is the object we wish the action subject to move to -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fRange: This is the desired distance between the action subject and oMoveTo -// * No return value, but if an error occurs the log file will contain -// "ActionMoveToObject failed." -void ActionMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f); - -// 23: Cause the action subject to move to a certain distance away from oFleeFrom. -// - oFleeFrom: This is the object we wish the action subject to move away from. -// If oFleeFrom is not in the same area as the action subject, nothing will -// happen. -// - bRun: If this is TRUE, the action subject will run rather than walk -// - fMoveAwayRange: This is the distance we wish the action subject to put -// between themselves and oFleeFrom -// * No return value, but if an error occurs the log file will contain -// "ActionMoveAwayFromObject failed." -void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 24: Get the area that oTarget is currently in -// * Return value on error: OBJECT_INVALID -object GetArea(object oTarget); - -// 25: The value returned by this function depends on the object type of the caller: -// 1) If the caller is a door or placeable it returns the object that last -// triggered it. -// 2) If the caller is a trigger, area of effect, module, area or encounter it -// returns the object that last entered it. -// * Return value on error: OBJECT_INVALID -object GetEnteringObject(); - -// 26: Get the object that last left the caller. This function works on triggers, -// areas of effect, modules, areas and encounters. -// * Return value on error: OBJECT_INVALID -object GetExitingObject(); - -// 27: Get the position of oTarget -// * Return value on error: vector (0.0f, 0.0f, 0.0f) -vector GetPosition(object oTarget); - -// 28: Get the direction in which oTarget is facing, expressed as a float between -// 0.0f and 360.0f -// * Return value on error: -1.0f -float GetFacing(object oTarget); - -// 29: Get the possessor of oItem -// * Return value on error: OBJECT_INVALID -object GetItemPossessor(object oItem); - -// 30: Get the object possessed by oCreature with the tag sItemTag -// * Return value on error: OBJECT_INVALID -object GetItemPossessedBy(object oCreature, string sItemTag); - -// 31: Create an item with the template sItemTemplate in oTarget's inventory. -// - nStackSize: This is the stack size of the item to be created -// * Return value: The object that has been created. On error, this returns -// OBJECT_INVALID. -//RWT-OEI 12/16/03 - Added the bHideMessage parameter -object CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1, int nHideMessage = 0); - -// 32: Equip oItem into nInventorySlot. -// - nInventorySlot: INVENTORY_SLOT_* -// * No return value, but if an error occurs the log file will contain -// "ActionEquipItem failed." -void ActionEquipItem(object oItem, int nInventorySlot, int bInstant=FALSE); - -// 33: Unequip oItem from whatever slot it is currently in. -void ActionUnequipItem( object oItem, int bInstant = FALSE ); - -// 34: Pick up oItem from the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPickUpItem failed." -void ActionPickUpItem(object oItem); - -// 35: Put down oItem on the ground. -// * No return value, but if an error occurs the log file will contain -// "ActionPutDownItem failed." -void ActionPutDownItem(object oItem); - -// 36: Get the last attacker of oAttackee. This should only be used ONLY in the -// OnAttacked events for creatures, placeables and doors. -// * Return value on error: OBJECT_INVALID -object GetLastAttacker(object oAttackee=OBJECT_SELF); - -// 37: Attack oAttackee. -// - bPassive: If this is TRUE, attack is in passive mode. -void ActionAttack(object oAttackee, int bPassive=FALSE); - -// 38: Get the creature nearest to oTarget, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use: -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - oTarget: We're trying to find the creature of the specified type that is -// nearest to oTarget -// - nNth: We don't have to find the first nearest: we can find the Nth nearest... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreature(int nFirstCriteriaType, int nFirstCriteriaValue, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 39: Add a speak action to the action subject. -// - sStringToSpeak: String to be spoken -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 40: Cause the action subject to play an animation -// - nAnimation: ANIMATION_* -// - fSpeed: Speed of the animation -// - fDurationSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0); - -// 41: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject(object oObject); - -// 42: * Returns TRUE if oObject is a valid object. -int GetIsObjectValid(object oObject); - -// 43: Cause the action subject to open oDoor -void ActionOpenDoor(object oDoor); - -// 44: Cause the action subject to close oDoor -void ActionCloseDoor(object oDoor); - -// 45: Change the direction in which the camera is facing -// - fDirection is expressed as anticlockwise degrees from Due East. -// (0.0f=East, 90.0f=North, 180.0f=West, 270.0f=South) -// This can be used to change the way the camera is facing after the player -// emerges from an area transition. -void SetCameraFacing(float fDirection); - -// 46: Play sSoundName -// - sSoundName: TBD - SS -void PlaySound(string sSoundName); - -// 47: Get the object at which the caller last cast a spell -// * Return value on error: OBJECT_INVALID -object GetSpellTargetObject(); - -// 48: This action casts a spell at oTarget. -// - nSpell: SPELL_* -// - oTarget: Target for the spell -// - nMetamagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nDomainLevel: TBD - SS -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows -// the end-user to simulate a high-level magic-user having lots of advance -// warning of impending trouble -void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=0 , int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 49: Get the current hitpoints of oObject -// * Return value on error: 0 -int GetCurrentHitPoints(object oObject=OBJECT_SELF); - -// 50: Get the maximum hitpoints of oObject -// * Return value on error: 0 -int GetMaxHitPoints(object oObject=OBJECT_SELF); - -// 51: EffectAssuredHit -// Create an Assured Hit effect, which guarantees that all attacks are successful -effect EffectAssuredHit(); - -// 52: -// Returns the last item that was equipped by a creature. -object GetLastItemEquipped(); - -// 53: -// Returns the ID of the subscreen that is currently onscreen. This will be one of the -// SUBSCREEN_ID_* constant values. -int GetSubScreenID(); - -// 54: -// Cancels combat for the specified creature. -void CancelCombat( object oidCreature ); - -// 55: -// returns the current force points for the creature -int GetCurrentForcePoints(object oObject=OBJECT_SELF); - -// 56: -// returns the Max force points for the creature -int GetMaxForcePoints(object oObject=OBJECT_SELF); - -// 57: -// Pauses the game if bPause is TRUE. Unpauses if bPause is FALSE. -void PauseGame( int bPause ); - -// 58: SetPlayerRestrictMode -// Sets whether the player is currently in 'restricted' mode -void SetPlayerRestrictMode( int bRestrict ); - -// 59: Get the length of sString -// * Return value on error: -1 -int GetStringLength(string sString); - -// 60: Convert sString into upper case -// * Return value on error: "" -string GetStringUpperCase(string sString); - -// 61: Convert sString into lower case -// * Return value on error: "" -string GetStringLowerCase(string sString); - -// 62: Get nCount characters from the right end of sString -// * Return value on error: "" -string GetStringRight(string sString, int nCount); - -// 63: Get nCounter characters from the left end of sString -// * Return value on error: "" -string GetStringLeft(string sString, int nCount); - -// 64: Insert sString into sDestination at nPosition -// * Return value on error: "" -string InsertString(string sDestination, string sString, int nPosition); - -// 65: Get nCount characters from sString, starting at nStart -// * Return value on error: "" -string GetSubString(string sString, int nStart, int nCount); - -// 66: Find the position of sSubstring inside sString -// * Return value on error: -1 -int FindSubString(string sString, string sSubString); - -// 67: Maths operation: absolute value of fValue -float fabs(float fValue); - -// 68: Maths operation: cosine of fValue -float cos(float fValue); - -// 69: Maths operation: sine of fValue -float sin(float fValue); - -// 70: Maths operation: tan of fValue -float tan(float fValue); - -// 71: Maths operation: arccosine of fValue -// * Returns zero if fValue > 1 or fValue < -1 -float acos(float fValue); - -// 72: Maths operation: arcsine of fValue -// * Returns zero if fValue >1 or fValue < -1 -float asin(float fValue); - -// 73: Maths operation: arctan of fValue -float atan(float fValue); - -// 74: Maths operation: log of fValue -// * Returns zero if fValue <= zero -float log(float fValue); - -// 75: Maths operation: fValue is raised to the power of fExponent -// * Returns zero if fValue ==0 and fExponent <0 -float pow(float fValue, float fExponent); - -// 76: Maths operation: square root of fValue -// * Returns zero if fValue <0 -float sqrt(float fValue); - -// 77: Maths operation: integer absolute value of nValue -// * Return value on error: 0 -int abs(int nValue); - -// 78: Create a Heal effect. This should be applied as an instantaneous effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. -effect EffectHeal(int nDamageToHeal); - -// 79: 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_* -effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_UNIVERSAL, int nDamagePower=DAMAGE_POWER_NORMAL); - -// 80: Create an Ability Increase effect -// - bAbilityToIncrease: ABILITY_* -effect EffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); - -// 81: 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 -effect EffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); - -// 82: Create a Resurrection effect. This should be applied as an instantaneous effect. -// DJS-OEI 8/26/2004 -// Added a parameter for the percentage of HP the target -// should receive when they are revived. -effect EffectResurrection( int nHPPercent=0 ); - -// 83: GetPlayerRestrictMode -// returns the current player 'restricted' mode -int GetPlayerRestrictMode(object oObject = OBJECT_SELF); - -// 84: Get the Caster Level of oCreature. -// * Return value on error: 0; -int GetCasterLevel(object oCreature); - -// 85: Get the first in-game effect on oCreature. -effect GetFirstEffect(object oCreature); - -// 86: Get the next in-game effect on oCreature. -effect GetNextEffect(object oCreature); - -// 87: Remove eEffect from oCreature. -// * No return value -void RemoveEffect(object oCreature, effect eEffect); - -// 88: * Returns TRUE if eEffect is a valid effect. -int GetIsEffectValid(effect eEffect); - -// 89: Get the duration type (DURATION_TYPE_*) of eEffect. -// * Return value if eEffect is not valid: -1 -int GetEffectDurationType(effect eEffect); - -// 90: Get the subtype (SUBTYPE_*) of eEffect. -// * Return value on error: 0 -int GetEffectSubType(effect eEffect); - -// 91: Get the object that created eEffect. -// * Returns OBJECT_INVALID if eEffect is not a valid effect. -object GetEffectCreator(effect eEffect); - -// 92: Convert nInteger into a string. -// * Return value on error: "" -string IntToString(int nInteger); - -// 93: Get the first object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetFirstObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 94: Get the next object in oArea. -// If no valid area is specified, it will use the caller's area. -// - oArea -// - nObjectFilter: OBJECT_TYPE_* -// * Return value on error: OBJECT_INVALID -object GetNextObjectInArea(object oArea=OBJECT_INVALID, int nObjectFilter=OBJECT_TYPE_CREATURE); - -// 95: Get the total from rolling (nNumDice x d2 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d2(int nNumDice=1); - -// 96: Get the total from rolling (nNumDice x d3 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d3(int nNumDice=1); - -// 97: Get the total from rolling (nNumDice x d4 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d4(int nNumDice=1); - -// 98: Get the total from rolling (nNumDice x d6 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d6(int nNumDice=1); - -// 99: Get the total from rolling (nNumDice x d8 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d8(int nNumDice=1); - -// 100: Get the total from rolling (nNumDice x d10 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d10(int nNumDice=1); - -// 101: Get the total from rolling (nNumDice x d12 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d12(int nNumDice=1); - -// 102: Get the total from rolling (nNumDice x d20 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d20(int nNumDice=1); - -// 103: Get the total from rolling (nNumDice x d100 dice). -// - nNumDice: If this is less than 1, the value 1 will be used. -int d100(int nNumDice=1); - -// 104: Get the magnitude of vVector; this can be used to determine the -// distance between two points. -// * Return value on error: 0.0f -float VectorMagnitude(vector vVector); - -// 105: Get the metamagic type (METAMAGIC_*) of the last spell cast by the caller -// * Return value if the caster is not a valid object: -1 -int GetMetaMagicFeat(); - -// 106: Get the object type (OBJECT_TYPE_*) of oTarget -// * Return value if oTarget is not a valid object: -1 -int GetObjectType(object oTarget); - -// 107: Get the racial type (RACIAL_TYPE_*) of oCreature -// * Return value if oCreature is not a valid creature: RACIAL_TYPE_INVALID -int GetRacialType(object oCreature); - -// 108: Do a Fortitude Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int FortitudeSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 109: Does a Reflex Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int ReflexSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 110: Does a Will Save check for the given DC -// - oCreature -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -// Returns: 0 if the saving throw roll failed -// Returns: 1 if the saving throw roll succeeded -// Returns: 2 if the target was immune to the save type specified -int WillSave(object oCreature, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 111: Get the DC to save against for a spell (5 + spell level + CHA Mod + WIS Mod). -// This can be called by a creature or by an Area of Effect object. -int GetSpellSaveDC(); - -// 112: Set the subtype of eEffect to Magical and return eEffect. -// (Effects default to magical if the subtype is not set) -effect MagicalEffect(effect eEffect); - -// 113: Set the subtype of eEffect to Supernatural and return eEffect. -// (Effects default to magical if the subtype is not set) -effect SupernaturalEffect(effect eEffect); - -// 114: Set the subtype of eEffect to Extraordinary and return eEffect. -// (Effects default to magical if the subtype is not set) -effect ExtraordinaryEffect(effect eEffect); - -// 115: 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. -effect EffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 116: If oObject is a creature, this will return that creature's armour class -// If oObject is an item, door or placeable, this will return zero. -// - nForFutureUse: this parameter is not currently used -// * Return value if oObject is not a creature, item, door or placeable: -1 -int GetAC(object oObject, int nForFutureUse=0); - -// 117: Create an AC Decrease effect -// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) -// - nValue: size of AC decrease -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 118: Create an Attack Increase effect -// - nBonus: size of attack bonus -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); - -// 119: 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 -effect EffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); - -// 120: Create a Damage Increase effect -// - nBonus: DAMAGE_BONUS_* -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 121: Convert nRounds into a number of seconds -// A round is always 6.0 seconds -float RoundsToSeconds(int nRounds); - -// 122: Convert nHours into a number of seconds -// The result will depend on how many minutes there are per hour (game-time) -float HoursToSeconds(int nHours); - -// 123: Convert nTurns into a number of seconds -// A turn is always 60.0 seconds -float TurnsToSeconds(int nTurns); - -// 124. SoundObjectSetFixedVariance -// Sets the constant variance at which to play the sound object -// This variance is a multiplier of the original sound -void SoundObjectSetFixedVariance( object oSound, float fFixedVariance ); - -// 125: Get an integer between 0 and 100 (inclusive) to represent oCreature's -// Good/Evil alignment -// (100=good, 0=evil) -// * Return value if oCreature is not a valid creature: -1 -int GetGoodEvilValue(object oCreature); - -// 126: GetPartyMemberCount -// Returns a count of how many members are in the party including the player character -int GetPartyMemberCount(); - -// 127: Return an ALIGNMENT_* constant to represent oCreature's good/evil alignment -// * Return value if oCreature is not a valid creature: -1 -int GetAlignmentGoodEvil(object oCreature); - -// 128: Get the first object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. -// (This can be used to ensure that spell effects do not go through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". -// For example, to return only creatures and doors, the value for this -// parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the -// origin of the effect(normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 129: Get the next object in nShape -// - nShape: SHAPE_* -// - fSize: -// -> If nShape == SHAPE_SPHERE, this is the radius of the sphere -// -> If nShape == SHAPE_SPELLCYLINDER, this is the radius of the cylinder -// -> If nShape == SHAPE_CONE, this is the widest radius of the cone -// -> If nShape == SHAPE_CUBE, this is half the length of one of the sides of -// the cube -// - lTarget: This is the centre of the effect, usually GetSpellTargetPosition(), -// or the end of a cylinder or cone. -// - bLineOfSight: This controls whether to do a line-of-sight check on the -// object returned. (This can be used to ensure that spell effects do not go -// through walls.) -// - nObjectFilter: This allows you to filter out undesired object types, using -// bitwise "or". For example, to return only creatures and doors, the value for -// this parameter would be OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR -// - vOrigin: This is only used for cylinders and cones, and specifies the origin -// of the effect (normally the spell-caster's position). -// Return value on error: OBJECT_INVALID -object GetNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); - -// 130: 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. -effect EffectEntangle(); - -// 131: Cause oObject to run evToRun -void SignalEvent(object oObject, event evToRun); - -// 132: Create an event of the type nUserDefinedEventNumber -event EventUserDefined(int nUserDefinedEventNumber); - -// 133: Create a Death effect -// - nSpectacularDeath: if this is TRUE, the creature to which this effect is -// applied will die in an extraordinary fashion -// - nDisplayFeedback -// - nNoFadeAway: Passing TRUE for this parameter will keep the bodies from fading after the creature -// dies. Note that NO XP will be awarded if the creature is killed with this parameter. -effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE, int nNoFadeAway=FALSE); - -// 134: 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). -effect EffectKnockdown(); - -// 135: Give oItem to oGiveTo -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void ActionGiveItem(object oItem, object oGiveTo); - -// 136: Take oItem from oTakeFrom -// If oItem is not a valid item, or oTakeFrom is not a valid object, nothing -// will happen. -void ActionTakeItem(object oItem, object oTakeFrom); - -// 137: Normalize vVector -vector VectorNormalize(vector vVector); - -// 138: -// Gets the stack size of an item. -int GetItemStackSize( object oItem ); - -// 139: Get the ability score of type nAbility for a creature (otherwise 0) -// - oCreature: the creature whose ability score we wish to find out -// - nAbilityType: ABILITY_* -// Return value on error: 0 -int GetAbilityScore(object oCreature, int nAbilityType); - -// 140: * Returns TRUE if oCreature is a dead NPC, dead PC or a dying PC. -int GetIsDead(object oCreature); - -// 141: Output vVector to the logfile. -// - vVector -// - bPrepend: if this is TRUE, the message will be prefixed with "PRINTVECTOR:" -void PrintVector(vector vVector, int bPrepend); - -// 142: Create a vector with the specified values for x, y and z -vector Vector(float x=0.0f, float y=0.0f, float z=0.0f); - -// 143: Cause the caller to face vTarget -void SetFacingPoint(vector vTarget); - -// 144: Convert fAngle to a vector -vector AngleToVector(float fAngle); - -// 145: Convert vVector to an angle -float VectorToAngle(vector vVector); - -// 146: The caller will perform a Melee Touch Attack on oTarget -// This is not an action, and it assumes the caller is already within range of -// oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackMelee(object oTarget, int bDisplayFeedback=TRUE); - -// 147: The caller will perform a Ranged Touch Attack on oTarget -// * Returns 0 on a miss, 1 on a hit and 2 on a critical hit -int TouchAttackRanged(object oTarget, int bDisplayFeedback=TRUE); - -// 148: Create a Paralyze effect -effect EffectParalyze(); - -// 149: 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. -effect EffectSpellImmunity(int nImmunityToSpell=FORCE_POWER_ALL_FORCE_POWERS); - -// 150: -// Set the stack size of an item. -// NOTE: The stack size will be clamped to between 1 and the max stack size (as -// specified in the base item). -void SetItemStackSize( object oItem, int nStackSize ); - -// 151: Get the distance in metres between oObjectA and oObjectB. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween(object oObjectA, object oObjectB); - -// 152: SetReturnStrref -// This function will turn on/off the display of the 'return to ebon hawk' option -// on the map screen and allow the string to be changed to an arbitrary string ref -// srReturnQueryStrRef is the string ref that will be displayed in the query pop -// up confirming that you wish to return to the specified location. -void SetReturnStrref(int bShow, int srStringRef = 0, int srReturnQueryStrRef = 0); - -// 153: EffectForceJump -// The effect required for force jumping -effect EffectForceJump(object oTarget, int nAdvanced = 0); - -// 154: Create a Sleep effect -effect EffectSleep(); - -// 155: Get the object which is in oCreature's specified inventory slot -// - nInventorySlot: INVENTORY_SLOT_* -// - oCreature -// * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no -// item in nInventorySlot. -object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF); - -// 156: This was previously EffectCharmed(); -effect EffectTemporaryForcePoints(int nTempForce); - -// 157: Create a Confuse effect -effect EffectConfused(); - -// 158: Create a Frighten effect -effect EffectFrightened(); - -// 159: Choke the bugger... -effect EffectChoke( ); - -// 160: Sets a global string with the specified identifier. This is an EXTREMELY -// restricted function - do not use without expilicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -void SetGlobalString( string sIdentifier, string sValue ); - -// 161: Create a Stun effect -effect EffectStunned(); - -// 162: Set whether oTarget's action stack can be modified -void SetCommandable(int bCommandable, object oTarget=OBJECT_SELF); - -// 163: Determine whether oTarget's action stack can be modified. -int GetCommandable(object oTarget=OBJECT_SELF); - -// 164: Create a Regenerate effect. -// - nAmount: amount of damage to be regenerated per time interval -// - fIntervalSeconds: length of interval in seconds -effect EffectRegenerate(int nAmount, float fIntervalSeconds); - -// 165: Create a Movement Speed Increase effect. -// - nNewSpeedPercent: This works in a dodgy way so please read this notes carefully. -// If you supply an integer under 100, 100 gets added to it to produce the final speed. -// e.g. if you supply 50, then the resulting speed is 150% of the original speed. -// If you supply 100 or above, then this is used directly as the resulting speed. -// e.g. if you specify 100, then the resulting speed is 100% of the original speed that is, -// it is unchanged. -// However if you specify 200, then the resulting speed is double the original speed. -effect EffectMovementSpeedIncrease(int nNewSpeedPercent); - -// 166: Get the number of hitdice for oCreature. -// * Return value if oCreature is not a valid creature: 0 -int GetHitDice(object oCreature); - -// 167: The action subject will follow oFollow until a ClearAllActions() is called. -// - oFollow: this is the object to be followed -// - fFollowDistance: follow distance in metres -// * No return value -void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f); - -// 168: Get the Tag of oObject -// * Return value if oObject is not a valid object: "" -string GetTag(object oObject); - -// 169: Do a Force Resistance check between oSource and oTarget, returning TRUE if -// the force was resisted. -// * Return value if oSource or oTarget is an invalid object: FALSE -int ResistForce(object oSource, object oTarget); - -// 170: Get the effect type (EFFECT_TYPE_*) of eEffect. -// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT -int GetEffectType(effect eEffect); - -// 171: Create an Area Of Effect effect in the area of the creature it is applied to. -// If the scripts are not specified, default ones will be used. -effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); - -// 172: * Returns TRUE if the Faction Ids of the two objects are the same -int GetFactionEqual(object oFirstObject, object oSecondObject=OBJECT_SELF); - -// 173: Make oObjectToChangeFaction join the faction of oMemberOfFactionToJoin. -// NB. ** This will only work for two NPCs ** -void ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin); - -// 174: * Returns TRUE if oObject is listening for something -int GetIsListening(object oObject); - -// 175: Set whether oObject is listening. -void SetListening(object oObject, int bValue); - -// 176: Set the string for oObject to listen for. -// Note: this does not set oObject to be listening. -void SetListenPattern(object oObject, string sPattern, int nNumber=0); - -// 177: * Returns TRUE if sStringToTest matches sPattern. -int TestStringAgainstPattern(string sPattern, string sStringToTest); - -// 178: Get the appropriate matched string (this should only be used in -// OnConversation scripts). -// * Returns the appropriate matched string, otherwise returns "" -string GetMatchedSubstring(int nString); - -// 179: Get the number of string parameters available. -// * Returns -1 if no string matched (this could be because of a dialogue event) -int GetMatchedSubstringsCount(); - -// 180: * 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 -effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); - -// 181: Get the weakest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWeakestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 182: Get the strongest member of oFactionMember's faction. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionStrongestMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 183: Get the member of oFactionMember's faction that has taken the most hit points -// of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionMostDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 184: Get the member of oFactionMember's faction that has taken the fewest hit -// points of damage. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionLeastDamagedMember(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 185: Get the amount of gold held by oFactionMember's faction. -// * Returns -1 if oFactionMember's faction is invalid. -int GetFactionGold(object oFactionMember); - -// 186: Get an integer between 0 and 100 (inclusive) that represents how -// oSourceFactionMember's faction feels about oTarget. -// * Return value on error: -1 -int GetFactionAverageReputation(object oSourceFactionMember, object oTarget); - -// 187: Get an integer between 0 and 100 (inclusive) that represents the average -// good/evil alignment of oFactionMember's faction. -// * Return value on error: -1 -int GetFactionAverageGoodEvilAlignment(object oFactionMember); - -// 188. SoundObjectGetFixedVariance -// Gets the constant variance at which to play the sound object -float SoundObjectGetFixedVariance(object oSound); - -// 189: Get the average level of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageLevel(object oFactionMember); - -// 190: Get the average XP of the members of the faction. -// * Return value on error: -1 -int GetFactionAverageXP(object oFactionMember); - -// 191: Get the most frequent class in the faction - this can be compared with the -// constants CLASS_TYPE_*. -// * Return value on error: -1 -int GetFactionMostFrequentClass(object oFactionMember); - -// 192: Get the object faction member with the lowest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionWorstAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 193: Get the object faction member with the highest armour class. -// * Returns OBJECT_INVALID if oFactionMember's faction is invalid. -object GetFactionBestAC(object oFactionMember=OBJECT_SELF, int bMustBeVisible=TRUE); - -// 194: Get a global string with the specified identifier -// This is an EXTREMELY restricted function. Use only with explicit permission. -// This means if you are not Preston. Then go see him if you're even thinking -// about using this. -string GetGlobalString( string sIdentifier ); - -// 195: In an onConversation script this gets the number of the string pattern -// matched (the one that triggered the script). -// * Returns -1 if no string matched -int GetListenPatternNumber(); - -// 196: Jump to an object ID, or as near to it as possible. -void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE); - -// 197: Get the first waypoint with the specified tag. -// * Returns OBJECT_INVALID if the waypoint cannot be found. -object GetWaypointByTag(string sWaypointTag); - -// 198: Get the destination (a waypoint or a door) for a trigger or a door. -// * Returns OBJECT_INVALID if oTransition is not a valid trigger or door. -object GetTransitionTarget(object oTransition); - -// 199: 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. -effect EffectLinkEffects(effect eChildEffect, effect eParentEffect ); - -// 200: Get the nNth object with the specified tag. -// - sTag -// - nNth: the nth object with this tag may be requested -// * Returns OBJECT_INVALID if the object cannot be found. -object GetObjectByTag(string sTag, int nNth=0); - -// 201: Adjust the alignment of oSubject. -// - oSubject -// - nAlignment: -// -> ALIGNMENT_LIGHT_SIDE/ALIGNMENT_DARK_SIDE: oSubject's -// alignment will be shifted in the direction specified -// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's dark side/light side -// alignment value in the direction which is towards neutrality. -// e.g. If oSubject has an alignment value of 80 (i.e. light side) -// then if nShift is 15, the alignment value will become (80-15)=65 -// Furthermore, the shift will at most take the alignment value to 50 and -// not beyond. -// e.g. If oSubject has an alignment value of 40 then if nShift is 15, -// the aligment value will become 50 -// - nShift: this is the desired shift in alignment -// * No return value -// - bDontModifyNPCs - Defaults to 'FALSE', if you pass in 'TRUE' then you can adjust -// the playercharacter's alignment without impacting the rest of the NPCs -void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bDontModifyNPCs = FALSE); - -// 202: Do nothing for fSeconds seconds. -void ActionWait(float fSeconds); - -// 203: Set the transition bitmap of a player; this should only be called in area -// transition scripts. This action should be run by the person "clicking" the -// area transition via AssignCommand. -// - nPredefinedAreaTransition: -// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_* -// -> To use a custom, user-defined area transition bitmap, use -// AREA_TRANSITION_USER_DEFINED and specify the filename in the second -// parameter -// - sCustomAreaTransitionBMP: this is the filename of a custom, user-defined -// area transition bitmap -void SetAreaTransitionBMP(int nPredefinedAreaTransition, string sCustomAreaTransitionBMP=""); - -// AMF: APRIL 28, 2003 - I HAVE CHANGED THIS FUNCTION AS PER DAN'S REQUEST -// 204: Starts a conversation with oObjectToConverseWith - this will cause their -// OnDialog event to fire. -// - oObjectToConverseWith -// - sDialogResRef: If this is blank, the creature's own dialogue file will be used -// - bPrivateConversation: If this is blank, the default is FALSE. -// - nConversationType - If this is blank the default will be Cinematic, ie. a normal conversation type -// other choices inclue: CONVERSATION_TYPE_COMPUTER -// UPDATE: nConversationType actually has no meaning anymore. This has been replaced by a flag in the dialog editor. However -// for backwards compatability it has been left here. So when using this command place CONVERSATION_TYPE_CINEMATIC in here. - DJF -// - bIgnoreStartRange - If this is blank the default will be FALSE, ie. Start conversation ranges are in effect -// Setting this to TRUE will cause creatures to start a conversation without requiring to close -// the distance between the two object in dialog. -// - sNameObjectToIgnore1-6 - Normally objects in the animation list of the dialog editor have to be available for animations on that node to work -// these 6 strings are to indicate 6 objects that don’t need to be available for things to proceed. The string should be EXACTLY -// the same as the string that it represents in the dialog editor. -// - nBarkX and nBarkY - These override the left, top corner position for the bark string if the conversation starting is a bark string. -// They only happen on a conversation by conversation basis and don't stay in effect in subsequent conversations. -void ActionStartConversation(object oObjectToConverse, string sDialogResRef = "", int bPrivateConversation = FALSE, int nConversationType = CONVERSATION_TYPE_CINEMATIC, int bIgnoreStartRange = FALSE, string sNameObjectToIgnore1 = "", string sNameObjectToIgnore2 = "", string sNameObjectToIgnore3 = "", string sNameObjectToIgnore4 = "", string sNameObjectToIgnore5 = "", string sNameObjectToIgnore6 = "", int bUseLeader = FALSE, int nBarkX = -1, int nBarkY = -1, int bDontClearAllActions = 0); - -// 205: Pause the current conversation. -void ActionPauseConversation(); - -// 206: Resume a conversation after it has been paused. -void ActionResumeConversation(); - -// 207: 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. -effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); - -// 208: Get an integer between 0 and 100 (inclusive) that represents how oSource -// feels about oTarget. -// -> 0-10 means oSource is hostile to oTarget -// -> 11-89 means oSource is neutral to oTarget -// -> 90-100 means oSource is friendly to oTarget -// * Returns -1 if oSource or oTarget does not identify a valid object -int GetReputation(object oSource, object oTarget); - -// 209: Adjust how oSourceFactionMember's faction feels about oTarget by the -// specified amount. -// Note: This adjusts Faction Reputation, how the entire faction that -// oSourceFactionMember is in, feels about oTarget. -// * No return value -void AdjustReputation(object oTarget, object oSourceFactionMember, int nAdjustment); - -// 210: Gets the actual file name of the current module -string GetModuleFileName(); - -// 211: Get the creature that is going to attack oTarget. -// Note: This value is cleared out at the end of every combat round and should -// not be used in any case except when getting a "going to be attacked" shout -// from the master creature (and this creature is a henchman) -// * Returns OBJECT_INVALID if oTarget is not a valid creature. -object GetGoingToBeAttackedBy(object oTarget); - -// 212: Create a Force Resistance Increase effect. -// - nValue: size of Force Resistance increase -effect EffectForceResistanceIncrease(int nValue); - -// 213: Get the location of oObject. -location GetLocation(object oObject); - -// 214: The subject will jump to lLocation instantly (even between areas). -// If lLocation is invalid, nothing will happen. -void ActionJumpToLocation(location lLocation); - -// 215: Create a location. -location Location(vector vPosition, float fOrientation); - -// 216: Apply eEffect at lLocation. -void ApplyEffectAtLocation(int nDurationType, effect eEffect, location lLocation, float fDuration=0.0f); - -// 217: * Returns TRUE if oCreature is a Player Controlled character. -int GetIsPC(object oCreature); - -// 218: Convert fFeet into a number of meters. -float FeetToMeters(float fFeet); - -// 219: Convert fYards into a number of meters. -float YardsToMeters(float fYards); - -// 220: Apply eEffect to oTarget. -void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f); - -// 221: The caller will immediately speak sStringToSpeak (this is different from -// ActionSpeakString) -// - sStringToSpeak -// - nTalkVolume: TALKVOLUME_* -void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK); - -// 222: Get the location of the caller's last spell target. -location GetSpellTargetLocation(); - -// 223: Get the position vector from lLocation. -vector GetPositionFromLocation(location lLocation); - -// 224: the effect of body fule.. convers HP -> FP i think -effect EffectBodyFuel( ); - -// 225: Get the orientation value from lLocation. -float GetFacingFromLocation(location lLocation); - -// 226: Get the creature nearest to lLocation, subject to all the criteria specified. -// - nFirstCriteriaType: CREATURE_TYPE_* -// - nFirstCriteriaValue: -// -> CLASS_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_CLASS -// -> SPELL_* if nFirstCriteriaType was CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT -// or CREATURE_TYPE_HAS_SPELL_EFFECT -// -> TRUE or FALSE if nFirstCriteriaType was CREATURE_TYPE_IS_ALIVE -// -> PERCEPTION_* if nFirstCriteriaType was CREATURE_TYPE_PERCEPTION -// -> PLAYER_CHAR_IS_PC or PLAYER_CHAR_NOT_PC if nFirstCriteriaType was -// CREATURE_TYPE_PLAYER_CHAR -// -> RACIAL_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_RACIAL_TYPE -// -> REPUTATION_TYPE_* if nFirstCriteriaType was CREATURE_TYPE_REPUTATION -// For example, to get the nearest PC, use -// (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) -// - lLocation: We're trying to find the creature of the specified type that is -// nearest to lLocation -// - nNth: We don't have to find the first nearest: we can find the Nth nearest.... -// - nSecondCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nSecondCriteriaValue: This is used in the same way as nFirstCriteriaValue -// to further specify the type of creature that we are looking for. -// - nThirdCriteriaType: This is used in the same way as nFirstCriteriaType to -// further specify the type of creature that we are looking for. -// - nThirdCriteriaValue: This is used in the same way as nFirstCriteriaValue to -// further specify the type of creature that we are looking for. -// * Return value on error: OBJECT_INVALID -object GetNearestCreatureToLocation(int nFirstCriteriaType, int nFirstCriteriaValue, location lLocation, int nNth=1, int nSecondCriteriaType=-1, int nSecondCriteriaValue=-1, int nThirdCriteriaType=-1, int nThirdCriteriaValue=-1 ); - -// 227: Get the Nth object nearest to oTarget that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - oTarget -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1); - -// 228: Get the nNth object nearest to lLocation that is of the specified type. -// - nObjectType: OBJECT_TYPE_* -// - lLocation -// - nNth -// * Return value on error: OBJECT_INVALID -object GetNearestObjectToLocation(int nObjectType, location lLocation, int nNth=1); - -// 229: Get the nth Object nearest to oTarget that has sTag as its tag. -// * Return value on error: OBJECT_INVALID -object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1); - -// 230: Convert nInteger into a floating point number. -float IntToFloat(int nInteger); - -// 231: Convert fFloat into the nearest integer. -int FloatToInt(float fFloat); - -// 232: Convert sNumber into an integer. -int StringToInt(string sNumber); - -// 233: Convert sNumber into a floating point number. -float StringToFloat(string sNumber); - -// 234: Cast spell nSpell at lTargetLocation. -// - nSpell: SPELL_* -// - lTargetLocation -// - nMetaMagic: METAMAGIC_* -// - bCheat: If this is TRUE, then the executor of the action doesn't have to be -// able to cast the spell. -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -// - bInstantSpell: If this is TRUE, the spell is cast immediately; this allows -// the end-user to simulate -// a high-level magic user having lots of advance warning of impending trouble. -void ActionCastSpellAtLocation(int nSpell, location lTargetLocation, int nMetaMagic=0, int bCheat=FALSE, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE); - -// 235: * Returns TRUE if oSource considers oTarget as an enemy. -int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); - -// 236: * Returns TRUE if oSource considers oTarget as a friend. -int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); - -// 237: * Returns TRUE if oSource considers oTarget as neutral. -int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); - -// 238: Get the PC that is involved in the conversation. -// * Returns OBJECT_INVALID on error. -object GetPCSpeaker(); - -// 239: Get a string from the talk table using nStrRef. -string GetStringByStrRef(int nStrRef); - -// 240: Causes the creature to speak a translated string. -// - nStrRef: Reference of the string in the talk table -// - nTalkVolume: TALKVOLUME_* -void ActionSpeakStringByStrRef(int nStrRef, int nTalkVolume=TALKVOLUME_TALK); - -// 241: Destroy oObject (irrevocably). -// This will not work on modules and areas. -// The bNoFade and fDelayUntilFade are for creatures and placeables only -void DestroyObject(object oDestroy, float fDelay=0.0f, int bNoFade = FALSE, float fDelayUntilFade = 0.0f, int nHideFeedback = 0); - -// 242: Get the module. -// * Return value on error: OBJECT_INVALID -object GetModule(); - -// 243: Create an object of the specified type at lLocation. -// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE, -// OBJECT_TYPE_STORE -// - sTemplate -// - lLocation -// - bUseAppearAnimation -// Waypoints can now also be created using the CreateObject function. -// nObjectType is: OBJECT_TYPE_WAYPOINT -// sTemplate will be the tag of the waypoint -// lLocation is where the waypoint will be placed -// bUseAppearAnimation is ignored -object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 244: Create an event which triggers the "SpellCastAt" script -event EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE); - -// 245: This is for use in a "Spell Cast" script, it gets who cast the spell. -// The spell could have been cast by a creature, placeable or door. -// * Returns OBJECT_INVALID if the caller is not a creature, placeable or door. -object GetLastSpellCaster(); - -// 246: This is for use in a "Spell Cast" script, it gets the ID of the spell that -// was cast. -int GetLastSpell(); - -// 247: This is for use in a user-defined script, it gets the event number. -int GetUserDefinedEventNumber(); - -// 248: This is for use in a Spell script, it gets the ID of the spell that is being -// cast (SPELL_*). -int GetSpellId(); - -// 249: Generate a random name. -string RandomName(); - -// 250: Create a Poison effect. -// - nPoisonType: POISON_* -effect EffectPoison(int nPoisonType); - -// 251: Returns whether this script is being run -// while a load game is in progress -int GetLoadFromSaveGame(); - -// 252: Assured Deflection -// This effect ensures that all projectiles shot at a jedi will be deflected -// without doing an opposed roll. It takes an optional parameter to say whether -// the deflected projectile will return to the attacker and cause damage -effect EffectAssuredDeflection(int nReturn = 0); - -// 253: Get the name of oObject. -string GetName(object oObject); - -// 254: Use this in a conversation script to get the person with whom you are conversing. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastSpeaker(); - -// 255: Use this in an OnDialog script to start up the dialog tree. -// - sResRef: if this is not specified, the default dialog file will be used -// - oObjectToDialog: if this is not specified the person that triggered the -// event will be used -int BeginConversation(string sResRef="", object oObjectToDialog=OBJECT_INVALID); - -// 256: Use this in an OnPerception script to get the object that was perceived. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetLastPerceived(); - -// 257: Use this in an OnPerception script to determine whether the object that was -// perceived was heard. -int GetLastPerceptionHeard(); - -// 258: Use this in an OnPerception script to determine whether the object that was -// perceived has become inaudible. -int GetLastPerceptionInaudible(); - -// 259: Use this in an OnPerception script to determine whether the object that was -// perceived was seen. -int GetLastPerceptionSeen(); - -// 260: Use this in an OnClosed script to get the object that closed the door or placeable. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastClosedBy(); - -// 261: Use this in an OnPerception script to determine whether the object that was -// perceived has vanished. -int GetLastPerceptionVanished(); - -// 262: Get the first object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetFirstInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 263: Get the next object within oPersistentObject. -// - oPersistentObject -// - nResidentObjectType: OBJECT_TYPE_* -// - nPersistentZone: PERSISTENT_ZONE_ACTIVE. [This could also take the value -// PERSISTENT_ZONE_FOLLOW, but this is no longer used.] -// * Returns OBJECT_INVALID if no object is found. -object GetNextInPersistentObject(object oPersistentObject=OBJECT_SELF, int nResidentObjectType=OBJECT_TYPE_CREATURE, int nPersistentZone=PERSISTENT_ZONE_ACTIVE); - -// 264: This returns the creator of oAreaOfEffectObject. -// * Returns OBJECT_INVALID if oAreaOfEffectObject is not a valid Area of Effect object. -object GetAreaOfEffectCreator(object oAreaOfEffectObject=OBJECT_SELF); - -// 265: Brings up the level up GUI for the player. The GUI will only show up -// if the player has gained enough experience points to level up. -// * Returns TRUE if the GUI was successfully brought up; FALSE if not. -int ShowLevelUpGUI(); - -// 266: Flag the specified item as being non-equippable or not. Set bNonEquippable -// to TRUE to prevent this item from being equipped, and FALSE to allow -// the normal equipping checks to determine if the item can be equipped. -// NOTE: This will do nothing if the object passed in is not an item. Items that -// are already equipped when this is called will not automatically be -// unequipped. These items will just be prevented from being re-equipped -// should they be unequipped. -void SetItemNonEquippable( object oItem, int bNonEquippable ); - -// 267: GetButtonMashCheck -// This function returns whether the button mash check, used for the combat tutorial, is on -int GetButtonMashCheck(); - -// 268: SetButtonMashCheck -// This function sets the button mash check variable, and is used for turning the check on and off -void SetButtonMashCheck(int nCheck); - -// 269: EffectForcePushTargeted -// This effect is exactly the same as force push, except it takes a location parameter that specifies -// where the location of the force push is to be done from. All orientations are also based on this location. -// AMF: The new ignore test direct line variable should be used with extreme caution -// It overrides geometry checks for force pushes, so that the object that the effect is applied to -// is guaranteed to move that far, ignoring collisions. It is best used for cutscenes. -effect EffectForcePushTargeted(location lCentre, int nIgnoreTestDirectLine = 0); - -// 270: Create a Haste effect. -effect EffectHaste(); - -// 271: Give oItem to oGiveTo (instant; for similar Action use ActionGiveItem) -// If oItem is not a valid item, or oGiveTo is not a valid object, nothing will -// happen. -void GiveItem(object oItem, object oGiveTo); - -// 272: Convert oObject into a hexadecimal string. -string ObjectToString(object oObject); - -// 273: Create an Immunity effect. -// - nImmunityType: IMMUNITY_TYPE_* -effect EffectImmunity(int nImmunityType); - -// 274: - oCreature -// - nImmunityType: IMMUNITY_TYPE_* -// - oVersus: if this is specified, then we also check for the race and -// alignment of oVersus -// * Returns TRUE if oCreature has immunity of type nImmunity versus oVersus. -int GetIsImmune(object oCreature, int nImmunityType, object oVersus=OBJECT_INVALID); - -// 275: Creates a Damage Immunity Increase effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); - -// 276: Determine whether oEncounter is active. -int GetEncounterActive(object oEncounter=OBJECT_SELF); - -// 277: Set oEncounter's active state to nNewValue. -// - nNewValue: TRUE/FALSE -// - oEncounter -void SetEncounterActive(int nNewValue, object oEncounter=OBJECT_SELF); - -// 278: Get the maximum number of times that oEncounter will spawn. -int GetEncounterSpawnsMax(object oEncounter=OBJECT_SELF); - -// 279: Set the maximum number of times that oEncounter can spawn -void SetEncounterSpawnsMax(int nNewValue, object oEncounter=OBJECT_SELF); - -// 280: Get the number of times that oEncounter has spawned so far -int GetEncounterSpawnsCurrent(object oEncounter=OBJECT_SELF); - -// 281: Set the number of times that oEncounter has spawned so far -void SetEncounterSpawnsCurrent(int nNewValue, object oEncounter=OBJECT_SELF); - -// 282: Use this in an OnItemAcquired script to get the item that was acquired. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemAcquired(); - -// 283: Use this in an OnItemAcquired script to get the creatre that previously -// possessed the item. -// * Returns OBJECT_INVALID if the item was picked up from the ground. -object GetModuleItemAcquiredFrom(); - -// 284: Set the value for a custom token. -void SetCustomToken(int nCustomTokenNumber, string sTokenValue); - -// 285: Determine whether oCreature has nFeat, and nFeat is useable. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the feat due to daily limits or -// other restrictions. Use GetFeatAcquired() if you just want to -// know if they've got it or not. -// - nFeat: FEAT_* -// - oCreature -int GetHasFeat(int nFeat, object oCreature=OBJECT_SELF); - -// 286: Determine whether oCreature has nSkill, and nSkill is useable. -// - nSkill: SKILL_* -// - oCreature -int GetHasSkill(int nSkill, object oCreature=OBJECT_SELF); - -// 287: Use nFeat on oTarget. -// - nFeat: FEAT_* -// - oTarget -void ActionUseFeat(int nFeat, object oTarget); - -// 288: Runs the action "UseSkill" on the current creature -// Use nSkill on oTarget. -// - nSkill: SKILL_* -// - oTarget -// - nSubSkill: SUBSKILL_* -// - oItemUsed: Item to use in conjunction with the skill -void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID ); - -// 289: Determine whether oSource sees oTarget. -int GetObjectSeen(object oTarget, object oSource=OBJECT_SELF); - -// 290: Determine whether oSource hears oTarget. -int GetObjectHeard(object oTarget, object oSource=OBJECT_SELF); - -// 291: Use this in an OnPlayerDeath module script to get the last player that died. -object GetLastPlayerDied(); - -// 292: Use this in an OnItemLost script to get the item that was lost/dropped. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLost(); - -// 293: Use this in an OnItemLost script to get the creature that lost the item. -// * Returns OBJECT_INVALID if the module is not valid. -object GetModuleItemLostBy(); - -// 294: Do aActionToDo. -void ActionDoCommand(action aActionToDo); - -// 295: Conversation event. -event EventConversation(); - -// 296: Set the difficulty level of oEncounter. -// - nEncounterDifficulty: ENCOUNTER_DIFFICULTY_* -// - oEncounter -void SetEncounterDifficulty(int nEncounterDifficulty, object oEncounter=OBJECT_SELF); - -// 297: Get the difficulty level of oEncounter. -int GetEncounterDifficulty(object oEncounter=OBJECT_SELF); - -// 298: Get the distance between lLocationA and lLocationB. -float GetDistanceBetweenLocations(location lLocationA, location lLocationB); - -// 299: Use this in spell scripts to get nDamage adjusted by oTarget's reflex and -// evasion saves. -// - nDamage -// - oTarget -// - nDC: Difficulty check -// - nSaveType: SAVING_THROW_TYPE_* -// - oSaveVersus -int GetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); - -// 300: Play nAnimation immediately. -// - nAnimation: ANIMATION_* -// - fSpeed -// - fSeconds: Duration of the animation (this is not used for Fire and -// Forget animations) If a time of -1.0f is specified for a looping animation -// it will loop until the next animation is applied. -void PlayAnimation(int nAnimation, float fSpeed=1.0, float fSeconds=0.0); - -// 301: Create a Spell Talent. -// - nSpell: SPELL_* -talent TalentSpell(int nSpell); - -// 302: Create a Feat Talent. -// - nFeat: FEAT_* -talent TalentFeat(int nFeat); - -// 303: Create a Skill Talent. -// - nSkill: SKILL_* -talent TalentSkill(int nSkill); - -// 304: Determine if oObject has effects originating from nSpell. -// - nSpell: SPELL_* -// - oObject -int GetHasSpellEffect(int nSpell, object oObject=OBJECT_SELF); - -// 305: Get the spell (SPELL_*) that applied eSpellEffect. -// * Returns -1 if eSpellEffect was applied outside a spell script. -int GetEffectSpellId(effect eSpellEffect); - -// 306: Determine whether oCreature has tTalent. -int GetCreatureHasTalent(talent tTalent, object oCreature=OBJECT_SELF); - -// 307: Get a random talent of oCreature, within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - oCreature -// - nInclusion: types of talent to include -talent GetCreatureTalentRandom(int nCategory, object oCreature=OBJECT_SELF, int nInclusion=0); - -// 308: Get the best talent (i.e. closest to nCRMax without going over) of oCreature, -// within nCategory. -// - nCategory: TALENT_CATEGORY_* -// - nCRMax: Challenge Rating of the talent -// - oCreature -// - nInclusion: types of talent to include -// - nExcludeType: TALENT_TYPE_FEAT or TALENT_TYPE_FORCE, type of talent that we wish to ignore -// - nExcludeId: Talent ID of the talent we wish to ignore. -// A value of TALENT_EXCLUDE_ALL_OF_TYPE for this parameter will mean that all talents of -// type nExcludeType are ignored. -talent GetCreatureTalentBest(int nCategory, int nCRMax, object oCreature=OBJECT_SELF, int nInclusion=0, int nExcludeType = -1, int nExcludeId = -1); - -// 309: Use tChosenTalent on oTarget. -void ActionUseTalentOnObject(talent tChosenTalent, object oTarget); - -// 310: Use tChosenTalent at lTargetLocation. -void ActionUseTalentAtLocation(talent tChosenTalent, location lTargetLocation); - -// 311: Get the gold piece value of oItem. -// * Returns 0 if oItem is not a valid item. -int GetGoldPieceValue(object oItem); - -// 312: * Returns TRUE if oCreature is of a playable racial type. -int GetIsPlayableRacialType(object oCreature); - -// 313: Jump to lDestination. The action is added to the TOP of the action queue. -void JumpToLocation(location lDestination); - -// 314: Create a Temporary Hitpoints effect. -// - nHitPoints: a positive integer -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. -effect EffectTemporaryHitpoints(int nHitPoints); - -// 315: Get the number of ranks that oTarget has in nSkill. -// - nSkill: SKILL_* -// - oTarget -// * Returns -1 if oTarget doesn't have nSkill. -// * Returns 0 if nSkill is untrained. -int GetSkillRank(int nSkill, object oTarget=OBJECT_SELF); - -// 316: Get the attack target of oCreature. -// This only works when oCreature is in combat. -object GetAttackTarget(object oCreature=OBJECT_SELF); - -// 317: Get the attack type (SPECIAL_ATTACK_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackType(object oCreature=OBJECT_SELF); - -// 318: Get the attack mode (COMBAT_MODE_*) of oCreature's last attack. -// This only works when oCreature is in combat. -int GetLastAttackMode(object oCreature=OBJECT_SELF); - -// 319: Get the distance in metres between oObjectA and oObjectB in 2D. -// * Return value if either object is invalid: 0.0f -float GetDistanceBetween2D(object oObjectA, object oObjectB); - -// 320: * Returns TRUE if oCreature is in combat. -//RWT-OEI 09/30/04 - If you pass TRUE in as the second parameter then -//this function will only return true if the character is in REAL combat. -//If you don't know what that means, don't pass in TRUE. -int GetIsInCombat(object oCreature=OBJECT_SELF, int bOnlyCountReal = FALSE); - -// 321: Get the last command (ASSOCIATE_COMMAND_*) issued to oAssociate. -int GetLastAssociateCommand(object oAssociate=OBJECT_SELF); - -// 322: Give nGP gold to oCreature. -void GiveGoldToCreature(object oCreature, int nGP); - -// 323: Set the destroyable status of the caller. -// - bDestroyable: If this is FALSE, the caller does not fade out on death, but -// sticks around as a corpse. -// - bRaiseable: If this is TRUE, the caller can be raised via resurrection. -// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. -void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE); - -// 324: Set the locked state of oTarget, which can be a door or a placeable object. -void SetLocked(object oTarget, int bLocked); - -// 325: Get the locked state of oTarget, which can be a door or a placeable object. -int GetLocked(object oTarget); - -// 326: Use this in a trigger's OnClick event script to get the object that last -// clicked on it. -// This is identical to GetEnteringObject. -object GetClickingObject(); - -// 327: Initialise oTarget to listen for the standard Associates commands. -void SetAssociateListenPatterns(object oTarget=OBJECT_SELF); - -// 328: Get the last weapon that oCreature used in an attack. -// * Returns OBJECT_INVALID if oCreature did not attack, or has no weapon equipped. -object GetLastWeaponUsed(object oCreature); - -// 329: Use oPlaceable. -void ActionInteractObject(object oPlaceable); - -// 330: Get the last object that used the placeable object that is calling this function. -// * Returns OBJECT_INVALID if it is called by something other than a placeable or -// a door. -object GetLastUsedBy(); - -// 331: Returns the ability modifier for the specified ability -// Get oCreature's ability modifier for nAbility. -// - nAbility: ABILITY_* -// - oCreature -int GetAbilityModifier(int nAbility, object oCreature=OBJECT_SELF); - -// 332: Determined whether oItem has been identified. -int GetIdentified(object oItem); - -// 333: Set whether oItem has been identified. -void SetIdentified(object oItem, int bIdentified); - -// 334: Get the distance between lLocationA and lLocationB. in 2D -float GetDistanceBetweenLocations2D(location lLocationA, location lLocationB); - -// 335: Get the distance from the caller to oObject in metres. -// * Return value on error: -1.0f -float GetDistanceToObject2D(object oObject); - -// 336: Get the last blocking door encountered by the caller of this function. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetBlockingDoor(); - -// 337: - oTargetDoor -// - nDoorAction: DOOR_ACTION_* -// * Returns TRUE if nDoorAction can be performed on oTargetDoor. -int GetIsDoorActionPossible(object oTargetDoor, int nDoorAction); - -// 338: Perform nDoorAction on oTargetDoor. -void DoDoorAction(object oTargetDoor, int nDoorAction); - -// 339: Get the first item in oTarget's inventory (start to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetFirstItemInInventory(object oTarget=OBJECT_SELF); - -// 340: Get the next item in oTarget's inventory (continue to cycle through oTarget's -// inventory). -// * Returns OBJECT_INVALID if the caller is not a creature, item, placeable or store, -// or if no item is found. -object GetNextItemInInventory(object oTarget=OBJECT_SELF); - -// 341: A creature can have up to three classes. This function determines the -// creature's class (CLASS_TYPE_*) based on nClassPosition. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in -// nClassPosition (i.e. a single-class creature will only have a value in -// nClassLocation=1) or if oCreature is not a valid creature. -int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 342: A creature can have up to three classes. This function determines the -// creature's class level based on nClass Position. -// - nClassPosition: 1, 2 or 3 -// - oCreature -// * Returns 0 if oCreature does not have a class in nClassPosition -// (i.e. a single-class creature will only have a value in nClassLocation=1) -// or if oCreature is not a valid creature. -int GetLevelByPosition(int nClassPosition, object oCreature=OBJECT_SELF); - -// 343: Determine the levels that oCreature holds in nClassType. -// - nClassType: CLASS_TYPE_* -// - oCreature -int GetLevelByClass(int nClassType, object oCreature=OBJECT_SELF); - -// 344: Get the amount of damage of type nDamageType that has been dealt to the caller. -// - nDamageType: DAMAGE_TYPE_* -int GetDamageDealtByType(int nDamageType); - -// 345: Get the total amount of damage that has been dealt to the caller. -int GetTotalDamageDealt(); - -// 346: Get the last object that damaged the caller. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetLastDamager(); - -// 347: Get the last object that disarmed the trap on the caller. -// * Returns OBJECT_INVALID if the caller is not a valid placeable, trigger or -// door. -object GetLastDisarmed(); - -// 348: Get the last object that disturbed the inventory of the caller. -// * Returns OBJECT_INVALID if the caller is not a valid creature or placeable. -object GetLastDisturbed(); - -// 349: Get the last object that locked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastLocked(); - -// 350: Get the last object that unlocked the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastUnlocked(); - -// 351: Create a Skill Increase effect. -// - nSkill: SKILL_* -// - nValue -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillIncrease(int nSkill, int nValue); - -// 352: Get the type of disturbance (INVENTORY_DISTURB_*) that caused the caller's -// OnInventoryDisturbed script to fire. This will only work for creatures and -// placeables. -int GetInventoryDisturbType(); - -// 353: get the item that caused the caller's OnInventoryDisturbed script to fire. -// * Returns OBJECT_INVALID if the caller is not a valid object. -object GetInventoryDisturbItem(); - -// 354: Displays the upgrade screen where the player can modify weapons and armor -// If oItem is NOT invalid, then the player will be forced to upgrade oItem and only oItem. -// If oCharacter is NOT invalid, then that character's various skills will be used... *NOT IMPLEMENTED* -// If nDisableItemCreation = TRUE, then the player will not be able to access the item creation screen -// If nDisableUpgrade = TRUE, then the player will be forced straight to item creation and not be able -// to access Item Upgrading. -void ShowUpgradeScreen(object oItem = OBJECT_INVALID, object oCharacter = OBJECT_INVALID, int nDisableItemCreation = FALSE, int nDisableUpgrade = FALSE, string sOverride2DA = ""); - -// 355: Set eEffect to be versus a specific alignment. -// - eEffect -// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL -// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL -effect VersusAlignmentEffect(effect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); - -// 356: Set eEffect to be versus nRacialType. -// - eEffect -// - nRacialType: RACIAL_TYPE_* -effect VersusRacialTypeEffect(effect eEffect, int nRacialType); - -// 357: Set eEffect to be versus traps. -effect VersusTrapEffect(effect eEffect); - -// 358: Get the gender of oCreature. -int GetGender(object oCreature); - -// 359: * Returns TRUE if tTalent is valid. -int GetIsTalentValid(talent tTalent); - -// 360: Causes the action subject to move away from lMoveAwayFrom. -void ActionMoveAwayFromLocation(location lMoveAwayFrom, int bRun=FALSE, float fMoveAwayRange=40.0f); - -// 361: Get the target that the caller attempted to attack - this should be used in -// conjunction with GetAttackTarget(). This value is set every time an attack is -// made, and is reset at the end of combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedAttackTarget(); - -// 362: Get the type (TALENT_TYPE_*) of tTalent. -int GetTypeFromTalent(talent tTalent); - -// 363: Get the ID of tTalent. This could be a SPELL_*, FEAT_* or SKILL_*. -int GetIdFromTalent(talent tTalent); - -// 364: Starts a game of pazaak. -// - nOpponentPazaakDeck: Index into PazaakDecks.2da; specifies which deck the opponent will use. -// - sEndScript: Script to be run when game finishes. -// - nMaxWager: Max player wager. If <= 0, the player's credits won't be modified by the result of the game and the wager screen will not show up. -// - bShowTutorial: Plays in tutorial mode (nMaxWager should be 0). -void PlayPazaak(int nOpponentPazaakDeck, string sEndScript, int nMaxWager, int bShowTutorial=FALSE, object oOpponent=OBJECT_INVALID); - -// 365: Returns result of last Pazaak game. Should be used only in an EndScript sent to PlayPazaak. -// * Returns 0 if player loses, 1 if player wins. -int GetLastPazaakResult(); - -// 366: displays a feed back string for the object spicified and the constant -// repersents the string to be displayed see:FeedBackText.2da -void DisplayFeedBackText(object oCreature, int nTextConstant); - -// 367: Add a journal quest entry to the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -// - nState: the state of the plot as seen in the toolset's Journal Editor -// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower -// number than the one it is currently on -void AddJournalQuestEntry(string szPlotID, int nState, int bAllowOverrideHigher=FALSE); - -// 368: Remove a journal quest entry from the player. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -void RemoveJournalQuestEntry(string szPlotID); - -// 369: Gets the State value of a journal quest. Returns 0 if no quest entry has been added for this szPlotID. -// - szPlotID: the plot identifier used in the toolset's Journal Editor -int GetJournalEntry(string szPlotID); - -// 370: PlayRumblePattern -// Starts a defined rumble pattern playing -int PlayRumblePattern(int nPattern); - -// 371: StopRumblePattern -// Stops a defined rumble pattern -int StopRumblePattern(int nPattern); - -// 372: Damages the creatures force points -effect EffectDamageForcePoints(int nDamage); - -// 373: Heals the creatures force points -effect EffectHealForcePoints(int nHeal); - - -// 374: Send a server message (szMessage) to the oPlayer. -void SendMessageToPC(object oPlayer, string szMessage); - -// 375: Get the target at which the caller attempted to cast a spell. -// This value is set every time a spell is cast and is reset at the end of -// combat. -// * Returns OBJECT_INVALID if the caller is not a valid creature. -object GetAttemptedSpellTarget(); - -// 376: Get the last creature that opened the caller. -// * Returns OBJECT_INVALID if the caller is not a valid door or placeable. -object GetLastOpenedBy(); - -// 377: Determine whether oCreature has nSpell memorised. -// PLEASE NOTE!!! - This function will return FALSE if the target -// is not currently able to use the spell due to lack of sufficient -// Force Points. Use GetSpellAcquired() if you just want to -// know if they've got it or not. -// - nSpell: SPELL_* -// - oCreature -int GetHasSpell(int nSpell, object oCreature=OBJECT_SELF); - -// 378: Open oStore for oPC. -void OpenStore(object oStore, object oPC, int nBonusMarkUp=0, int nBonusMarkDown=0); - -// 379: -void ActionSurrenderToEnemies(); - -// 380: Get the first member of oMemberOfFaction's faction (start to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetFirstFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 381: Get the next member of oMemberOfFaction's faction (continue to cycle through -// oMemberOfFaction's faction). -// * Returns OBJECT_INVALID if oMemberOfFaction's faction is invalid. -object GetNextFactionMember(object oMemberOfFaction, int bPCOnly=TRUE); - -// 382: Force the action subject to move to lDestination. -void ActionForceMoveToLocation(location lDestination, int bRun=FALSE, float fTimeout=30.0f); - -// 383: Force the action subject to move to oMoveTo. -void ActionForceMoveToObject(object oMoveTo, int bRun=FALSE, float fRange=1.0f, float fTimeout=30.0f); - -// 384: Get the experience assigned in the journal editor for szPlotID. -int GetJournalQuestExperience(string szPlotID); - -// 385: Jump to oToJumpTo (the action is added to the top of the action queue). -void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1); - -// 386: Set whether oMapPin is enabled. -// - oMapPin -// - nEnabled: 0=Off, 1=On -void SetMapPinEnabled(object oMapPin, int nEnabled); - -// 387: 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. -effect EffectHitPointChangeWhenDying(float fHitPointChangePerRound); - -// 388: Spawn a GUI panel for the client that controls oPC. -// - oPC -// - nGUIPanel: GUI_PANEL_* -// * Nothing happens if oPC is not a player character or if an invalid value is -// used for nGUIPanel. -void PopUpGUIPanel(object oPC, int nGUIPanel); - -// 389: This allows you to add a new class to any creature object -void AddMultiClass(int nClassType, object oSource); - -// 390: Tests a linked effect to see if the target is immune to it. -// If the target is imune to any of the linked effect then he is immune to all of it -int GetIsLinkImmune(object oTarget, effect eEffect ); - -// 391: Stunn the droid -effect EffectDroidStun( ); - -// 392: Force push the creature... -effect EffectForcePushed(); - -// 393: Gives nXpAmount to oCreature. -void GiveXPToCreature(object oCreature, int nXpAmount); - -// 394: Sets oCreature's experience to nXpAmount. -void SetXP(object oCreature, int nXpAmount); - -// 395: Get oCreature's experience. -int GetXP(object oCreature); - -// 396: Convert nInteger to hex, returning the hex value as a string. -// * Return value has the format "0x????????" where each ? will be a hex digit -// (8 digits in total). -string IntToHexString(int nInteger); - -// 397: Get the base item type (BASE_ITEM_*) of oItem. -// * Returns BASE_ITEM_INVALID if oItem is an invalid item. -int GetBaseItemType(object oItem); - -// 398: Determines whether oItem has nProperty. -// - oItem -// - nProperty: ITEM_PROPERTY_* -// * Returns FALSE if oItem is not a valid item, or if oItem does not have -// nProperty. -int GetItemHasItemProperty(object oItem, int nProperty); - -// 399: The creature will equip the melee weapon in its possession that can do the -// most damage. If no valid melee weapon is found, it will equip the most -// damaging range weapon. This function should only ever be called in the -// EndOfCombatRound scripts, because otherwise it would have to stop the combat -// round to run simulation. -// - oVersus: You can try to get the most damaging weapon against oVersus -// - bOffHand -void ActionEquipMostDamagingMelee(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 400: The creature will equip the range weapon in its possession that can do the -// most damage. -// If no valid range weapon can be found, it will equip the most damaging melee -// weapon. -// - oVersus: You can try to get the most damaging weapon against oVersus -void ActionEquipMostDamagingRanged(object oVersus=OBJECT_INVALID); - -// 401: Get the Armour Class of oItem. -// * Return 0 if the oItem is not a valid item, or if oItem has no armour value. -int GetItemACValue(object oItem); - -// 402: -// Effect that will play an animation and display a visual effect to indicate the -// target has resisted a force power. -effect EffectForceResisted( object oSource ); - -// 403: Expose the entire map of oArea to oPlayer. -void ExploreAreaForPlayer(object oArea, object oPlayer); - -// 404: The creature will equip the armour in its possession that has the highest -// armour class. -void ActionEquipMostEffectiveArmor(); - -// 405: * Returns TRUE if it is currently day. -int GetIsDay(); - -// 406: * Returns TRUE if it is currently night. -int GetIsNight(); - -// 407: * Returns TRUE if it is currently dawn. -int GetIsDawn(); - -// 408: * Returns TRUE if it is currently dusk. -int GetIsDusk(); - -// 409: * Returns TRUE if oCreature was spawned from an encounter. -int GetIsEncounterCreature(object oCreature=OBJECT_SELF); - -// 410: Use this in an OnPlayerDying module script to get the last player who is dying. -object GetLastPlayerDying(); - -// 411: Get the starting location of the module. -location GetStartingLocation(); - -// 412: Make oCreatureToChange join one of the standard factions. -// ** This will only work on an NPC ** -// - nStandardFaction: STANDARD_FACTION_* -void ChangeToStandardFaction(object oCreatureToChange, int nStandardFaction); - -// 413: Play oSound. -void SoundObjectPlay(object oSound); - -// 414: Stop playing oSound. -void SoundObjectStop(object oSound); - -// 415: Set the volume of oSound. -// - oSound -// - nVolume: 0-127 -void SoundObjectSetVolume(object oSound, int nVolume); - -// 416: Set the position of oSound. -void SoundObjectSetPosition(object oSound, vector vPosition); - -// 417: Immediately speak a conversation one-liner. -// - sDialogResRef -// - oTokenTarget: This must be specified if there are creature-specific tokens -// in the string. -void SpeakOneLinerConversation(string sDialogResRef="", object oTokenTarget=OBJECT_TYPE_INVALID); - -// 418: Get the amount of gold possessed by oTarget. -int GetGold(object oTarget=OBJECT_SELF); - -// 419: Use this in an OnRespawnButtonPressed module script to get the object id of -// the player who last pressed the respawn button. -object GetLastRespawnButtonPresser(); - -// 420: -// Effect that will display a visual effect on the specified object's hand to -// indicate a force power has fizzled out. -effect EffectForceFizzle(); - -// 421: SetLightsaberPowered -// Allows a script to set the state of the lightsaber. This will override any -// game determined lightsaber powerstates. -void SetLightsaberPowered( object oCreature, int bOverride, int bPowered = TRUE, int bShowTransition = FALSE); - -// 422: * Returns TRUE if the weapon equipped is capable of damaging oVersus. -int GetIsWeaponEffective(object oVersus=OBJECT_INVALID, int bOffHand=FALSE); - -// 423: Use this in a SpellCast script to determine whether the spell was considered -// harmful. -// * Returns TRUE if the last spell cast was harmful. -int GetLastSpellHarmful(); - -// 424: Activate oItem. -event EventActivateItem(object oItem, location lTarget, object oTarget=OBJECT_INVALID); - -// 425: Play the background music for oArea. -void MusicBackgroundPlay(object oArea); - -// 426: Stop the background music for oArea. -void MusicBackgroundStop(object oArea); - -// 427: Set the delay for the background music for oArea. -// - oArea -// - nDelay: delay in milliseconds -void MusicBackgroundSetDelay(object oArea, int nDelay); - -// 428: Change the background day track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeDay(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 429: Change the background night track for oArea to nTrack. -// - oArea -// - nTrack -void MusicBackgroundChangeNight(object oArea, int nTrack, int nStreamingMusic = FALSE); - -// 430: Play the battle music for oArea. -void MusicBattlePlay(object oArea); - -// 431: Stop the battle music for oArea. -void MusicBattleStop(object oArea); - -// 432: Change the battle track for oArea. -// - oArea -// - nTrack -void MusicBattleChange(object oArea, int nTrack); - -// 433: Play the ambient sound for oArea. -void AmbientSoundPlay(object oArea); - -// 434: Stop the ambient sound for oArea. -void AmbientSoundStop(object oArea); - -// 435: Change the ambient day track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeDay(object oArea, int nTrack); - -// 436: Change the ambient night track for oArea to nTrack. -// - oArea -// - nTrack -void AmbientSoundChangeNight(object oArea, int nTrack); - -// 437: Get the object that killed the caller. -object GetLastKiller(); - -// 438: Use this in a spell script to get the item used to cast the spell. -object GetSpellCastItem(); - -// 439: Use this in an OnItemActivated module script to get the item that was activated. -object GetItemActivated(); - -// 440: Use this in an OnItemActivated module script to get the creature that -// activated the item. -object GetItemActivator(); - -// 441: Use this in an OnItemActivated module script to get the location of the item's -// target. -location GetItemActivatedTargetLocation(); - -// 442: Use this in an OnItemActivated module script to get the item's target. -object GetItemActivatedTarget(); - -// 443: * Returns TRUE if oObject (which is a placeable or a door) is currently open. -int GetIsOpen(object oObject); - -// 444: Take nAmount of gold from oCreatureToTakeFrom. -// - nAmount -// - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. -// - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the -// gold will be destroyed and will vanish from the game. -void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE); - -// 445: Determine whether oObject is in conversation. -int GetIsInConversation(object oObject); - -// 446: Create an Ability Decrease effect. -// - nAbility: ABILITY_* -// - nModifyBy: This is the amount by which to decrement the ability -effect EffectAbilityDecrease(int nAbility, int nModifyBy); - -// 447: Create an Attack Decrease effect. -// - nPenalty -// - nModifierType: ATTACK_BONUS_* -effect EffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); - -// 448: Create a Damage Decrease effect. -// - nPenalty -// - nDamageType: DAMAGE_TYPE_* -effect EffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_UNIVERSAL); - -// 449: Create a Damage Immunity Decrease effect. -// - nDamageType: DAMAGE_TYPE_* -// - nPercentImmunity -effect EffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); - -// 450: Create an AC Decrease effect. -// - nValue -// - nModifyType: AC_* -// - nDamageType: DAMAGE_TYPE_* -// * Default value for nDamageType should only ever be used in this function prototype. -effect EffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); - -// 451: Create a Movement Speed Decrease effect. -// - nPercentChange: This is expected to be a positive integer between 1 and 99 inclusive. -// If a negative integer is supplied then a movement speed increase will result, -// and if a number >= 100 is supplied then the effect is deleted. -effect EffectMovementSpeedDecrease(int nPercentChange); - -// 452: Create a Saving Throw Decrease effect. -// - nSave -// - nValue -// - nSaveType: SAVING_THROW_TYPE_* -effect EffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); - -// 453: Create a Skill Decrease effect. -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. -effect EffectSkillDecrease(int nSkill, int nValue); - -// 454: Create a Force Resistance Decrease effect. -effect EffectForceResistanceDecrease(int nValue); - -// 455: Determine whether oTarget is a plot object. -int GetPlotFlag(object oTarget=OBJECT_SELF); - -// 456: Set oTarget's plot object status. -void SetPlotFlag(object oTarget, int nPlotFlag); - -// 457: Create an Invisibility effect. -// - nInvisibilityType: INVISIBILITY_TYPE_* -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType -// is invalid. -effect EffectInvisibility(int nInvisibilityType); - -// 458: Create a Concealment effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectConcealment(int nPercentage); - -// 459: Create a Force Shield that has parameters from the guven index into the forceshields.2da -effect EffectForceShield(int nShield); - -// 460: Create a Dispel Magic All effect. -effect EffectDispelMagicAll(int nCasterLevel); - -// 461: Cut immediately to placeable camera 'nCameraId' during dialog. nCameraId must be -// an existing Placeable Camera ID. Function only works during Dialog. -void SetDialogPlaceableCamera( int nCameraId ); - - -// 462: -// Returns: TRUE if the player is in 'solo mode' (ie. the party is not supposed to follow the player). -// FALSE otherwise. -int GetSoloMode(); - -// 463: Create a Disguise effect. -// - * nDisguiseAppearance: DISGUISE_TYPE_*s -effect EffectDisguise(int nDisguiseAppearance); - -// 464: -// Returns the maximum amount of stealth xp available in the area. -int GetMaxStealthXP(); - -// 465: Create a True Seeing effect. -effect EffectTrueSeeing(); - -// 466: Create a See Invisible effect. -effect EffectSeeInvisible(); - -// 467: Create a Time Stop effect. -effect EffectTimeStop(); - -// 468: -// Set the maximum amount of stealth xp available in the area. -void SetMaxStealthXP( int nMax ); - -// 469: Increase the blaster deflection rate, i think... -effect EffectBlasterDeflectionIncrease(int nChange); - -// 470:decrease the blaster deflection rate -effect EffectBlasterDeflectionDecrease(int nChange); - -// 471: Make the creature horified. BOO! -effect EffectHorrified( ); - -// 472: 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. -effect EffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=0 ); - -// 473: Create a Dispel Magic Best effect. -effect EffectDispelMagicBest(int nCasterLevel); - -// 474: -// Returns the current amount of stealth xp available in the area. -int GetCurrentStealthXP(); - -// 475: Get the number of stacked items that oItem comprises. -int GetNumStackedItems(object oItem); - -// 476: Use this on an NPC to cause all creatures within a 10-metre radius to stop -// what they are doing and sets the NPC's enemies within this range to be -// neutral towards the NPC. If this command is run on a PC or an object that is -// not a creature, nothing will happen. -void SurrenderToEnemies(); - -// 477: Create a Miss Chance effect. -// - nPercentage: 1-100 inclusive -// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or -// nPercentage > 100. -effect EffectMissChance(int nPercentage); - -// 478: -// Set the current amount of stealth xp available in the area. -void SetCurrentStealthXP( int nCurrent ); - -// 479: Get the size (CREATURE_SIZE_*) of oCreature. -int GetCreatureSize(object oCreature); - -// 480: -// Award the stealth xp to the given oTarget. This will only work on creatures. -void AwardStealthXP( object oTarget ); - -// 481: -// Returns whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -int GetStealthXPEnabled(); - -// 482: -// Sets whether or not the stealth xp bonus is enabled (ie. whether or not -// AwardStealthXP() will actually award any available stealth xp). -void SetStealthXPEnabled( int bEnabled ); - -// 483: The action subject will unlock oTarget, which can be a door or a placeable -// object. -void ActionUnlockObject(object oTarget); - -// 484: The action subject will lock oTarget, which can be a door or a placeable -// object. -void ActionLockObject(object oTarget); - -// 485: 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. -effect EffectModifyAttacks(int nAttacks); - -// 486: Get the last trap detected by oTarget. -// * Return value on error: OBJECT_INVALID -object GetLastTrapDetected(object oTarget=OBJECT_SELF); - -// 487: 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_* -effect EffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); - -// 488: Get the trap nearest to oTarget. -// Note : "trap objects" are actually any trigger, placeable or door that is -// trapped in oTarget's area. -// - oTarget -// - nTrapDetected: if this is TRUE, the trap returned has to have been detected -// by oTarget. -object GetNearestTrapToObject(object oTarget=OBJECT_SELF, int nTrapDetected=TRUE); - -// 489: the will get the last attmpted movment target -object GetAttemptedMovementTarget(); - - -// 490: this function returns the bloking creature for the k_def_CBTBlk01 script -object GetBlockingCreature(object oTarget=OBJECT_SELF); - -// 491: Get oTarget's base fortitude saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetFortitudeSavingThrow(object oTarget); - -// 492: Get oTarget's base will saving throw value (this will only work for creatures, -// doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetWillSavingThrow(object oTarget); - -// 493: Get oTarget's base reflex saving throw value (this will only work for -// creatures, doors, and placeables). -// * Returns 0 if oTarget is invalid. -int GetReflexSavingThrow(object oTarget); - -// 494: Get oCreature's challenge rating. -// * Returns 0.0 if oCreature is invalid. -float GetChallengeRating(object oCreature); - -// 495: Returns the found enemy creature on a pathfind. -object GetFoundEnemyCreature(object oTarget=OBJECT_SELF); - -// 496: Get oCreature's movement rate. -// * Returns 0 if oCreature is invalid. -int GetMovementRate(object oCreature); - -// 497: GetSubRace of oCreature -// Returns SUBRACE_* -int GetSubRace(object oCreature); - -// 498: -// Returns the amount the stealth xp bonus gets decreased each time the player is detected. -int GetStealthXPDecrement(); - -// 499: -// Sets the amount the stealth xp bonus gets decreased each time the player is detected. -void SetStealthXPDecrement( int nDecrement ); - -// 500: -void DuplicateHeadAppearance(object oidCreatureToChange, object oidCreatureToMatch); - -// 501: The action subject will fake casting a spell at oTarget; the conjure and cast -// animations and visuals will occur, nothing else. -// - nSpell -// - oTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtObject(int nSpell, object oTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 502: The action subject will fake casting a spell at lLocation; the conjure and -// cast animations and visuals will occur, nothing else. -// - nSpell -// - lTarget -// - nProjectilePathType: PROJECTILE_PATH_TYPE_* -void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT); - -// 503: CutsceneAttack -// This function allows the designer to specify exactly what's going to happen in a combat round -// There are no guarentees made that the animation specified here will be correct - only that it will be played, -// so it is up to the designer to ensure that they have selected the right animation -// It relies upon constants specified above for the attack result -void CutsceneAttack(object oTarget, int nAnimation, int nAttackResult, int nDamage); - -// 504: Set the camera mode for oPlayer. -// - oPlayer -// - nCameraMode: CAMERA_MODE_* -// * If oPlayer is not player-controlled or nCameraMode is invalid, nothing -// happens. -void SetCameraMode(object oPlayer, int nCameraMode); - -// 505: SetLockOrientationInDialog -// Allows the locking and unlocking of orientation changes for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockOrientationInDialog(object oObject, int nValue); - -// 506: SetLockHeadFollowInDialog -// Allows the locking and undlocking of head following for an object in dialog -// - oObject - Object -// - nValue - TRUE or FALSE -void SetLockHeadFollowInDialog(object oObject, int nValue); - -// 507: CutsceneMoveToPoint -// Used by the cutscene system to allow designers to script combat -void CutsceneMove(object oObject, vector vPosition, int nRun); - -// 508: EnableVideoEffect -// Enables the video frame buffer effect specified by nEffectType, which is -// an index into VideoEffects.2da. This video effect will apply indefinitely, -// and so it should *always* be cleared by a call to DisableVideoEffect(). -void EnableVideoEffect(int nEffectType); - -// 509: Shut down the currently loaded module and start a new one (moving all -// currently-connected players to the starting point. -void StartNewModule(string sModuleName, string sWayPoint="", string sMovie1="", string sMovie2="", string sMovie3="", string sMovie4="", string sMovie5="", string sMovie6=""); - -// 510: DisableVideoEffect -// Disables any video frame buffer effect that may be running. See -// EnableVideoEffect() to see how to use them. -void DisableVideoEffect(); - -// 511: * Returns TRUE if oItem is a ranged weapon. -int GetWeaponRanged(object oItem); - -// 512: Only if we are in a single player game, AutoSave the game. -void DoSinglePlayerAutoSave(); - -// 513: Get the game difficulty (GAME_DIFFICULTY_*). -int GetGameDifficulty(); - -// 514: -// This will test the combat action queu to see if the user has placed any actions on the queue. -// will only work during combat. -int GetUserActionsPending(); - -// 515: RevealMap -// Reveals the map at the given WORLD point 'vPoint' with a MAP Grid Radius 'nRadius' -// If this function is called with no parameters it will reveal the entire map. -// (NOTE: if this function is called with a valid point but a default radius, ie. 'nRadius' of -1 -// then the entire map will be revealed) -void RevealMap(vector vPoint=[0.0,0.0,0.0],int nRadius=-1); - -// 516: SetTutorialWindowsEnabled -// Sets whether or not the tutorial windows are enabled (ie. whether or not they will -// appear when certain things happen for the first time). -void SetTutorialWindowsEnabled( int bEnabled ); - -// 517: ShowTutorialWindow -// nWindow - A row index from Tutorial.2DA specifying the message to display. -// Pops up the specified tutorial window. If the tutorial window has already popped -// up once before, this will do nothing. -void ShowTutorialWindow( int nWindow ); - -// 518: StartCreditSequence -// Starts the credits sequence. If bTransparentBackground is TRUE, the credits will be displayed -// with a transparent background, allowing whatever is currently onscreen to show through. If it -// is set to FALSE, the credits will be displayed on a black background. -void StartCreditSequence( int bTransparentBackground ); - -// 519: IsCreditSequenceInProgress -// Returns TRUE if the credits sequence is currently in progress, FALSE otherwise. -int IsCreditSequenceInProgress(); - -// 520: Sets the minigame lateral acceleration/sec value -void SWMG_SetLateralAccelerationPerSecond(float fLAPS); - -// 521: Returns the minigame lateral acceleration/sec value -float SWMG_GetLateralAccelerationPerSecond(); - -// 522: Get the current action (ACTION_*) that oObject is executing. -int GetCurrentAction(object oObject=OBJECT_SELF); - -// 523: -float GetDifficultyModifier(); - -// 524: Returns the appearance type of oCreature (0 if creature doesn't exist) -// - oCreature -int GetAppearanceType(object oCreature); - -// 525: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - nStrRefToDisplay: String ref (therefore text is translated) -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStrRefOnCreature(int nStrRefToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 526: Display floaty text above the specified creature. -// The text will also appear in the chat buffer of each player that receives the -// floaty text. -// - sStringToDisplay: String -// - oCreatureToFloatAbove -// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction -// as oCreatureToFloatAbove -// will see the floaty text, and only if they are within range (30 metres). -void FloatingTextStringOnCreature(string sStringToDisplay, object oCreatureToFloatAbove, int bBroadcastToFaction=TRUE); - -// 527: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is disarmable. -int GetTrapDisarmable(object oTrapObject); - -// 528: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is detectable. -int GetTrapDetectable(object oTrapObject); - -// 529: - oTrapObject: a placeable, door or trigger -// - oCreature -// * Returns TRUE if oCreature has detected oTrapObject -int GetTrapDetectedBy(object oTrapObject, object oCreature); - -// 530: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject has been flagged as visible to all creatures. -int GetTrapFlagged(object oTrapObject); - -// 531: Get the trap base type (TRAP_BASE_TYPE_*) of oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapBaseType(object oTrapObject); - -// 532: - oTrapObject: a placeable, door or trigger -// * Returns TRUE if oTrapObject is one-shot (i.e. it does not reset itself -// after firing. -int GetTrapOneShot(object oTrapObject); - -// 533: Get the creator of oTrapObject, the creature that set the trap. -// - oTrapObject: a placeable, door or trigger -// * Returns OBJECT_INVALID if oTrapObject was created in the toolset. -object GetTrapCreator(object oTrapObject); - -// 534: Get the tag of the key that will disarm oTrapObject. -// - oTrapObject: a placeable, door or trigger -string GetTrapKeyTag(object oTrapObject); - -// 535: Get the DC for disarming oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDisarmDC(object oTrapObject); - -// 536: Get the DC for detecting oTrapObject. -// - oTrapObject: a placeable, door or trigger -int GetTrapDetectDC(object oTrapObject); - -// 537: * Returns TRUE if a specific key is required to open the lock on oObject. -int GetLockKeyRequired(object oObject); - -// 538: Get the tag of the key that will open the lock on oObject. -int GetLockKeyTag(object oObject); - -// 539: * Returns TRUE if the lock on oObject is lockable. -int GetLockLockable(object oObject); - -// 540: Get the DC for unlocking oObject. -int GetLockUnlockDC(object oObject); - -// 541: Get the DC for locking oObject. -int GetLockLockDC(object oObject); - -// 542: Get the last PC that levelled up. -object GetPCLevellingUp(); - -// 543: - nFeat: FEAT_* -// - oObject -// * Returns TRUE if oObject has effects on it originating from nFeat. -int GetHasFeatEffect(int nFeat, object oObject=OBJECT_SELF); - -// 544: Set the status of the illumination for oPlaceable. -// - oPlaceable -// - bIlluminate: if this is TRUE, oPlaceable's illumination will be turned on. -// If this is FALSE, oPlaceable's illumination will be turned off. -// Note: You must call RecomputeStaticLighting() after calling this function in -// order for the changes to occur visually for the players. -// SetPlaceableIllumination() buffers the illumination changes, which are then -// sent out to the players once RecomputeStaticLighting() is called. As such, -// it is best to call SetPlaceableIllumination() for all the placeables you wish -// to set the illumination on, and then call RecomputeStaticLighting() once after -// all the placeable illumination has been set. -// * If oPlaceable is not a placeable object, or oPlaceable is a placeable that -// doesn't have a light, nothing will happen. -void SetPlaceableIllumination(object oPlaceable=OBJECT_SELF, int bIlluminate=TRUE); - -// 545: * Returns TRUE if the illumination for oPlaceable is on -int GetPlaceableIllumination(object oPlaceable=OBJECT_SELF); - -// 546: - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -// * Returns TRUE if nPlacebleAction is valid for oPlaceable. -int GetIsPlaceableObjectActionPossible(object oPlaceable, int nPlaceableAction); - -// 547: The caller performs nPlaceableAction on oPlaceable. -// - oPlaceable -// - nPlaceableAction: PLACEABLE_ACTION_* -void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction); - -// 548: Get the first PC in the player list. -// This resets the position in the player list for GetNextPC(). -object GetFirstPC(); - -// 549: Get the next PC in the player list. -// This picks up where the last GetFirstPC() or GetNextPC() left off. -object GetNextPC(); - -// 550: Set oDetector to have detected oTrap. -int SetTrapDetectedBy(object oTrap, object oDetector); - -// 551: Note: Only placeables, doors and triggers can be trapped. -// * Returns TRUE if oObject is trapped. -int GetIsTrapped(object oObject); - -// 552: SetEffectIcon -// This will link the specified effect icon to the specified effect. The -// effect returned will contain the link to the effect icon and applying this -// effect will cause an effect icon to appear on the portrait/charsheet gui. -// eEffect: The effect which should cause the effect icon to appear. -// nIcon: Index into effecticon.2da of the effect icon to use. -effect SetEffectIcon( effect eEffect, int nIcon ); - -// 553: FaceObjectAwayFromObject -// This will cause the object oFacer to face away from oObjectToFaceAwayFrom. -// The objects must be in the same area for this to work. -void FaceObjectAwayFromObject( object oFacer, object oObjectToFaceAwayFrom ); - -// 554: Spawn in the Death GUI. -// The default (as defined by BioWare) can be spawned in by PopUpGUIPanel, but -// if you want to turn off the "Respawn" or "Wait for Help" buttons, this is the -// function to use. -// - oPC -// - bRespawnButtonEnabled: if this is TRUE, the "Respawn" button will be enabled -// on the Death GUI. -// - bWaitForHelpButtonEnabled: if this is TRUE, the "Wait For Help" button will -// be enabled on the Death GUI. -// - nHelpStringReference -// - sHelpString -void PopUpDeathGUIPanel(object oPC, int bRespawnButtonEnabled=TRUE, int bWaitForHelpButtonEnabled=TRUE, int nHelpStringReference=0, string sHelpString=""); - -// 555: Disable oTrap. -// - oTrap: a placeable, door or trigger. -void SetTrapDisabled(object oTrap); - -// 556: Get the last object that was sent as a GetLastAttacker(), GetLastDamager(), -// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a -// creature is pickpocketed). -// Note: Return values may only ever be: -// 1) A Creature -// 2) Plot Characters will never have this value set -// 3) Area of Effect Objects will return the AOE creator if they are registered -// as this value, otherwise they will return INVALID_OBJECT_ID -// 4) Traps will not return the creature that set the trap. -// 5) This value will never be overwritten by another non-creature object. -// 6) This value will never be a dead/destroyed creature -object GetLastHostileActor(object oVictim=OBJECT_SELF); - -// 557: Force all the characters of the players who are currently in the game to -// be exported to their respective directories i.e. LocalVault/ServerVault/ etc. -void ExportAllCharacters(); - -// 558: Get the Day Track for oArea. -int MusicBackgroundGetDayTrack(object oArea); - -// 559: Get the Night Track for oArea. -int MusicBackgroundGetNightTrack(object oArea); - -// 560: Write sLogEntry as a timestamped entry into the log file -void WriteTimestampedLogEntry(string sLogEntry); - -// 561: Get the module's name in the language of the server that's running it. -// * If there is no entry for the language of the server, it will return an -// empty string -string GetModuleName(); - -// 562: Get the leader of the faction of which oMemberOfFaction is a member. -// * Returns OBJECT_INVALID if oMemberOfFaction is not a valid creature. -object GetFactionLeader(object oMemberOfFaction); - -// 563: Turns on or off the speed blur effect in rendered scenes. -// bEnabled: Set TRUE to turn it on, FALSE to turn it off. -// fRatio: Sets the frame accumulation ratio. -void SWMG_SetSpeedBlurEffect( int bEnabled, float fRatio=0.75f ); - -// 564: Immediately ends the currently running game and returns to the start screen. -// nShowEndGameGui: Set TRUE to display the death gui. -void EndGame( int nShowEndGameGui=TRUE ); - -// 565: Get a variable passed when calling console debug runscript -int GetRunScriptVar(); - -// 566: This function returns a value that matches one of the MOVEMENT_SPEED_... constants -// if the OID passed in is not found or not a creature then it will return -// MOVEMENT_SPEED_IMMOBILE. -int GetCreatureMovmentType(object oidCreature); - -// 567: Set the ambient day volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetDayVolume(object oArea, int nVolume); - -// 568: Set the ambient night volume for oArea to nVolume. -// - oArea -// - nVolume: 0 - 100 -void AmbientSoundSetNightVolume(object oArea, int nVolume); - -// 569: Get the Battle Track for oArea. -int MusicBackgroundGetBattleTrack(object oArea); - -// 570: Determine whether oObject has an inventory. -// * Returns TRUE for creatures and stores, and checks to see if an item or placeable object is a container. -// * Returns FALSE for all other object types. -int GetHasInventory(object oObject); - -// 571: Get the duration (in seconds) of the sound attached to nStrRef -// * Returns 0.0f if no duration is stored or if no sound is attached -float GetStrRefSoundDuration(int nStrRef); - -// 572: Add oPC to oPartyLeader's party. This will only work on two PCs. -// - oPC: player to add to a party -// - oPartyLeader: player already in the party -void AddToParty(object oPC, object oPartyLeader); - -// 573: Remove oPC from their current party. This will only work on a PC. -// - oPC: removes this player from whatever party they're currently in. -void RemoveFromParty(object oPC); - -// 574: Adds a creature to the party -// Returns whether the addition was successful -// AddPartyMember -int AddPartyMember(int nNPC, object oCreature); - -// 575: Removes a creature from the party -// Returns whether the removal was syccessful -// RemovePartyMember -int RemovePartyMember(int nNPC); - -// 576: Returns whether a specified creature is a party member -// IsObjectPartyMember -int IsObjectPartyMember(object oCreature); - -// 577: Returns the party member at a given index in the party. -// The order of members in the party can vary based on -// who the current leader is (member 0 is always the current -// party leader). -// GetPartyMemberByIndex -object GetPartyMemberByIndex(int nIndex); - -// 578: GetGlobalBoolean -// This function returns the value of a global boolean (TRUE or FALSE) scripting variable. -int GetGlobalBoolean( string sIdentifier ); - -// 579: SetGlobalBoolean -// This function sets the value of a global boolean (TRUE or FALSE) scripting variable. -void SetGlobalBoolean( string sIdentifier, int nValue ); - -// 580: GetGlobalNumber -// This function returns the value of a global number (-128 to +127) scripting variable. -int GetGlobalNumber( string sIdentifier ); - -// 581: SetGlobalNumber -// This function sets the value of a global number (-128 to +127) scripting variable. -void SetGlobalNumber( string sIdentifier, int nValue ); - -// post a string to the screen at column nX and row nY for fLife seconds -// 582. AurPostString -void AurPostString(string sString, int nX, int nY, float fLife); - -// 583: OnAnimKey -// get the event and the name of the model on which the event happened -// SWMG_GetLastEvent -string SWMG_GetLastEvent(); - -// 584: SWMG_GetLastEventModelName -string SWMG_GetLastEventModelName(); - -// 585: gets an object by its name (duh!) -// SWMG_GetObjectByName -object SWMG_GetObjectByName(string sName); - -// 586: plays an animation on an object -// SWMG_PlayAnimation -void SWMG_PlayAnimation(object oObject, string sAnimName, int bLooping=1, int bQueue=0, int bOverlay=0); - -// 587: OnHitBullet -// get the damage, the target type (see TARGETflags), and the shooter -// SWMG_GetLastBulletHitDamage -int SWMG_GetLastBulletHitDamage(); - -// 588: SWMG_GetLastBulletHitTarget -int SWMG_GetLastBulletHitTarget(); - -// 589: SWMG_GetLastBulletHitShooter -object SWMG_GetLastBulletHitShooter(); - -// 590: adjusts a followers hit points, can specify the absolute value to set to -// SWMG_AdjustFollowerHitPoints -int SWMG_AdjustFollowerHitPoints(object oFollower, int nHP, int nAbsolute=0); - -// 591: the default implementation of OnBulletHit -// SWMG_OnBulletHit -void SWMG_OnBulletHit(); - -// 592: the default implementation of OnObstacleHit -// SWMG_OnObstacleHit -void SWMG_OnObstacleHit(); - -// 593: returns the last follower and obstacle hit -// SWMG_GetLastFollowerHit -object SWMG_GetLastFollowerHit(); - -// 594: SWMG_GetLastObstacleHit -object SWMG_GetLastObstacleHit(); - -// 595: gets information about the last bullet fired -// SWMG_GetLastBulletFiredDamage -int SWMG_GetLastBulletFiredDamage(); - -// 596: SWMG_GetLastBulletFiredTarget -int SWMG_GetLastBulletFiredTarget(); - -// 597: gets an objects name -// SWMG_GetObjectName -string SWMG_GetObjectName(object oid=OBJECT_SELF); - -// 598: the default implementation of OnDeath -// SWMG_OnDeath -void SWMG_OnDeath(); - -// 599: a bunch of Is functions for your pleasure -// SWMG_IsFollower -int SWMG_IsFollower(object oid=OBJECT_SELF); - -// 600: SWMG_IsPlayer -int SWMG_IsPlayer(object oid=OBJECT_SELF); - -// 601: SWMG_IsEnemy -int SWMG_IsEnemy(object oid=OBJECT_SELF); - -// 602: SWMG_IsTrigger -int SWMG_IsTrigger(object oid=OBJECT_SELF); - -// 603: SWMG_IsObstacle -int SWMG_IsObstacle(object oid=OBJECT_SELF); - -// 604: SWMG_SetFollowerHitPoints -void SWMG_SetFollowerHitPoints(object oFollower, int nHP); - -// 605: SWMG_OnDamage -void SWMG_OnDamage(); - -// 606: SWMG_GetLastHPChange -int SWMG_GetLastHPChange(); - -// 607: SWMG_RemoveAnimation -void SWMG_RemoveAnimation(object oObject, string sAnimName); - -// 608: SWMG_GetCameraNearClip -float SWMG_GetCameraNearClip(); - -// 609: SWMG_GetCameraFarClip -float SWMG_GetCameraFarClip(); - -// 610: SWMG_SetCameraClip -void SWMG_SetCameraClip(float fNear, float fFar); - -// 611: SWMG_GetPlayer -object SWMG_GetPlayer(); - -// 612: SWMG_GetEnemyCount -int SWMG_GetEnemyCount(); - -// 613: SWMG_GetEnemy -object SWMG_GetEnemy(int nEntry); - -// 614: SWMG_GetObstacleCount -int SWMG_GetObstacleCount(); - -// 615: SWMG_GetObstacle -object SWMG_GetObstacle(int nEntry); - -// 616: SWMG_GetHitPoints -int SWMG_GetHitPoints(object oFollower); - -// 617: SWMG_GetMaxHitPoints -int SWMG_GetMaxHitPoints(object oFollower); - -// 618: SWMG_SetMaxHitPoints -void SWMG_SetMaxHitPoints(object oFollower, int nMaxHP); - -// 619: SWMG_GetSphereRadius -float SWMG_GetSphereRadius(object oFollower); - -// 620: SWMG_SetSphereRadius -void SWMG_SetSphereRadius(object oFollower, float fRadius); - -// 621: SWMG_GetNumLoops -int SWMG_GetNumLoops(object oFollower); - -// 622: SWMG_SetNumLoops -void SWMG_SetNumLoops(object oFollower, int nNumLoops); - -// 623: SWMG_GetPosition -vector SWMG_GetPosition(object oFollower); - -// 624: SWMG_GetGunBankCount -int SWMG_GetGunBankCount(object oFollower); - -// 625: SWMG_GetGunBankBulletModel -string SWMG_GetGunBankBulletModel(object oFollower, int nGunBank); - -// 626: SWMG_GetGunBankGunModel -string SWMG_GetGunBankGunModel(object oFollower, int nGunBank); - -// 627: SWMG_GetGunBankDamage -int SWMG_GetGunBankDamage(object oFollower, int nGunBank); - -// 628: SWMG_GetGunBankTimeBetweenShots -float SWMG_GetGunBankTimeBetweenShots(object oFollower, int nGunBank); - -// 629: SWMG_GetGunBankLifespan -float SWMG_GetGunBankLifespan(object oFollower, int nGunBank); - -// 630: SWMG_GetGunBankSpeed -float SWMG_GetGunBankSpeed(object oFollower, int nGunBank); - -// 631: SWMG_GetGunBankTarget -int SWMG_GetGunBankTarget(object oFollower, int nGunBank); - -// 632: SWMG_SetGunBankBulletModel -void SWMG_SetGunBankBulletModel(object oFollower, int nGunBank, string sBulletModel); - -// 633: SWMG_SetGunBankGunModel -void SWMG_SetGunBankGunModel(object oFollower, int nGunBank, string sGunModel); - -// 634: SWMG_SetGunBankDamage -void SWMG_SetGunBankDamage(object oFollower, int nGunBank, int nDamage); - -// 635: SWMG_SetGunBankTimeBetweenShots -void SWMG_SetGunBankTimeBetweenShots(object oFollower, int nGunBank, float fTBS); - -// 636: SWMG_SetGunBankLifespan -void SWMG_SetGunBankLifespan(object oFollower, int nGunBank, float fLifespan); - -// 637: SWMG_SetGunBankSpeed -void SWMG_SetGunBankSpeed(object oFollower, int nGunBank, float fSpeed); - -// 638: SWMG_SetGunBankTarget -void SWMG_SetGunBankTarget(object oFollower, int nGunBank, int nTarget); - -// 639: SWMG_GetLastBulletHitPart -string SWMG_GetLastBulletHitPart(); - -// 640: SWMG_IsGunBankTargetting -int SWMG_IsGunBankTargetting(object oFollower, int nGunBank); - -// 641: SWMG_GetPlayerOffset -// returns a vector with the player rotation for rotation minigames -// returns a vector with the player translation for translation minigames -vector SWMG_GetPlayerOffset(); - -// 642: SWMG_GetPlayerInvincibility -float SWMG_GetPlayerInvincibility(); - -// 643: SWMG_GetPlayerSpeed -float SWMG_GetPlayerSpeed(); - -// 644: SWMG_GetPlayerMinSpeed -float SWMG_GetPlayerMinSpeed (); - -// 645: SWMG_GetPlayerAccelerationPerSecond -float SWMG_GetPlayerAccelerationPerSecond(); - -// 646: SWMG_GetPlayerTunnelPos -vector SWMG_GetPlayerTunnelPos(); - -// 647: SWMG_SetPlayerOffset -void SWMG_SetPlayerOffset(vector vOffset); - -// 648: SWMG_SetPlayerInvincibility -void SWMG_SetPlayerInvincibility(float fInvincibility); - -// 649: SWMG_SetPlayerSpeed -void SWMG_SetPlayerSpeed(float fSpeed); - -// 650: SWMG_SetPlayerMinSpeed -void SWMG_SetPlayerMinSpeed(float fMinSpeed); - -// 651: SWMG_SetPlayerAccelerationPerSecond -void SWMG_SetPlayerAccelerationPerSecond(float fAPS); - -// 652: SWMG_SetPlayerTunnelPos -void SWMG_SetPlayerTunnelPos(vector vTunnel); - -// 653: SWMG_GetPlayerTunnelNeg -vector SWMG_GetPlayerTunnelNeg(); - -// 654: SWMG_SetPlayerTunnelNeg -void SWMG_SetPlayerTunnelNeg(vector vTunnel); - -// 655: SWMG_GetPlayerOrigin -vector SWMG_GetPlayerOrigin(); - -// 656: SWMG_SetPlayerOrigin -void SWMG_SetPlayerOrigin(vector vOrigin); - -// 657: SWMG_GetGunBankHorizontalSpread -float SWMG_GetGunBankHorizontalSpread(object oEnemy, int nGunBank); - -// 658: SWMG_GetGunBankVerticalSpread -float SWMG_GetGunBankVerticalSpread(object oEnemy, int nGunBank); - -// 659: SWMG_GetGunBankSensingRadius -float SWMG_GetGunBankSensingRadius(object oEnemy, int nGunBank); - -// 660: SWMG_GetGunBankInaccuracy -float SWMG_GetGunBankInaccuracy(object oEnemy, int nGunBank); - -// 661: SWMG_SetGunBankHorizontalSpread -void SWMG_SetGunBankHorizontalSpread(object oEnemy, int nGunBank, float fHorizontalSpread); - -// 662: SWMG_SetGunBankVerticalSpread -void SWMG_SetGunBankVerticalSpread(object oEnemy, int nGunBank, float fVerticalSpread); - -// 663: SWMG_SetGunBankSensingRadius -void SWMG_SetGunBankSensingRadius(object oEnemy, int nGunBank, float fSensingRadius); - -// 664: SWMG_SetGunBankInaccuracy -void SWMG_SetGunBankInaccuracy(object oEnemy, int nGunBank, float fInaccuracy); - -// 665: GetIsInvulnerable -// This returns whether the follower object is currently invulnerable to damage -int SWMG_GetIsInvulnerable( object oFollower ); - -// 666: StartInvulnerability -// This will begin a period of invulnerability (as defined by Invincibility) -void SWMG_StartInvulnerability( object oFollower ); - -// 667: GetPlayerMaxSpeed -// This returns the player character's max speed -float SWMG_GetPlayerMaxSpeed(); - -// 668: SetPlayerMaxSpeed -// This sets the player character's max speed -void SWMG_SetPlayerMaxSpeed( float fMaxSpeed ); - -// 669: AddJournalWorldEntry -// Adds a user entered entry to the world notices -void AddJournalWorldEntry( int nIndex, string szEntry, string szTitle = "World Entry" ); - -// 670: AddJournalWorldEntryStrref -// Adds an entry to the world notices using stringrefs -void AddJournalWorldEntryStrref ( int strref, int strrefTitle ); - -// 671: BarkString -// this will cause a creature to bark the strRef from the talk table -// If creature is specefied as OBJECT_INVALID a general bark is made. -void BarkString(object oCreature,int strRef, int nBarkX = -1, int nBarkY = -1); - - -// 672: DeleteJournalWorldAllEntries -// Nuke's 'em all, user entered or otherwise. -void DeleteJournalWorldAllEntries(); - -// 673: DeleteJournalWorldEntry -// Deletes a user entered world notice -void DeleteJournalWorldEntry( int nIndex ); - -// 674: DeleteJournalWorldEntryStrref -// Deletes the world notice pertaining to the string ref -void DeleteJournalWorldEntryStrref( int strref ); - -// 675: EffectForceDrain -// This command will reduce the force points of a creature. -effect EffectForceDrain( int nDamage ); - -// 676: EffectTemporaryForcePoints -// -effect EffectPsychicStatic(); - -// 677: PlayVisualAreaEffect -void PlayVisualAreaEffect(int nEffectID, location lTarget); - -// 678: SetJournalQuestEntryPicture -// Sets the picture for the quest entry on this object (creature) -void SetJournalQuestEntryPicture(string szPlotID, object oObject, int nPictureIndex, int bAllPartyMemebers=TRUE, int bAllPlayers=FALSE); - -// 679. GetLocalBoolean -// This gets a boolean flag on an object -// currently the index is a range between 20 and 63 -int GetLocalBoolean( object oObject, int nIndex ); - -// 680. SetLocalBoolean -// This sets a boolean flag on an object -// currently the index is a range between 20 and 63 -void SetLocalBoolean( object oObject, int nIndex, int nValue ); - -// 681. GetLocalNumber -// This gets a number on an object -// currently the index is a range between 12 and 28 -int GetLocalNumber( object oObject, int nIndex ); - -// 682. SetLocalNumber -// This sets a number on an object -// currently the index is a range between 12 and 28 -// the value range is 0 to 255 -void SetLocalNumber( object oObject, int nIndex, int nValue ); - -// 683. SWMG_GetSoundFrequency -// Gets the frequency of a trackfollower sound -int SWMG_GetSoundFrequency( object oFollower, int nSound ); - -// 684. SWMG_SetSoundFrequency -// Sets the frequency of a trackfollower sound -void SWMG_SetSoundFrequency( object oFollower, int nSound, int nFrequency ); - -// 685. SWMG_GetSoundFrequencyIsRandom -// Gets whether the frequency of a trackfollower sound is using the random model -int SWMG_GetSoundFrequencyIsRandom( object oFollower, int nSound ); - -// 686. SWMG_SetSoundFrequencyIsRandom -// Sets whether the frequency of a trackfollower sound is using the random model -void SWMG_SetSoundFrequencyIsRandom( object oFollower, int nSound, int bIsRandom ); - -// 687. SWMG_GetSoundVolume -// Gets the volume of a trackfollower sound -int SWMG_GetSoundVolume( object oFollower, int nSound ); - -// 688. SWMG_SetSoundVolume -// Sets the volume of a trackfollower sound -void SWMG_SetSoundVolume( object oFollower, int nSound, int nVolume ); - -// 689. SoundObjectGetPitchVariance -// Gets the pitch variance of a placeable sound object -float SoundObjectGetPitchVariance( object oSound ); - -// 690. SoundObjectSetPitchVariance -// Sets the pitch variance of a placeable sound object -void SoundObjectSetPitchVariance( object oSound, float fVariance ); - -// 691. SoundObjectGetVolume -// Gets the volume of a placeable sound object -int SoundObjectGetVolume( object oSound ); - -// 692: GetGlobalLocation -// This function returns the a global location scripting variable. -location GetGlobalLocation( string sIdentifier ); - -// 693: SetGlobalLocation -// This function sets the a global location scripting variable. -void SetGlobalLocation( string sIdentifier, location lValue ); - -// 694. AddAvailableNPCByObject -// This adds a NPC to the list of available party members using -// a game object as the template -// Returns if true if successful, false if the NPC had already -// been added or the object specified is invalid -int AddAvailableNPCByObject( int nNPC, object oCreature ); - -// 695. RemoveAvailableNPC -// This removes a NPC from the list of available party members -// Returns whether it was successful or not -int RemoveAvailableNPC( int nNPC ); - -// 696. IsAvailableNPC -// This returns whether a NPC is in the list of available party members -int IsAvailableCreature( int nNPC ); - -// 697. AddAvailableNPCByTemplate -// This adds a NPC to the list of available party members using -// a template -// Returns if true if successful, false if the NPC had already -// been added or the template specified is invalid -int AddAvailableNPCByTemplate( int nNPC, string sTemplate ); - -// 698. SpawnAvailableNPC -// This spawns a NPC from the list of available creatures -// Returns a pointer to the creature object -object SpawnAvailableNPC( int nNPC, location lPosition ); - -// 699. IsNPCPartyMember -// Returns if a given NPC constant is in the party currently -int IsNPCPartyMember( int nNPC ); - -// 700. ActionBarkString -// this will cause a creature to bark the strRef from the talk table. -void ActionBarkString(int strRef); - -// 701. GetIsConversationActive -// Checks to see if any conversations are currently taking place -int GetIsConversationActive(); - -// 702. EffectLightsaberThrow -// This function throws a lightsaber at a target -// If multiple targets are specified, then the lightsaber travels to them -// sequentially, returning to the first object specified -// This effect is applied to an object, so an effector is not needed -effect EffectLightsaberThrow(object oTarget1, object oTarget2 = OBJECT_INVALID, object oTarget3 = OBJECT_INVALID, int nAdvancedDamage = 0); - -// 703. -// creates the effect of a whirl wind. -effect EffectWhirlWind(); - -// 704. -// Returns the party ai style -int GetPartyAIStyle(); - -// 705. -// Returns the party members ai style -int GetNPCAIStyle(object oCreature); - -// 706. -// Sets the party ai style -void SetPartyAIStyle(int nStyle); - -// 707. -// Sets the party members ai style -void SetNPCAIStyle(object oCreature, int nStyle); - -// 708: SetNPCSelectability -void SetNPCSelectability(int nNPC, int nSelectability); - -// 709: GetNPCSelectability -// nNPC - NPC_ -// returns 1 if in current party, 0 if selectable as a party member -// -1 if not in party at all -int GetNPCSelectability(int nNPC); - -// 710: Clear all the effects of the caller. -// * No return value, but if an error occurs, the log file will contain -// "ClearAllEffects failed.". -void ClearAllEffects(); - -// 711: GetLastConversation -// Gets the last conversation string. -string GetLastConversation(); -// - -// 712: ShowPartySelectionGUI -// Brings up the party selection GUI for the player to -// select the members of the party from -// if exit script is specified, will be executed when -// the GUI is exited -// RWT-OEI 08/23/04 - New parameter = nAllowCancel. Passing in TRUE -// to this parameter makes it possible for the player to cancel out -// of the party selection GUI, so be careful that you are okay with -// them cancelling out of it before you pass TRUE. -// Also, in the sExitScript that gets called after the Party Select -// GUI exits, you can use GetRunScriptVar to find out if they -// cancelled. If it returns TRUE, they didn't cancel. If it returns -// FALSE, they cancelled. See me if there's questions. -void ShowPartySelectionGUI(string sExitScript = "", int nForceNPC1 = -1, int nForceNPC2 = -1, int nAllowCancel = FALSE); - -// 713: GetStandardFaction -// Find out which standard faction oObject belongs to. -// * Returns INVALID_STANDARD_FACTION if oObject does not belong to -// a Standard Faction, or an error has occurred. -int GetStandardFaction(object oObject); - -// 714: GivePlotXP -// Give nPercentage% of the experience associated with plot sPlotName -// to the party -// - sPlotName -// - nPercentage -void GivePlotXP(string sPlotName, int nPercentage); - -// 715. GetMinOneHP -// Checks to see if oObject has the MinOneHP Flag set on them. -int GetMinOneHP(object oObject); - -// 716. SetMinOneHP -// Sets/Removes the MinOneHP Flag on oObject. -void SetMinOneHP(object oObject,int nMinOneHP); - -// 717. SWMG_GetPlayerTunnelInfinite -// Gets whether each of the dimensions is infinite -vector SWMG_GetPlayerTunnelInfinite(); - -// 718. SWMG_SetPlayerTunnelInfinite -// Sets whether each of the dimensions is infinite -void SWMG_SetPlayerTunnelInfinite(vector vInfinite); - -// 719. SetGlobalFadeIn -// Sets a Fade In that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be from a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut in from black. -void SetGlobalFadeIn(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - -// 720. SetGlobalFadeOut -// Sets a Fade Out that starts after fWait seconds and fades for fLength Seconds. -// The Fade will be to a color specified by the RGB values fR, fG, and fB. -// Note that fR, fG, and fB are normalized values. -// The default values are an immediate cut to from black. -void SetGlobalFadeOut(float fWait = 0.0f, float fLength = 0.0f, float fR=0.0f, float fG=0.0f, float fB=0.0f); - - -// 721. GetLastAttackTarget -// Returns the last attack target for a given object -object GetLastHostileTarget(object oAttacker = OBJECT_SELF); - -// 722. GetLastAttackAction -// Returns the last attack action for a given object -int GetLastAttackAction(object oAttacker = OBJECT_SELF); - -// 723. GetLastForcePowerUsed -// Returns the last force power used (as a spell number that indexes the Spells.2da) by the given object -int GetLastForcePowerUsed(object oAttacker = OBJECT_SELF); - -// 724. GetLastCombatFeatUsed -// Returns the last feat used (as a feat number that indexes the Feats.2da) by the given object -int GetLastCombatFeatUsed(object oAttacker = OBJECT_SELF); - -// 725. GetLastAttackResult -// Returns the result of the last attack -int GetLastAttackResult(object oAttacker = OBJECT_SELF); - -// 726. GetWasForcePowerSuccessful -// Returns whether the last force power used was successful or not -int GetWasForcePowerSuccessful(object oAttacker = OBJECT_SELF); - -// 727. GetFirstAttacker -// Returns the first object in the area that is attacking oCreature -object GetFirstAttacker(object oCreature = OBJECT_SELF); - -// 728. GetNextAttacker -// Returns the next object in the area that is attacking oCreature -object GetNextAttacker(object oCreature = OBJECT_SELF); - -// 729. SetFormation -// Put oCreature into the nFormationPattern about oAnchor at position nPosition -// - oAnchor: The formation is set relative to this object -// - oCreature: This is the creature that you wish to join the formation -// - nFormationPattern: FORMATION_* -// - nPosition: Integer from 1 to 10 to specify which position in the formation -// oCreature is supposed to take. -void SetFormation(object oAnchor, object oCreature, int nFormationPattern, int nPosition); - -// 730. ActionFollowLeader -// this action has a party member follow the leader. -// DO NOT USE ON A CREATURE THAT IS NOT IN THE PARTY!! -void ActionFollowLeader(); - -// 731. SetForcePowerUnsuccessful -// Sets the reason (through a constant) for why a force power failed -void SetForcePowerUnsuccessful(int nResult, object oCreature = OBJECT_SELF); - -// 732. GetIsDebilitated -// Returns whether the given object is debilitated or not -int GetIsDebilitated(object oCreature = OBJECT_SELF); - -// 733. PlayMovie -// Playes a Movie. -void PlayMovie( string sMovie, int nStreamingMusic = FALSE ); - -// 734. SaveNPCState -// Tells the party table to save the state of a party member NPC -void SaveNPCState( int nNPC ); - -// 735: Get the Category of tTalent. -int GetCategoryFromTalent(talent tTalent); - -// 736: This affects all creatures in the area that are in faction nFactionFrom... -// - Makes them join nFactionTo -// - Clears all actions -// - Disables combat mode -void SurrenderByFaction(int nFactionFrom, int nFactionTo); - -// 737: This affects all creatures in the area that are in faction nFactionFrom. -// making them change to nFactionTo -void ChangeFactionByFaction(int nFactionFrom, int nFactionTo); - -// 738: PlayRoomAnimation -// Plays a looping animation on a room -void PlayRoomAnimation(string sRoom, int nAnimation); - -// 739: ShowGalaxyMap -// Brings up the Galaxy Map Gui, with 'nPlanet' selected. 'nPlanet' can only be a planet -// that has already been set available and selectable. -void ShowGalaxyMap(int nPlanet); - -// 740: SetPlanetSelectable -// Sets 'nPlanet' selectable on the Galaxy Map Gui. -void SetPlanetSelectable(int nPlanet, int bSelectable); - -// 741: GetPlanetSelectable -// Returns wheter or not 'nPlanet' is selectable. -int GetPlanetSelectable(int nPlanet); - -// 742: SetPlanetAvailable -// Sets 'nPlanet' available on the Galaxy Map Gui. -void SetPlanetAvailable(int nPlanet, int bAvailable); - -// 743: GetPlanetAvailable -// Returns wheter or not 'nPlanet' is available. -int GetPlanetAvailable(int nPlanet); - -// 744: GetSelectedPlanet -// Returns the ID of the currently selected planet. Check Planetary.2da -// for which planet the return value corresponds to. If the return is -1 -// no planet is selected. -int GetSelectedPlanet(); - -// 745: SoundObjectFadeAndStop -// Fades a sound object for 'fSeconds' and then stops it. -void SoundObjectFadeAndStop(object oSound,float fSeconds); - -// 746: SetAreaFogColor -// Set the fog color for the area oArea. -void SetAreaFogColor( object oArea, float fRed, float fGreen, float fBlue ); - -// 747: ChangeItemCost -// Change the cost of an item -void ChangeItemCost( string sItem, float fCostMultiplier ); - -// 748: GetIsLiveContentAvailable -// Determines whether a given live content package is available -// nPkg = LIVE_CONTENT_PKG1, LIVE_CONTENT_PKG2, ..., LIVE_CONTENT_PKG6 -int GetIsLiveContentAvailable(int nPkg); - -// 749: ResetDialogState -// Resets the GlobalDialogState for the engine. -// NOTE: NEVER USE THIS UNLESS YOU KNOW WHAT ITS FOR! -// only to be used for a failing OnDialog script -void ResetDialogState(); - -// 750: SetAlignmentGoodEvil -// Set oCreature's alignment value -void SetGoodEvilValue( object oCreature, int nAlignment ); - -// 751: GetIsPoisoned -// Returns TRUE if the object specified is poisoned. -int GetIsPoisoned( object oObject ); - -// 752: GetSpellTarget -// Returns the object id of the spell target -object GetSpellTarget(object oCreature=OBJECT_SELF); - -// 753: SetSoloMode -// Activates/Deactivates solo mode for the player's party. -void SetSoloMode( int bActivate ); - -// 754: EffectCutSceneHorrified -// Get a horrified effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneHorrified(); - -// 755: EffectCutSceneParalyze -// Get a paralyze effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneParalyze(); - -// 756: EffectCutSceneStunned -// Get a stun effect for cutscene purposes (ie. this effect will ignore immunities). -effect EffectCutSceneStunned(); - -// 757: CancelPostDialogCharacterSwitch() -// If a dialog has been started by an NPC on a Non PartyMemeberCanInteract object -// calling this function will cancel the Post Dialog switching back to the NPC -// that did the initiating. -void CancelPostDialogCharacterSwitch(); - -// 758: SetMaxHitPoints -// Set the maximum hitpoints of oObject -// The objects maximum AND current hitpoints will be nMaxHP after the function is called -void SetMaxHitPoints(object oObject, int nMaxHP); - -// 759: NoClicksFor() -// This command will not allow clicking on anything for 'fDuration' seconds -void NoClicksFor(float fDuration); - -// 760: HoldWorldFadeInForDialog() -// This will hold the fade in at the begining of a module until a dialog starts -void HoldWorldFadeInForDialog(); - -// 761: ShipBuild() -// This will return if this is a shipping build. this should be used to disable all debug output. -int ShipBuild(); - -// 762: SurrenderRetainBuffs() -// This will do the same as SurrenderToEnemies, except that affected creatures will not -// lose effects which they have put on themselves -void SurrenderRetainBuffs(); - -// 763. SuppressStatusSummaryEntry -// This will prevent the next n entries that should have shown up in the status summary -// from being added -// This will not add on to any existing summary suppressions, but rather replace it. So -// to clear the supression system pass 0 as the entry value -void SuppressStatusSummaryEntry(int nNumEntries = 1); - -// 764. GetCheatCode -// Returns true if cheat code has been enabled -int GetCheatCode(int nCode); - -// 765. SetMusicVolume -// NEVER USE THIS! -void SetMusicVolume(float fVolume = 1.0f); - -// 766. CreateItemOnFloor -// Should only be used for items that have been created on the ground, and will -// be destroyed without ever being picked up or equipped. Returns true if successful -object CreateItemOnFloor(string sTemplate, location lLocation, int bUseAppearAnimation=FALSE); - -// 767. SetAvailableNPCId -// This will set the object id that should be used for a specific available NPC -void SetAvailableNPCId(int nNPC, object oidNPC); - -// DJS-OEI -// 768. GetScriptParameter -// This function will take the index of a script parameter -// and return the value associated with it. The index -// of the first parameter is 1. -int GetScriptParameter( int nIndex ); - -//RWT-OEI 12/10/03 -// 769. SetFadeUntilScript -// This script function will make it so that the fade cannot be lifted under any circumstances -// other than a call to the SetGlobalFadeIn() script. -// This function should be called AFTER the fade has already been called. For example, you would -// do a SetGlobalFadeOut() first, THEN do SetFadeUntilScript() -// The exception to this if it's used in an OnModuleLoad() script, where instead of starting a new -// fade you are just extending the LevelLoad fade indefinitely. You can just call SetFadeUntilScript -// in such cases and the game will stay faded until a GlobalSetFadeIn() is called. -void SetFadeUntilScript(); - -// DJS-OEI 12/15/2003 -// 770: Create a Force Body effect -// - nLevel: The level of the Force Body effect. -// 0 = Force Body -// 1 = Improved Force Body -// 2 = Master Force Body -effect EffectForceBody(int nLevel); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item -int GetItemComponent( ); - -// FAK-OEI 12/15/2003 -// 771: Get the number of components for an item in pieces -int GetItemComponentPieceValue( ); - -// FAK-OEI 12/15/2003 -// 773: Start the GUI for Chemical Workshop -void ShowChemicalUpgradeScreen(object oCharacter ); - -// FAK-OEI 12/15/2003 -// 774: Get the number of chemicals for an item -int GetChemicals( ); - -// FAK-OEI 12/15/2003 -// 775: Get the number of chemicals for an item in pieces -int GetChemicalPieceValue( ); - -// DJS-OEI 12/30/2003 -// 776: Get the number of Force Points that were required to -// cast this spell. This includes modifiers such as Room Force -// Ratings and the Force Body power. -// * Return value on error: 0 -int GetSpellForcePointCost( ); - -// DJS-OEI 1/2/2004 -// 777: Create a Fury effect. -effect EffectFury(); - -// DJS-OEI 1/3/2004 -// 778: Create a Blind effect. -effect EffectBlind(); - -// DJS-OEI 1/4/2004 -// 779: Create an FP regeneration modifier effect. -effect EffectFPRegenModifier( int nPercent ); - -// DJS-OEI 1/4/2004 -// 780: Create a VP regeneration modifier effect. -effect EffectVPRegenModifier( int nPercent ); - -// DJS-OEI 1/9/2004 -// 781: Create a Force Crush effect. -effect EffectCrush(); - -// FAK - OEI 1/12/04 -// 782: Minigame grabs a swoop bike upgrade -int SWMG_GetSwoopUpgrade( int nSlot ); - -// DJS-OEI 1/12/2004 -// 783: Returns whether or not the target has access to a feat, -// even if they can't use it right now due to daily limits or -// other restrictions. -int GetFeatAcquired( int nFeat, object oCreature=OBJECT_SELF ); - -// DJS-OEI 1/12/2004 -// 784: Returns whether or not the target has access to a spell, -// even if they can't use it right now due to lack of Force Points. -int GetSpellAcquired( int nSpell, object oCreature=OBJECT_SELF ); - -// FAK-OEI 1/12/2004 -// 785: Displays the Swoop Bike upgrade screen. -void ShowSwoopUpgradeScreen( ); - -// DJS-OEI 1/13/2004 -// 786: Grants the target a feat without regard for prerequisites. -void GrantFeat( int nFeat, object oCreature ); - -// DJS-OEI 1/13/2004 -// 787: Grants the target a spell without regard for prerequisites. -void GrantSpell( int nSpell, object oCreature ); - -// DJS-OEI 1/13/2004 -// 788: Places an active mine on the map. -// nMineType - Mine Type from Traps.2DA -// lPoint - The location in the world to place the mine. -// nDetectDCBase - This value, plus the "DetectDCMod" column in Traps.2DA -// results in the final DC for creatures to detect this mine. -// nDisarmDCBase - This value, plus the "DisarmDCMod" column in Traps.2DA -// results in the final DC for creatures to disarm this mine. -// oCreator - The object that should be considered the owner of the mine. -// If oCreator is set to OBJECT_INVALID, the faction of the mine will be -// considered Hostile1, meaning the party will be vulnerable to it. -void SpawnMine( int nMineType, location lPoint, int nDetectDCBase, int nDisarmDCBase, object oCreator ); - -// FAK - OEI 1/15/04 -// 789: Yet another minigame function. Returns the object's track's position. -vector SWMG_GetTrackPosition(object oFollower); - -// FAK - OEI 1/15/04 -// 790: minigame function that lets you psuedo-set the position of a follower object -vector SWMG_SetFollowerPosition(vector vPos); - -//RWT-OEI 01/16/04 -// 791: A function to put the character into a true combat state but the reason set to -// not real combat. This should help us control animations in cutscenes with a bit -// more precision. -- Not totally sure this is doing anything just yet. Seems -// the combat condition gets cleared shortly after anyway. -// If nEnable is 1, it enables fake combat mode. If 0, it disables it. -// WARNING: Whenever using this function to enable fake combat mode, you should -// have a matching call to it to disable it. (pass 0 for nEnable). -void SetFakeCombatState( object oObject, int nEnable ); - -// FAK - OEI 1/23/04 -// 792: minigame function that deletes a minigame object -void SWMG_DestroyMiniGameObject(object oObject); - -// DJS-OEI 1/26/2004 -// 793: Returns the Demolitions skill of the creature that -// placed this mine. This will often be 0. This function accepts -// the object that the mine is attached to (Door, Placeable, or Trigger) -// and will determine which one it actually is at runtime. -int GetOwnerDemolitionsSkill( object oObject ); - -// RWT-OEI 01/29/04 -// 794: Disables or Enables the Orient On Click behavior in creatures. If -// disabled, they will not orient to face the player when clicked on -// for dialogue. The default behavior is TRUE. -void SetOrientOnClick( object oCreature = OBJECT_SELF, int nState = TRUE ); - -// DJS-OEI 1/29/2004 -// 795: Gets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, the return -// value with be 0. If the character is in the party, but has an -// attitude of Ambivalent, this will be -1. -int GetInfluence( int nNPC ); - -// DJS-OEI 1/29/2004 -// 796: Sets the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nInfluence - The new value for the influence on this CNPC. -void SetInfluence( int nNPC, int nInfluence ); - -// DJS-OEI 1/29/2004 -// 797: Modifies the PC's influence on the alignment of a CNPC. -// Parameters: -// nNPC - NPC_* constant identifying the CNPC we're interested in. -// If this character is not an available party member, nothing -// will happen. -// nModifier - The modifier to the current influence on this CNPC. -// This may be a negative value to reduce the influence. -void ModifyInfluence( int nNPC, int nModifier ); - -// FAK - OEI 2/3/04 -// 798: returns the racial sub-type of the oTarget object -int GetRacialSubType(object oTarget); - -// DJS-OEI 2/3/2004 -// 799: Increases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is greater than the max -// of 127. -void IncrementGlobalNumber( string sIdentifier, int nAmount ); - -// DJS-OEI 2/3/2004 -// 800: Decreases the value of the given global number by the given amount. -// This function only works with Number type globals, not booleans. It -// will fail with a warning if the final amount is less than the minimum -// of -128. -void DecrementGlobalNumber( string sIdentifier, int nAmount ); - -// RWT-OEI 02/06/04 -// 801: SetBonusForcePoints - This sets the number of bonus force points -// that will always be added to that character's total calculated -// force points. -void SetBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 802: AddBonusForcePoints - This adds nBonusFP to the current total -// bonus that the player has. The Bonus Force Points are a pool -// of force points that will always be added after the player's -// total force points are calculated (based on level, force dice, -// etc.) -void AddBonusForcePoints( object oCreature, int nBonusFP ); - -// RWT-OEI 02/06/04 -// 803: GetBonusForcePoints - This returns the total number of bonus -// force points a player has. Bonus Force Points are a pool of -// points that are always added to a player's Max Force Points. -// ST: Please explain how a function returning VOID could return a -// numerical value? Hope it works changing the return type... -// void GetBonusForcePoints( object oCreature ); -int GetBonusForcePoints( object oCreature ); - -// FAK - OEI 2/11/04 -// 804: SWMG_SetJumpSpeed -- the sets the 'jump speed' for the swoop -// bike races. Gravity will act upon this velocity. -void SWMG_SetJumpSpeed(float fSpeed); - -// PC CODE MERGER -// 805. IsMoviePlaying--dummy func so we can compile -int IsMoviePlaying(); - -// 806 QueueMovie -void QueueMovie(string sMovie, int nSkippable = TRUE); - -// 807 -void PlayMovieQueue(int nAllowSkips = TRUE); - -// 808 -void YavinHackDoorClose(object oCreature); - -// 809 -// new function for droid confusion so inherint mind immunity can be -// avoided. -effect EffectDroidConfused(); -// END PC CODE MERGER - -// 810 -// DJS-OEI 3/8/2004 -// Determines if the given creature is in Stealth mode or not. -// 0 = Creature is not stealthed. -// 1 = Creature is stealthed. -// This function will return 0 for any non-creature. -int IsStealthed( object oCreature ); - -// 811 -// DJS-OEI 3/12/2004 -// Determines if the given creature is using any Meditation Tree -// Force Power. -// 0 = Creature is not meditating. -// 1 = Creature is meditating. -// This function will return 0 for any non-creature. -int IsMeditating( object oCreature ); - -// 812 -// DJS-OEI 3/16/2004 -// Determines if the given creature is using the Total Defense -// Stance. -// 0 = Creature is not in Total Defense. -// 1 = Creature is in Total Defense. -// This function will return 0 for any non-creature. -int IsInTotalDefense( object oCreature ); - -// 813 -// RWT-OEI 03/19/04 -// Stores a Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -void SetHealTarget( object oidHealer, object oidTarget ); - -// 814 -// RWT-OEI 03/19/04 -// Retrieves the Heal Target for the Healer AI script. Should probably -// not be used outside of the Healer AI script. -object GetHealTarget( object oidHealer ); - -// 815 -// RWT-OEI 03/23/04 -// Returns a vector containing a random destination that the -// given creature can walk to that's within the range of the -// passed parameter. -vector GetRandomDestination( object oCreature, int rangeLimit ); - -// 816 -// DJS-OEI 3/25/2004 -// Returns whether the given creature is currently in the -// requested Lightsaber/Consular Form and can make use of -// its benefits. This function will perform trumping checks -// and lightsaber-wielding checks for those Forms that require -// them. -int IsFormActive( object oCreature, int nFormID ); - -// 817 -// DJS-OEI 3/28/2004 -// Returns the Form Mask of the requested spell. This is used -// to determine if a spell is affected by various Forms, usually -// Consular forms that modify duration/range. -int GetSpellFormMask( int nSpellID ); - -// 818 -// DJS-OEI 3/29/2004 -// Return the base number of Force Points required to cast -// the given spell. This does not take into account modifiers -// of any kind. -int GetSpellBaseForcePointCost( int nSpellID ); - -// 819 -// RWT-OEI 04/05/04 -// Setting this to TRUE makes it so that the Stealth status is -// left on characters even when entering cutscenes. By default, -// stealth is removed from anyone taking part in a cutscene. -// ALWAYS set this back to FALSE on every End Dialog node in -// the cutscene you wanted to stay stealthed in. This isn't a -// flag that should be left on indefinitely. In fact, it isn't -// saved, so needs to be set/unset on a case by case basis. -void SetKeepStealthInDialog( int nStealthState ); - -// 820 -// RWT-OEI 04/06/04 -// This returns TRUE or FALSE if there is a clear line of sight from -// the source vector to the target vector. This is used in the AI to -// help the creatures using ranged weapons find better places to shoot -// when the player moves out of sight. -int HasLineOfSight( vector vSource, vector vTarget, object oSource = OBJECT_INVALID, object oTarget = OBJECT_INVALID ); - -// 821 -// FAK - OEI 5/3/04 -// ShowDemoScreen, displays a texture, timeout, string and xy for string -int ShowDemoScreen(string sTexture, int nTimeout, int nDisplayString, int nDisplayX, int nDisplayY ); - -// 822 -// DJS-OEI 5/4/2004 -// Forces a Heartbeat on the given creature. THIS ONLY WORKS FOR CREATURES -// AT THE MOMENT. This heartbeat should force perception updates to occur. -void ForceHeartbeat( object oCreature ); - -// 823 -// DJS-OEI 5/5/2004 -// Creates a Force Sight effect. -effect EffectForceSight(); - -// 824 -// FAK - OEI 5/7/04 -// gets the walk state of the creature: 0 walk or standing, 1 is running -int IsRunning( object oCreature ); - -// 825 -// FAK - OEI 5/24/04 -// applies a velocity to the player object -void SWMG_PlayerApplyForce(vector vForce); - -// 826 -// DJS-OEI 6/12/2004 -// This function allows a script to set the conditions which constitute -// a combat forfeit by a member of the player's party. This is typically -// used to handle Battle Circle behavior or other challenge-based combats. -// nForfeitFlags: This is an OR'ed together series of FORFEIT_* defines. -void SetForfeitConditions( int nForfeitFlags ); - -// 827 -// DJS-OEI 6/12/2004 -// This function returns the last FORFEIT_* condition that the player -// has violated. -int GetLastForfeitViolation(); - -// 828 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the REFLEX saving throw for aObject -void ModifyReflexSavingThrowBase(object aObject, int aModValue); - -// 829 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the FORTITUDE saving throw for aObject -void ModifyFortitudeSavingThrowBase(object aObject, int aModValue); - -// 830 -// AWD-OEI 6/21/2004 -// This function does not return a value. -// This function modifies the BASE value of the WILL saving throw for aObject -void ModifyWillSavingThrowBase(object aObject, int aModValue); - -// DJS-OEI 6/21/2004 -// 831 -// This function will return the one CExoString parameter -// allowed for the currently running script. -string GetScriptStringParameter(); - -// 832 -// AWD-OEI 6/29/2004 -// This function returns the personal space value of an object -float GetObjectPersonalSpace(object aObject); - -// 833 -// AWD-OEI 7/06/2004 -// This function adjusts a creatures stats. -// oObject is the creature that will have it's attribute adjusted -// The following constants are acceptable for the nAttribute parameter: -// ABILITY_STRENGTH -// ABILITY_DEXTERITY -// ABILITY_CONSTITUTION -// ABILITY_INTELLIGENCE -// ABILITY_WISDOM -// ABILITY_CHARISMA -// nAmount is the integer vlaue to adjust the stat by (negative values will work). -void AdjustCreatureAttributes(object oObject, int nAttribute, int nAmount); - -// 834 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void SetCreatureAILevel(object oObject, int nPriority); - -// 835 -// AWD-OEI 7/08/2004 -// This function raises a creature's priority level. -void ResetCreatureAILevel(object oObject); - -// 836 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// template. -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByTemplate( int nPUP, string sTemplate ); - -// 837 -// RWT-OEI 07/17/04 -// This function adds a Puppet to the Puppet Table by -// creature ID -// Returns 1 if successful, 0 if there was an error -// This does not spawn the puppet or anything. It just -// adds it to the party table and makes it available for -// use down the line. Exactly like AddAvailableNPCByTemplate -int AddAvailablePUPByObject( int nPUP, object oPuppet ); - -// 838 -// RWT-OEI 07/17/04 -// This function assigns a PUPPET constant to a -// Party NPC. The party NPC -MUST- be in the game -// before calling this. -// Both the PUP and the NPC have -// to be available in their respective tables -// Returns 1 if successful, 0 if there was an error -int AssignPUP( int nPUP, int nNPC ); - -// 839 -// RWT-OEI 07/17/04 -// This function spawns a Party PUPPET. -// This must be used whenever you want a copy -// of the puppet around to manipulate in the game -// since the puppet is stored in the party table -// just like NPCs are. Once a puppet is assigned -// to a party NPC (see AssignPUP), it will spawn -// or disappear whenever its owner joins or leaves -// the party. -// This does not add it to the party automatically, -// just like SpawnNPC doesn't. You must call AddPuppet() -// to actually add it to the party -object SpawnAvailablePUP( int nPUP, location lLocation ); - -// 840 -// RWT-OEI 07/18/04 -// This adds an existing puppet object to the party. The -// puppet object must already exist via SpawnAvailablePUP -// and must already be available via AddAvailablePUP* -// functions. -int AddPartyPuppet(int nPUP, object oidCreature); - -// 841 -// RWT-OEI 07/19/04 -// This returns the object ID of the puppet's owner. -// The Puppet's owner must exist and must be in the party -// in order to be found. -// Returns invalid object Id if the owner cannot be found. -object GetPUPOwner(object oPUP = OBJECT_SELF); - -// 842 -// RWT-OEI 07/19/04 -// Returns 1 if the creature is a Puppet in the party. -// Otherwise returns 0. It is possible for a 'party puppet' -// to exist without actually being in the party table. -// such as when SpawnAvailablePUP is used without subsequently -// using AddPartyPuppet to add the newly spawned puppet to -// the party table. A puppet in that in-between state would -// return 0 from this function -int GetIsPuppet(object oPUP = OBJECT_SELF ); - -// 843 -// RWT-OEI 07/20/04 -// Similiar to ActionFollowLeader() except the creature -// follows its owner -//nRange is how close it should follow. Note that once this -//action is queued, it will be the only thing this creature -//does until a ClearAllActions() is used. -void ActionFollowOwner(float fRange = 2.5); - -// 844 -// RWT-OEI 07/21/04 -// Returns TRUE if the object ID passed is the character -// that the player is actively controlling at that point. -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -int GetIsPartyLeader(object oCharacter = OBJECT_SELF); - -// 845 -// RWT-OEI 07/21/04 -// Returns the object ID of the character that the player -// is actively controlling. This is the 'Party Leader'. -// Returns object Invalid on error -// Note that this function is *NOT* able to return correct -// information during Area Loading since the player is not -// actively controlling anyone at that point. -object GetPartyLeader(); - -// 846 -// JAB-OEI 07/22/04 -// Will remove the CNPC from the 3 person party, and remove -// him/her from the area, effectively sending the CNPC back -// to the base. The CNPC data is still stored in the -// party table, and calling this function will not destroy -// the CNPC in any way. -// Returns TRUE for success. -int RemoveNPCFromPartyToBase(int nNPC); - -// 847 -// AWD-OEI 7/22/2004 -// This causes a creature to flourish with it's currently equipped weapon. -void CreatureFlourishWeapon(object oObject); - -// 848 -// Create a Mind Trick effect -effect EffectMindTrick(); - -// 849 -// Create a Faction Modifier effect. -effect EffectFactionModifier( int nNewFaction ); - -// 850 -// ChangeObjectAppearance -// oObjectToChange = Object to change appearance of -// nAppearance = appearance to change to (from appearance.2da) -void ChangeObjectAppearance( object oObjectToChange, int nAppearance ); - -// 851 -// GetIsXBox -// Returns TRUE if this script is being executed on the X-Box. Returns FALSE -// if this is the PC build. -int GetIsXBox(); - -// 852 -// Create a Droid Scramble effect -effect EffectDroidScramble(); - -// 853 -// ActionSwitchWeapons -// Forces the creature to switch between Config 1 and Config 2 -// of their equipment. Does not work in dialogs. Works with -// AssignCommand() -void ActionSwitchWeapons(); - -// 854 -// DJS-OEI 8/29/2004 -// PlayOverlayAnimation -// This function will play an overlay animation on a character -// even if the character is moving. This does not cause an action -// to be placed on the queue. The animation passed in must be -// designated as an overlay in Animations.2DA. -void PlayOverlayAnimation( object oTarget, int nAnimation ); - -// 855 -// RWT-OEI 08/30/04 -// UnlockAllSongs -// Calling this will set all songs as having been unlocked. -// It is INTENDED to be used in the end-game scripts to unlock -// any end-game songs as well as the KotOR1 sound track. -void UnlockAllSongs(); - -// 856 -// RWT-OEI 08/31/04 -// Passing TRUE into this function turns off the player's maps. -// Passing FALSE into this function re-enables them. This change -// is permanent once called, so it is important that there *is* -// a matching call to DisableMap(FALSE) somewhere or else the -// player is stuck without a map indefinitely. -void DisableMap(int nFlag = FALSE); - -// 857 -// RWT-OEI 08/31/04 -// This function schedules a mine to play its DETONATION -// animation once it is destroyed. Note that this detonates -// the mine immediately but has nothing to do with causing -// the mine to do any damage to anything around it. To -// get the mine to damage things around it when it detonates -// do: -// AssignCommand(,ExecuteScript( "k_trp_generic",)); -// right before you call DetonateMine(). By my experience so far -// you don't need any kind of delay between the two. -void DetonateMine(object oMine); - -// 858 -// RWT-OEI 09/06/04 -// This function turns off the innate health regeneration that all party -// members have. The health regen will *stay* off until it is turned back -// on by passing FALSE to this function. -void DisableHealthRegen(int nFlag = FALSE); - -// 859 -// DJS-OEI 9/7/2004 -// This function sets the current Jedi Form on the given creature. This -// call will do nothing if the target does not know the Form itself. -void SetCurrentForm( object oCreature, int nFormID ); - -// 860 -// RWT-OEI 09/09/04 -// This will disable or enable area transit -void SetDisableTransit(int nFlag = FALSE); - -// 861 -//RWT-OEI 09/09/04 -// This will set the specific input class. -// The valid options are: -// 0 - Normal PC control -// 1 - Mini game control -// 2 - GUI control -// 3 - Dialog Control -// 4 - Freelook control -void SetInputClass(int nClass); - -// 862 -//RWT-OEI 09/15/04 -// This script allows an object to recieve updates even if it is outside -//the normal range limit of 250.0f meters away from the player. This should -//ONLY be used for cutscenes that involve objects that are more than 250 -//meters away from the player. It needs to be used on a object by object -//basis. -//This flag should *always* be set to false once the cutscene it is needed -//for is over, or else the game will spend CPU time updating the object -//when it doesn't need to. -//For questions on use of this function, or what its purpose is, check -//with me. -void SetForceAlwaysUpdate(object oObject, int nFlag); - -//863 -//RWT-OEI 09/15/04 -//This function enables or disables rain -void EnableRain( int nFlag ); - -//864 -//RWT-OEI 09/27/04 -//This function displays the generic Message Box with the strref -//message in it -//sIcon is the resref for an icon you would like to display. -void DisplayMessageBox(int nStrRef, string sIcon = ""); - -//865 -//RWT-OEI 09/28/04 -//This function displays a datapad popup. Just pass it the -//object ID of a datapad. -void DisplayDatapad(object oDatapad); - -// 866 -// CTJ-OEI 09-29-04 -// Removes the heartbeat script on the placeable. Useful for -// placeables whose contents get populated in the heartbeat -// script and then the heartbeat no longer needs to be called. -void RemoveHeartbeat(object oPlaceable); - - -//867 -// JF-OEI 10-07-2004 -// Remove an effect by ID -void RemoveEffectByID( object oCreature, int nEffectID ); - -//868 -// RWT-OEI 10/07/04 -// This script removes an effect by an identical match -// based on: -// Must have matching EffectID types. -// Must have the same value in Integer(0) -// Must have the same value in Integer(1) -// I'm specifically using this function for Mandalore's implant swapping -// script and it will probably not be useful for anyone else. If you're -// not sure what this script function does, see me before using it. -void RemoveEffectByExactMatch( object oCreature, effect eEffect); - -// 869 -// DJS-OEI 10/9/2004 -// This function adjusts a creature's skills. -// oObject is the creature that will have its skill adjusted -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// nAmount is the integer value to adjust the stat by (negative values will work). -void AdjustCreatureSkills(object oObject, int nSkill, int nAmount); - -// 870 -// DJS-OEI 10/10/2004 -// This function returns the base Skill Rank for the requested -// skill. It does not include modifiers from effects/items. -// The following constants are acceptable for the nSkill parameter: -// SKILL_COMPUTER_USE -// SKILL_DEMOLITIONS -// SKILL_STEALTH -// SKILL_AWARENESS -// SKILL_PERSUADE -// SKILL_REPAIR -// SKILL_SECURITY -// SKILL_TREAT_INJURY -// oObject is the creature that will have its skill base returned. -int GetSkillRankBase(int nSkill, object oObject=OBJECT_SELF); - -// 871 -// DJS-OEI 10/15/2004 -// This function will allow the caller to modify the rendering behavior -// of the target object. -// oObject - The object to change rendering state on. -// bEnable - If 0, the object will stop rendering. Else, the object will render. -void EnableRendering( object oObject, int bEnable ); - -// 872 -// RWT-OEI 10/19/04 -// This function returns TRUE if the creature has actions in its -// Combat Action queue. -int GetCombatActionsPending(object oCreature); - -// 873 -// RWT-OEI 10/26/04 -// This function saves the party member at that index with the object -// that is passed in. -void SaveNPCByObject( int nNPC, object oidCharacter); - -// 874 -// RWT-OEI 10/26/04 -// This function saves the party puppet at that index with the object -// that is passed in. For the Remote, just use '0' for nPUP -void SavePUPByObject( int nPUP, object oidPuppet ); - -// 875 -// RWT-OEI 10/29/04 -// Returns TRUE if the object passed in is the character that the player -// made at the start of the game -int GetIsPlayerMadeCharacter(object oidCharacter); - -// 876 -// RWT-OEI 11/12/04 -// This repopulates the NPCObject table in CSWPartyTable. Do not use this -// unless you understand exactly what it is doing. -void RebuildPartyTable(); From 052b7725d62bdc606ca313f53e5421cb00232fc8 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Mon, 5 Feb 2024 23:17:58 -0600 Subject: [PATCH 11/19] test multi threading to speed up tests --- .github/workflows/compile_all_scripts.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index b8df63e54..1aac5b73b 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -21,13 +21,11 @@ jobs: run: | git clone --branch vanilla-source-test https://github.com/th3w1zard1/PyKotor.git PyKotor cd PyKotor - python -m pip install --upgrade pip ./install_python_venv.ps1 -noprompt python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary - python -m pip install pytest - python -m pip install pytest pytest-html - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html + python -m pip install pytest pytest-html pytest-xdist + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto shell: pwsh - name: Publish Test Report From f1511a36a5bee780c2f22c3610226a1391eed0f7 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 00:26:15 -0600 Subject: [PATCH 12/19] run the test --- .github/workflows/compile_all_scripts.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/compile_all_scripts.yml index 1aac5b73b..ef32c79a1 100644 --- a/.github/workflows/compile_all_scripts.yml +++ b/.github/workflows/compile_all_scripts.yml @@ -44,4 +44,3 @@ jobs: with: name: pytest-markdown-report path: pytest_report.md - From e195be1f1876333fa39e13e61ccd71df68e602ae Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 00:33:02 -0600 Subject: [PATCH 13/19] split k2 and k1 tests for speed --- ...cripts.yml => test_compile_k1_scripts.yml} | 0 .../workflows/test_compile_tsl_scripts.yml | 46 +++++++++++++++++++ 2 files changed, 46 insertions(+) rename .github/workflows/{compile_all_scripts.yml => test_compile_k1_scripts.yml} (100%) create mode 100644 .github/workflows/test_compile_tsl_scripts.yml diff --git a/.github/workflows/compile_all_scripts.yml b/.github/workflows/test_compile_k1_scripts.yml similarity index 100% rename from .github/workflows/compile_all_scripts.yml rename to .github/workflows/test_compile_k1_scripts.yml diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml new file mode 100644 index 000000000..c0c650342 --- /dev/null +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -0,0 +1,46 @@ +name: Compile All Scripts Test + +on: [push] + +permissions: + contents: read + +jobs: + build: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.8 + uses: actions/setup-python@v3 + with: + python-version: "3.8" + + - name: Run PyKotor's Compile Tests + run: | + git clone --branch vanilla-source-test-k2 https://github.com/th3w1zard1/PyKotor.git PyKotor + cd PyKotor + ./install_python_venv.ps1 -noprompt + python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary + python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary + python -m pip install pytest pytest-html pytest-xdist + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto + shell: pwsh + + - name: Publish Test Report + uses: dorny/test-reporter@v1 + if: always() # Ensures this step runs even if the previous step fails + with: + name: 'Pytest Results' # Display name for the check run + path: 'pytest_report.xml' # Path to the JUnit XML report generated by pytest + fail-on-error: true # Optionally, you can fail the GitHub check if errors are found in test results + # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit + max-annotations: 10 + + - name: Upload Markdown Report + uses: actions/upload-artifact@v3 + if: always() # Ensures this step runs even if the previous step fails + with: + name: pytest-markdown-report + path: pytest_report.md From 3a57bc8dc0ca6de9b016926f86fba489a13a0cbb Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 00:33:56 -0600 Subject: [PATCH 14/19] rename tests for clarity --- .github/workflows/test_compile_k1_scripts.yml | 2 +- .github/workflows/test_compile_tsl_scripts.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_compile_k1_scripts.yml b/.github/workflows/test_compile_k1_scripts.yml index ef32c79a1..47b5b2a14 100644 --- a/.github/workflows/test_compile_k1_scripts.yml +++ b/.github/workflows/test_compile_k1_scripts.yml @@ -1,4 +1,4 @@ -name: Compile All Scripts Test +name: K1 Scripts Test on: [push] diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml index c0c650342..1fecad06f 100644 --- a/.github/workflows/test_compile_tsl_scripts.yml +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -1,4 +1,4 @@ -name: Compile All Scripts Test +name: TSL Scripts Test on: [push] From d245b71aa761873994f6e7216ac808dc25caa12d Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 01:02:23 -0600 Subject: [PATCH 15/19] run the new optimized include symlinking logic --- .github/workflows/test_compile_tsl_scripts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml index 1fecad06f..632b60545 100644 --- a/.github/workflows/test_compile_tsl_scripts.yml +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -44,3 +44,4 @@ jobs: with: name: pytest-markdown-report path: pytest_report.md + From 842300129a9d040030e4da3c0b4e336cbfaa4668 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 01:28:14 -0600 Subject: [PATCH 16/19] fix the reporter x2 --- .github/workflows/test_compile_tsl_scripts.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml index 632b60545..0dc02acbe 100644 --- a/.github/workflows/test_compile_tsl_scripts.yml +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -12,6 +12,8 @@ jobs: steps: - uses: actions/checkout@v3 + - run: npm ci # install packages + - run: npm test # run tests (configured to use jest-junit reporter) - name: Set up Python 3.8 uses: actions/setup-python@v3 with: @@ -38,6 +40,14 @@ jobs: # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit max-annotations: 10 + - name: Upload HTML Report + uses: actions/upload-artifact@v3 + if: always() # Ensures this step runs even if the previous step fails + with: + name: pytest-html-report + path: pytest_report.html + reporter: jest-junit # Format of test results + - name: Upload Markdown Report uses: actions/upload-artifact@v3 if: always() # Ensures this step runs even if the previous step fails From 059fc078c486e5c90ea171048d810a667a9a74dc Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 01:30:43 -0600 Subject: [PATCH 17/19] Update test_compile_tsl_scripts.yml --- .github/workflows/test_compile_tsl_scripts.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml index 0dc02acbe..a6c50ccea 100644 --- a/.github/workflows/test_compile_tsl_scripts.yml +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -12,8 +12,6 @@ jobs: steps: - uses: actions/checkout@v3 - - run: npm ci # install packages - - run: npm test # run tests (configured to use jest-junit reporter) - name: Set up Python 3.8 uses: actions/setup-python@v3 with: From 83eaf8e1f84577bd52066c92a242693b0acaaa3b Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Tue, 6 Feb 2024 02:14:29 -0600 Subject: [PATCH 18/19] don't rely on 3rd party reporting, just upload the thing --- .github/workflows/test_compile_k1_scripts.yml | 22 ++++++++----------- .../workflows/test_compile_tsl_scripts.yml | 20 ++++++++--------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/.github/workflows/test_compile_k1_scripts.yml b/.github/workflows/test_compile_k1_scripts.yml index 47b5b2a14..76309d41b 100644 --- a/.github/workflows/test_compile_k1_scripts.yml +++ b/.github/workflows/test_compile_k1_scripts.yml @@ -28,19 +28,15 @@ jobs: python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto shell: pwsh - - name: Publish Test Report - uses: dorny/test-reporter@v1 - if: always() # Ensures this step runs even if the previous step fails - with: - name: 'Pytest Results' # Display name for the check run - path: 'pytest_report.xml' # Path to the JUnit XML report generated by pytest - fail-on-error: true # Optionally, you can fail the GitHub check if errors are found in test results - # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit - max-annotations: 10 - - - name: Upload Markdown Report + - name: Upload Pytest Reports uses: actions/upload-artifact@v3 if: always() # Ensures this step runs even if the previous step fails with: - name: pytest-markdown-report - path: pytest_report.md + name: pytest-reports + path: | + PyKotor/pytest_report.html + PyKotor/pytest_report.xml + PyKotor/FAILED_TESTS.log + PyKotor/fallback_level_info_* + PyKotor/fallback_level_debug_* + PyKotor/*_incompatible_* \ No newline at end of file diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml index a6c50ccea..5581b2cdf 100644 --- a/.github/workflows/test_compile_tsl_scripts.yml +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -38,18 +38,16 @@ jobs: # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit max-annotations: 10 - - name: Upload HTML Report + - name: Upload Pytest Reports uses: actions/upload-artifact@v3 if: always() # Ensures this step runs even if the previous step fails with: - name: pytest-html-report - path: pytest_report.html - reporter: jest-junit # Format of test results - - - name: Upload Markdown Report - uses: actions/upload-artifact@v3 - if: always() # Ensures this step runs even if the previous step fails - with: - name: pytest-markdown-report - path: pytest_report.md + name: pytest-reports + path: | + PyKotor/pytest_report.html + PyKotor/pytest_report.xml + PyKotor/FAILED_TESTS.log + PyKotor/fallback_level_info_* + PyKotor/fallback_level_debug_* + PyKotor/*_incompatible_* From f747509795973ad1054a5f301782a3d2ad6986c4 Mon Sep 17 00:00:00 2001 From: Benjamin Auquite Date: Thu, 8 Feb 2024 00:35:25 -0600 Subject: [PATCH 19/19] reduce verbosity of main output --- .github/workflows/test_compile_k1_scripts.yml | 2 +- .github/workflows/test_compile_tsl_scripts.yml | 12 +----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test_compile_k1_scripts.yml b/.github/workflows/test_compile_k1_scripts.yml index 76309d41b..d4420c0e5 100644 --- a/.github/workflows/test_compile_k1_scripts.yml +++ b/.github/workflows/test_compile_k1_scripts.yml @@ -25,7 +25,7 @@ jobs: python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest pytest-html pytest-xdist - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --tb=no -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto shell: pwsh - name: Upload Pytest Reports diff --git a/.github/workflows/test_compile_tsl_scripts.yml b/.github/workflows/test_compile_tsl_scripts.yml index 5581b2cdf..07c5f471f 100644 --- a/.github/workflows/test_compile_tsl_scripts.yml +++ b/.github/workflows/test_compile_tsl_scripts.yml @@ -25,19 +25,9 @@ jobs: python -m pip install -r ./Libraries/PyKotor/requirements.txt --prefer-binary python -m pip install -r ./Libraries/PyKotor/recommended.txt --prefer-binary python -m pip install pytest pytest-html pytest-xdist - python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --full-trace -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto + python -m pytest ./tests/resource/formats/pytest_ncs_compile_installation.py -v --tb=no -ra -o log_cli=true --capture=no --junitxml=pytest_report.xml --html=pytest_report.html --self-contained-html -n auto shell: pwsh - - name: Publish Test Report - uses: dorny/test-reporter@v1 - if: always() # Ensures this step runs even if the previous step fails - with: - name: 'Pytest Results' # Display name for the check run - path: 'pytest_report.xml' # Path to the JUnit XML report generated by pytest - fail-on-error: true # Optionally, you can fail the GitHub check if errors are found in test results - # Customizes how many annotations are created from test results to avoid reaching GitHub's annotations limit - max-annotations: 10 - - name: Upload Pytest Reports uses: actions/upload-artifact@v3 if: always() # Ensures this step runs even if the previous step fails