Amulets & Armor  v1.02
Open Source Game
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Data Structures | Macros | Typedefs | Functions
SCRIPT

Script System. More...

Data Structures

struct  T_continueData
 
struct  T_scriptDataItem
 
struct  T_scriptHeader_
 
struct  T_scriptInstance
 
union  T_scriptNumberOrString
 
struct  T_scriptString
 

Macros

#define NUM_SCRIPT_COMMANDS   66
 
#define OBJECT_SCRIPT_ATTR_ANGLE   9
 
#define OBJECT_SCRIPT_ATTR_MAX_VELOCITY   3
 
#define OBJECT_SCRIPT_ATTR_STANCE   4
 
#define OBJECT_SCRIPT_ATTR_UNKNOWN   10
 
#define OBJECT_SCRIPT_ATTR_WAS_BLOCKED   5
 
#define OBJECT_SCRIPT_ATTR_X   0
 
#define OBJECT_SCRIPT_ATTR_X16   6
 
#define OBJECT_SCRIPT_ATTR_Y   1
 
#define OBJECT_SCRIPT_ATTR_Y16   7
 
#define OBJECT_SCRIPT_ATTR_Z   2
 
#define OBJECT_SCRIPT_ATTR_Z16   8
 
#define SCRIPT_INSTANCE_TAG   (*((T_word32 *)"SiT"))
 
#define SCRIPT_INSTANCE_TAG_BAD   (*((T_word32 *)"sIb"))
 
#define SCRIPT_MAX_STRING   80
 
#define SCRIPT_TAG   (*((T_word32 *)"SpT"))
 
#define SCRIPT_TAG_BAD   (*((T_word32 *)"sBd"))
 
#define SCRIPT_TAG_DISCARDABLE   (*((T_word32 *)"DsP"))
 
#define ScriptGetCode(p_script)   ((p_script)->p_code)
 
#define ScriptGetCodeByte(p_script, codeIndex)   ((p_script)->p_code[(codeIndex)])
 
#define ScriptGetCodeWord(p_script, codeIndex)   (*((T_word16 *)(&((p_script)->p_code[(codeIndex)]))))
 
#define ScriptGetEventPosition(p_script, eventNum)   ((p_script)->p_events[(eventNum)])
 
#define ScriptGetEvents(p_script)   ((p_script)->p_events)
 
#define ScriptGetFirst()   (G_firstScript)
 
#define ScriptGetHighestEvent(p_script)   ((p_script)->highestEvent)
 
#define ScriptGetHighestPlace(p_script)   ((p_script)->highestPlace)
 
#define ScriptGetLockCount(p_script)   ((p_script)->lockCount)
 
#define ScriptGetNext(p_script)   ((p_script)->p_next)
 
#define ScriptGetNumber(p_script)   ((p_script)->number)
 
#define ScriptGetPlacePosition(p_script, placeNum)   ((p_script)->p_places[(placeNum)])
 
#define ScriptGetPlaces(p_script)   ((p_script)->p_places)
 
#define ScriptGetPrevious(p_script)   ((p_script)->p_prev)
 
#define ScriptGetSizeCode(p_script)   ((p_script)->sizeCode)
 
#define ScriptGetTag(p_script)   ((p_script)->tag)
 
#define ScriptHandleToInstance(p_handle)   ((T_scriptInstance *)p_handle)
 
#define ScriptInstanceGetHeader(p_inst)   ((p_inst)->p_header)
 
#define ScriptInstanceGetOwner(p_inst)   ((p_inst)->owner)
 
#define ScriptInstanceGetTag(p_inst)   ((p_inst)->instanceTag)
 
#define ScriptInstanceSetHeader(p_inst, header)   (((p_inst)->p_header) = (header))
 
#define ScriptInstanceSetOwner(p_instance, newOwner)   (((p_instance)->owner) = (newOwner))
 
#define ScriptInstanceSetTag(p_instance, tag)   (((p_instance)->instanceTag) = (tag))
 
#define ScriptInstanceToHandle(p_instance)   ((T_script)p_instance)
 
#define ScriptIsInitialized()   (G_scriptInit)
 
#define ScriptMakeInitialized()   (G_scriptInit = TRUE)
 
#define ScriptMakeNotInitialized()   (G_scriptInit = FALSE)
 
#define ScriptSetCode(p_script, code)   (((p_script)->p_code) = (code))
 
#define ScriptSetEvents(p_script, events)   (((p_script)->p_events) = (events))
 
#define ScriptSetFirst(p_first)   (G_firstScript = (p_first))
 
