Script Compiler
Script Compiler
AICompile
Script Compiler for Baldurs Gate
Public Release Version 1.0
Table Of Contents
Table Of Contents________________________________________________________2
Disclaimer:______________________________________________________________5
Using the Script Compiler:_________________________________________________5
Creating Scripts:_________________________________________________________5
Initial Planning:_______________________________________________________________5
Preparation:__________________________________________________________________5
Coding:_____________________________________________________________________5
Compiling:___________________________________________________________________6
Definitions:_____________________________________________________________6
Creature:____________________________________________________________________6
Trigger:_____________________________________________________________________6
Condition:___________________________________________________________________6
Action:______________________________________________________________________6
Response:____________________________________________________________________7
Response Set:________________________________________________________________7
WeakestOf()______________________________________________________________________11
Trigger Descriptions_____________________________________________________12
Event Triggers_______________________________________________________________12
AttackedBy(ObjectType X, Style Y)___________________________________________________12
Die()_____________________________________________________________________________12
Died(Object: X)____________________________________________________________________12
Heard(Object:X, Integer: Y)__________________________________________________________12
Help(ObjectType X)________________________________________________________________12
HitBy(ObjectType X, Style Y)________________________________________________________12
Description: I have just been hit by X the style is Y________________________________________12
HotKey(HotKey X)_________________________________________________________________12
ReceivedOrder(ObjectType X, OrderID Y)_____________________________________________12
Said(Object:X)_____________________________________________________________________13
Trigger(Integer TriggerId)__________________________________________________________13
Status Triggers______________________________________________________________13
ActionListIsEmpty()_______________________________________________________________13
Class(ObjectType X,CLASS)_________________________________________________________13
Delay(Integer: X)__________________________________________________________________15
Use: Use to avoid excessive calling of slow triggers_______________________________________15
Exists(ObjectType X)_______________________________________________________________15
False()___________________________________________________________________________15
Gender(ObjectType X,GENDER)_____________________________________________________15
General(ObjectType X,GENERAL)___________________________________________________15
HasWeaponEquiped(O:Object*)_____________________________________________________15
HaveAnySpells()__________________________________________________________________15
HaveSpell(Integer X)_______________________________________________________________15
HP(ObjectType X, Y)_______________________________________________________________15
HPGT(ObjectType X, Y)____________________________________________________________16
HPLT(ObjectType X, Y)_____________________________________________________________16
HPPercent(ObjectType X, Integer: Y)__________________________________________________16
HPPercentGT(ObjectType X, Integer: Y)_______________________________________________16
HPPercentLT(ObjectType X, Integer: Y)_______________________________________________16
InParty(ObjectType X)______________________________________________________________16
InWeaponRange(O:Object*)_________________________________________________________16
LOS(ObjectType X, RANGE)________________________________________________________16
NotStateCheck(ObjectType X, Integer:Y)_______________________________________________16
NumCreature(ObjectType X, Integer: Y)_______________________________________________16
NumCreatureGT(ObjectType X, Integer: Y)____________________________________________16
NumCreatureLT(ObjectType X, Integer: Y)_____________________________________________16
NumTimesInteracted(Integer:NPC, Integer num)________________________________________17
NumTimesInteractedGT(Integer:NPC, Integer num)_____________________________________17
NumTimesInteractedLT(Integer:NPC, Integer num)______________________________________17
OutOfAmmo()____________________________________________________________________17
Race(ObjectType X,RACE)__________________________________________________________17
RandomNum(Integer: Range, Integer: Value)____________________________________________18
RandomNumGT(Integer: Range, Integer: Value)_________________________________________18
RandomNumLT(Integer: Range, Integer: Value)_________________________________________18
Range(ObjectType X, RANGE)_______________________________________________________18
See(ObjectType X)__________________________________________________________________18
Specifics(ObjectType X,SPECIFICS)__________________________________________________18
StateCheck(ObjectType X, Integer:Y)__________________________________________________18
Description: Check if X is in State Y___________________________________________________18
Time(TIME)______________________________________________________________________18
TimeOfDay()_____________________________________________________________________18
True()____________________________________________________________________________19
Description: Always returns True______________________________________________________19
Action Descriptions______________________________________________________20
Attack(ObjectType X, Style Y, ObjectType Z)____________________________________________20
AttackOneRound(Object X)_________________________________________________________20
AttackReevaluate(O:Target,I:Period)__________________________________________________20
Continue( )_______________________________________________________________________20
EquipMostDamagingMelee()________________________________________________________20
Description: Equip melee weapon which does the most damage______________________________20
EquipRanged()____________________________________________________________________20
Formation(ObjectType Leader, Point Offset)____________________________________________20
GetItem(ResRef X)_________________________________________________________________20
GiveOrder(ObjectType X, OrderID Y)_________________________________________________21
GroupAttack(Object X)_____________________________________________________________21
Help()___________________________________________________________________________21
Hide()___________________________________________________________________________21
Mouse Functions:__________________________________________________________________21
MoveToObject(ObjectType X)________________________________________________________21
MoveToOffset(Point: P)_____________________________________________________________22
Description: Move to P offset from current location________________________________________22
ProtectObject(ObjectType X)_________________________________________________________22
ProtectPoint(Point X, Integer range)___________________________________________________22
RandomWalk()____________________________________________________________________22
Description: Wander around randomly__________________________________________________22
RunAwayFrom(ObjectType X, Time)__________________________________________________22
SendTrigger(ObjectType X, Integer ID)________________________________________________22
SetInterrupt(Integer X)_____________________________________________________________22
Description: Turn interrupt on or off___________________________________________________22
Shout(Integer Y)___________________________________________________________________22
Description: Send all in range Heard trigger_____________________________________________22
SmallWait(Integer X)_______________________________________________________________22
Spell(ObjectType X, SpellID Y)_______________________________________________________22
SpellPoint(Point X, SpellID Y)_______________________________________________________25
Wait(Integer X)____________________________________________________________________25
Description: Enter ready state for X seconds_____________________________________________25
Disclaimer:
The Baldurs Gate Script Compiler, this document, and any information contained
herein, are provided in an as is state. No support will be provided for either the use of
the compiler or for any script files generated by the compiler. Neither BioWare Corp. or
Interplay Productions are responsible for any problems encountered in running the
compiler or in creating scripts.
BALDUR'S GATE: Developed and (c)1998 BioWare Corp. All Rights Reserved.
Baldur's Gate, Forgotten Realms, the Forgotten Realms logo, Advanced Dungeons &
Dragons, the AD&D logo, and the TSR logo are trademarks of TSR, Inc., a subsidiary of
Wizards of the Coast, Inc., and are used by Interplay under license. All Rights Reserved.
BioWare, the BioWare logo and The BioWare Infinity Engine are the trademarks of
Bioware Corp. All Rights Reserved. Interplay, the Interplay logo, Black Isle Studios, the
Black Isle Studios logo, and "By Gamers. For Gamers." are trademarks of Interplay
Productions. All Rights Reserved. Exclusively licensed and distributed by Interplay
Productions. LUA copyright 1994-1998 TeCGraf, PUC-Rio. LUA written by Waldermar
Celes, Robert Ierusalimschy and Luiz Henrique de Figueirido. All other trademarks and
copyrights are property of their respective owners. All rights reserved.
Creating Scripts:
Initial Planning:
Decide what you want the script to do before actually starting one. For example, When
attacked by an XX I want my character to react according to the range of my attacker. If
I am within a range of 4 search squares I will run to get some distance between us. If I am
further than 4 search squares I will attack with a ranged weapon.
Preparation:
After you have decided what you want the script to do open notepad or whatever else you
would like to use and begin entering in the commands you will need. For mine I will need
to use the commands, AttackedBy, Range, RunAwayFrom, EquipRanged and Attack.
Coding:
This is how my script would look:
IF
AttackedBy([ANYONE],DEFAULT)
Range(LastAttackerOf(Myself),4)
THEN
RESPONSE #100
RunAwayFrom(LastAttackerOf(Myself),45)
END
IF
!Range(LastAttackerOf(Myself),4)
THEN
RESPONSE #100
EquipRanged()
Attack(LastAttackerOf(Myself))
END
In the first part of the script I check to see if I was attacked by [ANYONE]. The object
type parameter uses any function that returns an object type or objects referenced by
ENEMYALLY, RACE, CLASS, etc. Examples of these are: [ANYONE], [ENEMY],
[PC], etc. The object type can also be Myself. But in this case it would be useless since
you would not attack yourself.
Once I have determined if someone attacked me I check to see if the Range was within 4
search squares. (The screen is about 30 search squares). If the last attack of myself is
within range I run away from the target for about 3 seconds. The time is given in 15ths of
a second.
If the range of the target is not within 4 search squares the script falls through to the next
set of checks. In this next set I just check to see if the targets range is not (using the ! to
reference not) within 4 search squares. If so then I equip my ranged weapon and attack
the last attacker of myself.
If I do not have a ranged weapon or ammo the function will equip a melee weapon and
then approach the target to get within weapons range.
Compiling:
Once the script is done I save it to the Source directory of the script compiler. The
filename must be 1 8 characters with the extension .BAF. I then run the compiler by
typing COMPILE <FILENAME>. The compiler will notify you of any errors in the script
by placing a error file in the ERRORS directory with the scripts filename and extension
.ERR. If the file size is 0 then the script compiled successfully. And the final script will be
placed in the COMPILED directory with the filename and extension .BS. This will then
have to be copied into your SCRIPTS directory of Baldurs Gate.
Definitions:
Creature:
Creatures include all objects capable of action. This includes player characters.
Trigger:
A trigger is sent to a creature when a certain event occurs. A trigger includes the
knowledge of the cause of the trigger
Condition:
A combination of triggers joined with ands.
Action:
A specified response to a condition. An action requires the knowledge of who (or what)
to perform the action upon.
Response:
A combination of actions which will be performed sequentially. It is possible for a
response to be interrupted.
Response Set:
A combination of Responses, each with a weighting from 1 to 100. This weighting is used
to randomly determine which response is actually executed.
NAME
-Returns ObjectType with the instance field filled out if the object currently exists.
LastAttackerOf(ObjectType Caller)
-Returns ObjectType
- The Creature that last did Caller damage
LastCommandedBy(ObjectType Caller)
-Returns ObjectType
-Returns the last person who issued Caller an order
LastHeardBy(ObjectType Type)
-Returns ObjectType
-last heard by type
LastHelp(ObjectType Type)
-Returns ObjectType
-Last person type heard call for help
LastHitter(ObjectType Type)
-Returns ObjectType
-Last person who hit type
LastSeenBy(ObjectType Type)
-Returns ObjectType
-Last seen by type
LastTalkedToBy(ObjectType Type)
-Returns ObjectType
-Last talked to by type
LastTargetedBy(ObjectType Caller)
-Returns ObjectType
- The Creature that Caller last targeted for attack
LastTrigger(ObjectType Type)
-Returns ObjectType
-Last triggerer of type
LeaderOf()
-Returns ObjectType
-Current leader of Player group
LeastDamagedOf()
-Returns ObjectType
- Group member with highest percentage of remaining hit points
MostDamagedOf()
-Returns ObjectType
- Use Source to specify Enemy / Ally status of group
- Group member with the lowest percentage of remaining hit points
Myself
-Returns ObjectType
-Yourself
-Me
Nearest(ObjectType Type)
-Returns ObjectType
-Returns the instance of the nearest ObjectType of the given Type.
NearestEnemyOf(ObjectType Caller)
-Returns ObjectType
-Returns the nearest creature with Enemy / Ally flag opposite to the Caller.
Player1
-Returns ObjectType
-Character in portrait slot 1
Player2
-Returns ObjectType
-Character in portrait slot 2
Player3
-Returns ObjectType
-Character in portrait slot 3
Player4
-Returns ObjectType
-Character in portrait slot 4
Player5
-Returns ObjectType
-Character in portrait slot 5
Player6
-Returns ObjectType
-Character in portrait slot 6
Protagonist
- The Protagonist
10
ProtectedBy(ObjectType Caller)
- Returns ObjectType
- The Creature currently protected by Caller
ProtectorOf(ObjectType Caller)
- Returns ObjectType
- The Creature Caller is currently being protected by
StrongestOf()
-Returns ObjectType
- Group member with the highest threat rating
StrongestOfMale
- Returns ObjectType
- Male group member with the highest threat rating
WeakestOf()
-Returns ObjectType
- Group member with lowest threat rating
11
12
Trigger Descriptions
Event Triggers
Event Triggers only last until the next AI cycle. At that point they are examined and
processed. At the end of the AI cycle all of the triggers are removed from the pending list.
AttackedBy(ObjectType X, Style Y)
Returns: Boolean (True or False)
Description: I was just attacked by creature X using style Y.
Information required:
Attack type: DEFAULT
MELEE
RANGED
X is an ObjectType variable.
Die()
Returns: Boolean (True of False)
Description: I have just died
Died(Object: X)
Returns: Boolean (True or False)
Description: X just died in my hearing range.
Heard(Object:X, Integer: Y)
Returns: Boolean (True or False)
Description: I heard X shout Y
Help(ObjectType X)
Returns: Boolean (True or False)
Description: a call for help is heard from X
Information required: X is an ObjectType
HitBy(ObjectType X, Style Y)
Returns: Boolean (True or False)
Description: I have just been hit by X the style is Y
HotKey(HotKey X)
Returns: Boolean(True or False)
Description: key X has just been pressed when I was the selected creature
Currently hotkeys are restricted to letters A through Z.
ReceivedOrder(ObjectType X, OrderID Y)
Returns: Boolean (True or False)
Description: Just received order Y from X
Information Required: X specifies the creature that sent the order. OrderID specifies type
of the order.
13
Said(Object:X)
Returns: Boolean (True or False)
Description: X said something to me
Trigger(Integer TriggerId)
Returns: Boolean (True or False)
Description: I have just been sent the trigger TriggerId
Status Triggers
Status triggers are checked every time through the AI cycle. As a result they always apply
if they are true.
ActionListIsEmpty()
Returns: Boolean (True or False)
Description: I have no actions on my queue
Class(ObjectType X,CLASS)
Returns: Boolean (True or False)
Description: Is the Class of X equal to CLASS?
Information Needed: X is an ObjectType CLASS is the class
ANKHEG
BARD
BASILISK
BASILISK_GREATER
BEAR_BLACK
BEAR_BROWN
BEAR_CAVE
BEAR_POLAR
CARRIONCRAWLER
CLERIC
CLERIC_MAGE
CLERIC_RANGER
CLERIC_THIEF
DOG_WAR
DOG_WILD
DOPPLEGANGER
DOPPLEGANGER_GREATER
DRIZZT
DRUID
ELMINSTER
ETTERCAP
FAIRY_DRYAD
FAIRY_NEREID
FAIRY_NYMPH
FAIRY_SIRINE
FIGHTER
FIGHTER_CLERIC
FIGHTER_DRUID
FIGHTER_MAGE
FIGHTER_MAGE_CLERIC
FIGHTER_MAGE_THIEF
FIGHTER_THIEF
GHOUL
GHOUL_GHAST
GHOUL_REVEANT
GIBBERLING
GNOLL
GREEN_SLIME
GREY_OOZE
HOBGOBLIN
KOBOLD
KOBOLD_TASLOI
KOBOLD_XVART
MAGE
MAGE_THIEF
MUSTARD_JELLY
NO_CLASS
OCRE_JELLY
OGRE
OGRE_HALFOGRE
OGRE_MAGE
OGRE_OGRILLON
OLIVE_SLIME
PALADIN
RANGER
SAREVOK
SKELETON
SKELETON_BANEGUARD
SKELETON_WARRIOR
SPIDER_GIANT
SPIDER_HUGE
SPIDER_PHASE
SPIDER_SWORD
SPIDER_WRAITH
THIEF
VOLO
WOLF
WOLF_DIRE
WOLF_DREAD
WOLF_VAMPIRIC
WOLF_WINTER
WOLF_WORG
WYVERN
14
Delay(Integer: X)
Returns: Boolean (True or False)
Description: returns False except every X seconds
Use: Use to avoid excessive calling of slow triggers
Exists(ObjectType X)
Returns: Boolean (True or False)
Description: Is X a valid ObjectType?
Information Needed: X is an ObjectType variable.
False()
Description: Always return FALSE
Gender(ObjectType X,GENDER)
Returns: Boolean (True or False)
Description: Is the Xs gender equal to GENDER?
General(ObjectType X,GENERAL)
Returns: Boolean (True or False)
Description: Is the General type of X equal to GENERAL?
Information Needed: X is an ObjectType GENERAL is the general type.
HUMANOID
ANIMAL
DEAD
UNDEAD
GIANTHUMANOID
FROZEN
MONSTER
HasWeaponEquiped(O:Object*)
Description: Does the Object have a weapon equiped?
HaveAnySpells()
Returns: Boolean (True or False)
Description: Do I have any Spells?
HaveSpell(Integer X)
Returns: Boolean (True or False)
Description: Do I have spell X
HP(ObjectType X, Y)
Returns: Boolean (True or False)
Description: Xs current hit points are EXACTLY Y
Information needed: the value of Y (as a percentage). X is an ObjectType.
Development Notes: the specificID flag can be used to store the percentage
15
HPGT(ObjectType X, Y)
Returns: Boolean (True or False)
Description: Xs current hit points are GREATER THEN Y
Information needed: the value of Y (as a percentage) . X is an ObjectType.
Development Notes: the specificID flag can be used to store the percentage
HPLT(ObjectType X, Y)
Returns: Boolean (True or False)
Description: Xs current hit points are LESS THEN Y
Information needed: the value of Y (as a percentage) . X is an ObjectType.
Development Notes: the specificID flag can be used to store the percentage
HPPercent(ObjectType X, Integer: Y)
HPPercentGT(ObjectType X, Integer: Y)
HPPercentLT(ObjectType X, Integer: Y)
Returns: Boolean (True or False)
Description: Is the HP percent of X equal to Y?
InParty(ObjectType X)
Returns: Boolean (True or False)
Description: Is X in the Party
InWeaponRange(O:Object*)
Description: Is object in Weapon range?
LOS(ObjectType X, RANGE)
Returns: Boolean (True or False)
Description: Is Object X within RANGE search map blocks? Also, is there a clear line of
sight to X?
Information Needed: X is an ObjectType variable. RANGE is an integer count of
intervening blocks.
NotStateCheck(ObjectType X, Integer:Y)
Returns: Boolean (True or False)
Description: Is X in state Y
NumCreature(ObjectType X, Integer: Y)
NumCreatureGT(ObjectType X, Integer: Y)
NumCreatureLT(ObjectType X, Integer: Y)
Returns: Boolean (True or False)
Description: Is the number of Xs visible Equal to Y
16
17
18
True()
Description: Always returns True
19
20
Action Descriptions
Overall Development Note:
For any action that requires movement before the action, set the current action to move
(with the correct target) and set the next action as the desired action. In general, when a
movement is taking place, it will continue as long as the next action is No Action or the
target of the next action is the same as the target of the movement and the next action is
one that would require movement to the target.
Attack(ObjectType X, Style Y, ObjectType Z)
Description: Attack creature X using Style Y. If no X then attack Z by default.
Information Required: Y specifies the style of attack desired
DEFAULT
RANGED
MELEE
X is used to specify the target. Unless X includes an Instance, then
X will be used to indicate the preferred target. Once a target is selected, an Instance will
be obtained so that target dont constantly change. A second ObjectType Z is used to
specify general targets.
Development Notes: To do this, place all of type X or Z on the search map. Add Threat
radii. However, give the creatures of type X a much lower threat radius penalty.
AttackOneRound(Object X)
Description: Attack X for one round
AttackReevaluate(O:Target,I:Period)
Description: Attack target but reevaluate target every Period clock ticks
Continue( )
Description: Use the actions currently selected, but continue looking for more.
Information Required: none
EquipMostDamagingMelee()
Description: Equip melee weapon which does the most damage
EquipRanged()
Description: Equip a ranged weapon.
Formation(ObjectType Leader, Point Offset)
Description: follow the leader with offset of Offset.
GetItem(ResRef X)
Description: Get Item X and add it to inventory. Walk to the item if necessary.
Information Required: X is a ResRef
21
GiveOrder(ObjectType X, OrderID Y)
Description: Give order Y to X. X must have a trigger to respond to the order or nothing
will happen
Information Required: X specifies the creature(s) to send the order to. OrderID specifies
type of the order.
Development Notes: Send a ReceivedOrder trigger to X. Limit range to hearing range of
Targets
GroupAttack(Object X)
Description: Attack all of type X
Help()
Description: Call for help
Information Required: None
Development Notes: Send a Call for help Heard trigger to ALL creatures in hearing range
(regardless of which side they are on)
Hide()
Description: Hide in shadows / Move silently
Information required: None
Development Notes: This action should continue until an action that would counter this
occurs. That is you should be able to simultaneously move silently and move. Perhaps a
flag in the thief character should indicate that the character is moving silently.
Mouse Functions:
ClickLButtonPoint(Point X, SCROLLSPEED)
ClickRButtonPoint(Point X, SCROLLSPEED)
DoubleClickLButtonPoint(Point X, SCROLLSPEED)
DoubleClickRButtonPoint(Point X, SCROLLSPEED)
MoveCursorPoint(Point X, SCROLLSPEED)
ClickLButtonObject(ObjectType X, SCROLLSPEED)
ClickRButtonObject (ObjectType X, SCROLLSPEED)
DoubleClickLButtonObject (ObjectType X, SCROLLSPEED)
DoubleClickRButtonObject (ObjectType X, SCROLLSPEED)
Description: Click or move cursor to designated spot
MoveToObject(ObjectType X)
Description: Plot a path to X and begin moving
Information requires: X is an ObjectType
Development Notes: Once a path is obtained, it should be followed as long as no other
action is chosen. Further, if the Move To X action reoccurs then, if the two destinations
are equal, the existing path should be used.
MoveToOffset(Point: P)
Description: Move to P offset from current location
ProtectObject(ObjectType X)
Description: Protect Object X. Stay within a certain distance of X. Attack enemies in
range.
Information required: X is an ObjectType.
Development Notes: Center the In Range check around X. If outside range, move back.
ProtectPoint(Point X, Integer range)
Description: Protect X. Stay within a certain distance of X. Attack enemies in range.
Information required: X is an ObjectType.
Development Notes: Center the In Range check around X. If outside range, move back.
RandomWalk()
Description: Wander around randomly
RunAwayFrom(ObjectType X, Time)
Description: Run away from X for Time seconds.
Information required: X is an ObjectType, Time is in seconds
Development Notes:
SendTrigger(ObjectType X, Integer ID)
Description: Send trigger number ID to X.
SetInterrupt(Integer X)
Description: Turn interrupt on or off
Shout(Integer Y)
Description: Send all in range Heard trigger
SmallWait(Integer X)
Description: Enter ready state for X 15ths of a second
Spell(ObjectType X, SpellID Y)
Description: Cast the spell Y on target X.
Information Required:
The desired spell can be specified as follows:
CLERIC_AID
CLERIC_ANIMAL_SUMMONING_1
CLERIC_ANIMAL_SUMMONING_2
CLERIC_ANIMATE_DEAD
CLERIC_BARKSKIN
CLERIC_BLESS
CLERIC_CALL_LIGHNING
CLERIC_CHANT
CLERIC_CHARM_PERSON
22
CLERIC_COMMAND
CLERIC_CURE_CRITICAL_WOUNDS
CLERIC_CURE_LIGHT_WOUNDS
CLERIC_CURE_SERIOUS_WOUNDS
CLERIC_DETECT_EVIL
CLERIC_DISPEL_MAGIC
CLERIC_DRAW_UPON_HOLY_MIGHT
CLERIC_ENTANGLE
CLERIC_FIND_TRAPS
CLERIC_FLAME_BLADE
CLERIC_FLAME_STRIKE
CLERIC_FREE_ACTION
CLERIC_GLYPH_OF_WARDING
CLERIC_GOOD_BERRIES
CLERIC_HOLD_ANIMAL
CLERIC_HOLD_PERSON
CLERIC_INVISIBILITY_PURGE
CLERIC_KNOW_ALIGNMENT
CLERIC_MAGIC_STONE
CLERIC_MISCAST_MAGIC
CLERIC_NEUTRALIZE_POISON
CLERIC_PROTECT_FROM_EVIL
CLERIC_PROTECTION_FROM_FIRE
CLERIC_RAISE_DEAD
CLERIC_REMOVE_CURSE
CLERIC_REMOVE_FEAR
CLERIC_REMOVE_PARALYSIS
CLERIC_RESIST_FIRE
CLERIC_RIGID_THINKING
CLERIC_SANCUTARY
CLERIC_SHILLELAGH
CLERIC_SILENCE_15_FOOT
CLERIC_SLOW_POISON
CLERIC_SPIRITUAL_HAMMER
CLERIC_STRENGTH_OF_ONE
WIZARD_AGANNAZAR_SCORCHER
WIZARD_ANIMATE_DEAD
WIZARD_ARMOR
WIZARD_BLINDNESS
WIZARD_BLUR
WIZARD_BURNING_HANDS
WIZARD_CHARM_PERSON
WIZARD_CHILL_TOUCH
WIZARD_CHROMATIC_ORB
WIZARD_CLAIRVOYANCE
WIZARD_CLOUDKILL
WIZARD_COLOR_SPRAY
WIZARD_CONFUSION
23
WIZARD_DETECT_EVIL
WIZARD_DETECT_INVISIBILITY
WIZARD_DIMENSION_DOOR
WIZARD_DIRE_CHARM
WIZARD_DISPEL_MAGIC
WIZARD_FIREBALL
WIZARD_FLAME_ARROW
WIZARD_FRIENDS
WIZARD_GHOST_ARMOR
WIZARD_GHOUL_TOUCH
WIZARD_GREASE
WIZARD_HASTE
WIZARD_HOLD_PERSON
WIZARD_HOLD_PORTAL
WIZARD_HORROR
WIZARD_IDENTIFY
WIZARD_INFRAVISION
WIZARD_INVISIBILITY
WIZARD_INVISIBILITY_10_FOOT
WIZARD_KNOCK
WIZARD_KNOW_ALIGNMENT
WIZARD_LARLOCH_MINOR_DRAIN
WIZARD_LIGHTNING_BOLT
WIZARD_LUCK
WIZARD_MAGIC_MISSILE
WIZARD_MELF_ACID_ARROW
WIZARD_MINOR_GLOBE_OF_INVULNERABILITY
WIZARD_MIRROR_IMAGE
WIZARD_MONSTER_SUMMONING_1
WIZARD_MONSTER_SUMMONING_2
WIZARD_MONSTER_SUMMONING_3
WIZARD_NON_DETECTION
WIZARD_PROTECTION_FROM_EVIL
WIZARD_PROTECTION_FROM_NORMAL_MISSILES
WIZARD_PROTECTION_FROM_PETRIFICATION
WIZARD_RESIST_FEAR
WIZARD_SHADOW_DOOR
WIZARD_SHIELD
WIZARD_SHOCKING_GRASP
WIZARD_SKULL_TRAP
WIZARD_SLEEP
WIZARD_SLOW
WIZARD_STINKING_CLOUD
WIZARD_STRENGTH
WIZARD_VAMPIRIC_TOUCH
WIZARD_VOCALIZE
WIZARD_WEB
24
25
Weight
weight is a number between 1 and 100.
Condition
Trigger1
Trigger2
Response
Action1
Action2
Action3
Trigger
Trigger(Parameter1, Parameter2, )
Action
Action(Parameter1,Parameter2, )
ObjectType
SpecialCase1( SpecialCase2( SpecialCase3( SpecialCase4()))))
or
26
27
NAME
or
[Allegiance . General . Race . Class . Specifics]
Example File
IF
Class(LastAttackerOf(Myself), MAGE)
HPGT(Myself,50)
THEN
RESPONSE #80
Attack(LastAttackerOf(Myself),MELEE)
RESPONSE #40
Help()
RunAway()
END
IF
Exists(LastAttackerOf(ProtectedBy(Myself))
THEN
RESPONSE #100
Attack(LastAttackerOf(ProtectedBy(Myself)), RANGED)
END
IF
HPLT(MostDamagedOf(GroupOf(Myself)),25)
THEN
RESPONSE #76
Spell(MostDamagedOf(GroupOf(Myself)),MOST_HEALING)
Protect(MostDamagedOf(GroupOf(Myself)))
RESPONSE #76
Attack(LastAttackerOf(MostDamagedOf(GroupOf(Myself))),RANGED)
END
IF
See(NearestEnemyOf(Myself))
THEN
RESPONSE #54
Attack(NerestEnemyOf(Myself), DEFAULT)
END
Explanation:
1. If Im attacked by a mage and my hit points are more then 50%, either attack the mage
using melee (66.7%) OR yell for help and run away (33.3%)
2. If the person Im protecting is attacked, attack their attacker using a ranged attack
(100%)
28
3. If the most damaged person in my group has less then 25% of his hit points, then
either cast the most powerful healing spell on him and start protecting them (50%) OR
attack the last person who attacked them (50%).
4. Attack the nearest enemy using my default attack. (100%)
Define ANYONE as the ObjectType with all 0s. Define ENEMY as the ObjectType with
all 0s except EnemyAlly set to enemy.