|
Amulets & Armor
v1.02
Open Source Game
|
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) |
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.
| #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 T_word16(* T_scriptCommand)(T_scriptHeader *script, T_word16 position) |
| typedef struct T_scriptHeader_ T_scriptHeader |
| 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.
| 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 |
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.
ScriptGetOwner returns the previously stored pointer to the owner of this script.
| script | – Script to get owner of. |
ScriptInitialize sets up the structures necessary to do all future script accesses. Call this once at the beginning of the program.
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.
| number | – Number of script to lock. |
ScriptRunPlace starts execution of a script file at the given place marker.
| script | – Script Instance to execute place |
| placeNumber | – Number of place to execute |
ScriptSetOwner declares the owner of this script.
| script | – Script to set owner of. |
| owner | – General pointer to owner |
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.
| script | – Previously locked script. |
1.8.4