ACCESS: MM - Implement the display of notes at the beginning of chapters (WIP)

This commit is contained in:
Strangerke 2015-01-01 15:35:20 +01:00
parent f6fb26ea66
commit e83e55e7be
6 changed files with 138 additions and 6 deletions

View File

@ -75,6 +75,88 @@ void MartianEngine::initVariables() {
_numAnimTimers = 0;
}
void MartianEngine::sub13E1F() {
_events->hideCursor();
_screen->_orgX1 = 58;
_screen->_orgY1 = 124;
_screen->_orgX2 = 297;
_screen->_orgY2 = 199;
_screen->drawRect();
_events->showCursor();
}
void MartianEngine::sub13E4C(const Common::String &msg) {
_fonts._charSet._lo = 1;
_fonts._charSet._hi = 8;
_fonts._charFor._lo = 0;
_fonts._charFor._hi = 255;
_screen->_maxChars = 40;
_screen->_printOrg = _screen->_printStart = Common::Point(59, 124);
sub13E1F();
Common::String lines = msg;
Common::String line;
int width = 0;
bool lastLine = false;
do {
lastLine = _fonts._font2.getLine(lines, _screen->_maxChars * 6, line, width);
// Set font colors
_fonts._font2._fontColors[0] = 0;
_fonts._font2._fontColors[1] = 27;
_fonts._font2._fontColors[2] = 28;
_fonts._font2._fontColors[3] = 29;
_fonts._font2.drawString(_screen, line, _screen->_printOrg);
_screen->_printOrg = Common::Point(_screen->_printStart.x, _screen->_printOrg.y + 6);
if (_screen->_printOrg.y == 196) {
_events->waitKeyMouse();
sub13E1F();
_screen->_printOrg = _screen->_printStart;
}
} while (!lastLine);
_events->waitKeyMouse();
}
void MartianEngine::doSpecial5(int param1) {
warning("TODO: Push midi song");
_midi->stopSong();
_midi->_byte1F781 = false;
_midi->loadMusic(47, 4);
_midi->midiPlay();
_screen->setDisplayScan();
_events->clearEvents();
_screen->forceFadeOut();
_events->hideCursor();
_files->loadScreen("DATA.SC");
_events->showCursor();
_screen->setIconPalette();
_screen->forceFadeIn();
warning("TODO: LoadCells");
_timers[20]._timer = _timers[20]._initTm = 30;
Resource *_word20060 = _files->loadFile("NOTES.DAT");
_word20060->_stream->skip(param1 * 2);
int pos = _word20060->_stream->readUint16LE();
_word20060->_stream->seek(pos);
Common::String msg = "";
byte c;
while ((c = (char)_word20060->_stream->readByte()) != '\0')
msg += c;
sub13E4C(msg);
_midi->stopSong();
_midi->freeMusic();
warning("TODO: Pop Midi");
// _midi->_byte1F781 = true;
}
void MartianEngine::playGame() {
// Initialize Amazon game-specific objects
initObjects();
@ -85,9 +167,14 @@ void MartianEngine::playGame() {
if (_loadSaveSlot == -1) {
// Do introduction
doIntroduction();
// doCredits();
if (shouldQuit())
return;
doSpecial5(4);
if (shouldQuit())
return;
_screen->forceFadeOut();
}
do {
@ -135,10 +222,9 @@ bool MartianEngine::showCredits() {
}
_screen->forceFadeIn();
_timers[6]._timer = val2;
_timers[6]._initTm = val2;
_timers[3]._timer = _timers[3]._initTm = val2;
while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[6]._timer) {
while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[3]._timer) {
_events->pollEventsAndWait();
}
@ -151,7 +237,8 @@ bool MartianEngine::showCredits() {
return false;
}
void MartianEngine::doIntroduction() {
void MartianEngine::doCredits() {
_midi->_byte1F781 = false;
_midi->loadMusic(47, 3);
_midi->midiPlay();
_screen->setDisplayScan();

View File

@ -37,7 +37,7 @@ private:
/**
* Do the game introduction
*/
void doIntroduction();
void doCredits();
bool showCredits();
@ -56,11 +56,15 @@ protected:
virtual void playGame();
virtual void dead(int deathId) {}
void sub13E1F();
void sub13E4C(const Common::String &msg);
public:
MartianEngine(OSystem *syst, const AccessGameDescription *gameDesc);
virtual ~MartianEngine();
void doSpecial5(int param1);
void drawHelp();
virtual void establish(int esatabIndex, int sub) {};
};

View File

@ -34,7 +34,36 @@ MartianScripts::MartianScripts(AccessEngine *vm) : Scripts(vm) {
_game = (MartianEngine *)_vm;
}
void MartianScripts::cmdSpecial5(int param1) {
_game->doSpecial5(param1);
}
void MartianScripts::executeSpecial(int commandIndex, int param1, int param2) {
switch (commandIndex) {
case 0:
warning("TODO: cmdSpecial0");
break;
case 1:
warning("TODO: cmdSpecial1");
break;
case 2:
warning("TODO: cmdSpecial2");
break;
case 3:
warning("TODO: cmdSpecial3");
break;
case 4:
warning("TODO: cmdSpecial4");
break;
case 5:
cmdSpecial5(param1);
break;
case 6:
warning("TODO: cmdSpecial6");
break;
default:
warning("Unexpected Special code %d - Skipped", commandIndex);
}
}
typedef void(MartianScripts::*MartianScriptMethodPtr)();

View File

@ -35,9 +35,13 @@ class MartianEngine;
class MartianScripts : public Scripts {
private:
MartianEngine *_game;
void cmdSpecial5(int param1);
protected:
virtual void executeSpecial(int commandIndex, int param1, int param2);
virtual void executeCommand(int commandIndex);
public:
MartianScripts(AccessEngine *vm);
};

View File

@ -178,6 +178,7 @@ MusicManager::MusicManager(AccessEngine *vm) : _vm(vm) {
_music = nullptr;
_tempMusic = nullptr;
_isLooping = false;
_byte1F781 = false;
MidiPlayer::createDriver();
MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
@ -217,6 +218,12 @@ void MusicManager::midiPlay() {
if (READ_BE_UINT32(_music->data()) != MKTAG('F', 'O', 'R', 'M')) {
warning("midiPlay() Unexpected signature");
Common::DumpFile *outFile = new Common::DumpFile();
Common::String outName = "music.dump";
outFile->open(outName);
outFile->write(_music->data(), _music->_size);
outFile->finalize();
outFile->close();
_isPlaying = false;
} else {
_parser = MidiParser::createParser_XMIDI();

View File

@ -82,6 +82,7 @@ private:
public:
Resource *_music;
bool _byte1F781;
public:
MusicManager(AccessEngine *vm);