/* 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 AGI_PREAGI_TROLL_H #define AGI_PREAGI_TROLL_H namespace Agi { // strings #define IDS_TRO_DISK "ERROR ERROR !" #define IDS_TRO_PATH_PIC "%s" #define IDS_TRO_PRESSANYKEY "PRESS ANY KEY TO CONTINUE:" #define IDS_TRO_INTRO_0 "SIERRA ON-LINE INC." #define IDS_TRO_INTRO_1 "Presents :" #define IDS_TRO_INTRO_2 "Copyright 1984 Sierra On-Line Inc." #define IDS_TRO_INTRO_3 " Press any key to continue. " #define IDS_TRO_INTRO_4 "HAVE YOU PLAYED THIS GAME BEFORE ?" #define IDS_TRO_INTRO_5 "PRESS OR " #define IDS_TRO_TUTORIAL_0 " First press the .\n 1. Turn the screen GREEN.\n 2. Turn the screen BLACK.\n *3. SEE a SURPRISE, and then more." #define IDS_TRO_TUTORIAL_1 " Press to make your choice.\n 1. Turn the screen GREEN.\n 2. Turn the screen BLACK.\n 3. SEE a SURPRISE, and then more." //#define IDS_TRO_TUTORIAL_0 "First press the ." //#define IDS_TRO_TUTORIAL_1 "1. Turn the screen GREEN." //#define IDS_TRO_TUTORIAL_2 "2. Turn the screen BLACK." //#define IDS_TRO_TUTORIAL_3 "3. SEE a SURPRISE, and then more." //#define IDS_TRO_TUTORIAL_4 "Press to make your choice." #define IDS_TRO_TUTORIAL_5 "Would you like more practice ?" #define IDS_TRO_TUTORIAL_6 "Press for yes, for no." #define IDS_TRO_TUTORIAL_7 "The evil TROLL has hidden all the" #define IDS_TRO_TUTORIAL_8 "Treasures of MARK, the Dwarf King." #define IDS_TRO_TUTORIAL_9 "Help KING MARK find his Treasures." #define IDS_TRO_TUTORIAL_10 "You can't take a Treasure if the TROLL" #define IDS_TRO_TUTORIAL_11 "is in the same picture as the Treasure." #define IDS_TRO_TUTORIAL_12 "To make the TROLL go away you have to" #define IDS_TRO_TUTORIAL_13 "make the picture change." #define IDS_TRO_TUTORIAL_14 "During the game see the Treasures you" #define IDS_TRO_TUTORIAL_15 "have already found by pressing ." #define IDS_TRO_TUTORIAL_16 "During the game you can turn the sound" #define IDS_TRO_TUTORIAL_17 "on or off by pressing the key " #define IDS_TRO_TUTORIAL_18 "while holding down the key." #define IDS_TRO_TUTORIAL_19 "The TROLL has hidden these Treasures:" #define IDS_TRO_CREDITS_0 "Prepare to enter the world of . . ." #define IDS_TRO_CREDITS_1 "TROLL'S TALE (tm)" #define IDS_TRO_CREDITS_2 "------------" #define IDS_TRO_CREDITS_3 "Written by MIKE MACCHESNEY" #define IDS_TRO_CREDITS_4 "Conversion by PETER OLIPHANT" #define IDS_TRO_CREDITS_5 "Graphic Art by DOUG MACNEILL" #define IDS_TRO_CREDITS_6 "Original Version by AL LOWE" #define IDS_TRO_TREASURE_0 "TREASURES FOUND" #define IDS_TRO_TREASURE_1 "---------------" #define IDS_TRO_TREASURE_2 "NONE" #define IDS_TRO_TREASURE_3 "THERE ARE STILL %d TREASURES TO FIND" #define IDS_TRO_TREASURE_4 "%d TREASURES TO FIND" #define IDS_TRO_TREASURE_5 "%d TREASURE TO FIND" #define IDS_TRO_TREASURE_6 "YOU HAVE FOUND ALL OF THE TREASURES!!" #define IDS_TRO_TREASURE_7 "THERE'S ONLY ONE MORE TREASURE TO FIND." #define IDS_TRO_TREASURE_8 "GREAT!! YOU HAVE FOUND EVERY TREASURE." #define IDS_TRO_TREASURE_9 "TAKE THE TREASURES TO THE GUARD." #define IDS_TRO_GAMEOVER_0 "You took %d moves to complete TROLL'S" #define IDS_TRO_GAMEOVER_1 "TALE. Do you think you can do better?" // picture #define IDI_TRO_PICNUM 47 #define IDI_TRO_PIC_WIDTH 160 #define IDI_TRO_PIC_HEIGHT 168 #define IDI_TRO_PIC_X0 0 #define IDI_TRO_PIC_Y0 0 #define IDI_TRO_PIC_FLAGS IDF_AGI_PIC_V15 // max values #define IDI_TRO_MAX_TREASURE 16 #define IDI_TRO_MAX_OPTION 3 #define IDI_TRO_SEL_OPTION_1 0 #define IDI_TRO_SEL_OPTION_2 1 #define IDI_TRO_SEL_OPTION_3 2 #define IDI_TRO_MAX_ROW_PIC 21 #define IDI_TRO_NUM_ROOMDESCS 65 #define IDI_TRO_NUM_OPTIONS 129 #define IDI_TRO_NUM_NUMROOMS 43 #define IDI_TRO_NUM_USERMSGS 34 #define IDI_TRO_NUM_LOCDESCS 59 #define IDI_TRO_NUM_NONTROLL 9 // offsets #define IDA_TRO_BINNAME "troll.img" #define IDO_TRO_DATA_START 0x3A40 #define IDO_TRO_PIC_START 0x3EF5 #define IDO_TRO_LOCMESSAGES 0x1F7C #define IDO_TRO_USERMESSAGES 0x34A4 #define IDO_TRO_ROOMDESCS 0x0082 #define IDO_TRO_OPTIONS 0x0364 #define IDO_TRO_PICSTARTIDX 0x02CD #define IDO_TRO_ROOMPICDELTAS 0x030C #define IDO_TRO_ALLTREASURES 0x3B24 #define IDO_TRO_ITEMS 0x34E8 #define IDO_TRO_FRAMEPIC 0x3EC2 #define IDO_TRO_ROOMCONNECTS 0x02FA #define IDO_TRO_NONTROLLROOMS 0x3CF9 enum OptionType { OT_GO, OT_GET, OT_DO, OT_FLASHLIGHT }; struct RoomDesc { int options[3]; OptionType optionTypes[3]; int roomDescIndex[3]; }; struct UserMsg { int num; char msg[3][40]; }; struct Item { byte bg; byte fg; char name[16]; }; class TrollEngine : public PreAgiEngine { public: TrollEngine(OSystem *syst, const AGIGameDescription *gameDesc); ~TrollEngine(); Common::Error go(); private: int _roomPicture; int _treasuresLeft; int _currentRoom; int _moves; bool _isTrollAway; int _inventory[IDI_TRO_MAX_TREASURE]; bool _soundOn; byte *_gameData; void init(); void intro(); void drawPic(int iPic, bool f3IsCont, bool clear, bool troll = false); void drawTroll(); void gameLoop(); void gameOver(); void tutorial(); void credits(); void inventory(); void pickupTreasure(int treasureId); int drawRoom(char *menu); void printUserMessage(int msgId); void pressAnyKey(int col = 4); void waitAnyKeyIntro(); void playTune(int tune, int len); bool getMenuSel(const char *, int *, int); void drawMenu(const char *szMenu, int iSel); void fillOffsets(); // These are come from game data int _pictureOffsets[IDI_TRO_PICNUM]; int _roomPicStartIdx[IDI_TRO_NUM_NUMROOMS]; int _roomPicDeltas[IDI_TRO_NUM_NUMROOMS]; int _roomStates[IDI_TRO_NUM_NUMROOMS]; UserMsg _userMessages[IDI_TRO_NUM_USERMSGS]; int _locMessagesIdx[IDI_TRO_NUM_LOCDESCS]; RoomDesc _roomDescs[IDI_TRO_NUM_ROOMDESCS]; int _options[IDI_TRO_NUM_OPTIONS]; Item _items[IDI_TRO_MAX_TREASURE]; int _roomConnects[IDI_TRO_NUM_OPTIONS]; int _nonTrollRooms[IDO_TRO_NONTROLLROOMS]; int _tunes[6]; }; } // End of namespace Agi #endif