/* 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. * */ #ifndef MSN_DEF_H #define MSN_DEF_H namespace Supernova { const int kScreenWidth = 320; const int kScreenHeight = 200; const int kFontWidth = 5; const int kFontHeight = 8; const int kTextSpeed[] = {19, 14, 10, 7, 4}; const int kMsecPerTick = 55; const int kMaxSection = 40; const int kMaxSectionZus = 50; const int kMaxClickfieldZus = 80; const int kMaxObject = 25; const int kMaxCarry = 30; //const int kRoomsChap0 = 1; //const int kRoomsChap1 = 16; //const int kRoomsChap2 = 9; //const int kRoomsChap3 = 21; //const int kRoomsNum = kRoomsChap0 + kRoomsChap1 + kRoomsChap2 + kRoomsChap3; enum MessagePosition { kMessageNormal, kMessageLeft, kMessageRight, kMessageCenter, kMessageTop }; enum AudioIndex { kAudioGreat, // 44|0 kAudioCrash, // 45|0 kAudioVoiceHalt, // 46|0 kAudioGunShot, // 46|2510 kAudioUndef2, // 46|4020 kAudioVoiceSupernova, // 47|0 kAudioVoiceYeah, // 47|24010 kAudioUndef3, // 48|0 kAudioUndef4, // 48|2510 kAudioShock, // 48|10520 kAudioTurntable, // 48|13530 kAudioSiren, // 50|0 kAudioUndef6, // 50|12786 kAudioRocks, // 51|0 kAudioDeath, // 53|0 kAudioAlarm, // 54|0 kAudioUndef7, // 54|8010 kAudioDoorSound, // 54|24020 kAudioDoorOpen, // 54|30030 kAudioDoorClose, // 54|31040 kAudioNumSamples }; enum MusicIndex { kMusicIntro = 52, kMusicOutro = 49 }; struct AudioInfo { int _filenumber; int _offsetStart; int _offsetEnd; }; const int kColorBlack = 0; const int kColorWhite25 = 1; const int kColorWhite35 = 2; const int kColorWhite44 = 3; const int kColorWhite99 = 4; const int kColorDarkGreen = 5; const int kColorGreen = 6; const int kColorDarkRed = 7; const int kColorRed = 8; const int kColorDarkBlue = 9; const int kColorBlue = 10; const int kColorWhite63 = 11; const int kColorLightBlue = 12; const int kColorLightGreen = 13; const int kColorLightYellow = 14; const int kColorLightRed = 15; const int kColorCursorTransparent = kColorWhite25; const byte mouseNormal[64] = { 0xff,0x3f,0xff,0x1f,0xff,0x0f,0xff,0x07, 0xff,0x03,0xff,0x01,0xff,0x00,0x7f,0x00, 0x3f,0x00,0x1f,0x00,0x0f,0x00,0x0f,0x00, 0xff,0x00,0x7f,0x18,0x7f,0x38,0x7f,0xfc, 0x00,0x00,0x00,0x40,0x00,0x60,0x00,0x70, 0x00,0x78,0x00,0x7c,0x00,0x7e,0x00,0x7f, 0x80,0x7f,0xc0,0x7f,0xe0,0x7f,0x00,0x7e, 0x00,0x66,0x00,0x43,0x00,0x03,0x00,0x00 }; const byte mouseWait[64] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80, 0x01,0x80,0x01,0x80,0x11,0x88,0x31,0x8c, 0x31,0x8c,0x11,0x88,0x01,0x80,0x01,0x80, 0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfe,0x7f,0xf4,0x2f,0xf4,0x2f, 0x14,0x28,0x24,0x24,0x44,0x22,0x84,0x21, 0x84,0x21,0xc4,0x23,0xe4,0x27,0x74,0x2e, 0x34,0x2c,0x14,0x28,0xfe,0x7f,0x00,0x00 }; const byte font[][5] = { {0x00,0x00,0x00,0xff,0x00}, {0x5f,0xff,0x00,0x00,0x00}, {0x03,0x00,0x03,0xff,0x00}, {0x14,0x7f,0x14,0x7f,0x14}, {0x24,0x2a,0x7f,0x2a,0x12}, {0x61,0x10,0x08,0x04,0x43}, {0x38,0x4e,0x59,0x26,0x50}, {0x03,0xff,0x00,0x00,0x00}, {0x3e,0x41,0xff,0x00,0x00}, {0x41,0x3e,0xff,0x00,0x00}, {0x10,0x54,0x38,0x54,0x10}, {0x10,0x10,0x7c,0x10,0x10}, {0x80,0x40,0xff,0x00,0x00}, {0x10,0x10,0x10,0x10,0x10}, {0x40,0xff,0x00,0x00,0x00}, {0x60,0x10,0x08,0x04,0x03}, {0x3e,0x41,0x41,0x41,0x3e}, /* digits */ {0x04,0x02,0x7f,0xff,0x00}, {0x42,0x61,0x51,0x49,0x46}, {0x22,0x41,0x49,0x49,0x36}, {0x18,0x14,0x12,0x7f,0x10}, {0x27,0x45,0x45,0x45,0x39}, {0x3e,0x49,0x49,0x49,0x32}, {0x01,0x61,0x19,0x07,0x01}, {0x36,0x49,0x49,0x49,0x36}, {0x26,0x49,0x49,0x49,0x3e}, {0x44,0xff,0x00,0x00,0x00}, {0x80,0x44,0xff,0x00,0x00}, {0x10,0x28,0x44,0xff,0x00}, {0x28,0x28,0x28,0x28,0x28}, {0x44,0x28,0x10,0xff,0x00}, {0x02,0x01,0x51,0x09,0x06}, {0x3e,0x41,0x5d,0x5d,0x1e}, {0x7c,0x12,0x11,0x12,0x7c}, /* uppercase letters*/ {0x7f,0x49,0x49,0x49,0x36}, {0x3e,0x41,0x41,0x41,0x22}, {0x7f,0x41,0x41,0x22,0x1c}, {0x7f,0x49,0x49,0x49,0xff}, {0x7f,0x09,0x09,0x09,0xff}, {0x3e,0x41,0x41,0x49,0x3a}, {0x7f,0x08,0x08,0x08,0x7f}, {0x41,0x7f,0x41,0xff,0x00}, {0x20,0x40,0x40,0x3f,0xff}, {0x7f,0x08,0x14,0x22,0x41}, {0x7f,0x40,0x40,0x40,0xff}, {0x7f,0x02,0x04,0x02,0x7f}, {0x7f,0x02,0x0c,0x10,0x7f}, {0x3e,0x41,0x41,0x41,0x3e}, {0x7f,0x09,0x09,0x09,0x06}, {0x3e,0x41,0x51,0x21,0x5e}, {0x7f,0x09,0x19,0x29,0x46}, {0x26,0x49,0x49,0x49,0x32}, {0x01,0x01,0x7f,0x01,0x01}, {0x3f,0x40,0x40,0x40,0x3f}, {0x07,0x18,0x60,0x18,0x07}, {0x1f,0x60,0x18,0x60,0x1f}, {0x63,0x14,0x08,0x14,0x63}, {0x03,0x04,0x78,0x04,0x03}, {0x61,0x51,0x49,0x45,0x43}, {0x7f,0x41,0x41,0xff,0x00}, {0x03,0x04,0x08,0x10,0x60}, {0x41,0x41,0x7f,0xff,0x00}, {0x02,0x01,0x02,0xff,0x00}, {0x80,0x80,0x80,0x80,0x80}, {0x01,0x02,0xff,0x00,0x00}, {0x38,0x44,0x44,0x44,0x7c}, /* lowercase letters */ {0x7f,0x44,0x44,0x44,0x38}, {0x38,0x44,0x44,0x44,0x44}, {0x38,0x44,0x44,0x44,0x7f}, {0x38,0x54,0x54,0x54,0x58}, {0x04,0x7e,0x05,0x01,0xff}, {0x98,0xa4,0xa4,0xa4,0x7c}, {0x7f,0x04,0x04,0x04,0x78}, {0x7d,0xff,0x00,0x00,0x00}, {0x80,0x80,0x7d,0xff,0x00}, {0x7f,0x10,0x28,0x44,0xff}, {0x7f,0xff,0x00,0x00,0x00}, {0x7c,0x04,0x7c,0x04,0x78}, {0x7c,0x04,0x04,0x04,0x78}, {0x38,0x44,0x44,0x44,0x38}, {0xfc,0x24,0x24,0x24,0x18}, {0x18,0x24,0x24,0x24,0xfc}, {0x7c,0x08,0x04,0x04,0xff}, {0x48,0x54,0x54,0x54,0x24}, {0x04,0x3e,0x44,0x40,0xff}, {0x7c,0x40,0x40,0x40,0x3c}, {0x0c,0x30,0x40,0x30,0x0c}, {0x3c,0x40,0x3c,0x40,0x3c}, {0x44,0x28,0x10,0x28,0x44}, {0x9c,0xa0,0xa0,0xa0,0x7c}, {0x44,0x64,0x54,0x4c,0x44}, {0x08,0x36,0x41,0xff,0x00}, {0x77,0xff,0x00,0x00,0x00}, {0x41,0x36,0x08,0xff,0x00}, {0x02,0x01,0x02,0x01,0xff}, {0xff,0x00,0x00,0x00,0x00}, {0xfe,0x49,0x49,0x4e,0x30}, /* sharp S */ {0x7c,0x41,0x40,0x41,0x3c}, /* umlauts */ {0x04,0x06,0x7f,0x06,0x04}, /* arrows */ {0x20,0x60,0xfe,0x60,0x20}, {0x38,0x45,0x44,0x45,0x7c}, /* umlauts */ {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0x79,0x14,0x12,0x14,0x79}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0x38,0x45,0x44,0x45,0x38}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0xff,0x00,0x00,0x00,0x00}, {0x3d,0x42,0x42,0x42,0x3d}, {0x3d,0x40,0x40,0x40,0x3d}, }; // Default palette const byte initVGAPalette[768] = { 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x58, 0x58, 0x58, 0x70, 0x70, 0x70, 0xfc, 0xfc, 0xfc, 0x00, 0xd0, 0x00, 0x00, 0xfc, 0x00, 0xd8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xb0, 0xa0, 0xa0, 0xa0, 0x50, 0xc8, 0xfc, 0x28, 0xfc, 0x28, 0xf0, 0xf0, 0x00, 0xfc, 0x28, 0x28, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x20, 0x20, 0x20, 0x2c, 0x2c, 0x2c, 0x38, 0x38, 0x38, 0x44, 0x44, 0x44, 0x50, 0x50, 0x50, 0x60, 0x60, 0x60, 0x70, 0x70, 0x70, 0x80, 0x80, 0x80, 0x90, 0x90, 0x90, 0xa0, 0xa0, 0xa0, 0xb4, 0xb4, 0xb4, 0xc8, 0xc8, 0xc8, 0xe0, 0xe0, 0xe0, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x00, 0xfc, 0x7c, 0x00, 0xfc, 0xbc, 0x00, 0xfc, 0xfc, 0x00, 0xfc, 0xfc, 0x00, 0xbc, 0xfc, 0x00, 0x7c, 0xfc, 0x00, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x00, 0xfc, 0x7c, 0x00, 0xfc, 0xbc, 0x00, 0xfc, 0xfc, 0x00, 0xbc, 0xfc, 0x00, 0x7c, 0xfc, 0x00, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x00, 0xfc, 0x7c, 0x00, 0xfc, 0xbc, 0x00, 0xfc, 0xfc, 0x00, 0xbc, 0xfc, 0x00, 0x7c, 0xfc, 0x00, 0x40, 0xfc, 0x7c, 0x7c, 0xfc, 0x9c, 0x7c, 0xfc, 0xbc, 0x7c, 0xfc, 0xdc, 0x7c, 0xfc, 0xfc, 0x7c, 0xfc, 0xfc, 0x7c, 0xdc, 0xfc, 0x7c, 0xbc, 0xfc, 0x7c, 0x9c, 0xfc, 0x7c, 0x7c, 0xfc, 0x9c, 0x7c, 0xfc, 0xbc, 0x7c, 0xfc, 0xdc, 0x7c, 0xfc, 0xfc, 0x7c, 0xdc, 0xfc, 0x7c, 0xbc, 0xfc, 0x7c, 0x9c, 0xfc, 0x7c, 0x7c, 0xfc, 0x7c, 0x7c, 0xfc, 0x9c, 0x7c, 0xfc, 0xbc, 0x7c, 0xfc, 0xdc, 0x7c, 0xfc, 0xfc, 0x7c, 0xdc, 0xfc, 0x7c, 0xbc, 0xfc, 0x7c, 0x9c, 0xfc, 0xb4, 0xb4, 0xfc, 0xc4, 0xb4, 0xfc, 0xd8, 0xb4, 0xfc, 0xe8, 0xb4, 0xfc, 0xfc, 0xb4, 0xfc, 0xfc, 0xb4, 0xe8, 0xfc, 0xb4, 0xd8, 0xfc, 0xb4, 0xc4, 0xfc, 0xb4, 0xb4, 0xfc, 0xc4, 0xb4, 0xfc, 0xd8, 0xb4, 0xfc, 0xe8, 0xb4, 0xfc, 0xfc, 0xb4, 0xe8, 0xfc, 0xb4, 0xd8, 0xfc, 0xb4, 0xc4, 0xfc, 0xb4, 0xb4, 0xfc, 0xb4, 0xb4, 0xfc, 0xc4, 0xb4, 0xfc, 0xd8, 0xb4, 0xfc, 0xe8, 0xb4, 0xfc, 0xfc, 0xb4, 0xe8, 0xfc, 0xb4, 0xd8, 0xfc, 0xb4, 0xc4, 0xfc, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x70, 0x38, 0x00, 0x70, 0x54, 0x00, 0x70, 0x70, 0x00, 0x70, 0x70, 0x00, 0x54, 0x70, 0x00, 0x38, 0x70, 0x00, 0x1c, 0x70, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x70, 0x38, 0x00, 0x70, 0x54, 0x00, 0x70, 0x70, 0x00, 0x54, 0x70, 0x00, 0x38, 0x70, 0x00, 0x1c, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x70, 0x38, 0x00, 0x70, 0x54, 0x00, 0x70, 0x70, 0x00, 0x54, 0x70, 0x00, 0x38, 0x70, 0x00, 0x1c, 0x70, 0x38, 0x38, 0x70, 0x44, 0x38, 0x70, 0x54, 0x38, 0x70, 0x60, 0x38, 0x70, 0x70, 0x38, 0x70, 0x70, 0x38, 0x60, 0x70, 0x38, 0x54, 0x70, 0x38, 0x44, 0x70, 0x38, 0x38, 0x70, 0x44, 0x38, 0x70, 0x54, 0x38, 0x70, 0x60, 0x38, 0x70, 0x70, 0x38, 0x60, 0x70, 0x38, 0x54, 0x70, 0x38, 0x44, 0x70, 0x38, 0x38, 0x70, 0x38, 0x38, 0x70, 0x44, 0x38, 0x70, 0x54, 0x38, 0x70, 0x60, 0x38, 0x70, 0x70, 0x38, 0x60, 0x70, 0x38, 0x54, 0x70, 0x38, 0x44, 0x70, 0x50, 0x50, 0x70, 0x58, 0x50, 0x70, 0x60, 0x50, 0x70, 0x68, 0x50, 0x70, 0x70, 0x50, 0x70, 0x70, 0x50, 0x68, 0x70, 0x50, 0x60, 0x70, 0x50, 0x58, 0x70, 0x50, 0x50, 0x70, 0x58, 0x50, 0x70, 0x60, 0x50, 0x70, 0x68, 0x50, 0x70, 0x70, 0x50, 0x68, 0x70, 0x50, 0x60, 0x70, 0x50, 0x58, 0x70, 0x50, 0x50, 0x70, 0x50, 0x50, 0x70, 0x58, 0x50, 0x70, 0x60, 0x50, 0x70, 0x68, 0x50, 0x70, 0x70, 0x50, 0x68, 0x70, 0x50, 0x60, 0x70, 0x50, 0x58, 0x70, 0x00, 0x00, 0x40, 0x10, 0x00, 0x40, 0x20, 0x00, 0x40, 0x30, 0x00, 0x40, 0x40, 0x00, 0x40, 0x40, 0x00, 0x30, 0x40, 0x00, 0x20, 0x40, 0x00, 0x10, 0x40, 0x00, 0x00, 0x40, 0x10, 0x00, 0x40, 0x20, 0x00, 0x40, 0x30, 0x00, 0x40, 0x40, 0x00, 0x30, 0x40, 0x00, 0x20, 0x40, 0x00, 0x10, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x10, 0x00, 0x40, 0x20, 0x00, 0x40, 0x30, 0x00, 0x40, 0x40, 0x00, 0x30, 0x40, 0x00, 0x20, 0x40, 0x00, 0x10, 0x40, 0x20, 0x20, 0x40, 0x28, 0x20, 0x40, 0x30, 0x20, 0x40, 0x38, 0x20, 0x40, 0x40, 0x20, 0x40, 0x40, 0x20, 0x38, 0x40, 0x20, 0x30, 0x40, 0x20, 0x28, 0x40, 0x20, 0x20, 0x40, 0x28, 0x20, 0x40, 0x30, 0x20, 0x40, 0x38, 0x20, 0x40, 0x40, 0x20, 0x38, 0x40, 0x20, 0x30, 0x40, 0x20, 0x28, 0x40, 0x20, 0x20, 0x40, 0x20, 0x20, 0x40, 0x28, 0x20, 0x40, 0x30, 0x20, 0x40, 0x38, 0x20, 0x40, 0x40, 0x20, 0x38, 0x40, 0x20, 0x30, 0x40, 0x20, 0x28, 0x40, 0x2c, 0x2c, 0x40, 0x30, 0x2c, 0x40, 0x34, 0x2c, 0x40, 0x3c, 0x2c, 0x40, 0x40, 0x2c, 0x40, 0x40, 0x2c, 0x3c, 0x40, 0x2c, 0x34, 0x40, 0x2c, 0x30, 0x40, 0x2c, 0x2c, 0x40, 0x30, 0x2c, 0x40, 0x34, 0x2c, 0x40, 0x3c, 0x2c, 0x40, 0x40, 0x2c, 0x3c, 0x40, 0x2c, 0x34, 0x40, 0x2c, 0x30, 0x40, 0x2c, 0x2c, 0x40, 0x2c, 0x2c, 0x40, 0x30, 0x2c, 0x40, 0x34, 0x2c, 0x40, 0x3c, 0x2c, 0x40, 0x40, 0x2c, 0x3c, 0x40, 0x2c, 0x34, 0x40, 0x2c, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; enum ObjectType { NULLTYPE = 0, TAKE = 1, OPENABLE = 2, OPENED = 4, CLOSED = 8, EXIT = 16, PRESS = 32, COMBINABLE = 64, CARRIED = 128, UNNECESSARY = 256, WORN = 512, TALK = 1024, OCCUPIED = 2048, CAUGHT = 4096 }; enum Action { ACTION_WALK, ACTION_LOOK, ACTION_TAKE, ACTION_OPEN, ACTION_CLOSE, ACTION_PRESS, ACTION_PULL, ACTION_USE, ACTION_TALK, ACTION_GIVE }; enum RoomID { INTRO,CORRIDOR,HALL,SLEEP,COCKPIT,AIRLOCK, HOLD,LANDINGMODULE,GENERATOR,OUTSIDE, CABIN_R1,CABIN_R2,CABIN_R3,CABIN_L1,CABIN_L2,CABIN_L3,BATHROOM, ROCKS,CAVE,MEETUP,ENTRANCE,REST,ROGER,GLIDER,MEETUP2,MEETUP3, CELL,CORRIDOR1,CORRIDOR2,CORRIDOR3,CORRIDOR4,CORRIDOR5,CORRIDOR6,CORRIDOR7,CORRIDOR8,CORRIDOR9, BCORRIDOR,GUARD,GUARD3,OFFICE_L1,OFFICE_L2,OFFICE_R1,OFFICE_R2,OFFICE_L, ELEVATOR,STATION,SIGN,OUTRO,NUMROOMS,NULLROOM }; enum ObjectID { INVALIDOBJECT = -1, NULLOBJECT = 0, KEYCARD,KNIFE,WATCH, SOCKET, BUTTON,HATCH1, BUTTON1,BUTTON2,MANOMETER,SUIT,HELMET,LIFESUPPORT, SCRAP_LK,OUTERHATCH_TOP,GENERATOR_TOP,TERMINALSTRIP,LANDINGMOD_OUTERHATCH, HOLD_WIRE, LANDINGMOD_BUTTON,LANDINGMOD_SOCKET,LANDINGMOD_WIRE,LANDINGMOD_HATCH,LANDINGMOD_MONITOR, KEYBOARD, KEYCARD2,OUTERHATCH,GENERATOR_WIRE,TRAP,SHORT_WIRE,CLIP, VOLTMETER,LADDER,GENERATOR_ROPE, KITCHEN_HATCH,SLEEP_SLOT, MONITOR,INSTRUMENTS, COMPUTER,CABINS,CABIN, SLOT_K1,SLOT_K2,SLOT_K3,SLOT_K4, SHELF1,SHELF2,SHELF3,SHELF4, ROPE,BOOK,DISCMAN,CHESS, SLOT_KL1,SLOT_KL2,SLOT_KL3,SLOT_KL4, SHELF_L1,SHELF_L2,SHELF_L3,SHELF_L4, PISTOL,BOOK2,SPOOL, RECORD,TURNTABLE,TURNTABLE_BUTTON,WIRE,WIRE2,PLUG, PEN, BATHROOM_DOOR,BATHROOM_EXIT,SHOWER,TOILET, STONE, SPACESHIPS,SPACESHIP,STAR,DOOR,MEETUP_SIGN, PORTER,BATHROOM_BUTTON,BATHROOM_SIGN,KITCHEN_SIGN,CAR_SLOT, ARSANO_BATHROOM,COINS,SCHNUCK,EGG,PILL,PILL_HULL,STAIRCASE, MEETUP_EXIT, ROGER_W,WALLET,KEYCARD_R,CUP, GLIDER_BUTTON1,GLIDER_BUTTON2,GLIDER_BUTTON3,GLIDER_BUTTON4,GLIDER_SLOT,GLIDER_BUTTONS, GLIDER_DISPLAY,GLIDER_INSTRUMENTS,GLIDER_KEYCARD, UFO, CELL_BUTTON,CELL_TABLE,CELL_WIRE,TRAY,CELL_DOOR,MAGNET, NEWSPAPER,TABLE, PILLAR1,PILLAR2,DOOR1,DOOR2,DOOR3,DOOR4, GUARDIAN,LAMP, MASTERKEYCARD,PAINTING,MONEY,LOCKER,LETTER, JUNGLE,STATION_SLOT,STATION_SIGN, TICKETS }; enum StringID { kCommandGo = 0, kCommandLook, kCommandTake, kCommandOpen, kCommandClose, kCommandPress, kCommandPull, kCommandUse, kCommandTalk, kCommandGive, kStatusCommandGo, kStatusCommandLook, kStatusCommandTake, kStatusCommandOpen, kStatusCommandClose, kStatusCommandPress, kStatusCommandPull, kStatusCommandUse, kStatusCommandTalk, kStatusCommandGive, kBroken, kIntro1, kIntro2, kIntro3, kIntro4, kIntro5, kIntro6, kIntro7, kIntro8, kIntro9, kIntro10, kIntro11, kIntro12, kIntro13, kKeycard, kKeycardDesc, kKnife, kKnifeDesc, kWatch, kDiscman, kDiscmanDesc }; static StringID guiCommands[] = { kCommandGo, kCommandLook, kCommandTake, kCommandOpen, kCommandClose, kCommandPress, kCommandPull, kCommandUse, kCommandTalk, kCommandGive }; static StringID guiStatusCommands[] = { kStatusCommandGo, kStatusCommandLook, kStatusCommandTake, kStatusCommandOpen, kStatusCommandClose, kStatusCommandPress, kStatusCommandPull, kStatusCommandUse, kStatusCommandTalk, kStatusCommandGive }; ObjectType operator|(ObjectType a, ObjectType b); ObjectType operator&(ObjectType a, ObjectType b); ObjectType operator^(ObjectType a, ObjectType b); ObjectType &operator|=(ObjectType &a, ObjectType b); ObjectType &operator&=(ObjectType &a, ObjectType b); ObjectType &operator^=(ObjectType &a, ObjectType b); struct Object { static const char *const defaultDescription; static const char *const takeMessage; static const Object nullObject; Object() : _name("") , _description(Object::defaultDescription) , _id(INVALIDOBJECT) , _roomId(NULLROOM) , _type(NULLTYPE) , _click(0) , _click2(0) , _section(0) , _exitRoom(NULLROOM) , _direction(0) {} Object(byte roomId, const char *name, const char *description, ObjectID id, ObjectType type, byte click, byte click2, byte section = 0, RoomID exitRoom = NULLROOM, byte direction = 0) : _name(name) , _description(description) , _id(id) , _roomId(roomId) , _type(type) , _click(click) , _click2(click2) , _section(section) , _exitRoom(exitRoom) , _direction(direction) {} static void setObjectNull(Object *&obj) { obj = const_cast(&nullObject); } static bool isNullObject(Object *obj) { return obj == &nullObject; } void resetProperty(ObjectType type = NULLTYPE) { _type = type; } void setProperty(ObjectType type) { _type |= type; } void disableProperty(ObjectType type) { _type ^= type; } bool hasProperty(ObjectType type) const { return _type & type; } static bool combine(Object &obj1, Object &obj2, ObjectID id1, ObjectID id2) { if (obj1.hasProperty(COMBINABLE)) return (((obj1._id == id1) && (obj2._id == id2)) || ((obj1._id == id2) && (obj2._id == id1))); else return false; } byte _roomId; Common::String _name; Common::String _description; ObjectID _id; ObjectType _type; byte _click; byte _click2; byte _section; RoomID _exitRoom; byte _direction; }; #define ticksToMsec(x) (x * kMsecPerTick) } #endif // MSN_DEF_H