From 6cf1de87acdb878e3a3e4ef7cc33d45adee4a592 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sat, 9 Apr 2011 23:47:35 +0200 Subject: DEVTOOLS: Renamed 'tools' directory to 'devtools' --- devtools/create_lure/create_lure_dat.h | 432 +++++++++++++++++++++++++++++++++ 1 file changed, 432 insertions(+) create mode 100644 devtools/create_lure/create_lure_dat.h (limited to 'devtools/create_lure/create_lure_dat.h') diff --git a/devtools/create_lure/create_lure_dat.h b/devtools/create_lure/create_lure_dat.h new file mode 100644 index 0000000000..4743f6ac3f --- /dev/null +++ b/devtools/create_lure/create_lure_dat.h @@ -0,0 +1,432 @@ +/* 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_LURE_DAT_H +#define CREATE_LURE_DAT_H + +#include "common/endian.h" +#include "common/util.h" + +#define VERSION_MAJOR 1 +#define VERSION_MINOR 29 + +#define DIALOG_SIZE 0x150 + +#define TALK_DIALOG_SIZE 0x30 + +#define PALETTE_OFFSET 0xc0a7 +#define PALETTE_SIZE 0x300 + +#define ROOM_NUM_ENTRIES 51 + +#define HOTSPOT_OVERRIDE_OFFSET 0x2A01 + +#define SCRIPT_SEGMENT_SIZE 0x2c57 +#define SCRIPT2_SEGMENT_SIZE 0x2800 +#define FIGHT_SEGMENT_SIZE 0x1850 + +#define HOTSPOT_SCRIPT_SIZE 0x30 + +#define MAX_NUM_ANIM_RECORDS 0x200 +#define MAX_NUM_ACTION_RECORDS 0x100 + +#define NUM_ROOM_EXITS 50 + +#define MESSAGES_SEGMENT_SIZE 0x490 + +#define MAX_HOTSPOTS 0x100 +#define MAX_DATA_SIZE 0x4000 + +#define PATHFIND_SIZE (120 * ROOM_NUM_ENTRIES) + +#define EXIT_COORDINATES_OFFSET 0x1929 +#define EXIT_COORDINATES_NUM_ROOMS 49 + +#define TABLED_ACTIONS_OFFSET 0x1380 +#define NUM_TABLED_ACTION_BLOCKS 33 +#define RANDOM_ROOM_NUM_ENTRIES 41 + +#define SOUND_DESCS_SIZE 265 + +#include "common/pack-start.h" // START STRUCT PACKING + +// FIXME: Add PACKED_STRUCT to all structs which actually need packing, +// for increased portability + +// Rect currently copied from common/rect.h - if I try directly including it, +// the link complains about an unresolved external token Common.String.__dtor + +struct Rect { + int16 top, left; ///< The point at the top left of the rectangle (part of the rect). + int16 bottom, right; ///< The point at the bottom right of the rectangle (not part of the rect). +}; + +struct FileEntry { + uint16 id; + byte unused; + byte sizeExtension; + uint16 size; + uint16 offset; +}; + +struct RoomHeaderEntry { + uint16 offset; + uint16 roomNumber; + uint16 descId; + uint16 unused; + byte hdrFlags; +}; + +struct HotspotHeaderEntry { + uint16 offset; + uint16 resourceId; + uint16 descId, descId2; + byte hdrFlags; +}; + +struct HotspotResource { + uint32 actions; + uint16 actionsOffset; + uint16 roomNumber; + byte scriptLoadFlag; + uint16 loadOffset; + uint16 unused; + uint16 startX; + uint16 startY; + uint16 width; + uint16 height; + byte layer; + byte flags; + uint16 tickProcOffset; + uint16 widthCopy; + uint16 heightCopy; + uint16 yCorrection; + uint16 tickTimeout; + uint16 animOffset; + byte colourOffset; + uint16 hotspotScriptOffset; + byte unused1[7]; + uint16 talkScriptOffset; + byte unused2[6]; + int8 talkX; + int8 talkY; + byte unused3[11]; + uint16 delayCtr; + uint8 characterMode; + uint16 tickSequenceOffset; +}; + +struct CurrentActionInput { + uint8 action; + uint16 dataOffset; + uint16 roomNumber; +}; + +struct HotspotResourceOutput { + uint16 hotspotId; + uint16 nameId; + uint16 descId; + uint16 descId2; + uint32 actions; + uint16 actionsOffset; + uint16 roomNumber; + byte layer; + byte scriptLoadFlag; + uint16 loadOffset; + uint16 startX; + uint16 startY; + uint16 width; + uint16 height; + uint16 widthCopy; + uint16 heightCopy; + uint16 yCorrection; + int16 walkX; + uint16 walkY; + int8 talkX; + int8 talkY; + uint16 colourOffset; + uint16 animRecordId; + uint16 hotspotScriptOffset; + uint16 talkScriptOffset; + uint16 tickProcId; + uint16 tickTimeout; + uint16 tickSequenceOffset; + uint16 npcSchedule; + uint16 characterMode; + uint16 delayCtr; + byte flags; + byte hdrFlags; +}; + +struct RoomResource { + uint32 actions; + uint16 unknown1; + uint16 pixelListOffset; + byte numLayers; + uint16 layers[4]; + uint16 sequenceOffset; + uint32 exitTime; + uint8 areaFlag; + uint8 walkBoundsIndex; + int16 clippingXStart; + int16 clippingXEnd; +}; + +struct RoomRectIn { + uint16 xs, xe; + uint16 ys, ye; +}; + +struct RoomRectOut { + int16 xs, xe; + int16 ys, ye; +}; + +struct RoomResourceOutput { + uint16 roomNumber; + uint8 hdrFlags; + uint8 unused; + uint32 actions; + uint16 descId; + uint16 numLayers; + uint16 layers[4]; + uint16 sequenceOffset; + int16 clippingXStart; + int16 clippingXEnd; + uint8 areaFlag; + uint8 numExits; + uint32 exitTime; + RoomRectOut walkBounds; +}; + +struct RoomResourceExit1 { + int16 xs, xe, ys, ye; + uint16 sequenceOffset; +}; + +struct RoomResourceExit2 { + uint8 newRoom; + uint8 direction; + int16 newRoomX, newRoomY; +}; + +struct HotspotOverride { + uint16 hotspotId; + uint16 xs, xe, ys, ye; +}; + +struct AnimRecord { + uint16 animId; + uint8 flags; + uint8 unused[6]; + uint16 upOffset; + uint16 downOffset; + uint16 leftOffset; + uint16 rightOffset; + uint8 upFrame; + uint8 downFrame; + uint8 leftFrame; + uint8 rightFrame; +}; + +struct AnimRecordOutput { + uint16 animRecordId; + uint16 animId; + uint16 flags; + uint16 upOffset; + uint16 downOffset; + uint16 leftOffset; + uint16 rightOffset; + uint8 upFrame; + uint8 downFrame; + uint8 leftFrame; + uint8 rightFrame; +}; + +struct MovementRecord { + uint16 frameNumber; + int16 xChange; + int16 yChange; +}; + +struct RoomExitHotspotRecord { + int16 xs, xe; + int16 ys, ye; + uint16 cursorNum; + uint16 hotspotId; + uint16 destRoomNumber; +}; + +struct RoomExitHotspotOutputRecord { + uint16 hotspotId; + int16 xs, xe; + int16 ys, ye; + uint16 cursorNum; + uint16 destRoomNumber; +}; + +struct RoomExitHotspotJoinRecord { + uint16 hotspot1Id; + byte h1CurrentFrame; + byte h1DestFrame; + byte h1OpenSound; + byte h1CloseSound; + uint16 hotspot2Id; + byte h2CurrentFrame; + byte h2DestFrame; + byte h2OpenSound; + byte h2CloseSound; + byte blocked; +}; + +struct HotspotActionSequenceRecord { + byte actionNumber; + uint16 sequenceOffset; +}; + +struct HotspotActionsRecord { + uint16 recordId; + uint16 offset; +}; + +struct RoomExitCoordinateResource { + int16 x; + int16 y; + uint16 roomNumber; +}; + +struct HotspotWalkToRecord { + uint16 hotspotId; + int16 x; + uint16 y; +}; + +struct RoomExitIndexedHotspotResource { + uint8 roomNumber; + uint8 hotspotIndex; + uint16 hotspotId; +}; + + +#define ROOM_EXIT_COORDINATES_NUM_ENTRIES 6 +#define ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS 52 + +struct RoomExitCoordinateEntryInputResource { + RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES]; + uint8 roomIndex[ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS]; +}; + +struct RoomExitCoordinateEntryOutputResource { + uint8 roomIndex[ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS]; + RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES]; +}; + + +enum CurrentAction {NO_ACTION, START_WALKING, DISPATCH_ACTION, EXEC_HOTSPOT_SCRIPT, + PROCESSING_PATH, WALKING}; + +extern void read_action_sequence(byte *&data, uint16 &totalSize); + +extern uint16 get_sequence_index(uint16 offset, int supportIndex = -1); + +#include "common/pack-end.h" // END STRUCT PACKING + + + +enum AccessMode { + kFileReadMode = 1, + kFileWriteMode = 2 +}; + +class File { +private: + FILE *f; +public: + bool open(const char *filename, AccessMode mode = kFileReadMode) { + f = fopen(filename, (mode == kFileReadMode) ? "rb" : "wb"); + return (f != NULL); + } + void close() { + fclose(f); + f = NULL; + } + int seek(int32 offset, int whence = SEEK_SET) { + return fseek(f, offset, whence); + } + long read(void *buffer, int len) { + return fread(buffer, 1, len, f); + } + void write(const void *buffer, int len) { + fwrite(buffer, 1, len, f); + } + byte readByte() { + byte v; + read(&v, sizeof(byte)); + return v; + } + uint16 readWord() { + uint16 v; + read(&v, sizeof(uint16)); + return FROM_LE_16(v); + } + uint32 readLong() { + uint32 v; + read(&v, sizeof(uint32)); + return FROM_LE_32(v); + } + void writeByte(byte v) { + write(&v, sizeof(byte)); + } + void writeWord(uint16 v) { + uint16 vTemp = TO_LE_16(v); + write(&vTemp, sizeof(uint16)); + } + void writeLong(uint32 v) { + uint32 vTemp = TO_LE_32(v); + write(&vTemp, sizeof(uint32)); + } + uint32 pos() { + return ftell(f); + } +}; + +extern File lureExe; +extern void add_talk_offset(uint16 offset); + +enum LureLanguage { + LANG_IT_ITA = 10, + LANG_FR_FRA = 6, + LANG_DE_DEU = 7, + LANG_ES_ESP = 17, + LANG_EN_ANY = 3, + LANG_UNKOWN = -1 +}; + +extern Common::Language language; +extern uint16 dataSegment; + +extern void errorExit(const char *msg); + +#endif -- cgit v1.2.3