diff options
Diffstat (limited to 'devtools/create_hugo/create_hugo.h')
-rw-r--r-- | devtools/create_hugo/create_hugo.h | 555 |
1 files changed, 555 insertions, 0 deletions
diff --git a/devtools/create_hugo/create_hugo.h b/devtools/create_hugo/create_hugo.h new file mode 100644 index 0000000000..f30c186877 --- /dev/null +++ b/devtools/create_hugo/create_hugo.h @@ -0,0 +1,555 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program 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 2 + * of the License, or (at your option) any later version. + + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CREATE_HUGO_H +#define CREATE_HUGO_H + +#define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0]))) + +#define DATAALIGNMENT 4 + +#define HUGO_DAT_VER_MAJ 0 // 1 byte +#define HUGO_DAT_VER_MIN 42 // 1 byte + +typedef unsigned char uint8; +typedef unsigned char byte; +typedef unsigned short uint16; +typedef signed short int16; + +// Structure to define an EXIT or other collision-activated hotspot +struct hotspot_t { + int screenIndex; // Screen in which hotspot appears + int x1, y1, x2, y2; // Bounding box of hotspot + uint16 actIndex; // Index of the action list to carry out if a 'hit' + int16 viewx, viewy, direction; // Used in auto-route mode +}; + +struct target_t { // Secondary target for action + uint16 nounIndex; // Index of the noun + uint16 verbIndex; // Index of the verb +}; + +#define MAX_TARGET 12 // Max # secondary "MakeUseOf" targets + +struct uses_t { // Define uses of certain objects + int16 objid; // Primary object + uint16 dataIndex; // Index of the string if no secondary object matches + target_t targets[MAX_TARGET]; // List of secondary targets +}; + +// Following is structure of verbs and nouns for 'background' objects +// These are objects that appear in the various screens, but nothing +// interesting ever happens with them. Rather than just be dumb and say +// "don't understand" we produce an interesting msg to keep user sane. +struct background_t { + uint16 verbIndex; // Index of the verb + uint16 nounIndex; // Index of the noun + int commentIndex; // Index of comment produced on match + bool matchFl; // TRUE if noun must match when present + byte roomState; // "State" of room. Comments might differ. + byte bonusIndex; // Index of bonus score (0 = no bonus) +}; + +typedef background_t *objectList_t; + +struct cmd { + uint16 verbIndex; // Index of the verb + uint16 reqIndex; // Index of the list of required objects + uint16 textDataNoCarryIndex; // Index of the string if any of above not carried + byte reqstate; // required state for verb to be done + byte newstate; // new states if verb done + uint16 textDataWrongIndex; // Index of the string if wrong state + uint16 textDataDoneIndex; // Index of the string if verb done + uint16 actIndex; // Index of the action list if verb done +}; + +struct seq_t { // Linked list of images + byte *imagePtr; // ptr to image + uint16 bytesPerLine8; // bytes per line (8 bits) + uint16 lines; // lines + uint16 x1, x2, y1, y2; // Offsets from x,y: data bounding box + seq_t *nextSeqPtr; // ptr to next record +}; + +struct seqList_t { + uint16 imageNbr; // Number of images in sequence + seq_t *seqPtr; // Ptr to sequence structure +}; + +#define MAX_SEQUENCES 4 // Number of sequences of images in object +struct object_t { + uint16 nounIndex; // String identifying object + uint16 dataIndex; // String describing the object + uint16 *stateDataIndex; // Added by Strangerke to handle the LOOK_S state-dependant descriptions + path_t pathType; // Describe path object follows + int vxPath, vyPath; // Velocity (e.g. for CHASE) + uint16 actIndex; // Action list to do on collision with hero + byte seqNumb; // Number of sequences in list + seq_t *currImagePtr; // Sequence image currently in use + seqList_t seqList[MAX_SEQUENCES]; // Array of sequence structure ptrs and lengths + cycle_t cycling; // Whether cycling, forward or backward + byte cycleNumb; // No. of times to cycle + byte frameInterval; // Interval (in ticks) between frames + byte frameTimer; // Decrementing timer for above + char radius; // Defines sphere of influence by hero + byte screenIndex; // Screen in which object resides + int x, y; // Current coordinates of object + int oldx, oldy; // Previous coordinates of object + char vx, vy; // Velocity + byte objValue; // Value of object + int genericCmd; // Bit mask of 'generic' commands for object + uint16 cmdIndex; // ptr to list of cmd structures for verbs + bool carriedFl; // TRUE if object being carried + byte state; // state referenced in cmd list + bool verbOnlyFl; // TRUE if verb-only cmds allowed e.g. sit,look + byte priority; // Whether object fore, background or floating + int16 viewx, viewy; // Position to view object from (or 0 or -1) + int16 direction; // Direction to view object from + byte curSeqNumb; // Save which seq number currently in use + byte curImageNumb; // Save which image of sequence currently in use + char oldvx; // Previous vx (used in wandering) + char oldvy; // Previous vy +}; + +struct act0 { // Type 0 - Schedule + byte actType; // The type of action + int timer; // Time to set off the action + uint16 actIndex; // Index of an action list +}; + +struct act1 { // Type 1 - Start an object + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int cycleNumb; // Number of times to cycle + cycle_t cycle; // Direction to start cycling +}; + +struct act2 { // Type 2 - Initialise an object coords + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int x, y; // Coordinates +}; + +struct act3 { // Type 3 - Prompt user for text + byte actType; // The type of action + int timer; // Time to set off the action + uint16 promptIndex; // index of prompt string + int *responsePtr; // Array of indexes to valid response + // string(s) (terminate list with -1) + uint16 actPassIndex; // Index of the action list if success + uint16 actFailIndex; // Index of the action list if failure + bool encoded; // (HUGO 1 DOS ONLY) Whether response is encoded or not +}; + +struct act4 { // Type 4 - Set new background color + byte actType; // The type of action + int timer; // Time to set off the action + long newBkgColor; // New color +}; + +struct act5 { // Type 5 - Initialise an object velocity + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int vx, vy; // velocity +}; + +struct act6 { // Type 6 - Initialise an object carrying + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + bool carriedFl; // carrying +}; + +struct act7 { // Type 7 - Initialise an object to hero's coords + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number +}; + +struct act8 { // Type 8 - switch to new screen + byte actType; // The type of action + int timer; // Time to set off the action + int screenIndex; // The new screen number +}; + +struct act9 { // Type 9 - Initialise an object state + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + byte newState; // New state +}; + +struct act10 { // Type 10 - Initialise an object path type + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int newPathType; // New path type + char vxPath, vyPath; // Max delta velocities e.g. for CHASE +}; + +struct act11 { // Type 11 - Conditional on object's state + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + byte stateReq; // Required state + uint16 actPassIndex; // Index of the action list if success + uint16 actFailIndex; // Index of the action list if failure +}; + +struct act12 { // Type 12 - Simple text box + byte actType; // The type of action + int timer; // Time to set off the action + int stringIndex; // Index (enum) of string in strings.dat +}; + +struct act13 { // Type 13 - Swap first object image with second + byte actType; // The type of action + int timer; // Time to set off the action + int obj1; // Index of first object + int obj2; // 2nd +}; + +struct act14 { // Type 14 - Conditional on current screen + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The required object + int screenReq; // The required screen number + uint16 actPassIndex; // Index of the action list if success + uint16 actFailIndex; // Index of the action list if failure +}; + +struct act15 { // Type 15 - Home in on an object + byte actType; // The type of action + int timer; // Time to set off the action + int obj1; // The object number homing in + int obj2; // The object number to home in on + char vx, vy; // Max delta velocities +}; +// Note: Don't set a sequence at time 0 of a new screen, it causes +// problems clearing the boundary bits of the object! t>0 is safe +struct act16 { // Type 16 - Set curr_seq_p to seq + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int seqIndex; // The index of seq array to set to +}; + +struct act17 { // Type 17 - SET obj individual state bits + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int stateMask; // The mask to OR with current obj state +}; + +struct act18 { // Type 18 - CLEAR obj individual state bits + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int stateMask; // The mask to ~AND with current obj state +}; + +struct act19 { // Type 19 - TEST obj individual state bits + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int stateMask; // The mask to AND with current obj state + uint16 actPassIndex; // Index of the action list (all bits set) + uint16 actFailIndex; // Index of the action list (not all set) +}; + +struct act20 { // Type 20 - Remove all events with this type of action + byte actType; // The type of action + int timer; // Time to set off the action + byte actTypeDel; // The action type to remove +}; + +struct act21 { // Type 21 - Gameover. Disable hero & commands + byte actType; // The type of action + int timer; // Time to set off the action +}; + +struct act22 { // Type 22 - Initialise an object to hero's coords + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number +}; + +struct act23 { // Type 23 - Exit game back to DOS + byte actType; // The type of action + int timer; // Time to set off the action +}; + +struct act24 { // Type 24 - Get bonus score + byte actType; // The type of action + int timer; // Time to set off the action + int pointIndex; // Index into points array +}; + +struct act25 { // Type 25 - Conditional on bounding box + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The required object number + int x1, y1, x2, y2; // The bounding box + uint16 actPassIndex; // Index of the action list if success + uint16 actFailIndex; // Index of the action list if failure +}; + +struct act26 { // Type 26 - Play a sound + byte actType; // The type of action + int timer; // Time to set off the action + int16 soundIndex; // Sound index in data file +}; + +struct act27 { // Type 27 - Add object's value to score + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // object number +}; + +struct act28 { // Type 28 - Subtract object's value from score + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // object number +}; + +struct act29 { // Type 29 - Conditional on object carried + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The required object number + uint16 actPassIndex; // Index of the action list if success + uint16 actFailIndex; // Index of the action list if failure +}; + +struct act30 { // Type 30 - Start special maze processing + byte actType; // The type of action + int timer; // Time to set off the action + byte mazeSize; // Size of (square) maze + int x1, y1, x2, y2; // Bounding box of maze + int x3, x4; // Extra x points for perspective correction + byte firstScreenIndex; // First (top left) screen of maze +}; + +struct act31 { // Type 31 - Exit special maze processing + byte actType; // The type of action + int timer; // Time to set off the action +}; + +struct act32 { // Type 32 - Init fbg field of object + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + byte priority; // Value of foreground/background field +}; + +struct act33 { // Type 33 - Init screen field of object + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int screenIndex; // Screen number +}; + +struct act34 { // Type 34 - Global Schedule + byte actType; // The type of action + int timer; // Time to set off the action + uint16 actIndex; // Index of an action list +}; + +struct act35 { // Type 35 - Remappe palette + byte actType; // The type of action + int timer; // Time to set off the action + int16 oldColorIndex; // Old color index, 0..15 + int16 newColorIndex; // New color index, 0..15 +}; + +struct act36 { // Type 36 - Conditional on noun mentioned + byte actType; // The type of action + int timer; // Time to set off the action + uint16 nounIndex; // The required noun (list) + uint16 actPassIndex; // Index of the action list if success + uint16 actFailIndex; // Index of the action list if failure +}; + +struct act37 { // Type 37 - Set new screen state + byte actType; // The type of action + int timer; // Time to set off the action + int screenIndex; // The screen number + byte newState; // The new state +}; + +struct act38 { // Type 38 - Position lips + byte actType; // The type of action + int timer; // Time to set off the action + int lipsObjNumb; // The LIPS object + int objNumb; // The object to speak + byte dxLips; // Relative offset of x + byte dyLips; // Relative offset of y +}; + +struct act39 { // Type 39 - Init story mode + byte actType; // The type of action + int timer; // Time to set off the action + bool storyModeFl; // New state of story_mode flag +}; + +struct act40 { // Type 40 - Unsolicited text box + byte actType; // The type of action + int timer; // Time to set off the action + int stringIndex; // Index (enum) of string in strings.dat +}; + +struct act41 { // Type 41 - Conditional on bonus scored + byte actType; // The type of action + int timer; // Time to set off the action + int BonusIndex; // Index into bonus list + uint16 actPassIndex; // Index of the action list if scored for the first time + uint16 actFailIndex; // Index of the action list if already scored +}; + +struct act42 { // Type 42 - Text box with "take" string + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object taken +}; + +struct act43 { // Type 43 - Prompt user for Yes or No + byte actType; // The type of action + int timer; // Time to set off the action + int prompt; // Index of prompt string + uint16 actYesIndex; // Index of the action list if YES + uint16 actNoIndex; // Index of the action list if NO +}; + +struct act44 { // Type 44 - Stop any route in progress + byte actType; // The type of action + int timer; // Time to set off the action +}; + +struct act45 { // Type 45 - Conditional on route in progress + byte actType; // The type of action + int timer; // Time to set off the action + int routeIndex; // Must be >= current status.rindex + uint16 actPassIndex; // Index of the action list if en-route + uint16 actFailIndex; // Index of the action list if not +}; + +struct act46 { // Type 46 - Init status.jumpexit + byte actType; // The type of action + int timer; // Time to set off the action + bool jumpExitFl; // New state of jumpexit flag +}; + +struct act47 { // Type 47 - Init viewx,viewy,dir + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object + int16 viewx; // object.viewx + int16 viewy; // object.viewy + int16 direction; // object.dir +}; + +struct act48 { // Type 48 - Set curr_seq_p to frame n + byte actType; // The type of action + int timer; // Time to set off the action + int objNumb; // The object number + int seqIndex; // The index of seq array to set to + int frameIndex; // The index of frame to set to +}; + +struct act49 { // Added by Strangerke - Type 79 - Play a sound (DOS way) + byte actType; // The type of action + int timer; // Time to set off the action + uint16 songIndex; // Song index in string array +}; + +union act { + act0 a0; + act1 a1; + act2 a2; + act3 a3; + act4 a4; + act5 a5; + act6 a6; + act7 a7; + act8 a8; + act9 a9; + act10 a10; + act11 a11; + act12 a12; + act13 a13; + act14 a14; + act15 a15; + act16 a16; + act17 a17; + act18 a18; + act19 a19; + act20 a20; + act21 a21; + act22 a22; + act23 a23; + act24 a24; + act25 a25; + act26 a26; + act27 a27; + act28 a28; + act29 a29; + act30 a30; + act31 a31; + act32 a32; + act33 a33; + act34 a34; + act35 a35; + act36 a36; + act37 a37; + act38 a38; + act39 a39; + act40 a40; + act41 a41; + act42 a42; + act43 a43; + act44 a44; + act45 a45; + act46 a46; + act47 a47; + act48 a48; + act49 a49; +}; + +typedef void *actListPtr; // Ptr to a list of actions +typedef actListPtr *actList; // A list of actions + +void writeTextArray(FILE *outFile, const char *textData[], int nbrText); +void writeUint16Array(FILE *outFile, const uint16 *uint16Array[], int nbrElem); +void writeHotspot(FILE *outFile, const hotspot_t hotspots[], int nbrElem); +void writeUseArray(FILE *outFile, const uses_t uses[], int nbrElem); +void writeBackgroundArray(FILE *outFile, const background_t background[], int nbrElem); +void writeCmdArray(FILE *outFile, const cmd *cmdList[], int nbrElem); +void writeScreenActs(FILE *outFile, const uint16 *screenActs[], int nbrElem); +void writeObjectArray(FILE *outFile, const object_t objects[], int nbrElem); +void writeActListArray(FILE *outFile, const actList actListArr[], int nbrElem); + +#endif // CREATE_HUGO_H |