#define ScriptSetLockCount(p_script, newLockCount)   (((p_script)->lockCount) = (newLockCount))
 
#define ScriptSetNext(p_script, next)   (((p_script)->p_next) = (next))
 
#define ScriptSetNumber(p_script, newnumber)   (((p_script)->number) = (newnumber))
 
#define ScriptSetPlaces(p_script, places)   (((p_script)->p_places) = (places))
 
#define ScriptSetPrevious(p_script, prev)   (((p_script)->p_prev) = (prev))
 
#define ScriptSetTag(p_script, newTag)   (((p_script)->tag) = (newTag))
 
#define SYSTEM_VAR_SELF   0
 
#define SYSTEM_VAR_TIME   1
 

Typedefs

typedef T_word16(* T_scriptCommand )(T_scriptHeader *script, T_word16 position)
 
typedef struct T_scriptHeader_ T_scriptHeader
 

Functions

E_Boolean ScriptEvent (T_script script, T_word16 eventNumber, E_scriptDataType type1, T_void *p_data1, E_scriptDataType type2, T_void *p_data2, E_scriptDataType type3, T_void *p_data3)
 
T_void ScriptFinish (T_void)
 
T_word32 ScriptGetOwner (T_script script)
 
T_void ScriptInitialize (T_void)
 
T_script ScriptLock (T_word32 number)
 
E_Boolean ScriptRunPlace (T_script script, T_word16 placeNumber)
 
T_void ScriptSetOwner (T_script script, T_word32 owner)
 
T_void ScriptUnlock (T_script script)
 

Detailed Description

Script System.

All scripts on maps go through here. The script system is fairly simple and close to something like assembly language. Each subroutine in a script is given a number and you only have comments in the code to keep track of which is which. Triggers numbers on maps are used to call each script.

See Also
http://www.amuletsandarmor.com/AALicense.txt

Macro Definition Documentation

#define NUM_SCRIPT_COMMANDS   66
#define OBJECT_SCRIPT_ATTR_ANGLE   9
#define OBJECT_SCRIPT_ATTR_MAX_VELOCITY   3
#define OBJECT_SCRIPT_ATTR_STANCE   4
#define OBJECT_SCRIPT_ATTR_UNKNOWN   10
#define OBJECT_SCRIPT_ATTR_WAS_BLOCKED   5
#define OBJECT_SCRIPT_ATTR_X   0
#define OBJECT_SCRIPT_ATTR_X16   6
#define OBJECT_SCRIPT_ATTR_Y   1
#define OBJECT_SCRIPT_ATTR_Y16   7
#define OBJECT_SCRIPT_ATTR_Z   2
#define OBJECT_SCRIPT_ATTR_Z16   8
#define SCRIPT_INSTANCE_TAG   (*((T_word32 *)"SiT"))
#define SCRIPT_INSTANCE_TAG_BAD   (*((T_word32 *)"sIb"))
#define SCRIPT_MAX_STRING   80
#define SCRIPT_TAG   (*((T_word32 *)"SpT"))
#define SCRIPT_TAG_BAD   (*((T_word32 *)"sBd"))
#define SCRIPT_TAG_DISCARDABLE   (*((T_word32 *)"DsP"))
#define ScriptGetCode (   p_script)    ((p_script)->p_code)
#define ScriptGetCodeByte (   p_script,
  codeIndex 
)    ((p_script)->p_code[(codeIndex)])
#define ScriptGetCodeWord (   p_script,
  codeIndex 
)    (*((T_word16 *)(&((p_script)->p_code[(codeIndex)]))))
#define ScriptGetEventPosition (   p_script,
  eventNum 
)    ((p_script)->p_events[(eventNum)])
#define ScriptGetEvents (   p_script)    ((p_script)->p_events)
#define ScriptGetFirst ( )    (G_firstScript)
#define ScriptGetHighestEvent (   p_script)    ((p_script)->highestEvent)
#define ScriptGetHighestPlace (   p_script)    ((p_script)->highestPlace)
#define ScriptGetLockCount (   p_script)    ((p_script)->lockCount)
#define ScriptGetNext (   p_script)    ((p_script)->p_next)
#define ScriptGetNumber (   p_script)    ((p_script)->number)
#define ScriptGetPlacePosition (   p_script,
  placeNum 
)    ((p_script)->p_places[(placeNum)])
#define ScriptGetPlaces (   p_script)    ((p_script)->p_places)
#define ScriptGetPrevious (   p_script)    ((p_script)->p_prev)
#define ScriptGetSizeCode (   p_script)    ((p_script)->sizeCode)
#define ScriptGetTag (   p_script)    ((p_script)->tag)
#define ScriptHandleToInstance (   p_handle)    ((T_scriptInstance *)p_handle)
#define ScriptInstanceGetHeader (   p_inst)    ((p_inst)->p_header)
#define ScriptInstanceGetOwner (   p_inst)    ((p_inst)->owner)
#define ScriptInstanceGetTag (   p_inst)    ((p_inst)->instanceTag)
#define ScriptInstanceSetHeader (   p_inst,
  header 
)    (((p_inst)->p_header) = (header))
#define ScriptInstanceSetOwner (   p_instance,
  newOwner 
)    (((p_instance)->owner) = (newOwner))
#define ScriptInstanceSetTag (   p_instance,
  tag 
)    (((p_instance)->instanceTag) = (tag))
#define ScriptInstanceToHandle (   p_instance)    ((T_script)p_instance)
#define ScriptIsInitialized ( )    (G_scriptInit)
#define ScriptMakeInitialized ( )    (G_scriptInit = TRUE)
#define ScriptMakeNotInitialized ( )    (G_scriptInit = FALSE)
#define ScriptSetCode (   p_script,
  code 
)    (((p_script)->p_code) = (code))
#define ScriptSetEvents (   p_script,
  events 
)    (((p_script)->p_events) = (events))
#define ScriptSetFirst (   p_first)    (G_firstScript = (p_first))
#define ScriptSetLockCount (   p_script,
  newLockCount 
)    (((p_script)->lockCount) = (newLockCount))
#define ScriptSetNext (   p_script,
  next 
)    (((p_script)->p_next) = (next))
#define ScriptSetNumber (   p_script,
  newnumber 
)    (((p_script)->number) = (newnumber))
#define ScriptSetPlaces (   p_script,
  places 
)    (((p_script)->p_places) = (places))
#define ScriptSetPrevious (   p_script,
  prev 
)    (((p_script)->p_prev) = (prev))
#define ScriptSetTag (   p_script,
  newTag 
)    (((p_script)->tag) = (newTag))
#define SYSTEM_VAR_SELF   0
#define SYSTEM_VAR_TIME   1

