Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
1323 lines
28 KiB
C++
1323 lines
28 KiB
C++
//***************************************************************************
|
|
//
|
|
// ABLSTD.CPP
|
|
//
|
|
//***************************************************************************
|
|
|
|
#include "MW4Headers.hpp"
|
|
#include <stdio.h>
|
|
|
|
#ifndef ABLGEN_H
|
|
#include "ablgen.h"
|
|
#endif
|
|
|
|
#ifndef ABLERR_H
|
|
#include "ablerr.h"
|
|
#endif
|
|
|
|
#ifndef ABLSCAN_H
|
|
#include "ablscan.h"
|
|
#endif
|
|
|
|
#ifndef ABLSYMT_H
|
|
#include "ablsymt.h"
|
|
#endif
|
|
|
|
#ifndef ABLPARSE_H
|
|
#include "ablparse.h"
|
|
#endif
|
|
|
|
#include "ablfuncs.hpp"
|
|
#include "ablexec.h"
|
|
|
|
namespace ABL
|
|
{
|
|
|
|
//***************************************************************************
|
|
|
|
extern TokenCodeType curToken;
|
|
extern char wordString[];
|
|
extern TokenCodeType followParmList[];
|
|
extern TokenCodeType statementEndList[];
|
|
extern SymTableNodePtr symTableDisplay[];
|
|
extern long level;
|
|
extern TypePtr IntegerTypePtr;
|
|
extern TypePtr CharTypePtr;
|
|
extern TypePtr RealTypePtr;
|
|
extern TypePtr BooleanTypePtr;
|
|
extern Type DummyType;
|
|
|
|
extern SymTableNodePtr CurRoutineIdPtr;
|
|
|
|
stlport::vector<ABLRoutineTableEntry *> *g_ABLFunctions;
|
|
|
|
int AddABLFunction (const char *name,ABLParseFunction parse,ABLExecuteFunction execute)
|
|
{
|
|
ABLRoutineTableEntry *newguy;
|
|
int id;
|
|
|
|
// MSL 5.04 Merc Change
|
|
Verify (g_ABLFunctions->size () <= 400);
|
|
newguy = new ABLRoutineTableEntry;
|
|
Verify (newguy);
|
|
id = g_ABLFunctions->size ();
|
|
g_ABLFunctions->push_back (newguy);
|
|
newguy->Index (id);
|
|
newguy->Execute (execute);
|
|
newguy->Parse (parse);
|
|
newguy->Name (name);
|
|
enterStandardRoutine(newguy->Name (), id, DFN_FUNCTION);
|
|
return id;
|
|
}
|
|
|
|
int AddSpecificABLFunction (const char *name,int index,ABLParseFunction parse,ABLExecuteFunction execute)
|
|
{
|
|
ABLRoutineTableEntry *newguy;
|
|
|
|
Verify (g_ABLFunctions->size () <= 300);
|
|
newguy = new ABLRoutineTableEntry;
|
|
Verify (newguy);
|
|
Verify ((*g_ABLFunctions)[index] == NULL);
|
|
(*g_ABLFunctions)[index] = newguy;
|
|
newguy->Index (index);
|
|
newguy->Execute (execute);
|
|
newguy->Parse (parse);
|
|
newguy->Name (name);
|
|
enterStandardRoutine(newguy->Name (), index, DFN_FUNCTION);
|
|
return index;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
// PARSING HELPER FUNCTIONS
|
|
//***************************************************************************
|
|
|
|
void ABL_getInteger (bool lastParam = false);
|
|
void ABL_getReal (bool lastParam = false);
|
|
void ABL_getBoolean (bool lastParam = false);
|
|
void ABL_getIntegerOrReal (bool lastParam = false);
|
|
void ABL_getString (bool lastParam = false);
|
|
void ABL_getIntegerArray (bool lastParam = false);
|
|
void ABL_getRealArray (bool lastParam = false);
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getNoOpenParen (void)
|
|
{
|
|
|
|
if (curToken == TKN_LPAREN)
|
|
syntaxError(ABL_ERR_SYNTAX_WRONG_NUMBER_OF_PARAMS);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getOpenParen (void)
|
|
{
|
|
|
|
if (curToken == TKN_LPAREN)
|
|
getToken();
|
|
else
|
|
syntaxError(ABL_ERR_SYNTAX_WRONG_NUMBER_OF_PARAMS);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getInteger (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if (paramType != IntegerTypePtr)
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getIntegerForRevealNavPoint (bool lastParam)
|
|
{
|
|
// This is a solution for bug 1050. If the keyword identifier is revealnavpoint,
|
|
// We go ahead and check if the team dropzone really exists.
|
|
// If it does exist we go ahead and call the routine and parse.
|
|
// If not we skip the dropzone and continue processing next statment
|
|
if (searchSymTableDisplay(wordString) != NULL)
|
|
{
|
|
TypePtr paramType = baseType(expression());
|
|
if (paramType != IntegerTypePtr)
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
}
|
|
else
|
|
{
|
|
uncrunchToken();
|
|
uncrunchSymTableNodePtr();
|
|
uncrunchToken();
|
|
uncrunchToken();
|
|
uncrunchStatementMarker();
|
|
getToken();
|
|
uncrunchToken();
|
|
}
|
|
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getReal (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if (paramType != RealTypePtr)
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getBoolean (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if (paramType != BooleanTypePtr)
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getIntegerOrReal (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if ((paramType != IntegerTypePtr) && (paramType != RealTypePtr))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getString (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if ((paramType->form != FRM_ARRAY) || (paramType->info.array.elementTypePtr != CharTypePtr))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getIntegerArray (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if ((paramType->form != FRM_ARRAY) || (paramType->info.array.elementTypePtr != IntegerTypePtr))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void ABL_getRealArray (bool lastParam)
|
|
{
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if ((paramType->form != FRM_ARRAY) || (paramType->info.array.elementTypePtr != RealTypePtr))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
if (lastParam)
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
else
|
|
ifTokenGetElseError(TKN_COMMA, ABL_ERR_SYNTAX_MISSING_COMMA);
|
|
}
|
|
|
|
//***************************************************************************
|
|
// STANDARD ROUTINE PARSING FUNCTIONS
|
|
//***************************************************************************
|
|
|
|
TypePtr stdReturn (void)
|
|
{
|
|
|
|
// RETURN function
|
|
//
|
|
// PARAMS: <same as function return type>
|
|
//
|
|
// RETURN: NONE
|
|
|
|
if (curToken == TKN_LPAREN)
|
|
{
|
|
getToken();
|
|
TypePtr paramType = baseType(expression());
|
|
if (paramType != baseType((TypePtr)(CurRoutineIdPtr->typePtr)))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
}
|
|
else if (CurRoutineIdPtr->typePtr != NULL)
|
|
syntaxError(ABL_ERR_SYNTAX_WRONG_NUMBER_OF_PARAMS);
|
|
return NULL;
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdPrint (void)
|
|
{
|
|
|
|
// PRINT function:
|
|
//
|
|
// PARAMS: integer or real or string
|
|
//
|
|
// RETURN: NONE
|
|
|
|
ABL_getOpenParen();
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if ((paramType != IntegerTypePtr) &&
|
|
(paramType != RealTypePtr) &&
|
|
(paramType != CharTypePtr) &&
|
|
((paramType->form != FRM_ARRAY) || (paramType->info.array.elementTypePtr != CharTypePtr)))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
return NULL;
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdConcat (void)
|
|
{
|
|
|
|
// PRINT function:
|
|
//
|
|
// PARAMS: char array
|
|
//
|
|
// integer, real or char array
|
|
//
|
|
// RETURN: integer (resulting length, not including NULL)
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getString();
|
|
|
|
TypePtr paramType = baseType(expression());
|
|
if ((paramType != IntegerTypePtr) &&
|
|
(paramType != RealTypePtr) &&
|
|
(paramType != CharTypePtr) &&
|
|
(paramType != BooleanTypePtr) &&
|
|
((paramType->form != FRM_ARRAY) || (paramType->info.array.elementTypePtr != CharTypePtr)))
|
|
syntaxError(ABL_ERR_SYNTAX_INCOMPATIBLE_TYPES);
|
|
|
|
ifTokenGetElseError(TKN_RPAREN, ABL_ERR_SYNTAX_MISSING_RPAREN);
|
|
|
|
return(IntegerTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdAbs (void)
|
|
{
|
|
|
|
// ABS function:
|
|
//
|
|
// PARAMS: real
|
|
//
|
|
// RETURN: real
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getReal(true);
|
|
return(RealTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdRound (void)
|
|
{
|
|
|
|
// ROUND function:
|
|
//
|
|
// PARAMS: real
|
|
//
|
|
// RETURN: integer
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getReal(true);
|
|
return(IntegerTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdTrunc (void)
|
|
{
|
|
|
|
// TRUNC function:
|
|
//
|
|
// PARAMS: real
|
|
//
|
|
// RETURN: integer
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getIntegerOrReal(true);
|
|
return(IntegerTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdSqrt (void)
|
|
{
|
|
|
|
// ABS function:
|
|
//
|
|
// PARAMS: real
|
|
//
|
|
// RETURN: real
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getIntegerOrReal(true);
|
|
return(RealTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdRandom (void)
|
|
{
|
|
|
|
// RANDOM function:
|
|
//
|
|
// PARAMS: integer
|
|
//
|
|
// RETURN: integer
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger(true);
|
|
return(IntegerTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdGetModHandle (void)
|
|
{
|
|
|
|
// HANDLE function:
|
|
//
|
|
// PARAMS: NONE
|
|
//
|
|
// RETURN: integer
|
|
|
|
ABL_getNoOpenParen();
|
|
return(IntegerTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdGetModName (void)
|
|
{
|
|
|
|
// HANDLE function:
|
|
//
|
|
// PARAMS: NONE
|
|
//
|
|
// RETURN: string
|
|
|
|
ABL_getNoOpenParen();
|
|
// return(StringTypePtr);
|
|
return(NULL);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdSetModName (void)
|
|
{
|
|
|
|
// HANDLE function:
|
|
//
|
|
// PARAMS: string
|
|
//
|
|
// RETURN: NONE
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getString(true);
|
|
return NULL;
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdSetMaxLoops (void)
|
|
{
|
|
|
|
//----------------------------------------------------------------------
|
|
//
|
|
// SET MAX LOOPS function:
|
|
//
|
|
// Sets the max number of loops that may occur (in a for, while or
|
|
// repeat loop) before an infinite loop run-time error occurs.
|
|
//
|
|
// PARAMS: integer
|
|
//
|
|
// RETURN: none
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger(true);
|
|
return(NULL);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdFatal (void)
|
|
{
|
|
|
|
//----------------------------------------------------------------------
|
|
//
|
|
// FATAL function:
|
|
//
|
|
// If the debugger is active, this immediately jumps into debug mode.
|
|
// Otherwise, it causes a fatal and exits the game (displaying the
|
|
// string passed in).
|
|
//
|
|
// PARAMS: integer fatal code to display
|
|
//
|
|
// char[] message
|
|
//
|
|
// RETURN: none
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger();
|
|
ABL_getString(true);
|
|
return(NULL);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdAssert (void)
|
|
{
|
|
|
|
//----------------------------------------------------------------------
|
|
//
|
|
// ASSERT function:
|
|
//
|
|
// If the debugger is active, this immediately jumps into debug mode
|
|
// if expression is FALSE. Otherwise, the assert statement is ignored
|
|
// unless the #debug directive has been issued in the module. If
|
|
// so, a fatal occurs and exits the game (displaying the
|
|
// string passed in).
|
|
//
|
|
// PARAMS: boolean expression
|
|
//
|
|
// integer assert code to display
|
|
//
|
|
// char[] message
|
|
//
|
|
// RETURN: none
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getBoolean();
|
|
ABL_getInteger();
|
|
ABL_getString(true);
|
|
return(NULL);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr stdHandle (void)
|
|
{
|
|
|
|
// HANDLE function:
|
|
//
|
|
// PARAMS: NONE
|
|
//
|
|
// RETURN: integer
|
|
|
|
ABL_getNoOpenParen();
|
|
return(IntegerTypePtr);
|
|
}
|
|
|
|
TypePtr ParseNoParamReal (void) // jcem
|
|
{
|
|
ABL_getNoOpenParen ();
|
|
return RealTypePtr;
|
|
}
|
|
TypePtr ParseNoParamInteger (void)
|
|
{
|
|
ABL_getNoOpenParen ();
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr ParseNoParamBoolean (void)
|
|
{
|
|
ABL_getNoOpenParen ();
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr ParseNoParam (void)
|
|
{
|
|
ABL_getNoOpenParen ();
|
|
return NULL;
|
|
}
|
|
TypePtr ParseOneBoolean (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseOneIntegerInteger (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (true);
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr ParseOneIntegerBoolean (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr ParseOneInteger (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseOneIntegerForRevealNavPoint (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerForRevealNavPoint (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseTwoIntegerInteger (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr ParseTwoIntegerBoolean (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr ParseTwoInteger (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseIntegerReal (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr ParseTwoIntegerReal (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseThreeInteger (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseFourInteger (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseIntegerBoolean (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseString (void)
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getString (true);
|
|
return NULL;
|
|
}
|
|
TypePtr ParseStringBoolean (void)
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getString (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr ParseStringInteger (void)
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getString ();
|
|
ABL_getInteger(true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbFindObject()
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getInteger(); // AI
|
|
ABL_getInteger(); // FA_ alignment
|
|
ABL_getInteger(); // FT_ type
|
|
ABL_getInteger(); // FC_ criteria
|
|
ABL_getInteger(); // FF_ flags
|
|
ABL_getInteger(true); // distance
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr hbFindObjectExcept()
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getInteger(); // AI
|
|
ABL_getInteger(); // FA_ alignment
|
|
ABL_getInteger(); // FT_ type
|
|
ABL_getInteger(); // FC_ criteria
|
|
ABL_getInteger(); // FF_ flags
|
|
ABL_getInteger(); // distance
|
|
ABL_getInteger(true); // object ID
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr ParsePlayerAI (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbgetLocation (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray(true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbDistance (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerArray();
|
|
ABL_getIntegerArray(true);
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr hbgetNearestPathPoint (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray(true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbsetSkill (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbsetSkillLevel (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbSetFiringDelay (void)
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getInteger();
|
|
ABL_getReal();
|
|
ABL_getReal(true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbsetEliteLevel (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbisWithin (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbisWithinLoc (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray();
|
|
ABL_getInteger (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
|
|
TypePtr hbisEqual (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerOrReal ();
|
|
ABL_getIntegerOrReal (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbisLesser (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerOrReal ();
|
|
ABL_getIntegerOrReal (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbisGreater (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerOrReal ();
|
|
ABL_getIntegerOrReal (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbisWithinNav (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbtimeLesser (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerOrReal (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbtimeGreater (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerOrReal (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hbteleport (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray(true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbteleportAndLook (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray (); // point
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray(true); // point
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbSetCombatLeash (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbpauseTimer (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbLaunchSignalFlare(void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerArray(true);
|
|
return NULL;
|
|
}
|
|
TypePtr hbLaunchFireworks(void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerArray();
|
|
ABL_getInteger(true);
|
|
return NULL;
|
|
}
|
|
|
|
//orders
|
|
|
|
TypePtr hborderFormOnSpot(void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getIntegerArray ();
|
|
ABL_getIntegerArray ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hborderFormationMove(void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hborderMoveTo (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean ();
|
|
ABL_getBoolean (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hborderMoveResumePatrol (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean ();
|
|
ABL_getBoolean (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hborderMoveFollow (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hborderMoveSit (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
TypePtr hborderMoveToLocPoint (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerArray();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean ();
|
|
ABL_getBoolean (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hborderMoveToObject (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hborderAttack (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getBoolean (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
TypePtr hborderAttackTactic (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getBoolean (true);
|
|
return BooleanTypePtr;
|
|
}
|
|
|
|
TypePtr hborderShootPoint (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getIntegerArray();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbGroupAllWithin()
|
|
{
|
|
ABL_getOpenParen();
|
|
ABL_getInteger();
|
|
ABL_getInteger();
|
|
ABL_getInteger(true);
|
|
return(BooleanTypePtr);
|
|
}
|
|
|
|
//camera ship
|
|
|
|
TypePtr hbplay2DAnim (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
|
|
TypePtr hbsetinternalcamera (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbsetactivecamera (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbsetcameraFOV (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbfadetoblack (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbfadefromblack (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbfadetowhite (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbfadefromwhite (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbcamerafollowobject (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbcamerafollowpath (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbcameraposition (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbcameraoffset (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hboverridecamerapitch (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hboverridecamerayaw (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
|
|
TypePtr hboverridecameraroll (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbtargetfollowobject (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbtargetfollowpath (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbtargetposition (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal (true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr hbtargetoffset (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getReal ();
|
|
ABL_getBoolean (true);
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
//***************************************************************************
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr hbGetMemoryReal (void)
|
|
{
|
|
|
|
//----------------------------------------------------------------------
|
|
//
|
|
// GET MEMORY REAL function:
|
|
//
|
|
// Returns current real value in memory cell of pilot.
|
|
//
|
|
// PARAMS: integer
|
|
//
|
|
// RETURN: real
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger();
|
|
ABL_getInteger(true);
|
|
return(RealTypePtr);
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr hbSetMemoryInteger (void)
|
|
{
|
|
|
|
//-------------------------------
|
|
// SET MEMORY INTEGER function:
|
|
//
|
|
// PARAMS: integer, integer
|
|
//
|
|
// RETURN: NONE
|
|
//-------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger();
|
|
ABL_getInteger();
|
|
ABL_getInteger(true);
|
|
return NULL;
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr hbSetMemoryReal (void)
|
|
{
|
|
|
|
//-------------------------------
|
|
// SET MEMORY REAL function:
|
|
//
|
|
// PARAMS: integer, real
|
|
//
|
|
// RETURN: NONE
|
|
//-------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger();
|
|
ABL_getInteger();
|
|
ABL_getReal(true);
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr ParseEndMission (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getBoolean ();
|
|
ABL_getInteger (true);
|
|
return NULL;
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
TypePtr hbSetDebugString (void)
|
|
{
|
|
|
|
//----------------------------------------------------------------------
|
|
//
|
|
// Set Debug String function:
|
|
//
|
|
// Sets the debug string for the specified object.
|
|
//
|
|
// PARAMS: integer object id
|
|
//
|
|
// integer string id
|
|
//
|
|
// char[] string
|
|
//
|
|
// RETURN: NONE
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
ABL_getOpenParen();
|
|
ABL_getInteger(false);
|
|
ABL_getInteger(false);
|
|
ABL_getString(true);
|
|
return(NULL);
|
|
}
|
|
|
|
TypePtr ParseShowTimer (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (); // timer id
|
|
ABL_getInteger (); // objective id
|
|
ABL_getInteger (); // time offset
|
|
ABL_getBoolean (); // time on left
|
|
ABL_getInteger (); // color
|
|
ABL_getBoolean (true); // visible
|
|
return NULL;
|
|
}
|
|
TypePtr ParseShowHelpArrow (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (); // rotation
|
|
ABL_getIntegerArray (); // point
|
|
ABL_getInteger (); // color
|
|
ABL_getBoolean (true); // visible
|
|
return NULL;
|
|
}
|
|
TypePtr ParseMakeColor (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (); // red
|
|
ABL_getInteger (); // green
|
|
ABL_getInteger (); // blue
|
|
ABL_getInteger (true); // alpha
|
|
return IntegerTypePtr;
|
|
}
|
|
TypePtr ParseSetHelpArrow (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getInteger (); // rotation
|
|
ABL_getInteger (); // x
|
|
ABL_getInteger (); // y
|
|
ABL_getInteger (); // color
|
|
ABL_getBoolean (); // visible
|
|
ABL_getInteger (true); // time
|
|
return NULL;
|
|
}
|
|
|
|
TypePtr ParsePlayLancemateSound (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getString ();
|
|
ABL_getInteger (true); // lanceid
|
|
|
|
return BooleanTypePtr;
|
|
}
|
|
|
|
TypePtr ParseStartMusic (void)
|
|
{
|
|
ABL_getOpenParen ();
|
|
ABL_getString (); // wav name
|
|
ABL_getReal (); // time to fade out old music
|
|
ABL_getReal (); // time to fade in new music
|
|
ABL_getInteger (true); // volume for new music
|
|
|
|
return BooleanTypePtr;
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
TypePtr standardRoutineCall (SymTableNodePtr routineIdPtr)
|
|
{
|
|
Verify ((*g_ABLFunctions)[routineIdPtr->defn.info.routine.key] != NULL);
|
|
return(*g_ABLFunctions)[routineIdPtr->defn.info.routine.key]->Parse ();
|
|
}
|
|
|
|
//***************************************************************************
|
|
|
|
}
|
|
|
|
|
|
|