/* 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. * */ /* * This code is based on original Hugo Trilogy source code * * Copyright (c) 1989-1995 David P. Gray * */ #ifndef HUGO_GAME_H #define HUGO_GAME_H #include "common/keyboard.h" namespace Common { class WriteStream; class SeekableReadStream; } namespace Hugo { // Game specific equates #define TAKE_TEXT "Picked up the %s ok." enum {LOOK_NAME = 1, TAKE_NAME}; // Index of name used in showing takeables and in confirming take // Definitions of 'generic' commands: Max # depends on size of gencmd in // the Object record since each requires 1 bit. Currently up to 16 enum {LOOK = 1, TAKE = 2, DROP = 4, LOOK_S = 8}; enum TEXTCOLORS { _TBLACK, _TBLUE, _TGREEN, _TCYAN, _TRED, _TMAGENTA, _TBROWN, _TWHITE, _TGRAY, _TLIGHTBLUE, _TLIGHTGREEN, _TLIGHTCYAN, _TLIGHTRED, _TLIGHTMAGENTA, _TLIGHTYELLOW, _TBRIGHTWHITE }; enum Uif {U_FONT5, U_FONT6, U_FONT8, UIF_IMAGES, NUM_UIF_ITEMS}; static const int kFirstFont = U_FONT5; /** * Enumerate ways of cycling a sequence of frames */ enum Cycle {kCycleInvisible, kCycleAlmostInvisible, kCycleNotCycling, kCycleForward, kCycleBackward}; /** * Enumerate sequence index matching direction of travel */ enum {SEQ_RIGHT, SEQ_LEFT, SEQ_DOWN, SEQ_UP}; enum Font {LARGE_ROMAN, MED_ROMAN, NUM_GDI_FONTS, INIT_FONTS, DEL_FONTS}; /** * Enumerate the different path types for an object */ enum Path { kPathUser, // User has control of object via cursor keys kPathAuto, // Computer has control, controlled by action lists kPathQuiet, // Computer has control and no commands allowed kPathChase, // Computer has control, object is chasing hero kPathChase2, // Same as CHASE, except keeps cycling when stationary kPathWander, // Computer has control, object is wandering randomly kPathWander2 // Same as WANDER, except keeps cycling when stationary }; struct hugoBoot { // Common HUGO boot file char _checksum; // Checksum for boot structure (not exit text) char _registered; // TRUE if registered version, else FALSE char _pbswitch[8]; // Playback switch string char _distrib[32]; // Distributor branding string uint16 _exitLen; // Length of exit text (next in file) } PACKED_STRUCT; /** * Game specific type definitions */ typedef byte *ImagePtr; // ptr to an object image (sprite) typedef byte *SoundPtr; // ptr to sound (or music) data /** * Structure for initializing maze processing */ struct Maze { bool _enabledFl; // TRUE when maze processing enabled byte _size; // Size of (square) maze matrix int _x1, _y1, _x2, _y2; // maze hotspot bounding box int _x3, _x4; // north, south x entry coordinates byte _firstScreenIndex; // index of first screen in maze }; /** * The following is a linked list of images in an animation sequence * The image data is in 8-bit DIB format, i.e. 1 byte = 1 pixel */ struct Seq { // Linked list of images byte *_imagePtr; // ptr to image uint16 _bytesPerLine8; // bytes per line (8bits) uint16 _lines; // lines uint16 _x1, _x2, _y1, _y2; // Offsets from x,y: data bounding box Seq *_nextSeqPtr; // ptr to next record }; /** * The following is an array of structures of above sequences */ struct SeqList { uint16 _imageNbr; // Number of images in sequence Seq *_seqPtr; // Ptr to sequence structure }; #include "common/pack-start.h" // START STRUCT PACKING struct SoundHdr { // Sound file lookup entry uint16 _size; // Size of sound data in bytes uint32 _offset; // Offset of sound data in file } PACKED_STRUCT; #include "common/pack-end.h" // END STRUCT PACKING static const int kMaxSeqNumb = 4; // Number of sequences of images in object /** * Following is definition of object attributes */ struct Object { 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 _pathType; // Describe path object follows int _vxPath, _vyPath; // Delta velocities (e.g. for CHASE) uint16 _actIndex; // Action list to do on collision with hero byte _seqNumb; // Number of sequences in list Seq *_currImagePtr; // Sequence image currently in use SeqList _seqList[kMaxSeqNumb]; // Array of sequence structure ptrs and lengths Cycle _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 int8 _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 int8 _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 _curSeqNum; // Save which seq number currently in use byte _curImageNum; // Save which image of sequence currently in use int8 _oldvx; // Previous vx (used in wandering) int8 _oldvy; // Previous vy }; } // End of namespace Hugo #endif