void Troll::gameOver() { // We do a check to see if the game should quit. Without this, the game show the picture, plays the // music, and then quits. So if the game is quitting, we shouldn't run the "game over" part. if (_vm->shouldQuit()) return; char szMoves[40]; _vm->clearTextArea(); drawPic(42, true, true); playTune(4, 25); printUserMessage(16); printUserMessage(33); _vm->clearTextArea(); drawPic(46, true, true); sprintf(szMoves, IDS_TRO_GAMEOVER_0, _moves); _vm->drawStr(21, 1, kColorDefault, szMoves); _vm->drawStr(22, 1, kColorDefault, IDS_TRO_GAMEOVER_1); _vm->_gfx->doUpdate(); pressAnyKey(); }
void Troll::credits() { _vm->clearScreen(0x07); _vm->drawStr(1, 2, kColorDefault, IDS_TRO_CREDITS_0); int color = 10; char str[2]; str[1] = 0; for (uint i = 0; i < strlen(IDS_TRO_CREDITS_1); i++) { str[0] = IDS_TRO_CREDITS_1[i]; _vm->drawStr(7, 19 + i, color++, str); if (color > 15) color = 9; } _vm->drawStr(8, 19, kColorDefault, IDS_TRO_CREDITS_2); _vm->drawStr(13, 11, 9, IDS_TRO_CREDITS_3); _vm->drawStr(15, 8, 10, IDS_TRO_CREDITS_4); _vm->drawStr(17, 7, 12, IDS_TRO_CREDITS_5); _vm->drawStr(19, 2, 14, IDS_TRO_CREDITS_6); _vm->_gfx->doUpdate(); pressAnyKey(); }
void Troll::printUserMessage(int msgId) { int i; _vm->clearTextArea(); for (i = 0; i < _userMessages[msgId - 1].num; i++) { _vm->drawStr(21 + i, 1, kColorDefault, _userMessages[msgId - 1].msg[i]); } if (msgId == 34) { for (i = 0; i < 2; i++) playTune(5, 11); } pressAnyKey(); }
void Troll::pickupTreasure(int treasureId) { char tmp[40]; _inventory[IDI_TRO_MAX_TREASURE - _treasuresLeft] = treasureId; if (_currentRoom != 24) { _vm->clearTextArea(); drawPic(_currentRoom, false, true); _vm->_gfx->doUpdate(); } printUserMessage(treasureId + 16); _vm->clearTextArea(); _treasuresLeft--; switch (_treasuresLeft) { case 1: _vm->drawStr(22, 1, kColorDefault, IDS_TRO_TREASURE_7); break; case 0: _vm->drawStr(22, 1, kColorDefault, IDS_TRO_TREASURE_8); _vm->drawStr(23, 4, kColorDefault, IDS_TRO_TREASURE_9); _roomStates[6] = 1; _locMessagesIdx[6] = IDO_TRO_ALLTREASURES; break; default: sprintf(tmp, IDS_TRO_TREASURE_3, _treasuresLeft); _vm->drawStr(22, 1, kColorDefault, tmp); break; } pressAnyKey(); }
void Troll::inventory() { char tmp[40]; int n; _vm->clearScreen(0x07); _vm->drawStr(1, 12, kColorDefault, IDS_TRO_TREASURE_0); _vm->drawStr(2, 12, kColorDefault, IDS_TRO_TREASURE_1); for (int i = 0; i < IDI_TRO_MAX_TREASURE - _treasuresLeft; i++) { n = _inventory[i] - 1; sprintf(tmp, " %2d ", i + 1); _vm->drawStr(2 + i, 10, _items[n].bg << 4 | 0x0f, tmp); _vm->drawStr(2 + i, 14, _items[n].bg << 4 | _items[n].fg, _items[n].name); } switch (_treasuresLeft) { case 1: sprintf(tmp, IDS_TRO_TREASURE_5, _treasuresLeft); _vm->drawStr(20, 10, kColorDefault, tmp); break; case 0: _vm->drawStr(20, 1, kColorDefault, IDS_TRO_TREASURE_6); break; case IDI_TRO_MAX_TREASURE: _vm->drawStr(3, 17, kColorDefault, IDS_TRO_TREASURE_2); default: sprintf(tmp, IDS_TRO_TREASURE_4, _treasuresLeft); _vm->drawStr(20, 10, kColorDefault, tmp); break; } pressAnyKey(6); }
main() { int f, g, a, b, c; zx_border(0); zx_cls(0); printPaper(0); printInk(6); printAt(4, 22); printf("BIFROST*"); printAt(5, 23); printf("ENGINE"); printAt(6, 24); printf("DEMO"); printInk(4); printAt(10, 24); printf("with"); printAt(11, 23); printf("z88dk!"); BIFROSTH_resetTileImages(_ctiles); for (f = 0; f < 81; ++f) { BIFROSTH_tilemap[f] = BIFROSTH_STATIC + f; } BIFROSTH_start(); while (1) { pressAnyKey(); printInk(5); printAt(20, 1); printf("Demonstrating static tiles"); for (f = 0; f < 81; ++f) { BIFROSTH_tilemap[f] = BIFROSTH_STATIC + (rand()%26)+8; } pressAnyKey(); printInk(5); printAt(20, 1); printf("Animated tiles (4 frames) "); pressSpeedKey(); printInk(5); printAt(20, 17); printf("2"); BIFROSTH_resetAnim2Frames(); pressSpeedKey(); BIFROSTH_resetAnim4Frames(); printInk(5); printAt(20, 1); printf("Directly modifying areas "); M_BIFROSTH_SETTILE(4, 4, BIFROSTH_DISABLED); M_BIFROSTH_SETTILE(4, 5, BIFROSTH_DISABLED); printAt(9, 9); printf("BIFR"); printAt(10, 9); printf("OST*"); for (c = 0; c < 8; ++c) { a = rand()%8; for (b = 0; b < 2; ++b) { for (f = 8+72+0; f < 8+72+16; ++f) { for (g = 9; g < 13; ++g) { *BIFROSTH_findAttrH(f, g) = (b == 0 ? a*8 : a); a = (a == 7 ? 3 : a+1); } } } } } }
void Troll::tutorial() { bool done = false; int iSel = 0; //char szTreasure[16] = {0}; while (!_vm->shouldQuit()) { _vm->clearScreen(0xFF); _vm->printStr(IDS_TRO_TUTORIAL_0); _vm->getSelection(kSelSpace); _vm->clearScreen(0x55); _vm->setDefaultTextColor(0x0F); done = false; while (!done && !_vm->shouldQuit()) { getMenuSel(IDS_TRO_TUTORIAL_1, &iSel, IDI_TRO_MAX_OPTION); switch (iSel) { case IDI_TRO_SEL_OPTION_1: _vm->clearScreen(0x22, false); _vm->_gfx->doUpdate(); break; case IDI_TRO_SEL_OPTION_2: _vm->clearScreen(0x00, false); _vm->_gfx->doUpdate(); break; case IDI_TRO_SEL_OPTION_3: done = true; break; } } // do you need more practice ? _vm->clearScreen(0x4F); _vm->drawStr(7, 4, kColorDefault, IDS_TRO_TUTORIAL_5); _vm->drawStr(9, 4, kColorDefault, IDS_TRO_TUTORIAL_6); _vm->_gfx->doUpdate(); if (!_vm->getSelection(kSelYesNo)) break; } // show info texts _vm->clearScreen(0x5F); _vm->drawStr(4, 1, kColorDefault, IDS_TRO_TUTORIAL_7); _vm->drawStr(5, 1, kColorDefault, IDS_TRO_TUTORIAL_8); _vm->_gfx->doUpdate(); pressAnyKey(); _vm->clearScreen(0x2F); _vm->drawStr(6, 1, kColorDefault, IDS_TRO_TUTORIAL_9); _vm->_gfx->doUpdate(); pressAnyKey(); _vm->clearScreen(0x19); _vm->drawStr(7, 1, kColorDefault, IDS_TRO_TUTORIAL_10); _vm->drawStr(8, 1, kColorDefault, IDS_TRO_TUTORIAL_11); _vm->_gfx->doUpdate(); pressAnyKey(); _vm->clearScreen(0x6E); _vm->drawStr(9, 1, kColorDefault, IDS_TRO_TUTORIAL_12); _vm->drawStr(10, 1, kColorDefault, IDS_TRO_TUTORIAL_13); _vm->_gfx->doUpdate(); pressAnyKey(); _vm->clearScreen(0x4C); _vm->drawStr(11, 1, kColorDefault, IDS_TRO_TUTORIAL_14); _vm->drawStr(12, 1, kColorDefault, IDS_TRO_TUTORIAL_15); _vm->_gfx->doUpdate(); pressAnyKey(); _vm->clearScreen(0x5D); _vm->drawStr(13, 1, kColorDefault, IDS_TRO_TUTORIAL_16); _vm->drawStr(14, 1, kColorDefault, IDS_TRO_TUTORIAL_17); _vm->drawStr(15, 1, kColorDefault, IDS_TRO_TUTORIAL_18); _vm->_gfx->doUpdate(); pressAnyKey(); // show treasures _vm->clearScreen(0x2A); _vm->drawStr(2, 1, kColorDefault, IDS_TRO_TUTORIAL_19); for (int i = 0; i < IDI_TRO_MAX_TREASURE; i++) _vm->drawStr(19 - i, 11, kColorDefault, _items[i].name); _vm->_gfx->doUpdate(); pressAnyKey(); }