Implemented many new triggers, actions
[gemrb.git] / gemrb / plugins / Core / GameScript.h
blob2ce3ec7b6183cd196fcfe766c75934f4b7e31a00
1 /* GemRB - Infinity Engine Emulator
2 * Copyright (C) 2003 The GemRB Project
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 * $Header: /data/gemrb/cvs2svn/gemrb/gemrb/gemrb/plugins/Core/GameScript.h,v 1.181 2005/05/28 19:02:13 avenger_teambg Exp $
22 class GameScript;
23 class Action;
25 #ifndef GAMESCRIPT_H
26 #define GAMESCRIPT_H
28 #include "DataStream.h"
29 #include "Variables.h"
30 #include "SymbolMgr.h"
31 #include "Actor.h"
33 //displaystring flags
34 #define DS_WAIT 1
35 #define DS_HEAD 2
36 #define DS_CONSOLE 4
37 #define DS_CONST 8
38 #define DS_NONAME 16
40 //diffmode (iwd2)
41 #define DM_EQUAL 1
42 #define DM_LESS 2
43 #define DM_GREATER 3
45 //attack core flags
46 #define AC_REEVALUATE 1
48 #define MAX_OBJECT_FIELDS 10
49 #define MAX_NESTING 5
51 #define GSASSERT(f,c) \
52 if(!(f)) \
53 { \
54 printf("Assertion failed: %s [0x%08lX] Line %d",#f, c, __LINE__); \
55 abort(); \
58 #ifdef WIN32
60 #ifdef GEM_BUILD_DLL
61 #define GEM_EXPORT __declspec(dllexport)
62 #else
63 #define GEM_EXPORT __declspec(dllimport)
64 #endif
66 #else
67 #define GEM_EXPORT
68 #endif
70 typedef std::vector<ieDword> SrcVector;
72 typedef struct targettype {
73 Actor *actor;
74 unsigned int distance;
75 } targettype;
77 typedef std::list<targettype> targetlist;
79 class GEM_EXPORT Targets {
80 public:
81 Targets()
84 ~Targets()
86 Clear();
88 private:
89 std::list<targettype> objects;
90 public:
91 int Count() const;
92 targettype *RemoveTargetAt(targetlist::iterator &m);
93 targettype *GetNextTarget(targetlist::iterator &m);
94 targettype *GetLastTarget();
95 targettype *GetFirstTarget(targetlist::iterator &m);
96 Actor *GetTarget(unsigned int index);
97 void AddTarget(Actor* actor, unsigned int distance);
98 void Clear();
101 class GEM_EXPORT Object {
102 public:
103 Object()
105 objectName[0] = 0;
107 memset( objectFields, 0, MAX_OBJECT_FIELDS * sizeof( int ) );
108 memset( objectFilters, 0, MAX_NESTING * sizeof( int ) );
109 memset( objectRect, 0, 4 * sizeof( int ) );
111 canary = (unsigned long) 0xdeadbeef;
113 ~Object()
116 public:
117 int objectFields[MAX_OBJECT_FIELDS];
118 int objectFilters[MAX_NESTING];
119 int objectRect[4];
120 char objectName[65];
121 private:
122 volatile unsigned long canary;
123 public:
124 void Dump()
126 int i;
128 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
129 if(objectName[0]) {
130 printf("Object: %s\n",objectName);
131 return;
133 printf("IDS Targeting: ");
134 for(i=0;i<MAX_OBJECT_FIELDS;i++) {
135 printf("%d ",objectFields[i]);
137 printf("\n");
138 printf("Filters: ");
139 for(i=0;i<MAX_NESTING;i++) {
140 printf("%d ",objectFilters[i]);
142 printf("\n");
145 void Release()
147 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
148 canary = 0xdddddddd;
149 delete this;
153 class GEM_EXPORT Trigger {
154 public:
155 Trigger()
157 objectParameter = NULL;
158 RefCount = 1;
159 string0Parameter[0] = 0;
160 string1Parameter[0] = 0;
161 pointParameter.x = 0;
162 pointParameter.y = 0;
163 canary = (unsigned long) 0xdeadbeef;
165 ~Trigger()
167 if (objectParameter) {
168 objectParameter->Release();
169 objectParameter = NULL;
172 public:
173 unsigned short triggerID;
174 int int0Parameter;
175 int flags;
176 int int1Parameter;
177 int int2Parameter;
178 Point pointParameter;
179 char string0Parameter[65];
180 char string1Parameter[65];
181 Object* objectParameter;
182 private:
183 int RefCount;
184 volatile unsigned long canary;
185 public:
186 void Release()
188 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
189 if (!RefCount) {
190 printf( "WARNING!!! Double Freeing in %s: Line %d\n", __FILE__,
191 __LINE__ );
192 abort();
194 RefCount--;
195 if (!RefCount) {
196 canary = 0xdddddddd;
197 delete this;
200 void IncRef()
202 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
203 RefCount++;
204 if (RefCount >= 4000) {
205 printf( "Refcount increased to: %d in trigger\n", RefCount );
206 abort();
211 class GEM_EXPORT Condition {
212 public:
213 Condition()
215 RefCount = 1;
216 triggers = NULL;
217 triggersCount = 0;
218 canary = (unsigned long) 0xdeadbeef;
220 ~Condition()
222 if (!triggers) {
223 return;
225 for (int c = 0; c < triggersCount; c++) {
226 if (triggers[c]) {
227 triggers[c]->Release();
228 triggers[c] = NULL;
231 delete[] triggers;
233 public:
234 unsigned short triggersCount;
235 Trigger** triggers;
236 private:
237 int RefCount;
238 volatile unsigned long canary;
239 public:
240 void Release()
242 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
243 if (!RefCount) {
244 printf( "WARNING!!! Double Freeing in %s: Line %d\n", __FILE__,
245 __LINE__ );
246 abort();
248 RefCount--;
249 if (!RefCount) {
250 canary = 0xdddddddd;
251 delete this;
254 void IncRef()
256 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
257 RefCount++;
258 if (RefCount >= 4000) {
259 printf( "Refcount increased to: %d in condition\n", RefCount );
260 abort();
265 class GEM_EXPORT Action {
266 public:
267 Action(bool autoFree)
269 actionID = 0;
270 objects[0] = NULL;
271 objects[1] = NULL;
272 objects[2] = NULL;
273 string0Parameter[0] = 0;
274 string1Parameter[0] = 0;
275 int0Parameter = 0;
276 pointParameter.x = 0;
277 pointParameter.y = 0;
278 int1Parameter = 0;
279 int2Parameter = 0;
280 if(autoFree) {
281 RefCount = 0;
283 else {
284 RefCount = 1;
286 canary = (unsigned long) 0xdeadbeef;
288 ~Action()
290 for (int c = 0; c < 3; c++) {
291 if (objects[c]) {
292 objects[c]->Release();
293 objects[c] = NULL;
297 public:
298 unsigned short actionID;
299 Object* objects[3];
300 int int0Parameter;
301 Point pointParameter;
302 int int1Parameter;
303 int int2Parameter;
304 char string0Parameter[65];
305 char string1Parameter[65];
306 private:
307 int RefCount;
308 volatile unsigned long canary;
309 public:
310 void Dump()
312 int i;
314 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
315 printf("String1: %s, String2: %s\n", string0Parameter?string0Parameter:"<NULL>", string1Parameter?string1Parameter:"<NULL>");
316 for (i=0;i<3;i++) {
317 if (objects[i]) {
318 printf( "%d. ",i+1);
319 objects[i]->Dump();
320 } else {
321 printf( "%d. Object - NULL\n",i+1);
326 void Release()
328 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
329 if (!RefCount) {
330 printf( "WARNING!!! Double Freeing in %s: Line %d\n", __FILE__,
331 __LINE__ );
332 abort();
334 RefCount--;
335 if (!RefCount) {
336 canary = 0xdddddddd;
337 delete this;
340 void IncRef()
342 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
343 RefCount++;
344 if (RefCount >= 4000) {
345 printf( "Refcount increased to: %d in action %d\n", RefCount,
346 actionID );
347 abort();
352 class GEM_EXPORT Response {
353 public:
354 Response()
356 RefCount = 1;
357 actions = NULL;
358 weight = 0;
359 actionsCount = 0;
360 canary = (unsigned long) 0xdeadbeef;
362 ~Response()
364 if (!actions) {
365 return;
367 for (int c = 0; c < actionsCount; c++) {
368 if (actions[c]) {
369 actions[c]->Release();
370 actions[c] = NULL;
373 delete[] actions;
375 public:
376 unsigned char weight;
377 unsigned char actionsCount;
378 Action** actions;
379 private:
380 int RefCount;
381 volatile unsigned long canary;
382 public:
383 void Release()
385 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
386 if (!RefCount) {
387 printf( "WARNING!!! Double Freeing in %s: Line %d\n", __FILE__,
388 __LINE__ );
389 abort();
391 RefCount--;
392 if (!RefCount) {
393 canary = 0xdddddddd;
394 delete this;
397 void IncRef()
399 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
400 RefCount++;
401 if (RefCount >= 4000) {
402 printf( "Refcount increased to: %d in response\n", RefCount );
403 abort();
408 class GEM_EXPORT ResponseSet {
409 public:
410 ResponseSet()
412 RefCount = 1;
413 responses = NULL;
414 responsesCount = 0;
415 canary = (unsigned long) 0xdeadbeef;
417 ~ResponseSet()
419 if (!responses) {
420 return;
422 for (int b = 0; b < responsesCount; b++) {
423 responses[b] -> Release();
424 responses[b] = NULL;
426 delete[] responses;
428 public:
429 unsigned short responsesCount;
430 Response** responses;
431 private:
432 int RefCount;
433 volatile unsigned long canary;
434 public:
435 void Release()
437 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
438 if (!RefCount) {
439 printf( "WARNING!!! Double Freeing in %s: Line %d\n", __FILE__,
440 __LINE__ );
441 abort();
443 RefCount--;
444 if (!RefCount) {
445 canary = 0xdddddddd;
446 delete this;
449 void IncRef()
451 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
452 RefCount++;
453 if (RefCount >= 4000) {
454 printf( "Refcount increased to: %d\n", RefCount );
455 abort();
460 class GEM_EXPORT ResponseBlock {
461 public:
462 ResponseBlock()
464 condition = NULL;
465 responseSet = NULL;
466 canary = (unsigned long) 0xdeadbeef;
468 ~ResponseBlock()
470 if (condition) {
471 condition->Release();
472 condition = NULL;
474 if (responseSet) {
475 responseSet->Release();
476 responseSet = NULL;
479 public:
480 Condition* condition;
481 ResponseSet* responseSet;
482 private:
483 volatile unsigned long canary;
484 public:
485 void Release()
487 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
488 canary = 0xdddddddd;
489 delete this;
493 class GEM_EXPORT Script {
494 public:
495 Script()
497 canary = (unsigned long) 0xdeadbeef;
498 responseBlocks = NULL;
499 responseBlocksCount = 0;
501 ~Script()
503 FreeResponseBlocks();
505 void AllocateBlocks(unsigned int count)
507 if (!count) {
508 FreeResponseBlocks();
509 responseBlocks = NULL;
510 responseBlocksCount = 0;
512 responseBlocks = new ResponseBlock * [count];
513 responseBlocksCount = count;
515 private:
516 void FreeResponseBlocks()
518 if (!responseBlocks) {
519 return;
521 for (unsigned int i = 0; i < responseBlocksCount; i++) {
522 if (responseBlocks[i]) {
523 responseBlocks[i]->Release();
524 responseBlocks[i] = NULL;
527 delete[] responseBlocks;
529 public:
530 unsigned int responseBlocksCount;
531 ResponseBlock** responseBlocks;
532 private:
533 volatile unsigned long canary;
534 public:
535 void Release()
537 GSASSERT( canary == (unsigned long) 0xdeadbeef, canary );
538 canary = 0xdddddddd;
539 delete this;
543 typedef int (* TriggerFunction)(Scriptable*, Trigger*);
544 typedef void (* ActionFunction)(Scriptable*, Action*);
545 typedef Targets* (* ObjectFunction)(Scriptable *, Targets*);
546 typedef int (* IDSFunction)(Actor *, int parameter);
548 #define TF_NONE 0
549 #define TF_CONDITION 1 //this isn't a trigger, just a condition (0x4000)
550 #define TF_MERGESTRINGS 8 //same value as actions' mergestring
552 struct TriggerLink {
553 const char* Name;
554 TriggerFunction Function;
555 short Flags;
558 //createcreature flags
559 #define CC_OFFSET 1
560 #define CC_OBJECT 2
561 #define CC_OFFSCREEN 3
562 #define CC_MASK 3
563 #define CC_CHECK_IMPASSABLE 4 //adjust position
564 #define CC_PLAY_ANIM 8 //play animation
565 #define CC_STRING1 16 //resref is in second string
567 //begindialog flags
568 #define BD_STRING0 0
569 #define BD_TARGET 1
570 #define BD_SOURCE 2
571 #define BD_RESERVED 3 //playerX resref
572 #define BD_INTERACT 4 //banter dialogs
573 #define BD_LOCMASK 7 //where is the dialog resref
574 #define BD_TALKCOUNT 8 //increases talkcount
575 #define BD_SETDIALOG 16 //also sets dialog (for string0)
576 #define BD_CHECKDIST 32 //checks distance, if needs, walks up
577 #define BD_OWN 64 //source == target, works for player only
578 #define BD_INTERRUPT 128 //interrupts action
579 #define BD_NUMERIC 256 //target is numeric
581 #define AF_NONE 0
582 #define AF_INSTANT 1
583 #define AF_CONTINUE 2
584 #define AF_MASK 3 //none, instant or continue
585 #define AF_BLOCKING 4
586 #define AF_MERGESTRINGS 8
587 //we could use this flag to restrict player scripts from using dangerous
588 //opcodes, it would be a very useful and easy to implement feature!
589 #define AF_RESTRICTED 16
590 //#define AF_RESTRICTED_LEVEL2 32 //maybe we could use 2 bits for this???
591 #define AF_SCRIPTLEVEL 64 //this hack will transfer scriptlevel to int0parameter at runtime (changecurrentscript relies on it)
593 struct ActionLink {
594 const char* Name;
595 ActionFunction Function;
596 short Flags;
599 struct ObjectLink {
600 const char* Name;
601 ObjectFunction Function;
604 struct IDSLink {
605 const char* Name;
606 IDSFunction Function;
609 #define MAX_TRIGGERS 0xFF
610 #define MAX_ACTIONS 400
611 #define MAX_OBJECTS 128
613 extern void SetScriptDebugMode(int arg);
615 class GEM_EXPORT GameScript {
616 public:
617 Variables* locals;
618 Script* script;
619 Scriptable* MySelf;
620 unsigned long scriptRunDelay;
621 bool endReached;
622 int scriptlevel;
623 void Update();
624 void EvaluateAllBlocks();
625 private: //Internal Functions
626 Script* CacheScript(ieResRef ResRef);
627 ResponseBlock* ReadResponseBlock(DataStream* stream);
628 Condition* ReadCondition(DataStream* stream);
629 ResponseSet* ReadResponseSet(DataStream* stream);
630 Response* ReadResponse(DataStream* stream);
631 Trigger* ReadTrigger(DataStream* stream);
632 Object* DecodeObject(const char* line);
633 bool EvaluateCondition(Scriptable* Sender, Condition* condition);
634 static int EvaluateTrigger(Scriptable* Sender, Trigger* trigger);
635 int ExecuteResponseSet(Scriptable* Sender, ResponseSet* rS);
636 int ExecuteResponse(Scriptable* Sender, Response* rE);
637 static Targets* EvaluateObject(Scriptable* Sender, Object* oC);
638 static int ParseInt(const char*& src);
639 static void ParseString(const char*& src, char* tmp);
640 static void DisplayStringCore(Scriptable* Sender, int Strref, int flags);
641 static int ValidForDialogCore(Scriptable* Sender, Actor* target);
642 private:
643 static void CreateVisualEffectCore(Scriptable *Sender, Point &position, const char *effect);
644 static int SeeCore(Scriptable* Sender, Trigger* parameters, int flags);
645 static void BeginDialog(Scriptable* Sender, Action* parameters, int flags);
646 static void CreateCreatureCore(Scriptable* Sender, Action* parameters,
647 int flags);
648 static int MoveItemCore(Scriptable *Sender, Scriptable *Target, const char *resref, int flags);
649 static void AttackCore(Scriptable *actor, Scriptable *target, Action *parameters, int flags);
650 static Action *GenerateActionCore(const char *src, const char *str, int acIndex, bool autoFree);
651 static Trigger *GenerateTriggerCore(const char *src, const char *str, int trIndex, int negate);
652 static Trigger* GenerateTrigger(char* String);
653 /* returns true if actor matches the object specs. */
654 static bool MatchActor(Scriptable *Sender, Actor* actor, Object* oC);
655 /* returns the number of actors matching the IDS targeting */
656 static int GetObjectCount(Scriptable* Sender, Object* oC);
657 static Scriptable* GetActorFromObject(Scriptable* Sender, Object* oC);
658 static int GetHappiness(Scriptable* Sender, int reputation);
659 static int GetHPPercent(Scriptable* Sender);
660 static Targets *XthNearestOf(Targets *parameters, int count);
661 static Targets *XthNearestEnemyOf(Targets *parameters, int count);
662 static Targets *XthNearestEnemyOfType(Scriptable *origin, Targets *parameters, int count);
664 //static unsigned char GetOrient(Point &s, Point &d);
665 private: //Internal variables
666 unsigned long lastRunTime;
667 unsigned long scriptType;
668 private: //Script Internal Variables
669 ieResRef Name;
670 bool continueExecution;
671 bool freeLocals;
672 public:
673 GameScript(ieResRef ResRef, unsigned char ScriptType,
674 Variables* local = NULL, int ScriptLevel = 0);
675 ~GameScript();
676 const char *GetName() { return this?Name:"<NULL>"; }
677 static void ReplaceMyArea(Scriptable* Sender, char* newVarName);
678 static ieDword CheckVariable(Scriptable* Sender, const char* VarName, const char* Context);
679 static ieDword CheckVariable(Scriptable* Sender, const char* VarName);
681 static void SetVariable(Scriptable* Sender, const char* VarName,
682 const char* Context, ieDword value);
683 static void SetVariable(Scriptable* Sender, const char* VarName, ieDword value);
684 static void ExecuteString(Scriptable* Sender, char* String);
685 static int EvaluateString(Scriptable* Sender, char* String);
686 static void ExecuteAction(Scriptable* Sender, Action* aC);
687 static Action* GenerateAction(char* String, bool autoFree=false);
688 static void MoveBetweenAreasCore(Actor* actor, const char *area, Point &position, int face, bool adjust);
689 public: //Script Functions
690 static int ID_Alignment(Actor *actor, int parameter);
691 static int ID_Allegiance(Actor *actor, int parameter);
692 static int ID_AVClass(Actor *actor, int parameter);
693 static int ID_Class(Actor *actor, int parameter);
694 static int ID_ClassMask(Actor *actor, int parameter);
695 static int ID_Faction(Actor *actor, int parameter);
696 static int ID_Gender(Actor *actor, int parameter);
697 static int ID_General(Actor *actor, int parameter);
698 static int ID_Race(Actor *actor, int parameter);
699 static int ID_Specific(Actor *actor, int parameter);
700 static int ID_Subrace(Actor *actor, int parameter);
701 static int ID_Team(Actor *actor, int parameter);
703 //Triggers
704 static int ActionListEmpty(Scriptable* Sender, Trigger* parameters);
705 static int Acquired(Scriptable* Sender, Trigger* parameters);
706 static int Alignment(Scriptable* Sender, Trigger* parameters);
707 static int Allegiance(Scriptable* Sender, Trigger* parameters);
708 static int AnimationID(Scriptable* Sender, Trigger* parameters);
709 static int AnimState(Scriptable* Sender, Trigger* parameters);
710 static int AnyPCOnMap(Scriptable* Sender, Trigger* parameters);
711 static int AreaCheck(Scriptable* Sender, Trigger* parameter);
712 static int AreaCheckObject(Scriptable* Sender, Trigger* parameter);
713 static int AreaFlag(Scriptable* Sender, Trigger* parameter);
714 static int AreaRestDisabled(Scriptable* Sender, Trigger* parameter);
715 static int AreaType(Scriptable* Sender, Trigger* parameter);
716 static int AtLocation(Scriptable* Sender, Trigger* parameter);
717 static int BitCheck(Scriptable* Sender, Trigger* parameters);
718 static int BitCheckExact(Scriptable* Sender, Trigger* parameters);
719 static int BitGlobal_Trigger(Scriptable* Sender, Trigger* parameters);
720 static int BreakingPoint(Scriptable* Sender, Trigger* parameters);
721 static int CalledByName(Scriptable* Sender, Trigger* parameters);
722 static int CharName(Scriptable* Sender, Trigger* parameters);
723 static int ChargeCount(Scriptable* Sender, Trigger* parameters);
724 static int CheckDoorFlags(Scriptable* Sender, Trigger* parameters);
725 static int CheckPartyAverageLevel(Scriptable* Sender, Trigger* parameters);
726 static int CheckPartyLevel(Scriptable* Sender, Trigger* parameters);
727 static int CheckStat(Scriptable* Sender, Trigger* parameters);
728 static int CheckStatGT(Scriptable* Sender, Trigger* parameters);
729 static int CheckStatLT(Scriptable* Sender, Trigger* parameters);
730 static int Class(Scriptable* Sender, Trigger* parameters);
731 static int ClassEx(Scriptable* Sender, Trigger* parameters);
732 static int ClassLevel(Scriptable* Sender, Trigger* parameters);
733 static int ClassLevelGT(Scriptable* Sender, Trigger* parameters);
734 static int ClassLevelLT(Scriptable* Sender, Trigger* parameters);
735 static int Clicked(Scriptable* Sender, Trigger* parameters);
736 static int CombatCounter(Scriptable* Sender, Trigger* parameters);
737 static int CombatCounterGT(Scriptable* Sender, Trigger* parameters);
738 static int CombatCounterLT(Scriptable* Sender, Trigger* parameters);
739 static int Contains(Scriptable* Sender, Trigger* parameters);
740 static int DamageTaken(Scriptable* Sender, Trigger* parameters);
741 static int DamageTakenGT(Scriptable* Sender, Trigger* parameters);
742 static int DamageTakenLT(Scriptable* Sender, Trigger* parameters);
743 static int Dead(Scriptable* Sender, Trigger* parameters);
744 static int Die(Scriptable* Sender, Trigger* parameters);
745 static int Difficulty(Scriptable* Sender, Trigger* parameters);
746 static int DifficultyGT(Scriptable* Sender, Trigger* parameters);
747 static int DifficultyLT(Scriptable* Sender, Trigger* parameters);
748 static int Entered(Scriptable* Sender, Trigger* parameters);
749 static int EntirePartyOnMap(Scriptable* Sender, Trigger* parameters);
750 static int Exists(Scriptable* Sender, Trigger* parameters);
751 static int ExtraProficiency(Scriptable* Sender, Trigger* parameters);
752 static int ExtraProficiencyGT(Scriptable* Sender, Trigger* parameters);
753 static int ExtraProficiencyLT(Scriptable* Sender, Trigger* parameters);
754 static int Faction(Scriptable* Sender, Trigger* parameters);
755 static int FallenPaladin(Scriptable* Sender, Trigger* parameters);
756 static int FallenRanger(Scriptable* Sender, Trigger* parameters);
757 static int False(Scriptable* Sender, Trigger* parameters);
758 static int Frame(Scriptable* Sender, Trigger* parameters);
759 static int Gender(Scriptable* Sender, Trigger* parameters);
760 static int General(Scriptable* Sender, Trigger* parameters);
761 static int G_Trigger(Scriptable* Sender, Trigger* parameters);
762 static int Global(Scriptable* Sender, Trigger* parameters);
763 static int GlobalAndGlobal_Trigger(Scriptable* Sender, Trigger* parameters);
764 static int GlobalBAndGlobal_Trigger(Scriptable* Sender, Trigger* parameters);
765 static int GlobalBAndGlobalExact(Scriptable* Sender, Trigger* parameters);
766 static int GlobalBitGlobal_Trigger(Scriptable* Sender, Trigger* parameters);
767 static int GlobalGT(Scriptable* Sender, Trigger* parameters);
768 static int GlobalGTGlobal(Scriptable* Sender, Trigger* parameters);
769 static int GlobalLT(Scriptable* Sender, Trigger* parameters);
770 static int GlobalLTGlobal(Scriptable* Sender, Trigger* parameters);
771 static int GlobalOrGlobal_Trigger(Scriptable* Sender, Trigger* parameters);
772 static int GlobalsEqual(Scriptable* Sender, Trigger* parameters);
773 static int GlobalsGT(Scriptable* Sender, Trigger* parameters);
774 static int GlobalsLT(Scriptable* Sender, Trigger* parameters);
775 static int GlobalTimerExact(Scriptable* Sender, Trigger* parameters);
776 static int GlobalTimerExpired(Scriptable* Sender, Trigger* parameters);
777 static int GlobalTimerNotExpired(Scriptable* Sender, Trigger* parameters);
778 static int GGT_Trigger(Scriptable* Sender, Trigger* parameters);
779 static int GLT_Trigger(Scriptable* Sender, Trigger* parameters);
780 static int Happiness(Scriptable* Sender, Trigger* parameters);
781 static int HappinessGT(Scriptable* Sender, Trigger* parameters);
782 static int HappinessLT(Scriptable* Sender, Trigger* parameters);
783 static int HasInnateAbility(Scriptable* Sender, Trigger* parameters);
784 static int HasItem(Scriptable* Sender, Trigger* parameters);
785 static int HasItemEquipped(Scriptable* Sender, Trigger* parameters);
786 static int HasItemSlot(Scriptable* Sender, Trigger* parameters);
787 static int HasWeaponEquipped(Scriptable* Sender, Trigger* parameters);
788 static int HaveAnySpells(Scriptable* Sender, Trigger* parameters);
789 static int HaveSpellParty(Scriptable* Sender, Trigger* parameters);
790 static int HaveSpell(Scriptable* Sender, Trigger* parameters);
791 static int Heard(Scriptable* Sender, Trigger* parameters);
792 static int Help_Trigger(Scriptable* Sender, Trigger* parameters);
793 static int HitBy(Scriptable* Sender, Trigger* parameters);
794 static int HotKey(Scriptable* Sender, Trigger* parameters);
795 static int HP(Scriptable* Sender, Trigger* parameters);
796 static int HPGT(Scriptable* Sender, Trigger* parameters);
797 static int HPLost(Scriptable* Sender, Trigger* parameters);
798 static int HPLostGT(Scriptable* Sender, Trigger* parameters);
799 static int HPLostLT(Scriptable* Sender, Trigger* parameters);
800 static int HPLT(Scriptable* Sender, Trigger* parameters);
801 static int HPPercent(Scriptable* Sender, Trigger* parameters);
802 static int HPPercentGT(Scriptable* Sender, Trigger* parameters);
803 static int HPPercentLT(Scriptable* Sender, Trigger* parameters);
804 static int InActiveArea(Scriptable* Sender, Trigger* parameter);
805 static int InCutSceneMode(Scriptable *Sender, Trigger* parameter);
806 static int InMyArea(Scriptable* Sender, Trigger* parameter);
807 static int InParty(Scriptable* Sender, Trigger* parameters);
808 static int InPartyAllowDead(Scriptable* Sender, Trigger* parameters);
809 static int InPartySlot(Scriptable* Sender, Trigger* parameters);
810 static int InteractingWith(Scriptable* Sender, Trigger* parameters);
811 static int Internal(Scriptable* Sender, Trigger* parameters);
812 static int InternalGT(Scriptable* Sender, Trigger* parameters);
813 static int InternalLT(Scriptable* Sender, Trigger* parameters);
814 static int InventoryFull(Scriptable* Sender, Trigger* parameter);
815 static int InWeaponRange(Scriptable* Sender, Trigger* parameter);
816 static int IsAClown(Scriptable* Sender, Trigger* parameters);
817 static int IsActive(Scriptable* Sender, Trigger* parameters);
818 static int IsCreatureAreaFlag( Scriptable* Sender, Trigger* parameters);
819 static int IsGabber(Scriptable* Sender, Trigger* parameters);
820 static int IsExtendedNight(Scriptable* Sender, Trigger* parameters);
821 static int IsFacingObject(Scriptable* Sender, Trigger* parameters);
822 static int IsFacingSavedRotation(Scriptable* Sender, Trigger* parameters);
823 static int IsLocked(Scriptable* Sender, Trigger* parameters);
824 static int IsPlayerNumber( Scriptable* Sender, Trigger* parameters);
825 static int IsRotation(Scriptable* Sender, Trigger* parameters);
826 static int IsTeamBitOn(Scriptable* Sender, Trigger* parameters);
827 static int IsValidForPartyDialog(Scriptable* Sender, Trigger* parameters);
828 static int ItemIsIdentified(Scriptable* Sender, Trigger* parameters);
829 static int Kit(Scriptable* Sender, Trigger* parameters);
830 static int LastMarkedObject_Trigger(Scriptable* Sender, Trigger* parameters);
831 static int Level(Scriptable* Sender, Trigger* parameters);
832 static int LevelGT(Scriptable* Sender, Trigger* parameters);
833 static int LevelLT(Scriptable* Sender, Trigger* parameters);
834 static int LevelParty(Scriptable* Sender, Trigger* parameters);
835 static int LevelPartyGT(Scriptable* Sender, Trigger* parameters);
836 static int LevelPartyLT(Scriptable* Sender, Trigger* parameters);
837 static int LocalsEqual(Scriptable* Sender, Trigger* parameters);
838 static int LocalsGT(Scriptable* Sender, Trigger* parameters);
839 static int LocalsLT(Scriptable* Sender, Trigger* parameters);
840 static int LOS(Scriptable* Sender, Trigger* parameters);
841 static int Morale(Scriptable* Sender, Trigger* parameters);
842 static int MoraleGT(Scriptable* Sender, Trigger* parameters);
843 static int MoraleLT(Scriptable* Sender, Trigger* parameters);
844 static int NamelessBitTheDust(Scriptable* Sender, Trigger* parameters);
845 static int NearbyDialog(Scriptable* Sender, Trigger* parameters);
846 static int NearLocation(Scriptable* Sender, Trigger* parameters);
847 static int NearSavedLocation(Scriptable* Sender, Trigger* parameters);
848 static int NotStateCheck(Scriptable* Sender, Trigger* parameters);
849 static int NullDialog(Scriptable* Sender, Trigger* parameters);
850 static int NumCreatures(Scriptable* Sender, Trigger* parameters);
851 static int NumCreaturesGT(Scriptable* Sender, Trigger* parameters);
852 static int NumCreaturesLT(Scriptable* Sender, Trigger* parameters);
853 static int NumCreatureVsParty(Scriptable* Sender, Trigger* parameters);
854 static int NumCreatureVsPartyGT(Scriptable* Sender, Trigger* parameters);
855 static int NumCreatureVsPartyLT(Scriptable* Sender, Trigger* parameters);
856 static int NumDead(Scriptable* Sender, Trigger* parameters);
857 static int NumDeadGT(Scriptable* Sender, Trigger* parameters);
858 static int NumDeadLT(Scriptable* Sender, Trigger* parameters);
859 static int NumItems(Scriptable* Sender, Trigger* parameters);
860 static int NumItemsGT(Scriptable* Sender, Trigger* parameters);
861 static int NumItemsLT(Scriptable* Sender, Trigger* parameters);
862 static int NumItemsParty(Scriptable* Sender, Trigger* parameters);
863 static int NumItemsPartyGT(Scriptable* Sender, Trigger* parameters);
864 static int NumItemsPartyLT(Scriptable* Sender, Trigger* parameters);
865 static int NumTimesTalkedTo(Scriptable* Sender, Trigger* parameters);
866 static int NumTimesTalkedToGT(Scriptable* Sender, Trigger* parameters);
867 static int NumTimesTalkedToLT(Scriptable* Sender, Trigger* parameters);
868 static int ObjectActionListEmpty(Scriptable* Sender, Trigger* parameters);
869 static int OnCreation(Scriptable* Sender, Trigger* parameters);
870 static int OnScreen(Scriptable* Sender, Trigger* parameters);
871 static int OpenState(Scriptable* Sender, Trigger* parameters);
872 static int Or(Scriptable* Sender, Trigger* parameters);
873 static int OwnsFloaterMessage(Scriptable* Sender, Trigger* parameters);
874 static int PartyCountEQ(Scriptable* Sender, Trigger* parameters);
875 static int PartyCountGT(Scriptable* Sender, Trigger* parameters);
876 static int PartyCountLT(Scriptable* Sender, Trigger* parameters);
877 static int PartyCountAliveEQ(Scriptable* Sender, Trigger* parameters);
878 static int PartyCountAliveGT(Scriptable* Sender, Trigger* parameters);
879 static int PartyCountAliveLT(Scriptable* Sender, Trigger* parameters);
880 static int PartyGold(Scriptable* Sender, Trigger* parameters);
881 static int PartyGoldGT(Scriptable* Sender, Trigger* parameters);
882 static int PartyGoldLT(Scriptable* Sender, Trigger* parameters);
883 static int PartyHasItem(Scriptable* Sender, Trigger* parameters);
884 static int PartyHasItemIdentified(Scriptable* Sender, Trigger* parameters);
885 static int PartyMemberDied(Scriptable* Sender, Trigger* parameters);
886 static int PCCanSeePoint(Scriptable* Sender, Trigger* parameters);
887 static int PCInStore(Scriptable* Sender, Trigger* parameters);
888 static int Proficiency(Scriptable* Sender, Trigger* parameters);
889 static int ProficiencyGT(Scriptable* Sender, Trigger* parameters);
890 static int ProficiencyLT(Scriptable* Sender, Trigger* parameters);
891 static int Race(Scriptable* Sender, Trigger* parameters);
892 static int RandomNum(Scriptable* Sender, Trigger* parameters);
893 static int RandomNumGT(Scriptable* Sender, Trigger* parameters);
894 static int RandomNumLT(Scriptable* Sender, Trigger* parameters);
895 static int Range(Scriptable* Sender, Trigger* parameters);
896 static int RealGlobalTimerExact(Scriptable* Sender, Trigger* parameters);
897 static int RealGlobalTimerExpired(Scriptable* Sender, Trigger* parameters);
898 static int RealGlobalTimerNotExpired(Scriptable* Sender, Trigger* parameters);
899 static int Reputation(Scriptable* Sender, Trigger* parameters);
900 static int ReputationGT(Scriptable* Sender, Trigger* parameters);
901 static int ReputationLT(Scriptable* Sender, Trigger* parameters);
902 static int See(Scriptable* Sender, Trigger* parameters);
903 static int Specifics(Scriptable* Sender, Trigger* parameters);
904 static int StateCheck(Scriptable* Sender, Trigger* parameters);
905 static int StuffGlobalRandom(Scriptable* Sender, Trigger* parameters);
906 static int SubRace(Scriptable* Sender, Trigger* parameters);
907 static int TargetUnreachable(Scriptable* Sender, Trigger* parameters);
908 static int Team(Scriptable* Sender, Trigger* parameters);
909 static int Time(Scriptable* Sender, Trigger* parameters);
910 static int TimeGT(Scriptable* Sender, Trigger* parameters);
911 static int TimeLT(Scriptable* Sender, Trigger* parameters);
912 static int TookDamage(Scriptable* Sender, Trigger* parameters);
913 static int TotalItemCnt(Scriptable* Sender, Trigger* parameters);
914 static int TotalItemCntGT(Scriptable* Sender, Trigger* parameters);
915 static int TotalItemCntLT(Scriptable* Sender, Trigger* parameters);
916 static int True(Scriptable* Sender, Trigger* parameters);
917 static int TrapTriggered(Scriptable* Sender, Trigger* parameters);
918 static int UnselectableVariable(Scriptable* Sender, Trigger* parameters);
919 static int UnselectableVariableGT(Scriptable* Sender, Trigger* parameters);
920 static int UnselectableVariableLT(Scriptable* Sender, Trigger* parameters);
921 static int Vacant(Scriptable* Sender, Trigger* parameters);
922 static int Xor(Scriptable* Sender, Trigger* parameters);
923 static int XP(Scriptable* Sender, Trigger* parameters);
924 static int XPGT(Scriptable* Sender, Trigger* parameters);
925 static int XPLT(Scriptable* Sender, Trigger* parameters);
926 public:
927 //Actions
928 static void Activate(Scriptable* Sender, Action* parameters);
929 static void AddAreaFlag(Scriptable* Sender, Action* parameters);
930 static void AddAreaType(Scriptable* Sender, Action* parameters);
931 static void AddExperienceParty(Scriptable *Sender, Action* parameters);
932 static void AddExperiencePartyGlobal(Scriptable *Sender, Action* parameters);
933 static void AddGlobals(Scriptable* Sender, Action* parameters);
934 static void AddJournalEntry(Scriptable* Sender, Action* parameters);
935 static void AddMapnote(Scriptable* Sender, Action* parameters);
936 static void AddSpecialAbility(Scriptable* Sender, Action* parameters);
937 static void AddWayPoint(Scriptable* Sender, Action* parameters);
938 static void AddXP2DA(Scriptable *Sender, Action* parameters);
939 static void AddXPObject(Scriptable *Sender, Action* parameters);
940 static void AdvanceTime(Scriptable *Sender, Action* parameters);
941 static void Ally(Scriptable* Sender, Action* parameters);
942 static void AmbientActivate(Scriptable* Sender, Action* parameters);
943 static void ApplyDamage(Scriptable* Sender, Action* parameters);
944 static void ApplyDamagePercent(Scriptable* Sender, Action* parameters);
945 static void Attack(Scriptable* Sender, Action* parameters);
946 static void AttackReevaluate(Scriptable* Sender, Action* parameters);
947 static void BattleSong(Scriptable* Sender, Action* parameters);
948 static void Berserk(Scriptable* Sender, Action* parameters);
949 static void BitClear(Scriptable* Sender, Action* parameters);
950 static void BitGlobal(Scriptable* Sender, Action* parameters);
951 static void ChangeAIScript(Scriptable* Sender, Action* parameters);
952 static void ChangeAlignment(Scriptable* Sender, Action* parameters);
953 static void ChangeAllegiance(Scriptable* Sender, Action* parameters);
954 static void ChangeClass(Scriptable* Sender, Action* parameters);
955 static void ChangeCurrentScript(Scriptable* Sender, Action* parameters);
956 static void ChangeDialogue(Scriptable* Sender, Action* parameters);
957 static void ChangeGender(Scriptable* Sender, Action* parameters);
958 static void ChangeGeneral(Scriptable* Sender, Action* parameters);
959 static void ChangeRace(Scriptable* Sender, Action* parameters);
960 static void ChangeSpecifics(Scriptable* Sender, Action* parameters);
961 static void ChangeStat(Scriptable* Sender, Action* parameters);
962 static void ClearActions(Scriptable* Sender, Action* parameters);
963 static void ClearAllActions(Scriptable* Sender, Action* parameters);
964 static void CloseDoor(Scriptable* Sender, Action* parameters);
965 static void ContainerEnable(Scriptable* Sender, Action* parameters);
966 static void Continue(Scriptable* Sender, Action* parameters);
967 static void CreateCreature(Scriptable* Sender, Action* parameters);
968 static void CreateCreatureAtLocation(Scriptable* Sender, Action* parameters);
969 static void CreateCreatureAtFeet(Scriptable* Sender, Action* parameters);
970 static void CreateCreatureImpassable(Scriptable* Sender, Action* parameters);
971 static void CreateCreatureObject(Scriptable* Sender, Action* parameters);
972 static void CreateCreatureObjectOffset(Scriptable* Sender, Action* parameters);
973 static void CreateCreatureObjectOffScreen(Scriptable* Sender, Action* parameters);
974 static void CreateCreatureOffScreen(Scriptable* Sender, Action* parameters);
975 static void CreateItem(Scriptable* Sender, Action* parameters);
976 static void CreateItemNumGlobal(Scriptable* Sender, Action* parameters);
977 static void CreatePartyGold(Scriptable *Sender, Action *parameters);
978 static void CreateVisualEffect(Scriptable* Sender, Action* parameters);
979 static void CreateVisualEffectObject(Scriptable* Sender,
980 Action* parameters);
981 static void CutSceneID(Scriptable* Sender, Action* parameters);
982 static void Damage(Scriptable* Sender, Action* parameters);
983 static void Deactivate(Scriptable* Sender, Action* parameters);
984 static void Debug(Scriptable* Sender, Action* parameters);
985 static void DestroyAllDestructableEquipment(Scriptable* Sender, Action* parameters);
986 static void DestroyAllEquipment(Scriptable* Sender, Action* parameters);
987 static void DestroyGold(Scriptable* Sender, Action* parameters);
988 static void DestroyItem(Scriptable* Sender, Action* parameters);
989 static void DestroyPartyGold(Scriptable* Sender, Action* parameters);
990 static void DestroyPartyItem(Scriptable* Sender, Action* parameters);
991 static void DestroyPartyItemNum(Scriptable* Sender, Action* parameters);
992 static void DestroySelf(Scriptable* Sender, Action* parameters);
993 static void Dialogue(Scriptable* Sender, Action* parameters);
994 static void DialogueForceInterrupt(Scriptable* Sender, Action* parameters);
995 static void DisplayMessage(Scriptable* Sender, Action* parameters);
996 static void DisplayString(Scriptable* Sender, Action* parameters);
997 static void DisplayStringHead(Scriptable* Sender, Action* parameters);
998 static void DisplayStringHeadOwner(Scriptable* Sender, Action* parameters);
999 static void DisplayStringNoName(Scriptable* Sender, Action* parameters);
1000 static void DisplayStringNoNameHead(Scriptable* Sender, Action* parameters);
1001 static void DisplayStringWait(Scriptable* Sender, Action* parameters);
1002 static void DropInventory(Scriptable* Sender, Action* parameters);
1003 static void DropItem(Scriptable* Sender, Action* parameters);
1004 static void EndCredits(Scriptable* Sender, Action* parameters);
1005 static void EndCutSceneMode(Scriptable* Sender, Action* parameters);
1006 static void Enemy(Scriptable* Sender, Action* parameters);
1007 static void EquipItem(Scriptable *Sender, Action *parameters);
1008 static void ExpansionEndCredits(Scriptable* Sender, Action* parameters);
1009 static void Explore(Scriptable *Sender, Action *parameters);
1010 static void ExploreMapChunk(Scriptable *Sender, Action *parameters);
1011 static void Face(Scriptable* Sender, Action* parameters);
1012 static void FaceObject(Scriptable* Sender, Action* parameters);
1013 static void FaceSavedLocation(Scriptable* Sender, Action* parameters);
1014 static void FadeFromColor(Scriptable* Sender, Action* parameters);
1015 static void FadeToColor(Scriptable* Sender, Action* parameters);
1016 static void FloatMessageFixed(Scriptable* Sender, Action* parameters);
1017 static void FloatMessageFixedRnd(Scriptable* Sender, Action* parameters);
1018 static void FloatMessageRnd(Scriptable* Sender, Action* parameters);
1019 static void ForceAIScript(Scriptable* Sender, Action* parameters);
1020 static void ForceAttack(Scriptable* Sender, Action* parameters);
1021 static void ForceFacing(Scriptable* Sender, Action* parameters);
1022 static void ForceLeaveAreaLUA(Scriptable* Sender, Action* parameters);
1023 static void ForceSpell(Scriptable* Sender, Action* parameters);
1024 static void FullHeal(Scriptable* Sender, Action* parameters);
1025 static void GetItem(Scriptable* Sender, Action* parameters);
1026 static void GiveItem(Scriptable* Sender, Action* parameters);
1027 static void GivePartyGold(Scriptable* Sender, Action* parameters);
1028 static void GivePartyGoldGlobal(Scriptable* Sender, Action* parameters);
1029 static void GlobalAddGlobal(Scriptable* Sender, Action* parameters);
1030 static void GlobalAndGlobal(Scriptable* Sender, Action* parameters);
1031 static void GlobalBAnd(Scriptable* Sender, Action* parameters);
1032 static void GlobalBAndGlobal(Scriptable* Sender, Action* parameters);
1033 static void GlobalBitGlobal(Scriptable* Sender, Action* parameters);
1034 static void GlobalBOr(Scriptable* Sender, Action* parameters);
1035 static void GlobalBOrGlobal(Scriptable* Sender, Action* parameters);
1036 static void GlobalMax(Scriptable* Sender, Action* parameters);
1037 static void GlobalMaxGlobal(Scriptable* Sender, Action* parameters);
1038 static void GlobalMin(Scriptable* Sender, Action* parameters);
1039 static void GlobalMinGlobal(Scriptable* Sender, Action* parameters);
1040 static void GlobalOrGlobal(Scriptable* Sender, Action* parameters);
1041 static void GlobalSetGlobal(Scriptable* Sender, Action* parameters);
1042 static void GlobalShL(Scriptable* Sender, Action* parameters);
1043 static void GlobalShLGlobal(Scriptable* Sender, Action* parameters);
1044 static void GlobalShout(Scriptable* Sender, Action* parameters);
1045 static void GlobalShR(Scriptable* Sender, Action* parameters);
1046 static void GlobalShRGlobal(Scriptable* Sender, Action* parameters);
1047 static void GlobalSubGlobal(Scriptable* Sender, Action* parameters);
1048 static void GlobalXor(Scriptable* Sender, Action* parameters);
1049 static void GlobalXorGlobal(Scriptable* Sender, Action* parameters);
1050 static void Help(Scriptable* Sender, Action* parameters);
1051 static void HideAreaOnMap(Scriptable* Sender, Action* parameters);
1052 static void HideCreature(Scriptable* Sender, Action* parameters);
1053 static void HideGUI(Scriptable* Sender, Action* parameters);
1054 static void IncInternal(Scriptable* Sender, Action* parameters);
1055 static void IncMoraleAI(Scriptable* Sender, Action* parameters);
1056 static void IncrementChapter(Scriptable* Sender, Action* parameters);
1057 static void IncrementGlobal(Scriptable* Sender, Action* parameters);
1058 static void IncrementGlobalOnce(Scriptable* Sender, Action* parameters);
1059 static void IncrementExtraProficiency(Scriptable* Sender, Action* parameters);
1060 static void IncrementProficiency(Scriptable* Sender, Action* parameters);
1061 static void Interact(Scriptable* Sender, Action* parameters);
1062 static void JoinParty(Scriptable* Sender, Action* parameters);
1063 static void JumpToPoint(Scriptable* Sender, Action* parameters);
1064 static void JumpToPointInstant(Scriptable* Sender, Action* parameters);
1065 static void JumpToObject(Scriptable* Sender, Action* parameters);
1066 static void JumpToSavedLocation(Scriptable* Sender, Action* parameters);
1067 static void Kill(Scriptable* Sender, Action* parameters);
1068 static void KillFloatMessage(Scriptable* Sender, Action* parameters);
1069 static void LeaveArea(Scriptable* Sender, Action* parameters);
1070 static void LeaveAreaLUA(Scriptable* Sender, Action* parameters);
1071 static void LeaveAreaLUAEntry(Scriptable* Sender, Action* parameters);
1072 static void LeaveAreaLUAPanic(Scriptable* Sender, Action* parameters);
1073 static void LeaveAreaLUAPanicEntry(Scriptable* Sender, Action* parameters);
1074 static void LeaveParty(Scriptable* Sender, Action* parameters);
1075 static void Lock(Scriptable* Sender, Action* parameters);
1076 static void LockScroll(Scriptable* Sender, Action* parameters);
1077 static void MarkObject(Scriptable* Sender, Action* parameters);
1078 static void MakeGlobal(Scriptable* Sender, Action* parameters);
1079 static void MakeUnselectable(Scriptable* Sender, Action* parameters);
1080 static void MoraleDec(Scriptable* Sender, Action* parameters);
1081 static void MoraleInc(Scriptable* Sender, Action* parameters);
1082 static void MoraleSet(Scriptable* Sender, Action* parameters);
1083 static void MoveBetweenAreas(Scriptable* Sender, Action* parameters);
1084 static void MoveBetweenAreasEffect(Scriptable* Sender, Action* parameters);
1085 static void MoveGlobal(Scriptable* Sender, Action* parameters);
1086 static void MoveGlobalObject(Scriptable* Sender, Action* parameters);
1087 static void MoveGlobalObjectOffScreen(Scriptable* Sender, Action* parameters);
1088 static void MoveGlobalsTo(Scriptable* Sender, Action* parameters);
1089 static void MoveToCenterOfScreen(Scriptable* Sender, Action* parameters);
1090 static void MoveToPoint(Scriptable* Sender, Action* parameters);
1091 static void MoveToPointNoInterrupt(Scriptable* Sender, Action* parameters);
1092 static void MoveToPointNoRecticle(Scriptable* Sender, Action* parameters);
1093 static void MoveToObject(Scriptable* Sender, Action* parameters);
1094 static void MoveToObjectNoInterrupt(Scriptable* Sender, Action* parameters);
1095 static void MoveToOffset(Scriptable* Sender, Action* parameters);
1096 static void MoveToSavedLocation(Scriptable* Sender, Action* parameters);
1097 static void MoveToSavedLocationDelete(Scriptable* Sender, Action* parameters);
1098 static void MoveViewPoint(Scriptable* Sender, Action* parameters);
1099 static void MoveViewObject(Scriptable* Sender, Action* parameters);
1100 static void NIDSpecial1(Scriptable* Sender, Action* parameters);
1101 static void NIDSpecial2(Scriptable* Sender, Action* parameters);
1102 static void NoAction(Scriptable* Sender, Action* parameters);
1103 static void NoActionAtAll(Scriptable* Sender, Action* parameters);
1104 static void OpenDoor(Scriptable* Sender, Action* parameters);
1105 static void Panic(Scriptable* Sender, Action* parameters);
1106 static void PickPockets(Scriptable* Sender, Action* parameters);
1107 static void PlayDead(Scriptable* Sender, Action* parameters);
1108 static void PlayDeadInterruptable(Scriptable* Sender, Action* parameters);
1109 static void PlayerDialogue(Scriptable* Sender, Action* parameters);
1110 static void PlaySequence(Scriptable* Sender, Action* parameters);
1111 static void PlaySound(Scriptable* Sender, Action* parameters);
1112 static void PlaySoundNotRanged(Scriptable* Sender, Action* parameters);
1113 static void PlaySoundPoint(Scriptable* Sender, Action* parameters);
1114 static void Plunder(Scriptable* Sender, Action* parameters);
1115 static void QuitGame(Scriptable* Sender, Action* parameters);
1116 static void RandomWalk(Scriptable* Sender, Action* parameters);
1117 static void RandomFly(Scriptable* Sender, Action* parameters);
1118 static void RealSetGlobalTimer(Scriptable* Sender, Action* parameters);
1119 static void Recoil(Scriptable* Sender, Action* parameters);
1120 static void RegainPaladinHood(Scriptable* Sender, Action* parameters);
1121 static void RegainRangerHood(Scriptable* Sender, Action* parameters);
1122 static void RemoveAreaFlag(Scriptable* Sender, Action* parameters);
1123 static void RemoveAreaType(Scriptable* Sender, Action* parameters);
1124 static void RemoveJournalEntry(Scriptable* Sender, Action* parameters);
1125 static void RemoveMapnote(Scriptable* Sender, Action* parameters);
1126 static void RemovePaladinHood(Scriptable* Sender, Action* parameters);
1127 static void RemoveRangerHood(Scriptable* Sender, Action* parameters);
1128 static void RemoveSpell(Scriptable* Sender, Action* parameters);
1129 static void ReputationInc(Scriptable* Sender, Action* parameters);
1130 static void ReputationSet(Scriptable* Sender, Action* parameters);
1131 static void RestorePartyLocation(Scriptable *Sender, Action* parameters);
1132 static void RevealAreaOnMap(Scriptable* Sender, Action* parameters);
1133 static void RunAwayFrom(Scriptable* Sender, Action* parameters);
1134 static void RunAwayFromNoInterrupt(Scriptable* Sender, Action* parameters);
1135 static void SaveLocation(Scriptable* Sender, Action* parameters);
1136 static void SaveObjectLocation(Scriptable* Sender, Action* parameters);
1137 static void ScreenShake(Scriptable* Sender, Action* parameters);
1138 static void SetAnimState(Scriptable* Sender, Action* parameters);
1139 static void SetApparentName(Scriptable* Sender, Action* parameters);
1140 static void SetAreaFlags(Scriptable* Sender, Action* parameters);
1141 static void SetAreaRestFlag(Scriptable* Sender, Action* parameters);
1142 static void SetArmourLevel(Scriptable* Sender, Action* parameters);
1143 static void SetBeenInPartyFlags(Scriptable* Sender, Action* parameters);
1144 static void SetCorpseEnabled(Scriptable* Sender, Action* parameters);
1145 static void SetCreatureAreaFlags(Scriptable* Sender, Action* parameters);
1146 static void SetDialogue(Scriptable* Sender, Action* parameters);
1147 static void SetDialogueRange(Scriptable* Sender, Action* parameters);
1148 static void SetDoorLocked(Scriptable* Sender, Action* parameters);
1149 static void SetExtendedNight(Scriptable* Sender, Action* parameters);
1150 static void SetFaction(Scriptable* Sender, Action* parameters);
1151 static void SetGabber(Scriptable* Sender, Action* parameters);
1152 static void SetGlobal(Scriptable* Sender, Action* parameters);
1153 static void SetGlobalRandom(Scriptable* Sender, Action* parameters);
1154 static void SetGlobalTimer(Scriptable* Sender, Action* parameters);
1155 static void SetGlobalTint(Scriptable* Sender, Action* parameters);
1156 static void SetHomeLocation(Scriptable* Sender, Action* parameters);
1157 static void SetHP(Scriptable* Sender, Action* parameters);
1158 static void SetInternal(Scriptable* Sender, Action* parameters);
1159 static void SetLeavePartyDialogFile(Scriptable* Sender, Action* parameters);
1160 static void SetMasterArea(Scriptable* Sender, Action* parameters);
1161 static void SetMazeEasier(Scriptable* Sender, Action* parameters);
1162 static void SetMazeHarder(Scriptable* Sender, Action* parameters);
1163 static void SetMoraleAI(Scriptable* Sender, Action* parameters);
1164 static void SetMusic(Scriptable* Sender, Action* parameters);
1165 static void SetNamelessClass(Scriptable* Sender, Action* parameters);
1166 static void SetNamelessDisguise(Scriptable* Sender, Action* parameters);
1167 static void SetNumTimesTalkedTo(Scriptable* Sender, Action* parameters);
1168 static void SetPlayerSound(Scriptable* Sender, Action* parameters);
1169 static void SetQuestDone(Scriptable* Sender, Action* parameters);
1170 static void SetRegularName(Scriptable* Sender, Action* parameters);
1171 static void SetRestEncounterChance(Scriptable* Sender, Action* parameters);
1172 static void SetRestEncounterProbabilityDay(Scriptable* Sender, Action* parameters);
1173 static void SetRestEncounterProbabilityNight(Scriptable* Sender, Action* parameters);
1174 static void SetScriptName(Scriptable* Sender, Action* parameters);
1175 static void SetTeam(Scriptable* Sender, Action* parameters);
1176 static void SetTeamBit(Scriptable* Sender, Action* parameters);
1177 static void SetTextColor(Scriptable* Sender, Action* parameters);
1178 static void SetToken(Scriptable* Sender, Action* parameters);
1179 static void SetTokenGlobal(Scriptable* Sender, Action* parameters);
1180 static void SetVisualRange(Scriptable* Sender, Action* parameters);
1181 static void SG(Scriptable* Sender, Action* parameters);
1182 static void Shout(Scriptable* Sender, Action* parameters);
1183 static void SmallWait(Scriptable* Sender, Action* parameters);
1184 static void SmallWaitRandom(Scriptable* Sender, Action* parameters);
1185 static void SoundActivate(Scriptable* Sender, Action* parameters);
1186 static void StartCutScene(Scriptable* Sender, Action* parameters);
1187 static void StartCutSceneMode(Scriptable* Sender, Action* parameters);
1188 static void StartDialogue(Scriptable* Sender, Action* parameters);
1189 static void StartDialogueInterrupt(Scriptable* Sender, Action* parameters);
1190 static void StartDialogueNoSet(Scriptable* Sender, Action* parameters);
1191 static void StartDialogueNoSetInterrupt(Scriptable* Sender,
1192 Action* parameters);
1193 static void StartDialogueOverride(Scriptable* Sender, Action* parameters);
1194 static void StartDialogueOverrideInterrupt(Scriptable* Sender,
1195 Action* parameters);
1196 static void StartMovie(Scriptable* Sender, Action* parameters);
1197 static void StartMusic(Scriptable* Sender, Action* parameters);
1198 static void StartSong(Scriptable* Sender, Action* parameters);
1199 static void StartStore(Scriptable* Sender, Action* parameters);
1200 static void StaticPalette(Scriptable* Sender, Action* parameters);
1201 static void StaticStart(Scriptable* Sender, Action* parameters);
1202 static void StaticStop(Scriptable* Sender, Action* parameters);
1203 static void StopMoving(Scriptable* Sender, Action* parameters);
1204 static void StorePartyLocation(Scriptable *Sender, Action* parameters);
1205 static void Swing(Scriptable* Sender, Action* parameters);
1206 static void SwingOnce(Scriptable* Sender, Action* parameters);
1207 static void TakeItemList(Scriptable* Sender, Action* parameters);
1208 static void TakeItemReplace(Scriptable* Sender, Action* parameters);
1209 static void TakePartyGold(Scriptable* Sender, Action* parameters);
1210 static void TakePartyItem(Scriptable* Sender, Action* parameters);
1211 static void TakePartyItemAll(Scriptable* Sender, Action* parameters);
1212 static void TakePartyItemNum(Scriptable* Sender, Action* parameters);
1213 static void TeleportParty(Scriptable* Sender, Action* parameters);
1214 static void TextScreen(Scriptable* Sender, Action* parameters);
1215 static void TriggerActivation(Scriptable* Sender, Action* parameters);
1216 static void UndoExplore(Scriptable *Sender, Action *parameters);
1217 static void UnhideGUI(Scriptable* Sender, Action* parameters);
1218 static void Unlock(Scriptable* Sender, Action* parameters);
1219 static void UnlockScroll(Scriptable* Sender, Action* parameters);
1220 static void UseContainer(Scriptable* Sender, Action* parameters);
1221 static void VerbalConstant(Scriptable* Sender, Action* parameters);
1222 static void VerbalConstantHead(Scriptable* Sender, Action* parameters);
1223 static void Wait(Scriptable* Sender, Action* parameters);
1224 static void WaitAnimation(Scriptable* Sender, Action* parameters);
1225 static void WaitRandom(Scriptable* Sender, Action* parameters);
1226 static void XEquipItem(Scriptable *Sender, Action *parameters);
1227 public:
1228 //Objects
1229 static Targets *BestAC(Scriptable *Sender, Targets *parameters);
1230 static Targets *EighthNearest(Scriptable *Sender, Targets *parameters);
1231 static Targets *EighthNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1232 static Targets *EighthNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1233 static Targets *Farthest(Scriptable *Sender, Targets *parameters);
1234 static Targets *FifthNearest(Scriptable *Sender, Targets *parameters);
1235 static Targets *FifthNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1236 static Targets *FifthNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1237 static Targets *FourthNearest(Scriptable *Sender, Targets *parameters);
1238 static Targets *FourthNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1239 static Targets *FourthNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1240 static Targets *Gabber(Scriptable *Sender, Targets *parameters);
1241 static Targets *LastAttackerOf(Scriptable *Sender, Targets *parameters);
1242 static Targets *LastCommandedBy(Scriptable *Sender, Targets *parameters);
1243 static Targets *LastHeardBy(Scriptable *Sender, Targets *parameters);
1244 static Targets *LastHelp(Scriptable *Sender, Targets *parameters);
1245 static Targets *LastHitter(Scriptable *Sender, Targets *parameters);
1246 static Targets *LastSeenBy(Scriptable *Sender, Targets *parameters);
1247 static Targets *LastSummonerOf(Scriptable *Sender, Targets *parameters);
1248 static Targets *LastTalkedToBy(Scriptable *Sender, Targets *parameters);
1249 static Targets *LastTargetedBy(Scriptable *Sender, Targets *parameters);
1250 static Targets *LastTrigger(Scriptable *Sender, Targets *parameters);
1251 static Targets *LeastDamagedOf(Scriptable *Sender, Targets *parameters);
1252 static Targets *MostDamagedOf(Scriptable *Sender, Targets *parameters);
1253 static Targets *Myself(Scriptable *Sender, Targets *parameters);
1254 static Targets *Nearest(Scriptable *Sender, Targets *parameters);
1255 static Targets *NearestEnemyOf(Scriptable *Sender, Targets *parameters);
1256 static Targets *NearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1257 static Targets *NearestPC(Scriptable *Sender, Targets *parameters);
1258 static Targets *NinthNearest(Scriptable *Sender, Targets *parameters);
1259 static Targets *NinthNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1260 static Targets *NinthNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1261 static Targets *Nothing(Scriptable *Sender, Targets *parameters);
1262 static Targets *Player1(Scriptable *Sender, Targets *parameters);
1263 static Targets *Player1Fill(Scriptable *Sender, Targets *parameters);
1264 static Targets *Player2(Scriptable *Sender, Targets *parameters);
1265 static Targets *Player2Fill(Scriptable *Sender, Targets *parameters);
1266 static Targets *Player3(Scriptable *Sender, Targets *parameters);
1267 static Targets *Player3Fill(Scriptable *Sender, Targets *parameters);
1268 static Targets *Player4(Scriptable *Sender, Targets *parameters);
1269 static Targets *Player4Fill(Scriptable *Sender, Targets *parameters);
1270 static Targets *Player5(Scriptable *Sender, Targets *parameters);
1271 static Targets *Player5Fill(Scriptable *Sender, Targets *parameters);
1272 static Targets *Player6(Scriptable *Sender, Targets *parameters);
1273 static Targets *Player6Fill(Scriptable *Sender, Targets *parameters);
1274 static Targets *Protagonist(Scriptable *Sender, Targets *parameters);
1275 static Targets *SecondNearest(Scriptable *Sender, Targets *parameters);
1276 static Targets *SecondNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1277 static Targets *SecondNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1278 static Targets *SelectedCharacter(Scriptable *Sender, Targets *parameters);
1279 static Targets *SeventhNearest(Scriptable *Sender, Targets *parameters);
1280 static Targets *SeventhNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1281 static Targets *SeventhNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1282 static Targets *SixthNearest(Scriptable *Sender, Targets *parameters);
1283 static Targets *SixthNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1284 static Targets *SixthNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1285 static Targets *StrongestOf(Scriptable *Sender, Targets *parameters);
1286 static Targets *StrongestOfMale(Scriptable *Sender, Targets *parameters);
1287 static Targets *TenthNearest(Scriptable *Sender, Targets *parameters);
1288 static Targets *TenthNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1289 static Targets *TenthNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1290 static Targets *ThirdNearest(Scriptable *Sender, Targets *parameters);
1291 static Targets *ThirdNearestEnemyOf(Scriptable *Sender, Targets *parameters);
1292 static Targets *ThirdNearestEnemyOfType(Scriptable *Sender, Targets *parameters);
1293 static Targets *WeakestOf(Scriptable *Sender, Targets *parameters);
1294 static Targets *WorstAC(Scriptable *Sender, Targets *parameters);
1296 public:
1297 /*GemRB extensions/actions*/
1298 static void RunAwayFromPoint(Scriptable* Sender, Action* parameters);
1299 static void UnMakeGlobal(Scriptable* Sender, Action* parameters);
1300 static void UnloadArea(Scriptable* Sender, Action* parameters);
1302 /*GemRB extensions/objects*/
1303 static Targets *Player7(Scriptable *Sender, Targets *parameters);
1304 static Targets *Player7Fill(Scriptable *Sender, Targets *parameters);
1305 static Targets *Player8(Scriptable *Sender, Targets *parameters);
1306 static Targets *Player8Fill(Scriptable *Sender, Targets *parameters);
1309 #endif