Typedef Documentation

typedef T_word16(* T_scriptCommand)(T_scriptHeader *script, T_word16 position)

Function Documentation

E_Boolean ScriptEvent ( T_script  script,
T_word16  eventNumber,
E_scriptDataType  type1,
T_void p_data1,
E_scriptDataType  type2,
T_void p_data2,
E_scriptDataType  type3,
T_void p_data3 
)

ScriptEvent runs an event in a script file. If the script has no event for the script, a FALSE code is returned.

NOTE: For each ScriptUnlock you do, you must have already done just as many ScriptLocks.

Parameters
script– Script Instance to execute event
eventNumber– Number of event to execute
type1– Type of parameter 1
p_data1– Pointer to data parameter 1
type2– Type of parameter 2
p_data2– Pointer to data parameter 2
type3– Type of parameter 3
p_data3– Pointer to data parameter 3
T_void ScriptFinish ( T_void  )

ScriptFinish closes out the scripting system. All memory and variables must be returned to their normal state.

NOTE: You MUST unlock all scripts before calling this command.

T_word32 ScriptGetOwner ( T_script  script)

ScriptGetOwner returns the previously stored pointer to the owner of this script.

Parameters
script– Script to get owner of.
Returns
General pointer to owner
T_void ScriptInitialize ( T_void  )

ScriptInitialize sets up the structures necessary to do all future script accesses. Call this once at the beginning of the program.

T_script ScriptLock ( T_word32  number)

ScriptLock loads a script file from disk and creates a handle to the script. If the script is already in memory, a instance is made and the handle to that instance is returned. All script commands require a script instance handle.

NOTE: You MUST make a call to ScriptInitialize before using this routine.

Parameters
number– Number of script to lock.
E_Boolean ScriptRunPlace ( T_script  script,
T_word16  placeNumber 
)

ScriptRunPlace starts execution of a script file at the given place marker.

Parameters
script– Script Instance to execute place
placeNumber– Number of place to execute
Returns
FALSE if not executed
T_void ScriptSetOwner ( T_script  script,
T_word32  owner 
)

ScriptSetOwner declares the owner of this script.

Parameters
script– Script to set owner of.
owner– General pointer to owner
T_void ScriptUnlock ( T_script  script)

ScriptUnlock releases a script that was previously locked. If possible, the script code will try to stay around as long as possible to keep from do excess disk accesses.

NOTE: For each ScriptUnlock you do, you must have already done just as many ScriptLocks.

Parameters
script– Previously locked script.