PageRenderTime 42ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/scummvm-1.4.1/engines/kyra/sequences_hof.cpp

#
C++ | 2922 lines | 2359 code | 525 blank | 38 comment | 652 complexity | c32c65842ebc905a7144ea9013ff45a9 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. /* ScummVM - Graphic Adventure Engine
  2. *
  3. * ScummVM is the legal property of its developers, whose names
  4. * are too numerous to list here. Please refer to the COPYRIGHT
  5. * file distributed with this source distribution.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 2
  10. * of the License, or (at your option) any later version.
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. *
  19. */
  20. #include "kyra/kyra_hof.h"
  21. #include "kyra/timer.h"
  22. #include "kyra/resource.h"
  23. #include "kyra/sound.h"
  24. #include "common/system.h"
  25. namespace Kyra {
  26. void KyraEngine_HoF::seq_playSequences(int startSeq, int endSeq) {
  27. seq_init();
  28. bool allowSkip = (!(_flags.isDemo && !_flags.isTalkie) && (startSeq == kSequenceTitle)) ? false : true;
  29. if (endSeq == -1)
  30. endSeq = startSeq;
  31. assert(startSeq >= 0 && endSeq < kSequenceArraySize && startSeq <= endSeq);
  32. _sound->setSoundList(&_soundData[(startSeq > kSequenceZanfaun) ? kMusicFinale : kMusicIntro]);
  33. _sound->loadSoundFile(0);
  34. _screen->_charWidth = (_flags.gameID == GI_LOL) ? 0 : -2;
  35. memset(_activeWSA, 0, sizeof(ActiveWSA) * 8);
  36. for (int i = 0; i < 8; ++i)
  37. _activeWSA[i].flags = -1;
  38. memset(_activeText, 0, sizeof(ActiveText) * 10);
  39. seq_resetAllTextEntries();
  40. _screen->hideMouse();
  41. int oldPage = _screen->setCurPage(2);
  42. for (int i = 0; i < 4; ++i)
  43. _screen->getPalette(i).clear();
  44. _screen->clearPage(10);
  45. _screen->clearPage(12);
  46. _seqSubframePlaying = false;
  47. _seqWsaCurrentFrame = 0;
  48. _seqTextColor[0] = _seqTextColor[1] = 0;
  49. _seqEndTime = 0;
  50. _menuChoice = 0;
  51. for (int seqNum = startSeq; seqNum <= endSeq && !((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice); seqNum++) {
  52. _screen->clearPage(0);
  53. _screen->clearPage(8);
  54. _screen->copyPalette(1, 0);
  55. _seqFrameCounter = 0;
  56. _seqStartTime = _system->getMillis();
  57. allowSkip = (!(_flags.isDemo && !_flags.isTalkie) && (seqNum == kSequenceTitle)) ? false : true;
  58. Sequence cseq = _sequences->seq[seqNum];
  59. SeqProc cb = _callbackS[seqNum];
  60. if (cseq.flags & 2) {
  61. _screen->loadBitmap(cseq.cpsFile, 2, 2, &_screen->getPalette(0));
  62. _screen->setScreenPalette(_screen->getPalette(0));
  63. } else {
  64. _screen->setCurPage(2);
  65. _screen->clearPage(2);
  66. _screen->loadPalette("goldfont.col", _screen->getPalette(0));
  67. }
  68. if (cb && !(_flags.isDemo && !_flags.isTalkie))
  69. (this->*cb)(0, 0, 0, -1);
  70. if (cseq.flags & 1) {
  71. _seqWsa->close();
  72. _seqWsa->open(cseq.wsaFile, 0, &_screen->getPalette(0));
  73. _screen->setScreenPalette(_screen->getPalette(0));
  74. _seqWsa->displayFrame(0, 2, cseq.xPos, cseq.yPos, 0, 0, 0);
  75. }
  76. if (cseq.flags & 4) {
  77. int cp = _screen->setCurPage(2);
  78. Screen::FontId cf = _screen->setFont(_flags.lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : Screen::FID_GOLDFONT_FNT);
  79. if (cseq.stringIndex1 != -1) {
  80. int sX = (320 - _screen->getTextWidth(_sequenceStrings[cseq.stringIndex1])) / 2;
  81. _screen->printText(_sequenceStrings[cseq.stringIndex1], sX, 100 - _screen->getFontHeight(), 1, 0);
  82. }
  83. if (cseq.stringIndex2 != -1) {
  84. int sX = (320 - _screen->getTextWidth(_sequenceStrings[cseq.stringIndex2])) / 2;
  85. _screen->printText(_sequenceStrings[cseq.stringIndex2], sX, 100, 1, 0);
  86. }
  87. _screen->setFont(cf);
  88. _screen->setCurPage(cp);
  89. }
  90. _screen->copyPage(2, 12);
  91. _screen->copyPage(0, 2);
  92. _screen->copyPage(2, 10);
  93. _screen->copyPage(12, 2);
  94. seq_sequenceCommand(cseq.startupCommand);
  95. if (!((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  96. _screen->copyPage(2, 0);
  97. _screen->updateScreen();
  98. }
  99. if (cseq.flags & 1) {
  100. int x = cseq.xPos;
  101. int y = cseq.yPos;
  102. _seqFrameDelay = cseq.frameDelay;
  103. if (_seqWsa) {
  104. if (x < 0) {
  105. _seqWsa->setWidth(_seqWsa->width() + x);
  106. x = 0;
  107. }
  108. if (y < 0) {
  109. _seqWsa->setHeight(_seqWsa->height() + y);
  110. y = 0;
  111. }
  112. if (cseq.xPos + _seqWsa->width() > 319)
  113. _seqWsa->setWidth(320 - cseq.xPos);
  114. if (cseq.yPos + _seqWsa->height() > 199)
  115. _seqWsa->setHeight(199 - cseq.yPos);
  116. }
  117. uint8 dir = (cseq.startFrame > cseq.numFrames) ? 0 : 1;
  118. _seqWsaCurrentFrame = cseq.startFrame;
  119. bool loop = true;
  120. while (loop && !((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  121. _seqEndTime = _system->getMillis() + _seqFrameDelay * _tickLength;
  122. if (_seqWsa || !cb)
  123. _screen->copyPage(12, 2);
  124. if (cb) {
  125. int f = _seqWsaCurrentFrame % _seqWsa->frames();
  126. (this->*cb)(_seqWsa, cseq.xPos, cseq.yPos, f);
  127. }
  128. if (_seqWsa) {
  129. int f = _seqWsaCurrentFrame % _seqWsa->frames();
  130. _seqWsa->displayFrame(f, 2, cseq.xPos, cseq.yPos, 0, 0, 0);
  131. }
  132. _screen->copyPage(2, 12);
  133. seq_processWSAs();
  134. seq_processText();
  135. if ((_seqWsa || !cb) && !((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  136. _screen->copyPage(2, 0);
  137. _screen->updateScreen();
  138. }
  139. bool loop2 = true;
  140. while (loop2 && !((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  141. if (_seqWsa) {
  142. seq_processText();
  143. if (!((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  144. _screen->copyPage(2, 0);
  145. _screen->updateScreen();
  146. }
  147. uint32 now = _system->getMillis();
  148. if (now >= _seqEndTime) {
  149. loop2 = false;
  150. } else {
  151. uint32 tdiff = _seqEndTime - now;
  152. uint32 dly = tdiff < _tickLength ? tdiff : _tickLength;
  153. delay(dly);
  154. }
  155. } else {
  156. loop = loop2 = false;
  157. }
  158. }
  159. if (loop) {
  160. if (dir == 1) {
  161. if (++_seqWsaCurrentFrame >= cseq.numFrames)
  162. loop = false;
  163. } else {
  164. if (--_seqWsaCurrentFrame < cseq.numFrames)
  165. loop = false;
  166. }
  167. }
  168. }
  169. _seqWsa->close();
  170. } else {
  171. _seqFrameDelay = cseq.frameDelay;
  172. _seqEndTime = _system->getMillis() + _seqFrameDelay * _tickLength;
  173. while (!((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  174. _seqSubFrameStartTime = _system->getMillis();
  175. seq_processWSAs();
  176. if (cb)
  177. (this->*cb)(0, 0, 0, 0);
  178. seq_processText();
  179. _screen->copyPage(2, 0);
  180. _screen->updateScreen();
  181. _screen->copyPage(12, 2);
  182. uint32 now = _system->getMillis();
  183. if (now >= _seqEndTime && !_seqSubframePlaying)
  184. break;
  185. uint32 tdiff = _seqEndTime - _seqSubFrameStartTime;
  186. int32 dly = _tickLength - (now - _seqSubFrameStartTime);
  187. if (dly > 0)
  188. delay(MIN<uint32>(dly, tdiff));
  189. }
  190. }
  191. if (cb && !(_flags.isDemo && !_flags.isTalkie))
  192. (this->*cb)(0, 0, 0, -2);
  193. uint32 ct = seq_activeTextsTimeLeft();
  194. uint32 dl = cseq.duration * _tickLength;
  195. if (dl < ct)
  196. dl = ct;
  197. _seqEndTime = _system->getMillis() + dl;
  198. while (!((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice)) {
  199. _seqSubFrameStartTime = _system->getMillis();
  200. seq_processWSAs();
  201. _screen->copyPage(2, 0);
  202. _screen->updateScreen();
  203. _screen->copyPage(12, 2);
  204. uint32 now = _system->getMillis();
  205. if (now >= _seqEndTime && !_seqSubframePlaying) {
  206. break;
  207. }
  208. uint32 tdiff = _seqEndTime - _seqSubFrameStartTime;
  209. int32 dly = _tickLength - (now - _seqSubFrameStartTime);
  210. if (dly > 0)
  211. delay(MIN<uint32>(dly, tdiff));
  212. }
  213. seq_sequenceCommand(cseq.finalCommand);
  214. seq_resetAllTextEntries();
  215. if (_abortIntroFlag || skipFlag()) {
  216. _sound->haltTrack();
  217. _sound->voiceStop();
  218. }
  219. if (!_flags.isDemo || _flags.isTalkie) {
  220. if ((seqNum != kSequenceTitle && seqNum < kSequenceZanfaun &&
  221. (_abortIntroFlag || skipFlag())) || seqNum == kSequenceZanfaun) {
  222. _abortIntroFlag = false;
  223. _eventList.clear();
  224. seqNum = kSequenceWestwood;
  225. } else if (seqNum < kSequenceFrash && (_abortIntroFlag || skipFlag())) {
  226. _abortIntroFlag = false;
  227. _eventList.clear();
  228. seqNum = kSequenceFirates;
  229. }
  230. } else if (seqNum == endSeq && !(_abortIntroFlag || skipFlag())) {
  231. seqNum = 0;
  232. }
  233. if (_menuChoice) {
  234. _abortIntroFlag = false;
  235. _eventList.clear();
  236. if (_menuChoice == 2) {
  237. seqNum = kSequenceTitle;
  238. _menuChoice = 0;
  239. }
  240. }
  241. }
  242. if (_flags.isDemo && !_flags.isTalkie) {
  243. _eventList.clear();
  244. _screen->fadeToBlack();
  245. }
  246. if (!_menuChoice)
  247. delay(1200);
  248. _screen->setCurPage(oldPage);
  249. _screen->showMouse();
  250. for (int i = 0; i < 8; i++)
  251. seq_unloadWSA(i);
  252. _seqWsa->close();
  253. _screen->_charWidth = 0;
  254. seq_uninit();
  255. }
  256. int KyraEngine_HoF::seq_introWestwood(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  257. if (frm == -2) {
  258. if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
  259. delay(300 * _tickLength);
  260. } else if (!frm) {
  261. _sound->playTrack(2);
  262. }
  263. return 0;
  264. }
  265. int KyraEngine_HoF::seq_introTitle(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  266. if (frm == 1) {
  267. _sound->playTrack(3);
  268. } else if (frm == 25) {
  269. int cp = _screen->setCurPage(0);
  270. _screen->showMouse();
  271. _system->updateScreen();
  272. _menuChoice = _menu->handle(11) + 1;
  273. _seqEndTime = 0;
  274. _seqSubframePlaying = false;
  275. if (_menuChoice == 4)
  276. quitGame();
  277. _screen->hideMouse();
  278. _screen->setCurPage(cp);
  279. }
  280. return 0;
  281. }
  282. int KyraEngine_HoF::seq_introOverview(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  283. uint8 *tmpPal = _screen->getPalette(3).getData() + 0x101;
  284. memset(tmpPal, 0, 256);
  285. _seqSubFrameEndTimeInternal = 0;
  286. uint32 now = 0;
  287. switch (_seqFrameCounter) {
  288. case 0:
  289. _seqSubframePlaying = true;
  290. _sound->playTrack(4);
  291. _seqSubFrameEndTimeInternal = _system->getMillis() + 60 * _tickLength;
  292. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  293. memset(_seqTextColorMap, _seqTextColor[1], 16);
  294. _seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0), 1, 255) & 0xff;
  295. _screen->setTextColorMap(_seqTextColorMap);
  296. now = _system->getMillis();
  297. if (_seqSubFrameEndTimeInternal > now)
  298. delay(_seqSubFrameEndTimeInternal - now);
  299. break;
  300. case 1:
  301. _screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3).getData(), 0x40, 0, 0, 0, 0x100, true);
  302. for (int i = 0; i < 256; i++)
  303. tmpPal[_screen->getPalette(3)[i]] = 1;
  304. for (int i = 0; i < 256; i++) {
  305. int v = (tmpPal[i] == 1) ? i : _screen->getPalette(3)[i];
  306. v *= 3;
  307. _screen->getPalette(2)[3 * i] = _screen->getPalette(0)[v];
  308. _screen->getPalette(2)[3 * i + 1] = _screen->getPalette(0)[v + 1];
  309. _screen->getPalette(2)[3 * i + 2] = _screen->getPalette(0)[v + 2];
  310. }
  311. break;
  312. case 40:
  313. seq_loadNestedSequence(0, kSequenceOver1);
  314. break;
  315. case 60:
  316. seq_loadNestedSequence(1, kSequenceOver2);
  317. break;
  318. case 120:
  319. seq_playTalkText(0);
  320. break;
  321. case 200:
  322. seq_waitForTextsTimeout();
  323. _screen->fadePalette(_screen->getPalette(2), 64);
  324. break;
  325. case 201:
  326. _screen->setScreenPalette(_screen->getPalette(2));
  327. _screen->updateScreen();
  328. _screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
  329. _screen->copyPage(2, 12);
  330. _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
  331. _screen->setScreenPalette(_screen->getPalette(0));
  332. _screen->updateScreen();
  333. seq_resetActiveWSA(0);
  334. seq_resetActiveWSA(1);
  335. break;
  336. case 282:
  337. seq_loadNestedSequence(0, kSequenceForest);
  338. seq_playTalkText(1);
  339. break;
  340. case 354:
  341. case 434:
  342. if (!((_seqFrameCounter == 354 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 434 && _flags.platform == Common::kPlatformPC)))
  343. break;
  344. seq_resetActiveWSA(0);
  345. seq_loadNestedSequence(0, kSequenceDragon);
  346. break;
  347. case 400:
  348. case 540:
  349. if (!((_seqFrameCounter == 400 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 540 && _flags.platform == Common::kPlatformPC)))
  350. break;
  351. seq_waitForTextsTimeout();
  352. seq_resetActiveWSA(0);
  353. _seqEndTime = 0;
  354. _seqSubframePlaying = false;
  355. break;
  356. default:
  357. break;
  358. }
  359. _seqFrameCounter++;
  360. return 0;
  361. }
  362. int KyraEngine_HoF::seq_introLibrary(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  363. switch (_seqFrameCounter) {
  364. case 0:
  365. _seqSubframePlaying = true;
  366. _sound->playTrack(5);
  367. _screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3).getData(), 0x24, 0, 0, 0, 0x100, false);
  368. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  369. memset(_seqTextColorMap, _seqTextColor[1], 16);
  370. _seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0), 1, 255) & 0xff;
  371. _screen->setTextColorMap(_seqTextColorMap);
  372. break;
  373. case 1:
  374. seq_loadNestedSequence(0, kSequenceLibrary3);
  375. seq_playTalkText(4);
  376. break;
  377. case 100:
  378. seq_waitForTextsTimeout();
  379. _screen->copyPage(12, 2);
  380. _screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
  381. _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
  382. _screen->updateScreen();
  383. _screen->copyPage(2, 12);
  384. seq_resetActiveWSA(0);
  385. seq_loadNestedSequence(0, kSequenceDarm);
  386. break;
  387. case 104:
  388. seq_playTalkText(5);
  389. break;
  390. case 240:
  391. seq_waitForTextsTimeout();
  392. seq_resetActiveWSA(0);
  393. seq_loadNestedSequence(0, kSequenceLibrary2);
  394. break;
  395. case 340:
  396. seq_resetActiveWSA(0);
  397. _screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
  398. _screen->copyPage(2, 12);
  399. _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
  400. _screen->updateScreen();
  401. seq_loadNestedSequence(0, kSequenceMarco);
  402. seq_playTalkText(6);
  403. break;
  404. case 480:
  405. case 660:
  406. if (!((_seqFrameCounter == 480 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 660 && _flags.platform == Common::kPlatformPC)))
  407. break;
  408. _screen->copyPage(2, 12);
  409. seq_waitForTextsTimeout();
  410. seq_resetActiveWSA(0);
  411. _seqEndTime = 0;
  412. _seqSubframePlaying = false;
  413. break;
  414. default:
  415. break;
  416. }
  417. _seqFrameCounter++;
  418. return 0;
  419. }
  420. int KyraEngine_HoF::seq_introHand(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  421. switch (_seqFrameCounter) {
  422. case 0:
  423. _seqSubframePlaying = true;
  424. _sound->playTrack(6);
  425. _screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3).getData(), 0x24, 0, 0, 0, 0x100, false);
  426. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  427. memset(_seqTextColorMap, _seqTextColor[1], 16);
  428. _seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0), 1, 255) & 0xff;
  429. _screen->setTextColorMap(_seqTextColorMap);
  430. break;
  431. case 1:
  432. seq_loadNestedSequence(0, kSequenceHand1a);
  433. seq_loadNestedSequence(1, kSequenceHand1b);
  434. seq_loadNestedSequence(2, kSequenceHand1c);
  435. seq_playTalkText(7);
  436. break;
  437. case 201:
  438. seq_waitForTextsTimeout();
  439. _screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
  440. _screen->copyPage(2, 12);
  441. _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
  442. _screen->updateScreen();
  443. seq_resetActiveWSA(0);
  444. seq_resetActiveWSA(1);
  445. seq_resetActiveWSA(2);
  446. seq_loadNestedSequence(0, kSequenceHand2);
  447. seq_playTalkText(8);
  448. break;
  449. case 260:
  450. case 395:
  451. if (!((_seqFrameCounter == 260 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 395 && _flags.platform == Common::kPlatformPC)))
  452. break;
  453. seq_waitForTextsTimeout();
  454. seq_resetActiveWSA(0);
  455. seq_loadNestedSequence(1, kSequenceHand3);
  456. seq_playTalkText(9);
  457. break;
  458. case 365:
  459. case 500:
  460. if (!((_seqFrameCounter == 365 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 500 && _flags.platform == Common::kPlatformPC)))
  461. break;
  462. seq_waitForTextsTimeout();
  463. seq_resetActiveWSA(1);
  464. seq_loadNestedSequence(0, kSequenceHand4);
  465. break;
  466. case 405:
  467. case 540:
  468. if (!((_seqFrameCounter == 405 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 540 && _flags.platform == Common::kPlatformPC)))
  469. break;
  470. seq_playTalkText(10);
  471. break;
  472. case 484:
  473. case 630:
  474. if (!((_seqFrameCounter == 484 && (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)) || (_seqFrameCounter == 630 && _flags.platform == Common::kPlatformPC)))
  475. break;
  476. seq_waitForTextsTimeout();
  477. seq_resetActiveWSA(0);
  478. _seqEndTime = 0;
  479. _seqSubframePlaying = false;
  480. break;
  481. default:
  482. break;
  483. }
  484. _seqFrameCounter++;
  485. return 0;
  486. }
  487. int KyraEngine_HoF::seq_introPoint(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  488. if (frm == -2) {
  489. seq_waitForTextsTimeout();
  490. _seqEndTime = 0;
  491. }
  492. switch (_seqFrameCounter) {
  493. case -2:
  494. seq_waitForTextsTimeout();
  495. break;
  496. case 0:
  497. _sound->playTrack(7);
  498. _seqTextColor[1] = 0xf7;
  499. memset(_seqTextColorMap, _seqTextColor[1], 16);
  500. _seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0), 1, 255) & 0xff;
  501. _screen->setTextColorMap(_seqTextColorMap);
  502. _screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3).getData(), 0x24, 0, 0, 0, 0x100, false);
  503. break;
  504. case 1:
  505. seq_playTalkText(11);
  506. break;
  507. default:
  508. break;
  509. }
  510. _seqFrameCounter++;
  511. return 0;
  512. }
  513. int KyraEngine_HoF::seq_introZanfaun(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  514. if (frm == -2) {
  515. seq_waitForTextsTimeout();
  516. _seqEndTime = 0;
  517. return 0;
  518. }
  519. switch (_seqFrameCounter) {
  520. case 0:
  521. _sound->playTrack(8);
  522. _seqTextColor[1] = 0xfd;
  523. memset(_seqTextColorMap, _seqTextColor[1], 16);
  524. _seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0), 1, 255) & 0xff;
  525. _screen->setTextColorMap(_seqTextColorMap);
  526. break;
  527. case 1:
  528. if (_flags.isTalkie) {
  529. seq_playWsaSyncDialogue(21, 13, -1, 140, 70, 160, wsaObj, 0, 8, x, y);
  530. } else {
  531. seq_setTextEntry(21, 140, 70, 200, 160);
  532. _seqFrameDelay = 200;
  533. }
  534. break;
  535. case 2:
  536. case 11:
  537. case 21:
  538. if (!_flags.isTalkie)
  539. _seqFrameDelay = 12;
  540. break;
  541. case 9:
  542. if (_flags.isTalkie)
  543. seq_playWsaSyncDialogue(13, 14, -1, 140, (_flags.lang == Common::FR_FRA
  544. || _flags.lang == Common::DE_DEU) ? 50 : 70, 160, wsaObj, 9, 15, x, y);
  545. break;
  546. case 10:
  547. if (!_flags.isTalkie) {
  548. seq_waitForTextsTimeout();
  549. seq_setTextEntry(13, 140, 50, _sequenceStringsDuration[13], 160);
  550. _seqFrameDelay = 300;
  551. }
  552. break;
  553. case 16:
  554. if (_flags.isTalkie)
  555. seq_playWsaSyncDialogue(18, 15, -1, 140, (_flags.lang == Common::FR_FRA) ? 50 :
  556. (_flags.lang == Common::DE_DEU ? 40 : 70), 160, wsaObj, 10, 16, x, y);
  557. break;
  558. case 17:
  559. if (_flags.isTalkie)
  560. _seqFrameDelay = 12;
  561. break;
  562. case 20:
  563. if (!_flags.isTalkie) {
  564. seq_waitForTextsTimeout();
  565. seq_setTextEntry(18, 160, 50, _sequenceStringsDuration[18], 160);
  566. _seqFrameDelay = 200;
  567. }
  568. break;
  569. case 26:
  570. seq_waitForTextsTimeout();
  571. break;
  572. case 46:
  573. if (_flags.isTalkie) {
  574. seq_playWsaSyncDialogue(16, 16, -1, 200, 50, 120, wsaObj, 46, 46, x, y);
  575. } else {
  576. seq_waitForTextsTimeout();
  577. seq_setTextEntry(16, 200, 50, _sequenceStringsDuration[16], 120);
  578. }
  579. _seqEndTime = _system->getMillis() + 120 * _tickLength;
  580. break;
  581. default:
  582. break;
  583. }
  584. _seqFrameCounter++;
  585. return 0;
  586. }
  587. int KyraEngine_HoF::seq_introOver1(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  588. if (frm == 2)
  589. seq_waitForTextsTimeout();
  590. else if (frm == 3)
  591. seq_playTalkText(12);
  592. return frm;
  593. }
  594. int KyraEngine_HoF::seq_introOver2(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  595. if (frm == 1)
  596. seq_playTalkText(12);
  597. return frm;
  598. }
  599. int KyraEngine_HoF::seq_introForest(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  600. if (frm == 11)
  601. seq_waitForTextsTimeout();
  602. else if (frm == 12)
  603. seq_playTalkText(2);
  604. return frm;
  605. }
  606. int KyraEngine_HoF::seq_introDragon(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  607. if (frm == 11)
  608. seq_waitForTextsTimeout();
  609. else if (frm == 3)
  610. seq_playTalkText(3);
  611. return frm;
  612. }
  613. int KyraEngine_HoF::seq_introDarm(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  614. //NULLSUB (at least in FM-TOWNS version)
  615. return frm;
  616. }
  617. int KyraEngine_HoF::seq_introLibrary2(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  618. //NULLSUB (at least in FM-TOWNS version)
  619. return frm;
  620. }
  621. int KyraEngine_HoF::seq_introMarco(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  622. if (frm == 36) {
  623. seq_waitForTextsTimeout();
  624. _seqEndTime = 0;
  625. }
  626. return frm;
  627. }
  628. int KyraEngine_HoF::seq_introHand1a(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  629. //NULLSUB (at least in FM-TOWNS version)
  630. return frm;
  631. }
  632. int KyraEngine_HoF::seq_introHand1b(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  633. if (frm == 15)
  634. frm = 12;
  635. return frm;
  636. }
  637. int KyraEngine_HoF::seq_introHand1c(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  638. if (frm == 8)
  639. frm = 4;
  640. return frm;
  641. }
  642. int KyraEngine_HoF::seq_introHand2(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  643. //NULLSUB (at least in FM-TOWNS version)
  644. return frm;
  645. }
  646. int KyraEngine_HoF::seq_introHand3(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  647. //NULLSUB (at least in FM-TOWNS version)
  648. return frm;
  649. }
  650. int KyraEngine_HoF::seq_finaleFunters(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  651. _seqSubFrameEndTimeInternal = 0;
  652. int chatX = 0;
  653. int chatY = 0;
  654. int chatW = 0;
  655. int chatFirstFrame = 0;
  656. int chatLastFrame = 0;
  657. uint16 voiceIndex = 0;
  658. switch (frm) {
  659. case -2:
  660. seq_sequenceCommand(9);
  661. break;
  662. case 0:
  663. _sound->playTrack(3);
  664. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  665. memset(_seqTextColorMap, _seqTextColor[1], 16);
  666. _seqTextColor[0] = _seqTextColorMap[1] = 0xff;
  667. _screen->setTextColorMap(_seqTextColorMap);
  668. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  669. seq_printCreditsString(81, 240, 70, _seqTextColorMap, 252);
  670. seq_printCreditsString(82, 240, 90, _seqTextColorMap, _seqTextColor[0]);
  671. _screen->copyPage(2, 12);
  672. seq_playTalkText(_flags.isTalkie ? 28 : 24);
  673. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  674. _seqTextColor[0] = 1;
  675. if (_flags.isTalkie) {
  676. chatY = (_flags.lang == Common::FR_FRA) ? 70 : 78;
  677. chatFirstFrame = 9;
  678. chatLastFrame = 15;
  679. voiceIndex = 34;
  680. } else {
  681. chatY = (_flags.lang == Common::FR_FRA) ? 78 : 70;
  682. chatFirstFrame = 0;
  683. chatLastFrame = 8;
  684. }
  685. chatX = (_flags.lang == Common::FR_FRA) ? 84 : 88;
  686. chatW = 100;
  687. seq_playWsaSyncDialogue(22, voiceIndex, 187, chatX, chatY, chatW, wsaObj, chatFirstFrame, chatLastFrame, x, y);
  688. break;
  689. case 9:
  690. case 16:
  691. if (!((frm == 9 && !_flags.isTalkie) || (frm == 16 && _flags.isTalkie)))
  692. break;
  693. _seqFrameDelay = 12;
  694. if (_flags.lang == Common::FR_FRA) {
  695. chatX = 80;
  696. chatW = 112;
  697. } else {
  698. chatX = (_flags.lang == Common::DE_DEU) ? 84 : 96;
  699. chatW = 100;
  700. }
  701. if (_flags.isTalkie) {
  702. chatFirstFrame = 0;
  703. chatLastFrame = 8;
  704. voiceIndex = 35;
  705. } else {
  706. chatFirstFrame = 9;
  707. chatLastFrame = 15;
  708. }
  709. chatY = 70;
  710. seq_playWsaSyncDialogue(23, voiceIndex, 137, chatX, chatY, chatW, wsaObj, chatFirstFrame, chatLastFrame, x, y);
  711. if (_flags.isTalkie)
  712. _seqWsaCurrentFrame = 17;
  713. break;
  714. default:
  715. break;
  716. }
  717. _seqFrameCounter++;
  718. return 0;
  719. }
  720. int KyraEngine_HoF::seq_finaleFerb(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  721. _seqSubFrameEndTimeInternal = 0;
  722. int chatX = 0;
  723. int chatY = 0;
  724. int chatW = 0;
  725. int chatFirstFrame = 0;
  726. int chatLastFrame = 0;
  727. uint16 voiceIndex = 0;
  728. switch (frm) {
  729. case -2:
  730. seq_sequenceCommand(9);
  731. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  732. seq_printCreditsString(34, 240, _flags.isTalkie ? 60 : 40, _seqTextColorMap, 252);
  733. seq_printCreditsString(35, 240, _flags.isTalkie ? 70 : 50, _seqTextColorMap, _seqTextColor[0]);
  734. seq_printCreditsString(36, 240, _flags.isTalkie ? 90 : 70, _seqTextColorMap, 252);
  735. seq_printCreditsString(37, 240, _flags.isTalkie ? 100 : 90, _seqTextColorMap, _seqTextColor[0]);
  736. seq_printCreditsString(38, 240, _flags.isTalkie ? 120 : 110, _seqTextColorMap, 252);
  737. seq_printCreditsString(39, 240, _flags.isTalkie ? 130 : 120, _seqTextColorMap, _seqTextColor[0]);
  738. if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
  739. seq_printCreditsString(103, 240, 130, _seqTextColorMap, _seqTextColor[0]);
  740. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  741. _seqEndTime = 0;
  742. break;
  743. case 0:
  744. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  745. memset(_seqTextColorMap, _seqTextColor[1], 16);
  746. _seqTextColor[0] = _seqTextColorMap[1] = 255;
  747. _screen->setTextColorMap(_seqTextColorMap);
  748. break;
  749. case 5:
  750. if (!_flags.isTalkie)
  751. seq_playTalkText(18);
  752. _seqFrameDelay = 16;
  753. if (_flags.isTalkie) {
  754. chatFirstFrame = 5;
  755. chatLastFrame = 8;
  756. voiceIndex = 22;
  757. } else {
  758. chatLastFrame = 14;
  759. }
  760. chatX = 116;
  761. chatY = 90;
  762. chatW = 60;
  763. seq_playWsaSyncDialogue(24, voiceIndex, 149, chatX, chatY, chatW, wsaObj, chatFirstFrame, chatLastFrame, x, y);
  764. break;
  765. case 11:
  766. if (_flags.isTalkie)
  767. seq_playWsaSyncDialogue(24, 22, 149, 116, 90, 60, wsaObj, 11, 14, x, y);
  768. break;
  769. case 16:
  770. seq_playTalkText(_flags.isTalkie ? 23 : 19);
  771. _seqFrameDelay = _flags.isTalkie ? 20 : 16;
  772. if (_flags.lang == Common::FR_FRA) {
  773. chatY = 48;
  774. chatW = 88;
  775. } else {
  776. chatY = 60;
  777. chatW = 100;
  778. }
  779. chatX = 60;
  780. if (_flags.isTalkie)
  781. voiceIndex = 36;
  782. seq_playWsaSyncDialogue(25, voiceIndex, 143, chatX, chatY, chatW, wsaObj, 16, 25, x, y);
  783. _seqFrameDelay = 16;
  784. break;
  785. default:
  786. break;
  787. }
  788. _seqFrameCounter++;
  789. return 0;
  790. }
  791. int KyraEngine_HoF::seq_finaleFish(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  792. _seqSubFrameEndTimeInternal = 0;
  793. int chatX = 0;
  794. int chatY = 0;
  795. int chatW = 0;
  796. uint16 voiceIndex = 0;
  797. switch (frm) {
  798. case -2:
  799. seq_sequenceCommand(9);
  800. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  801. seq_printCreditsString(40, 240, _flags.isTalkie ? 55 : 40, _seqTextColorMap, 252);
  802. seq_printCreditsString(41, 240, _flags.isTalkie ? 65 : 50, _seqTextColorMap, _seqTextColor[0]);
  803. seq_printCreditsString(42, 240, _flags.isTalkie ? 75 : 60, _seqTextColorMap, _seqTextColor[0]);
  804. seq_printCreditsString(43, 240, _flags.isTalkie ? 95 : 80, _seqTextColorMap, 252);
  805. seq_printCreditsString(44, 240, _flags.isTalkie ? 105 : 90, _seqTextColorMap, _seqTextColor[0]);
  806. seq_printCreditsString(93, 240, _flags.isTalkie ? 125 : 110, _seqTextColorMap, 252);
  807. seq_printCreditsString(94, 240, _flags.isTalkie ? 135 : 120, _seqTextColorMap, _seqTextColor[0]);
  808. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  809. _seqEndTime = 0;
  810. break;
  811. case 0:
  812. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  813. memset(_seqTextColorMap, _seqTextColor[1], 16);
  814. _seqTextColor[0] = _seqTextColorMap[1] = 0xff;
  815. _screen->setTextColorMap(_seqTextColorMap);
  816. break;
  817. case 4:
  818. chatX = 94;
  819. chatY = 42;
  820. chatW = 100;
  821. if (_flags.isTalkie)
  822. voiceIndex = 37;
  823. seq_playWsaSyncDialogue(26, voiceIndex, 149, chatX, chatY, chatW, wsaObj, 3, 12, x, y);
  824. break;
  825. case 14:
  826. seq_playTalkText(_flags.isTalkie ? 19 : 15);
  827. break;
  828. case 23:
  829. seq_playTalkText(_flags.isTalkie ? 20 : 16);
  830. break;
  831. case 29:
  832. chatX = (_flags.lang == Common::DE_DEU) ? 82 : ((_flags.lang == Common::FR_FRA) ? 92 : 88);
  833. chatY = 40;
  834. chatW = 100;
  835. if (_flags.isTalkie) {
  836. if (_flags.lang == Common::DE_DEU)
  837. chatY = 35;
  838. voiceIndex = 38;
  839. }
  840. seq_playWsaSyncDialogue(27, voiceIndex, 187, chatX, chatY, chatW, wsaObj, 28, 34, x, y);
  841. break;
  842. case 45:
  843. seq_playTalkText(_flags.isTalkie ? 21 : 17);
  844. break;
  845. case 50:
  846. seq_playTalkText(_flags.isTalkie ? 29 : 25);
  847. break;
  848. default:
  849. break;
  850. }
  851. _seqFrameCounter++;
  852. return 0;
  853. }
  854. int KyraEngine_HoF::seq_finaleFheep(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  855. _seqSubFrameEndTimeInternal = 0;
  856. int chatX = 0;
  857. int chatY = 0;
  858. int chatW = 0;
  859. int chatFirstFrame = 0;
  860. int chatLastFrame = 0;
  861. uint16 voiceIndex = 0;
  862. switch (frm) {
  863. case -2:
  864. _screen->copyPage(12, 2);
  865. _screen->copyPage(2, 0);
  866. _screen->updateScreen();
  867. seq_sequenceCommand(9);
  868. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  869. seq_printCreditsString(49, 240, 20, _seqTextColorMap, 252);
  870. seq_printCreditsString(50, 240, 30, _seqTextColorMap, _seqTextColor[0]);
  871. seq_printCreditsString(51, 240, 40, _seqTextColorMap, _seqTextColor[0]);
  872. seq_printCreditsString(52, 240, 50, _seqTextColorMap, _seqTextColor[0]);
  873. seq_printCreditsString(53, 240, 60, _seqTextColorMap, _seqTextColor[0]);
  874. seq_printCreditsString(54, 240, 70, _seqTextColorMap, _seqTextColor[0]);
  875. seq_printCreditsString(55, 240, 80, _seqTextColorMap, _seqTextColor[0]);
  876. seq_printCreditsString(56, 240, 90, _seqTextColorMap, _seqTextColor[0]);
  877. seq_printCreditsString(57, 240, 100, _seqTextColorMap, _seqTextColor[0]);
  878. seq_printCreditsString(58, 240, 110, _seqTextColorMap, _seqTextColor[0]);
  879. seq_printCreditsString(60, 240, 120, _seqTextColorMap, _seqTextColor[0]);
  880. seq_printCreditsString(61, 240, 130, _seqTextColorMap, _seqTextColor[0]);
  881. seq_printCreditsString(62, 240, 140, _seqTextColorMap, _seqTextColor[0]);
  882. seq_printCreditsString(63, 240, 150, _seqTextColorMap, _seqTextColor[0]);
  883. seq_printCreditsString(64, 240, 160, _seqTextColorMap, _seqTextColor[0]);
  884. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  885. _seqEndTime = 0;
  886. break;
  887. case 0:
  888. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  889. memset(_seqTextColorMap, _seqTextColor[1], 16);
  890. _seqTextColor[0] = _seqTextColorMap[1] = 0xff;
  891. _screen->setTextColorMap(_seqTextColorMap);
  892. break;
  893. case 2:
  894. seq_playTalkText(_flags.isTalkie ? 25 : 21);
  895. if (_flags.lang == Common::FR_FRA) {
  896. chatX = 92;
  897. chatY = 72;
  898. } else {
  899. chatX = (_flags.lang == Common::DE_DEU) ? 90 : 98;
  900. chatY = 84;
  901. }
  902. if (_flags.isTalkie) {
  903. chatFirstFrame = 8;
  904. chatLastFrame = 9;
  905. voiceIndex = 39;
  906. } else {
  907. chatFirstFrame = 2;
  908. chatLastFrame = -8;
  909. }
  910. chatW = 100;
  911. seq_playWsaSyncDialogue(28, voiceIndex, -1, chatX, chatY, chatW, wsaObj, chatFirstFrame, chatLastFrame, x, y);
  912. if (_flags.isTalkie)
  913. _seqWsaCurrentFrame = 4;
  914. break;
  915. case 9:
  916. seq_playTalkText(_flags.isTalkie ? 24 : 20);
  917. _seqFrameDelay = 100;
  918. break;
  919. default:
  920. break;
  921. }
  922. _seqFrameCounter++;
  923. return 0;
  924. }
  925. int KyraEngine_HoF::seq_finaleFarmer(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  926. _seqSubFrameEndTimeInternal = 0;
  927. int chatX = 0;
  928. int chatY = 0;
  929. int chatW = 0;
  930. uint16 voiceIndex = 0;
  931. switch (frm) {
  932. case -2:
  933. _screen->copyPage(12, 2);
  934. _screen->copyPage(2, 0);
  935. _screen->updateScreen();
  936. seq_sequenceCommand(9);
  937. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  938. seq_printCreditsString(45, 240, 40, _seqTextColorMap, 252);
  939. seq_printCreditsString(46, 240, 50, _seqTextColorMap, _seqTextColor[0]);
  940. seq_printCreditsString(47, 240, 60, _seqTextColorMap, _seqTextColor[0]);
  941. seq_printCreditsString(83, 240, 80, _seqTextColorMap, 252);
  942. seq_printCreditsString(48, 240, 90, _seqTextColorMap, _seqTextColor[0]);
  943. seq_printCreditsString(65, 240, 110, _seqTextColorMap, 252);
  944. seq_printCreditsString(66, 240, 120, _seqTextColorMap, _seqTextColor[0]);
  945. seq_printCreditsString(67, 240, 130, _seqTextColorMap, _seqTextColor[0]);
  946. seq_printCreditsString(68, 240, 140, _seqTextColorMap, _seqTextColor[0]);
  947. seq_printCreditsString(69, 240, 150, _seqTextColorMap, _seqTextColor[0]);
  948. if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
  949. seq_printCreditsString(104, 240, 160, _seqTextColorMap, _seqTextColor[0]);
  950. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  951. _seqEndTime = 0;
  952. break;
  953. case 0:
  954. _seqTextColor[1] = 1 + (_screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 254) & 0xff);
  955. memset(_seqTextColorMap, _seqTextColor[1], 16);
  956. _seqTextColorMap[1] = _seqTextColor[0] = 1 + (_screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0), 1, 254) & 0xff);
  957. _screen->setTextColorMap(_seqTextColorMap);
  958. seq_playTalkText(_flags.isTalkie ? 30 : 26);
  959. break;
  960. case 6:
  961. if (_flags.isTalkie)
  962. seq_playTalkText(18);
  963. break;
  964. case 12:
  965. if (!_flags.isTalkie)
  966. seq_playTalkText(14);
  967. chatX = 90;
  968. chatY = 30;
  969. chatW = 100;
  970. if (_flags.isTalkie) {
  971. if (_flags.lang == Common::FR_FRA || _flags.lang == Common::DE_DEU) {
  972. chatX = 75;
  973. chatY = 25;
  974. }
  975. voiceIndex = 40;
  976. }
  977. seq_playWsaSyncDialogue(29, voiceIndex, 150, chatX, chatY, chatW, wsaObj, 12, -21, x, y);
  978. break;
  979. default:
  980. break;
  981. }
  982. _seqFrameCounter++;
  983. return 0;
  984. }
  985. int KyraEngine_HoF::seq_finaleFuards(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  986. _seqSubFrameEndTimeInternal = 0;
  987. int chatX = 0;
  988. int chatY = 0;
  989. int chatW = 0;
  990. int chatFirstFrame = 0;
  991. int chatLastFrame = 0;
  992. //int textCol = 0;
  993. uint16 voiceIndex = 0;
  994. switch (frm) {
  995. case -2:
  996. seq_sequenceCommand(9);
  997. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  998. seq_printCreditsString(70, 240, 20, _seqTextColorMap, 252);
  999. seq_printCreditsString(71, 240, 30, _seqTextColorMap, _seqTextColor[0]);
  1000. seq_printCreditsString(72, 240, 40, _seqTextColorMap, _seqTextColor[0]);
  1001. seq_printCreditsString(73, 240, 50, _seqTextColorMap, _seqTextColor[0]);
  1002. seq_printCreditsString(74, 240, 60, _seqTextColorMap, _seqTextColor[0]);
  1003. seq_printCreditsString(75, 240, 70, _seqTextColorMap, _seqTextColor[0]);
  1004. seq_printCreditsString(101, 240, 80, _seqTextColorMap, _seqTextColor[0]);
  1005. seq_printCreditsString(102, 240, 90, _seqTextColorMap, _seqTextColor[0]);
  1006. seq_printCreditsString(87, 240, 100, _seqTextColorMap, _seqTextColor[0]);
  1007. seq_printCreditsString(88, 240, 110, _seqTextColorMap, _seqTextColor[0]);
  1008. seq_printCreditsString(89, 240, 120, _seqTextColorMap, _seqTextColor[0]);
  1009. seq_printCreditsString(90, 240, 130, _seqTextColorMap, _seqTextColor[0]);
  1010. seq_printCreditsString(91, 240, 140, _seqTextColorMap, _seqTextColor[0]);
  1011. seq_printCreditsString(92, 240, 150, _seqTextColorMap, _seqTextColor[0]);
  1012. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  1013. _seqEndTime = 0;
  1014. break;
  1015. case 0:
  1016. for (int i = 0; i < 0x300; i++)
  1017. _screen->getPalette(0)[i] &= 0x3f;
  1018. _seqTextColor[1] = 0xCf;
  1019. memset(_seqTextColorMap, _seqTextColor[1], 16);
  1020. _seqTextColor[0] = _seqTextColorMap[1] = 0xfe;
  1021. _screen->setTextColorMap(_seqTextColorMap);
  1022. break;
  1023. case 6:
  1024. _seqFrameDelay = 20;
  1025. if (_flags.isTalkie) {
  1026. chatX = 82;
  1027. //textCol = 143;
  1028. chatFirstFrame = 16;
  1029. chatLastFrame = 21;
  1030. voiceIndex = 41;
  1031. } else {
  1032. chatX = 62;
  1033. //textCol = 137;
  1034. chatFirstFrame = 9;
  1035. chatLastFrame = 13;
  1036. }
  1037. chatY = (_flags.lang == Common::FR_FRA || _flags.lang == Common::DE_DEU) ? 88 :100;
  1038. chatW = 80;
  1039. seq_playWsaSyncDialogue(30, voiceIndex, 137, chatX, chatY, chatW, wsaObj, chatFirstFrame, chatLastFrame, x, y);
  1040. if (_flags.isTalkie)
  1041. _seqWsaCurrentFrame = 8;
  1042. break;
  1043. case 9:
  1044. case 16:
  1045. if (_flags.isTalkie) {
  1046. if (frm == 16)
  1047. break;
  1048. chatX = 64;
  1049. //textCol = 137;
  1050. chatFirstFrame = 9;
  1051. chatLastFrame = 13;
  1052. voiceIndex = 42;
  1053. } else {
  1054. if (frm == 9)
  1055. break;
  1056. chatX = 80;
  1057. //textCol = 143;
  1058. chatFirstFrame = 16;
  1059. chatLastFrame = 21;
  1060. }
  1061. chatY = 100;
  1062. chatW = 100;
  1063. seq_playWsaSyncDialogue(31, voiceIndex, 143, chatX, chatY, chatW, wsaObj, chatFirstFrame, chatLastFrame, x, y);
  1064. if (_flags.isTalkie)
  1065. _seqWsaCurrentFrame = 21;
  1066. break;
  1067. default:
  1068. break;
  1069. }
  1070. _seqFrameCounter++;
  1071. return 0;
  1072. }
  1073. int KyraEngine_HoF::seq_finaleFirates(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1074. _seqSubFrameEndTimeInternal = 0;
  1075. int chatX = 0;
  1076. int chatY = 0;
  1077. int chatW = 0;
  1078. uint16 voiceIndex = 0;
  1079. switch (frm) {
  1080. case -2:
  1081. _screen->copyPage(12, 2);
  1082. _screen->copyPage(2, 0);
  1083. _screen->updateScreen();
  1084. seq_sequenceCommand(9);
  1085. _seqSubFrameEndTimeInternal = _system->getMillis() + 480 * _tickLength;
  1086. seq_printCreditsString(76, 240, 40, _seqTextColorMap, 252);
  1087. seq_printCreditsString(77, 240, 50, _seqTextColorMap, 252);
  1088. seq_printCreditsString(78, 240, 60, _seqTextColorMap, _seqTextColor[0]);
  1089. seq_printCreditsString(79, 240, 70, _seqTextColorMap, _seqTextColor[0]);
  1090. seq_printCreditsString(80, 240, 80, _seqTextColorMap, _seqTextColor[0]);
  1091. seq_printCreditsString(84, 240, 100, _seqTextColorMap, 252);
  1092. seq_printCreditsString(85, 240, 110, _seqTextColorMap, _seqTextColor[0]);
  1093. seq_printCreditsString(99, 240, 130, _seqTextColorMap, 252);
  1094. seq_printCreditsString(100, 240, 140, _seqTextColorMap, _seqTextColor[0]);
  1095. delay(_seqSubFrameEndTimeInternal - _system->getMillis());
  1096. _seqEndTime = 0;
  1097. break;
  1098. case 0:
  1099. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  1100. memset(_seqTextColorMap, _seqTextColor[1], 16);
  1101. _seqTextColor[0] = _seqTextColorMap[1] = 0xff;
  1102. _screen->setTextColorMap(_seqTextColorMap);
  1103. break;
  1104. case 6:
  1105. seq_playTalkText(_flags.isTalkie ? 31 : 27);
  1106. break;
  1107. case 14:
  1108. case 15:
  1109. if (!((frm == 15 && !_flags.isTalkie) || (frm == 14 && _flags.isTalkie)))
  1110. break;
  1111. seq_playTalkText(_flags.isTalkie ? 31 : 27);
  1112. if (_flags.lang == Common::DE_DEU) {
  1113. chatX = 82;
  1114. chatY = 84;
  1115. chatW = 140;
  1116. } else {
  1117. chatX = 74;
  1118. chatY = (_flags.lang == Common::FR_FRA) ? 96: 108;
  1119. chatW = 80;
  1120. }
  1121. if (_flags.isTalkie)
  1122. voiceIndex = 43;
  1123. seq_playWsaSyncDialogue(32, voiceIndex, 137, chatX, chatY, chatW, wsaObj, 14, 16, x, y);
  1124. break;
  1125. case 28:
  1126. seq_playTalkText(_flags.isTalkie ? 32 : 28);
  1127. break;
  1128. case 29:
  1129. seq_playTalkText(_flags.isTalkie ? 33 : 29);
  1130. break;
  1131. case 31:
  1132. if (_flags.isTalkie)
  1133. voiceIndex = 44;
  1134. chatX = 90;
  1135. chatY = (_flags.lang == Common::DE_DEU) ? 60 : 76;
  1136. chatW = 80;
  1137. seq_playWsaSyncDialogue(33, voiceIndex, 143, chatX, chatY, chatW, wsaObj, 31, 34, x, y);
  1138. break;
  1139. case 35:
  1140. _seqFrameDelay = 300;
  1141. break;
  1142. default:
  1143. break;
  1144. }
  1145. _seqFrameCounter++;
  1146. return 0;
  1147. }
  1148. int KyraEngine_HoF::seq_finaleFrash(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1149. int tmp = 0;
  1150. switch (frm) {
  1151. case -2:
  1152. _screen->setCurPage(2);
  1153. _screen->clearCurPage();
  1154. _screen->copyPage(2, 12);
  1155. _screen->copyPage(2, 0);
  1156. _screen->updateScreen();
  1157. _seqFrameCounter = 0;
  1158. seq_loadNestedSequence(0, kSequenceFiggle);
  1159. break;
  1160. case -1:
  1161. if (_flags.isTalkie)
  1162. seq_finaleActorScreen();
  1163. _seqSpecialFlag = _flags.isTalkie;
  1164. break;
  1165. case 0:
  1166. if (_seqFrameCounter == 1) {
  1167. _sound->playTrack(4);
  1168. _seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0), 1, 255) & 0xff;
  1169. memset(_seqTextColorMap, _seqTextColor[1], 16);
  1170. _seqTextColor[0] = _seqTextColorMap[1] = 0xff;
  1171. _screen->setTextColorMap(_seqTextColorMap);
  1172. }
  1173. _seqFrameDelay = 10;
  1174. break;
  1175. case 1:
  1176. if (_seqFrameCounter < 20 && _seqSpecialFlag) {
  1177. _seqWsaCurrentFrame = 0;
  1178. } else {
  1179. _seqFrameDelay = _flags.isTalkie ? 500 : (300 + _rnd.getRandomNumberRng(1, 300));
  1180. seq_playTalkText(_flags.isTalkie ? 26 : 22);
  1181. if (_seqSpecialFlag) {
  1182. _seqFrameCounter = 3;
  1183. _seqSpecialFlag = false;
  1184. }
  1185. }
  1186. break;
  1187. case 2:
  1188. _seqFrameDelay = 20;
  1189. break;
  1190. case 3:
  1191. seq_playTalkText(_flags.isTalkie ? 27 : 23);
  1192. _seqFrameDelay = _flags.isTalkie ? 500 : (300 + _rnd.getRandomNumberRng(1, 300));
  1193. break;
  1194. case 4:
  1195. _seqFrameDelay = 10;
  1196. break;
  1197. case 5:
  1198. seq_playTalkText(_flags.isTalkie ? 27 : 23);
  1199. tmp = _seqFrameCounter / 6;
  1200. if (tmp == 2)
  1201. _seqFrameDelay = _flags.isTalkie ? 7 : (1 + _rnd.getRandomNumberRng(1, 10));
  1202. else if (tmp < 2)
  1203. _seqFrameDelay = _flags.isTalkie ? 500 : (300 + _rnd.getRandomNumberRng(1, 300));
  1204. break;
  1205. case 6:
  1206. _seqFrameDelay = 10;
  1207. tmp = _seqFrameCounter / 6;
  1208. if (tmp == 2)
  1209. _seqWsaCurrentFrame = 4;
  1210. else if (tmp < 2)
  1211. _seqWsaCurrentFrame = 0;
  1212. break;
  1213. case 7:
  1214. _seqFrameCounter = 0;
  1215. _seqFrameDelay = 5;
  1216. seq_playTalkText(_flags.isTalkie ? 26 : 22);
  1217. break;
  1218. case 11:
  1219. if (_seqFrameCounter < 8)
  1220. _seqWsaCurrentFrame = 8;
  1221. break;
  1222. default:
  1223. break;
  1224. }
  1225. _seqFrameCounter++;
  1226. return 0;
  1227. }
  1228. void KyraEngine_HoF::seq_finaleActorScreen() {
  1229. static const uint8 colormap[] = {0, 0, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  1230. static const ScreenDim d = { 0x00, 0x0C, 0x28, 0xB4, 0xFF, 0x00, 0x00, 0x00 };
  1231. _screen->loadBitmap("finale.cps", 3, 3, &_screen->getPalette(0));
  1232. _screen->setFont(Screen::FID_GOLDFONT_FNT);
  1233. int talkieCreditsSize, talkieCreditsSpecialSize;
  1234. const uint8 *talkieCredits = _staticres->loadRawData(k2SeqplayCredits, talkieCreditsSize);
  1235. const char * const *talkieCreditsSpecial = _staticres->loadStrings(k2SeqplayCreditsSpecial, talkieCreditsSpecialSize);
  1236. _sound->setSoundList(&_soundData[kMusicIngame]);
  1237. _sound->loadSoundFile(3);
  1238. _sound->playTrack(3);
  1239. _screen->setTextColorMap(colormap);
  1240. _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
  1241. _screen->updateScreen();
  1242. _screen->fadeFromBlack();
  1243. _screen->_charWidth = -2;
  1244. uint8 *dataPtr = new uint8[0xafd];
  1245. memcpy(dataPtr, talkieCredits, talkieCreditsSize);
  1246. _staticres->unloadId(k2SeqplayCredits);
  1247. seq_displayScrollText(dataPtr, &d, 2, 6, 5, 1, Screen::FID_GOLDFONT_FNT, Screen::FID_GOLDFONT_FNT, 0, talkieCreditsSpecial);
  1248. delay(120);
  1249. delete[] dataPtr;
  1250. _staticres->unloadId(k2SeqplayCreditsSpecial);
  1251. _sound->setSoundList(&_soundData[kMusicFinale]);
  1252. _sound->loadSoundFile(0);
  1253. }
  1254. int KyraEngine_HoF::seq_finaleFiggle(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1255. if (_seqFrameCounter == 10)
  1256. _seqEndTime = 0;
  1257. if (_seqFrameCounter == 10 || _seqFrameCounter == 5 || _seqFrameCounter == 7)
  1258. seq_playTalkText(_flags.isTalkie ? 45 : 30);
  1259. _seqFrameCounter++;
  1260. return frm;
  1261. }
  1262. int KyraEngine_HoF::seq_demoVirgin(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1263. if (!frm)
  1264. delay(50 * _tickLength);
  1265. return 0;
  1266. }
  1267. int KyraEngine_HoF::seq_demoWestwood(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1268. if (!frm)
  1269. _sound->playTrack(2);
  1270. return 0;
  1271. }
  1272. int KyraEngine_HoF::seq_demoTitle(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1273. if (!frm) {
  1274. _sound->playTrack(3);
  1275. } else if (frm == 25) {
  1276. delay(60 * _tickLength);
  1277. _seqEndTime = 0;
  1278. seq_sequenceCommand(0);
  1279. }
  1280. return 0;
  1281. }
  1282. int KyraEngine_HoF::seq_demoHill(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1283. if (!frm) {
  1284. _sound->playTrack(4);
  1285. } else if (frm == 25) {
  1286. seq_loadNestedSequence(0, kSequenceDemoWater);
  1287. _seqFrameDelay--;
  1288. } else if (frm > 25 && frm < 50) {
  1289. if (_seqFrameDelay > 3)
  1290. _seqFrameDelay--;
  1291. } else if (frm == 95) {
  1292. _seqFrameDelay = 70;
  1293. } else if (frm == 96) {
  1294. _seqFrameDelay = 7;
  1295. } else if (frm == 129) {
  1296. seq_resetActiveWSA(0);
  1297. }
  1298. return 0;
  1299. }
  1300. int KyraEngine_HoF::seq_demoOuthome(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1301. switch (frm) {
  1302. case 12:
  1303. seq_playTalkText(4);
  1304. break;
  1305. case 32:
  1306. seq_playTalkText(7);
  1307. break;
  1308. case 36:
  1309. seq_playTalkText(10);
  1310. break;
  1311. case 57:
  1312. seq_playTalkText(9);
  1313. break;
  1314. case 80:
  1315. case 96:
  1316. case 149:
  1317. _seqFrameDelay = 70;
  1318. break;
  1319. case 81:
  1320. case 97:
  1321. _seqFrameDelay = 5;
  1322. break;
  1323. case 110:
  1324. seq_playTalkText(5);
  1325. break;
  1326. case 137:
  1327. seq_playTalkText(6);
  1328. break;
  1329. }
  1330. return 0;
  1331. }
  1332. int KyraEngine_HoF::seq_demoWharf(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1333. if (!_seqFrameCounter)
  1334. seq_loadNestedSequence(0, kSequenceDemoWharf2);
  1335. switch (frm) {
  1336. case 0:
  1337. seq_playTalkText(11);
  1338. break;
  1339. case 5:
  1340. if ((_seqFrameCounter / 8) <= 2 || _activeWSA[0].flags != -1)
  1341. _seqWsaCurrentFrame = 0;
  1342. else
  1343. seq_resetActiveWSA(0);
  1344. break;
  1345. case 6:
  1346. seq_resetActiveWSA(0);
  1347. break;
  1348. case 8:
  1349. case 10:
  1350. seq_playTalkText(2);
  1351. break;
  1352. case 13:
  1353. seq_playTalkText(7);
  1354. break;
  1355. case 16:
  1356. seq_playTalkText(12);
  1357. break;
  1358. default:
  1359. break;
  1360. }
  1361. _seqFrameCounter++;
  1362. return 0;
  1363. }
  1364. int KyraEngine_HoF::seq_demoDinob(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1365. if (frm == 0) {
  1366. if (!(_seqFrameCounter/8)) {
  1367. seq_loadNestedSequence(0, kSequenceDemoDinob2);
  1368. _seqWsaCurrentFrame = 0;
  1369. }
  1370. } else if (frm == 3) {
  1371. if (_activeWSA[0].flags != -1) {
  1372. _seqWsaCurrentFrame = 0;
  1373. } else {
  1374. seq_resetActiveWSA(0);
  1375. _screen->copyPage(2, 12);
  1376. }
  1377. } else if (frm == 4) {
  1378. seq_resetActiveWSA(0);
  1379. }
  1380. _seqFrameCounter++;
  1381. return 0;
  1382. }
  1383. int KyraEngine_HoF::seq_demoFisher(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1384. if (((_system->getMillis() - _seqStartTime) / (5 * _tickLength)) > 0) {
  1385. _seqStartTime = _system->getMillis();
  1386. if (!_seqFrameCounter) {
  1387. seq_loadNestedSequence(0, kSequenceDemoBail);
  1388. seq_loadNestedSequence(1, kSequenceDemoDig);
  1389. }
  1390. if (_seqScrollTextCounter >= 0x18f && !_seqFrameCounter)
  1391. return 0;
  1392. if (!_seqFrameCounter) {
  1393. _screen->loadBitmap("adtext.cps", 4, 4, 0);
  1394. _screen->loadBitmap("adtext2.cps", 6, 6, 0);
  1395. _screen->copyPageMemory(6, 0, 4, 64000, 1024);
  1396. _screen->copyPageMemory(6, 1023, 6, 0, 64000);
  1397. _seqScrollTextCounter = 0;
  1398. }
  1399. seq_scrollPage(24, 144);
  1400. _seqFrameCounter++;
  1401. if (_seqFrameCounter < 0x256 || _seqFrameCounter > 0x31c) {
  1402. if (_seqFrameCounter < 0x174 || _seqFrameCounter > 0x1d7) {
  1403. if (_seqFrameCounter < 0x84 || _seqFrameCounter > 0xe7) {
  1404. _seqScrollTextCounter++;
  1405. }
  1406. }
  1407. }
  1408. if (_seqFrameCounter > 0x31e) {
  1409. seq_resetActiveWSA(0);
  1410. seq_resetActiveWSA(1);
  1411. _seqEndTime = 0;
  1412. _screen->copyPage(2, 12);
  1413. }
  1414. } else {
  1415. seq_scrollPage(24, 144);
  1416. }
  1417. return 0;
  1418. }
  1419. int KyraEngine_HoF::seq_demoWharf2(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1420. if (frm == 69)
  1421. _seqWsaCurrentFrame = 8;
  1422. return frm;
  1423. }
  1424. int KyraEngine_HoF::seq_demoDinob2(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1425. switch (frm) {
  1426. case 19:
  1427. seq_playTalkText(13);
  1428. break;
  1429. case 54:
  1430. seq_playTalkText(15);
  1431. break;
  1432. case 61:
  1433. seq_playTalkText(16);
  1434. break;
  1435. case 69:
  1436. seq_playTalkText(14);
  1437. break;
  1438. case 77:
  1439. seq_playTalkText(13);
  1440. break;
  1441. case 79:
  1442. _seqWsaCurrentFrame = 4;
  1443. break;
  1444. }
  1445. return frm;
  1446. }
  1447. int KyraEngine_HoF::seq_demoWater(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1448. if (frm == 1)
  1449. seq_playTalkText(11);
  1450. return frm;
  1451. }
  1452. int KyraEngine_HoF::seq_demoBail(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1453. return frm;
  1454. }
  1455. int KyraEngine_HoF::seq_demoDig(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1456. return frm;
  1457. }
  1458. #ifdef ENABLE_LOL
  1459. int KyraEngine_HoF::seq_lolDemoScene1(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1460. Palette &tmpPal = _screen->getPalette(2);
  1461. if (!(_seqFrameCounter % 100)) {
  1462. if (_seqFrameCounter == 0) {
  1463. _sound->haltTrack();
  1464. _sound->playTrack(6);
  1465. }
  1466. tmpPal.copy(_screen->getPalette(0));
  1467. for (int i = 3; i < 0x300; i++) {
  1468. tmpPal[i] = ((int)tmpPal[i] * 120) / 64;
  1469. if (tmpPal[i] > 0x3f)
  1470. tmpPal[i] = 0x3f;
  1471. }
  1472. seq_playTalkText(_rnd.getRandomBit());
  1473. _screen->setScreenPalette(tmpPal);
  1474. _screen->updateScreen();
  1475. delay(8);
  1476. } else {
  1477. _screen->setScreenPalette(_screen->getPalette(0));
  1478. _screen->updateScreen();
  1479. if (_seqFrameCounter == 40)
  1480. seq_playTalkText(3);
  1481. }
  1482. _seqFrameCounter++;
  1483. return frm;
  1484. }
  1485. int KyraEngine_HoF::seq_lolDemoScene2(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1486. switch (_seqFrameCounter - 17) {
  1487. case 0:
  1488. _seqFrameDelay = 8;
  1489. break;
  1490. case 3:
  1491. case 6:
  1492. case 9:
  1493. seq_playTalkText(8);
  1494. break;
  1495. case 15:
  1496. seq_playTalkText(9);
  1497. break;
  1498. case 18:
  1499. seq_playTalkText(2);
  1500. break;
  1501. default:
  1502. break;
  1503. }
  1504. _seqFrameCounter++;
  1505. return frm;
  1506. }
  1507. int KyraEngine_HoF::seq_lolDemoScene3(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1508. if (_seqFrameCounter == 1)
  1509. seq_playTalkText(6);
  1510. else if (frm == 26)
  1511. seq_playTalkText(7);
  1512. _seqFrameCounter++;
  1513. return frm;
  1514. }
  1515. int KyraEngine_HoF::seq_lolDemoScene4(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1516. switch (_seqFrameCounter) {
  1517. case 11:
  1518. case 14:
  1519. case 17:
  1520. case 20:
  1521. seq_playTalkText(8);
  1522. break;
  1523. case 22:
  1524. seq_playTalkText(11);
  1525. break;
  1526. case 24:
  1527. seq_playTalkText(8);
  1528. break;
  1529. case 30:
  1530. seq_playTalkText(15);
  1531. break;
  1532. case 34:
  1533. seq_playTalkText(14);
  1534. break;
  1535. case 38:
  1536. seq_playTalkText(13);
  1537. break;
  1538. case 42:
  1539. seq_playTalkText(12);
  1540. break;
  1541. default:
  1542. break;
  1543. }
  1544. _seqFrameCounter++;
  1545. return frm;
  1546. }
  1547. int KyraEngine_HoF::seq_lolDemoScene5(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1548. switch (_seqFrameCounter++) {
  1549. case 0:
  1550. case 4:
  1551. case 6:
  1552. case 8:
  1553. case 10:
  1554. case 14:
  1555. case 16:
  1556. case 18:
  1557. case 20:
  1558. case 22:
  1559. case 24:
  1560. case 26:
  1561. case 28:
  1562. case 30:
  1563. seq_playTalkText(15);
  1564. break;
  1565. case 32:
  1566. seq_playTalkText(16);
  1567. break;
  1568. case 42:
  1569. seq_playTalkText(6);
  1570. break;
  1571. default:
  1572. break;
  1573. }
  1574. return frm;
  1575. }
  1576. int KyraEngine_HoF::seq_lolDemoText5(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1577. if (_seqFrameCounter++ == 100)
  1578. seq_playTalkText(5);
  1579. return frm;
  1580. }
  1581. int KyraEngine_HoF::seq_lolDemoScene6(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
  1582. while (_seqScrollTextCounter < 0x122) {
  1583. _seqEndTime = _system->getMillis() + 6 * _tickLength;
  1584. if (!_seqFrameCounter) {
  1585. _screen->loadBitmap("adtext.cps", 4, 4, 0);
  1586. _screen->loadBitmap("adtext2.cps", 6, 6, 0);
  1587. _screen->copyPageMemory(6, 0, 4, 64000, 1024);
  1588. _screen->copyPageMemory(6, 1023, 6, 0, 64000);
  1589. _seqScrollTextCounter = 0;
  1590. }
  1591. if (_seqFrameCounter % 175) {
  1592. _screen->setScreenPalette(_screen->getPalette(0));
  1593. } else {
  1594. Palette &tmpPal = _screen->getPalette(2);
  1595. tmpPal.copy(_screen->getPalette(0));
  1596. for (int i = 3; i < 0x300; i++) {
  1597. tmpPal[i] = ((int)tmpPal[i] * 120) / 64;
  1598. if (tmpPal[i] > 0x3f)

Large files files are truncated, but you can click here to view the full file