/* =========================================================================== ARX FATALIS GPL Source Code Copyright (C) 1999-2010 Arkane Studios SA, a ZeniMax Media company. This file is part of the Arx Fatalis GPL Source Code ('Arx Fatalis Source Code'). Arx Fatalis Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Arx Fatalis Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Arx Fatalis Source Code. If not, see . In addition, the Arx Fatalis Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Arx Fatalis Source Code. If not, please request a copy in writing from Arkane Studios at the address below. If you have questions concerning this license or the applicable additional terms, you may contact in writing Arkane Studios, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. =========================================================================== */ ////////////////////////////////////////////////////////////////////////////////////// // @@ @@@ @@@ @@ @@@@@ // // @@@ @@@@@@ @@@ @@ @@@@ @@@ @@@ // // @@@ @@@@@@@ @@@ @@@@ @@@@ @@ @@@@ // // @@@ @@ @@@@ @@@ @@@@@ @@@@@@ @@@ @@@ // // @@@@@ @@ @@@@ @@@ @@@@@ @@@@@@@ @@@ @ @@@ // // @@@@@ @@ @@@@ @@@@@@@@ @@@@ @@@ @@@@@ @@ @@@@@@@ // // @@ @@@ @@ @@@@ @@@@@@@ @@@ @@@ @@@@@@ @@ @@@@ // // @@@ @@@ @@@ @@@@ @@@@@ @@@@@@@@@ @@@@@@@ @@@ @@@@ // // @@@ @@@@ @@@@@@@ @@@@@@ @@@ @@@@ @@@ @@@ @@@ @@@@ // // @@@@@@@@ @@@@@ @@@@@@@@@@ @@@ @@@ @@@ @@@ @@@ @@@@@ // // @@@ @@@@ @@@@ @@@ @@@@@@@ @@@ @@@ @@@@ @@@ @@@@ @@@@@ // //@@@ @@@@ @@@@@ @@@ @@@@@@ @@ @@@ @@@@ @@@@@@@ @@@@@ @@@@@ // //@@@ @@@@@ @@@@@ @@@@ @@@ @@ @@ @@@@ @@@@@@@ @@@@@@@@@ // //@@@ @@@@ @@@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@@@@ // //@@@ @@@@ @@@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@ // //@@@ @@@ @@@ @@@@@ @@ @@@ // // @@@ @@@ @@ @@ STUDIOS // ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// // ARX_Script ////////////////////////////////////////////////////////////////////////////////////// // // Description: // ARX Script Management // // Updates: (date) (person) (update) // // Code: Cyril Meynier // // Copyright (c) 1999-2000 ARKANE Studios SA. All rights reserved ///////////////////////////////////////////////////////////////////////////////////// #ifndef ARX_SCRIPTING_H #define ARX_SCRIPTING_H #include #include #include //----------------------------------------------------------------------------- typedef struct { char * name; short exist; short flags; long namelength; long times; long msecs; long pos; long longinfo; unsigned long tim; INTERACTIVE_OBJ * io; EERIE_SCRIPT * es; } SCR_TIMER; typedef struct { char * name; } SCRIPT_EVENT; //----------------------------------------------------------------------------- #define PATHFIND_ALWAYS 1 #define PATHFIND_ONCE 2 #define PATHFIND_NO_UPDATE 4 #define ANIM_DEFAULT 0 #define ANIM_WAIT 0 #define ANIM_WALK 1 #define ANIM_WALK2 2 #define ANIM_WALK3 3 #define ANIM_ACTION 8 #define ANIM_ACTION2 9 #define ANIM_ACTION3 10 #define ANIM_HIT1 11 #define ANIM_STRIKE1 12 #define ANIM_DIE 13 #define ANIM_WAIT2 14 #define ANIM_RUN 15 #define ANIM_RUN2 16 #define ANIM_RUN3 17 #define ANIM_ACTION4 18 #define ANIM_ACTION5 19 #define ANIM_ACTION6 20 #define ANIM_ACTION7 21 #define ANIM_ACTION8 22 #define ANIM_ACTION9 23 #define ANIM_ACTION10 24 #define ANIM_TALK_NEUTRAL 30 #define ANIM_TALK_HAPPY 31 #define ANIM_TALK_ANGRY 32 #define ANIM_WALK_BACKWARD 33 #define ANIM_BARE_READY 34 #define ANIM_BARE_UNREADY (ANIM_BARE_READY+1) #define ANIM_BARE_WAIT (ANIM_BARE_READY+2) #define ANIM_BARE_STRIKE_LEFT_START (ANIM_BARE_READY+3) #define ANIM_BARE_STRIKE_LEFT_CYCLE (ANIM_BARE_READY+4) #define ANIM_BARE_STRIKE_LEFT (ANIM_BARE_READY+5) #define ANIM_BARE_STRIKE_RIGHT_START (ANIM_BARE_READY+6) #define ANIM_BARE_STRIKE_RIGHT_CYCLE (ANIM_BARE_READY+7) #define ANIM_BARE_STRIKE_RIGHT (ANIM_BARE_READY+8) #define ANIM_BARE_STRIKE_TOP_START (ANIM_BARE_READY+9) #define ANIM_BARE_STRIKE_TOP_CYCLE (ANIM_BARE_READY+10) #define ANIM_BARE_STRIKE_TOP (ANIM_BARE_READY+11) #define ANIM_BARE_STRIKE_BOTTOM_START (ANIM_BARE_READY+12) #define ANIM_BARE_STRIKE_BOTTOM_CYCLE (ANIM_BARE_READY+13) #define ANIM_BARE_STRIKE_BOTTOM (ANIM_BARE_READY+14) #define ANIM_1H_READY_PART_1 (ANIM_BARE_STRIKE_BOTTOM+1) #define ANIM_1H_READY_PART_2 (ANIM_1H_READY_PART_1+1) #define ANIM_1H_UNREADY_PART_1 (ANIM_1H_READY_PART_1+2) #define ANIM_1H_UNREADY_PART_2 (ANIM_1H_READY_PART_1+3) #define ANIM_1H_WAIT (ANIM_1H_READY_PART_1+4) #define ANIM_1H_STRIKE_LEFT_START (ANIM_1H_READY_PART_1+5) #define ANIM_1H_STRIKE_LEFT_CYCLE (ANIM_1H_READY_PART_1+6) #define ANIM_1H_STRIKE_LEFT (ANIM_1H_READY_PART_1+7) #define ANIM_1H_STRIKE_RIGHT_START (ANIM_1H_READY_PART_1+8) #define ANIM_1H_STRIKE_RIGHT_CYCLE (ANIM_1H_READY_PART_1+9) #define ANIM_1H_STRIKE_RIGHT (ANIM_1H_READY_PART_1+10) #define ANIM_1H_STRIKE_TOP_START (ANIM_1H_READY_PART_1+11) #define ANIM_1H_STRIKE_TOP_CYCLE (ANIM_1H_READY_PART_1+12) #define ANIM_1H_STRIKE_TOP (ANIM_1H_READY_PART_1+13) #define ANIM_1H_STRIKE_BOTTOM_START (ANIM_1H_READY_PART_1+14) #define ANIM_1H_STRIKE_BOTTOM_CYCLE (ANIM_1H_READY_PART_1+15) #define ANIM_1H_STRIKE_BOTTOM (ANIM_1H_READY_PART_1+16) #define ANIM_2H_READY_PART_1 (ANIM_1H_STRIKE_BOTTOM+1) //66 #define ANIM_2H_READY_PART_2 (ANIM_2H_READY_PART_1+1) #define ANIM_2H_UNREADY_PART_1 (ANIM_2H_READY_PART_1+2) #define ANIM_2H_UNREADY_PART_2 (ANIM_2H_READY_PART_1+3) #define ANIM_2H_WAIT (ANIM_2H_READY_PART_1+4) #define ANIM_2H_STRIKE_LEFT_START (ANIM_2H_READY_PART_1+5) #define ANIM_2H_STRIKE_LEFT_CYCLE (ANIM_2H_READY_PART_1+6) #define ANIM_2H_STRIKE_LEFT (ANIM_2H_READY_PART_1+7) #define ANIM_2H_STRIKE_RIGHT_START (ANIM_2H_READY_PART_1+8) #define ANIM_2H_STRIKE_RIGHT_CYCLE (ANIM_2H_READY_PART_1+9) #define ANIM_2H_STRIKE_RIGHT (ANIM_2H_READY_PART_1+10) #define ANIM_2H_STRIKE_TOP_START (ANIM_2H_READY_PART_1+11) #define ANIM_2H_STRIKE_TOP_CYCLE (ANIM_2H_READY_PART_1+12) #define ANIM_2H_STRIKE_TOP (ANIM_2H_READY_PART_1+13) #define ANIM_2H_STRIKE_BOTTOM_START (ANIM_2H_READY_PART_1+14) #define ANIM_2H_STRIKE_BOTTOM_CYCLE (ANIM_2H_READY_PART_1+15) #define ANIM_2H_STRIKE_BOTTOM (ANIM_2H_READY_PART_1+16) #define ANIM_DAGGER_READY_PART_1 (ANIM_2H_STRIKE_BOTTOM+1) //82 #define ANIM_DAGGER_READY_PART_2 (ANIM_DAGGER_READY_PART_1+1) #define ANIM_DAGGER_UNREADY_PART_1 (ANIM_DAGGER_READY_PART_1+2) #define ANIM_DAGGER_UNREADY_PART_2 (ANIM_DAGGER_READY_PART_1+3) #define ANIM_DAGGER_WAIT (ANIM_DAGGER_READY_PART_1+4) #define ANIM_DAGGER_STRIKE_LEFT_START (ANIM_DAGGER_READY_PART_1+5) #define ANIM_DAGGER_STRIKE_LEFT_CYCLE (ANIM_DAGGER_READY_PART_1+6) #define ANIM_DAGGER_STRIKE_LEFT (ANIM_DAGGER_READY_PART_1+7) #define ANIM_DAGGER_STRIKE_RIGHT_START (ANIM_DAGGER_READY_PART_1+8) #define ANIM_DAGGER_STRIKE_RIGHT_CYCLE (ANIM_DAGGER_READY_PART_1+9) #define ANIM_DAGGER_STRIKE_RIGHT (ANIM_DAGGER_READY_PART_1+10) #define ANIM_DAGGER_STRIKE_TOP_START (ANIM_DAGGER_READY_PART_1+11) #define ANIM_DAGGER_STRIKE_TOP_CYCLE (ANIM_DAGGER_READY_PART_1+12) #define ANIM_DAGGER_STRIKE_TOP (ANIM_DAGGER_READY_PART_1+13) #define ANIM_DAGGER_STRIKE_BOTTOM_START (ANIM_DAGGER_READY_PART_1+14) #define ANIM_DAGGER_STRIKE_BOTTOM_CYCLE (ANIM_DAGGER_READY_PART_1+15) #define ANIM_DAGGER_STRIKE_BOTTOM (ANIM_DAGGER_READY_PART_1+16) #define ANIM_MISSILE_READY_PART_1 (ANIM_DAGGER_STRIKE_BOTTOM+1) //99 #define ANIM_MISSILE_READY_PART_2 (ANIM_MISSILE_READY_PART_1+1) #define ANIM_MISSILE_UNREADY_PART_1 (ANIM_MISSILE_READY_PART_1+2) #define ANIM_MISSILE_UNREADY_PART_2 (ANIM_MISSILE_READY_PART_1+3) #define ANIM_MISSILE_WAIT (ANIM_MISSILE_READY_PART_1+4) #define ANIM_MISSILE_STRIKE_PART_1 (ANIM_MISSILE_READY_PART_1+5) #define ANIM_MISSILE_STRIKE_PART_2 (ANIM_MISSILE_READY_PART_1+6) #define ANIM_MISSILE_STRIKE_CYCLE (ANIM_MISSILE_READY_PART_1+7) #define ANIM_MISSILE_STRIKE (ANIM_MISSILE_READY_PART_1+8) #define ANIM_SHIELD_START (ANIM_MISSILE_STRIKE+1) //108 #define ANIM_SHIELD_CYCLE (ANIM_SHIELD_START+1) #define ANIM_SHIELD_HIT (ANIM_SHIELD_START+2) #define ANIM_SHIELD_END (ANIM_SHIELD_START+3) #define ANIM_CAST_START (ANIM_SHIELD_END+1) //112 #define ANIM_CAST_CYCLE (ANIM_CAST_START+1) #define ANIM_CAST (ANIM_CAST_START+2) #define ANIM_CAST_END (ANIM_CAST_START+3) #define ANIM_DEATH_CRITICAL (ANIM_CAST_END+1) #define ANIM_CROUCH (ANIM_CAST_END+2) #define ANIM_CROUCH_WALK (ANIM_CAST_END+3) #define ANIM_CROUCH_WALK_BACKWARD (ANIM_CAST_END+4) #define ANIM_LEAN_RIGHT (ANIM_CAST_END+5) #define ANIM_LEAN_LEFT (ANIM_CAST_END+6) #define ANIM_JUMP (ANIM_CAST_END+7) #define ANIM_HOLD_TORCH (ANIM_CAST_END+8) #define ANIM_WALK_MINISTEP (ANIM_CAST_END+9) #define ANIM_STRAFE_RIGHT (ANIM_CAST_END+10) #define ANIM_STRAFE_LEFT (ANIM_CAST_END+11) #define ANIM_MEDITATION (ANIM_CAST_END+12) #define ANIM_WAIT_SHORT (ANIM_CAST_END+13) #define ANIM_FIGHT_WALK_FORWARD (ANIM_CAST_END+14) #define ANIM_FIGHT_WALK_BACKWARD (ANIM_CAST_END+15) #define ANIM_FIGHT_WALK_MINISTEP (ANIM_CAST_END+16) #define ANIM_FIGHT_STRAFE_RIGHT (ANIM_CAST_END+17) #define ANIM_FIGHT_STRAFE_LEFT (ANIM_CAST_END+18) #define ANIM_FIGHT_WAIT (ANIM_CAST_END+19) #define ANIM_LEVITATE (ANIM_CAST_END+20) #define ANIM_CROUCH_START (ANIM_CAST_END+21) #define ANIM_CROUCH_WAIT (ANIM_CAST_END+22) #define ANIM_CROUCH_END (ANIM_CAST_END+23) #define ANIM_JUMP_ANTICIPATION (ANIM_CAST_END+24) #define ANIM_JUMP_UP (ANIM_CAST_END+25) #define ANIM_JUMP_CYCLE (ANIM_CAST_END+26) #define ANIM_JUMP_END (ANIM_CAST_END+27) #define ANIM_TALK_NEUTRAL_HEAD (ANIM_CAST_END+28) #define ANIM_TALK_ANGRY_HEAD (ANIM_CAST_END+29) #define ANIM_TALK_HAPPY_HEAD (ANIM_CAST_END+30) #define ANIM_STRAFE_RUN_LEFT (ANIM_CAST_END+31) #define ANIM_STRAFE_RUN_RIGHT (ANIM_CAST_END+32) #define ANIM_CROUCH_STRAFE_LEFT (ANIM_CAST_END+33) #define ANIM_CROUCH_STRAFE_RIGHT (ANIM_CAST_END+34) #define ANIM_WALK_SNEAK (ANIM_CAST_END+35) #define ANIM_GRUNT (ANIM_CAST_END+36) #define ANIM_JUMP_END_PART2 (ANIM_CAST_END+37) #define ANIM_HIT_SHORT (ANIM_CAST_END+38) #define ANIM_U_TURN_LEFT (ANIM_CAST_END+39) #define ANIM_U_TURN_RIGHT (ANIM_CAST_END+40) #define ANIM_RUN_BACKWARD (ANIM_CAST_END+41) #define ANIM_U_TURN_LEFT_FIGHT (ANIM_CAST_END+42) #define ANIM_U_TURN_RIGHT_FIGHT (ANIM_CAST_END+43) #define ACCEPT 1 #define REFUSE -1 #define BIGERROR -2 #define KILLBOTH 2 #define KILLCOMBINER 3 #define KILLCOMBINEDWITH 4 #define SM_NULL 0 #define SM_INIT 1 #define SM_INVENTORYIN 2 #define SM_INVENTORYOUT 3 #define SM_INVENTORYUSE 4 #define SM_SCENEUSE 5 #define SM_EQUIPIN 6 #define SM_EQUIPOUT 7 #define SM_MAIN 8 #define SM_RESET 9 #define SM_CHAT 10 #define SM_ACTION 11 #define SM_DEAD 12 #define SM_REACHEDTARGET 13 #define SM_FIGHT 14 #define SM_FLEE 15 #define SM_HIT 16 #define SM_DIE 17 #define SM_LOSTTARGET 18 #define SM_TREATIN 19 #define SM_TREATOUT 20 #define SM_MOVE 21 #define SM_DETECTPLAYER 22 #define SM_UNDETECTPLAYER 23 #define SM_COMBINE 24 #define SM_NPC_FOLLOW 25 #define SM_NPC_FIGHT 26 #define SM_NPC_STAY 27 #define SM_INVENTORY2_OPEN 28 #define SM_INVENTORY2_CLOSE 29 #define SM_CUSTOM 30 #define SM_ENTER_ZONE 31 #define SM_LEAVE_ZONE 32 #define SM_INITEND 33 #define SM_CLICKED 34 #define SM_INSIDEZONE 35 #define SM_CONTROLLEDZONE_INSIDE 36 #define SM_LEAVEZONE 37 #define SM_CONTROLLEDZONE_LEAVE 38 #define SM_ENTERZONE 39 #define SM_CONTROLLEDZONE_ENTER 40 #define SM_LOAD 41 #define SM_SPELLCAST 42 #define SM_RELOAD 43 #define SM_COLLIDE_DOOR 44 #define SM_OUCH 45 #define SM_HEAR 46 #define SM_SUMMONED 47 #define SM_SPELLEND 48 #define SM_SPELLDECISION 49 #define SM_STRIKE 50 #define SM_COLLISION_ERROR 51 #define SM_WAYPOINT 52 #define SM_PATHEND 53 #define SM_CRITICAL 54 #define SM_COLLIDE_NPC 55 #define SM_BACKSTAB 56 #define SM_AGGRESSION 57 #define SM_COLLISION_ERROR_DETAIL 58 #define SM_GAME_READY 59 #define SM_CINE_END 60 #define SM_KEY_PRESSED 61 #define SM_CONTROLS_ON 62 #define SM_CONTROLS_OFF 63 #define SM_PATHFINDER_FAILURE 64 #define SM_PATHFINDER_SUCCESS 65 #define SM_TRAP_DISARMED 66 #define SM_BOOK_OPEN 67 #define SM_BOOK_CLOSE 68 #define SM_IDENTIFY 69 #define SM_BREAK 70 #define SM_STEAL 71 #define SM_COLLIDE_FIELD 72 #define SM_CURSORMODE 73 #define SM_EXPLORATIONMODE 74 #define SM_MAXCMD 75 #define SM_EXECUTELINE 255 #define SM_DUMMY 256 #define DISABLE_HIT 1 #define DISABLE_CHAT 2 #define DISABLE_INVENTORY2_OPEN 4 #define DISABLE_HEAR 8 #define DISABLE_DETECT 16 #define DISABLE_AGGRESSION 32 #define DISABLE_MAIN 64 #define DISABLE_COLLIDE_NPC 128 #define DISABLE_CURSORMODE 256 #define DISABLE_EXPLORATIONMODE 512 #define TYPE_UNKNOWN 0 // does not exist ! #define TYPE_G_TEXT 1 #define TYPE_L_TEXT 2 #define TYPE_G_LONG 4 #define TYPE_L_LONG 8 #define TYPE_G_FLOAT 16 #define TYPE_L_FLOAT 32 #define OPER_EQUAL 1 #define OPER_NOTEQUAL 2 #define OPER_INFEQUAL 3 #define OPER_INFERIOR 4 #define OPER_SUPEQUAL 5 #define OPER_SUPERIOR 6 #define OPER_INCLASS 7 #define OPER_ISELEMENT 8 #define OPER_ISIN 9 #define OPER_ISTYPE 10 #define OPER_ISGROUP 11 #define OPER_NOTISGROUP 12 #define BIG_DEBUG_SIZE 65000 #define ONE_HANDED_WEAPON 1 #define TWO_HANDED_WEAPON 2 //----------------------------------------------------------------------------- extern SCRIPT_VAR * svar; extern INTERACTIVE_OBJ * EVENT_SENDER; extern SCRIPT_EVENT AS_EVENT[]; extern SCR_TIMER * scr_timer; extern char ShowTextWindowtext[128]; extern char ShowText[65536]; extern char ShowText2[65536]; extern char BIG_DEBUG_STRING[BIG_DEBUG_SIZE]; extern long NEED_DEBUG; extern long BIG_DEBUG_POS; extern long NB_GLOBALS; extern long ActiveTimers; extern long Event_Total_Count; extern long FORBID_SCRIPT_IO_CREATION; extern long MAX_TIMER_SCRIPT; extern LRESULT CALLBACK ShowTextDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK ShowVarsDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); //----------------------------------------------------------------------------- void InitScript(EERIE_SCRIPT * es); void InitScriptVars(long nbvars); void ARX_SCRIPT_Timer_Check(); void ARX_SCRIPT_Timer_FirstInit(long number); void ARX_SCRIPT_Timer_ClearAll(); void ARX_SCRIPT_Timer_Clear_For_IO(INTERACTIVE_OBJ * io); void ARX_SCRIPT_Timer_Clear_By_IO(INTERACTIVE_OBJ * io); long ARX_SCRIPT_Timer_GetFree(); void ARX_SCRIPT_SetMainEvent(INTERACTIVE_OBJ * io, char * newevent); void ARX_SCRIPT_EventStackExecute(); void ARX_SCRIPT_EventStackExecuteAll(); void ARX_SCRIPT_EventStackInit(); void ARX_SCRIPT_EventStackClear(); void ARX_SCRIPT_LaunchScriptSearch(char * search); void ARX_SCRIPT_ResetObject(INTERACTIVE_OBJ * io, long flags); void ARX_SCRIPT_Reset(INTERACTIVE_OBJ * io, long flags); long ARX_SCRIPT_GetSystemIOScript(INTERACTIVE_OBJ * io, char * name); void ARX_SCRIPT_ComputeShortcuts(EERIE_SCRIPT * es); void ARX_SCRIPT_AllowInterScriptExec(); long ARX_SCRIPT_CountTimers(); void ARX_SCRIPT_Timer_ClearByNum(long num); void ARX_SCRIPT_ResetAll(long flags); void ARX_SCRIPT_EventStackClearForIo(INTERACTIVE_OBJ * io); INTERACTIVE_OBJ * ARX_SCRIPT_Get_IO_Max_Events(); INTERACTIVE_OBJ * ARX_SCRIPT_Get_IO_Max_Events_Sent(); BOOL CheckScriptSyntax_Loading(INTERACTIVE_OBJ * io); BOOL CheckScriptSyntax(INTERACTIVE_OBJ * io); void ManageNPCMovement(INTERACTIVE_OBJ * io); void ReleaseScript(EERIE_SCRIPT * es); long GetNextWord(EERIE_SCRIPT * es, long i, char * temp, long flags = 0); void ARX_SCRIPT_Init_Event_Stats(); void ARX_SCRIPT_SetVar(INTERACTIVE_OBJ * io, char * name, char * content); void InitAllGlobalVars(); long SendInitScriptEvent(INTERACTIVE_OBJ * io); void ClearSubStack(EERIE_SCRIPT * es); //----------------------------------------------------------------------------- long MakeLocalised(char * text, _TCHAR * output, long maxsize, long lastspeechflag = 0); //----------------------------------------------------------------------------- long specialstrcmp(char * text, char * seek); void CheckHit(INTERACTIVE_OBJ * io, float ratio); long NotifyIOEvent(INTERACTIVE_OBJ * io, long msg, char * params); void ForceAnim(INTERACTIVE_OBJ * io, ANIM_HANDLE * ea); long ARX_SPEECH_AddLocalised(INTERACTIVE_OBJ * io, char * text, long duration = -1); long ARX_SPEECH_ForceLocalised(INTERACTIVE_OBJ * io, char * text, long duration = -1); long SendIOScriptEvent(INTERACTIVE_OBJ * io, long msg, char * params, char * eventname = NULL); long SendScriptEvent(EERIE_SCRIPT * es, long msg, char * params, INTERACTIVE_OBJ * io, char * eventname, long info = 0); long SendMsgToAllIO(long msg, char * dat); void Stack_SendIOScriptEvent(INTERACTIVE_OBJ * io, long msg, char * params, char * eventname); BOOL InSubStack(EERIE_SCRIPT * es, long pos); long GetSubStack(EERIE_SCRIPT * es); void AttemptMoveToTarget(INTERACTIVE_OBJ * io); void GetTargetPos(INTERACTIVE_OBJ * io, unsigned long smoothing = 0); void ARX_IOGROUP_Release(INTERACTIVE_OBJ * io); void CloneLocalVars(INTERACTIVE_OBJ * ioo, INTERACTIVE_OBJ * io); BOOL IsIOGroup(INTERACTIVE_OBJ * io, char * group); void ARX_SCRIPT_Free_All_Global_Variables(); void MakeLocalText(EERIE_SCRIPT * es, char * tx); void MakeGlobalText(char * tx); #endif