ACCESS: Implemented cmdDead
This commit is contained in:
parent
be8d719a1a
commit
f869019d30
14 changed files with 234 additions and 11 deletions
|
@ -162,6 +162,7 @@ public:
|
|||
int _establishCtrlTblOfs;
|
||||
int _numAnimTimers;
|
||||
TimerList _timers;
|
||||
DeathList _deaths;
|
||||
FontManager _fonts;
|
||||
Common::Array<Common::Rect> _newRects;
|
||||
Common::Array<Common::Rect> _oldRects;
|
||||
|
|
|
@ -133,7 +133,7 @@ void AmazonEngine::doTitle() {
|
|||
_sound->queueSound(1, 98, 8);
|
||||
_sound->_soundPriority[1] = 1;
|
||||
|
||||
_screen->_loadPalFlag = false;
|
||||
_files->_loadPalFlag = false;
|
||||
_files->loadScreen(0, 3);
|
||||
|
||||
_buffer2.copyFrom(*_screen);
|
||||
|
@ -147,7 +147,7 @@ void AmazonEngine::doTitle() {
|
|||
|
||||
_sound->playSound(1);
|
||||
|
||||
_screen->_loadPalFlag = false;
|
||||
_files->_loadPalFlag = false;
|
||||
_files->loadScreen(0, 4);
|
||||
_sound->playSound(1);
|
||||
|
||||
|
@ -192,6 +192,16 @@ void AmazonEngine::setupGame() {
|
|||
_timers.push_back(te);
|
||||
}
|
||||
|
||||
// Load death list
|
||||
_deaths.resize(58);
|
||||
for (int i = 0; i < 58; ++i) {
|
||||
_deaths[i]._screenId = DEATH_SCREENS[i];
|
||||
_deaths[i]._msg = DEATH_TEXT[i];
|
||||
}
|
||||
_deaths._cells.resize(12);
|
||||
for (int i = 0; i < 12; ++i)
|
||||
_deaths._cells[i] = CellIdent(DEATH_CELLS[i][0], DEATH_CELLS[i][1], DEATH_CELLS[i][2]);
|
||||
|
||||
// Miscellaneous
|
||||
_fonts._font1.load(FONT6x6_INDEX, FONT6x6_DATA);
|
||||
_fonts._font2.load(FONT2_INDEX, FONT2_DATA);
|
||||
|
|
|
@ -1194,6 +1194,126 @@ YOU CAN UNDERSTAND.";
|
|||
const char *const NO_HINTS_MESSAGE =
|
||||
"THE HELP SYSTEM HAS BEEN TURNED OFF FOR THIS GAME.";
|
||||
|
||||
|
||||
const byte DEATH_SCREENS[58] = {
|
||||
0, 1, 0, 0, 0, 0, 0, 0, 2, 0,
|
||||
0, 2, 4, 2, 1, 0, 0, 0, 0, 0,
|
||||
0, 2, 7, 7, 4, 6, 7, 10, 4, 2,
|
||||
0, 0, 0, 0, 5, 5, 3, 3, 3, 5,
|
||||
8, 8, 11, 9, 8, 12, 0, 1, 9, 8,
|
||||
8, 0, 5, 8, 0, 12, 12, 11
|
||||
};
|
||||
|
||||
const char *const DEATH_TEXT[58] = {
|
||||
"SAM SALVADOR SPOTS YOU AND LETS YOU HAVE IT.",
|
||||
"WHILE TAKING A MOONLIGHT SWIM YOU DISCOVER THAT PIRANHA REALLY CAN STRIP FLESH TO THE BONE.",
|
||||
"THE GUARD FILLS YOU FULL OF HOLES BEFORE TOSSING YOU TO THE PIRANHA.",
|
||||
"YOU'RE ONLY ABLE TO SWIM HALFWAY ACROSS THE RIVER BEFORE RUNNING OUT OF AIR. "
|
||||
"YOU MAKE SO MUCH NOISE GASPING FOR BREATH THAT SAM EASILY FINDS YOU AND LEAVES "
|
||||
"YOU IN THE RIVER PERMANENTLY.",
|
||||
"SAM SALVADOR NOTICES SOMEONE HAS BEEN PLAYING WITH THE CARGO. "
|
||||
"HE TRACKS YOU DOWN AND LETS YOU HAVE IT.",
|
||||
"THE GUARD COMES AROUND THE CORNER. HE DECIDES THAT THREE LEAD SLUGS WILL "
|
||||
"TEACH YOU TO BE MORE POLITE.",
|
||||
"THE CAPTAIN IS WAITING OUTSIDE THE DOOR.",
|
||||
"THE CAPTAIN'S RANDOM SHOOTING FINALLY FINDS ITS TARGET.",
|
||||
"THE CRATE OUTSIDE THE WINDOW EXPLODES, DESTROYING THE SHIP. "
|
||||
"UNFORTUNATELY, YOU'RE STILL ABOARD.",
|
||||
"THE DOOR WAS NOT BARRED AND THE CAPTAIN WALKS RIGHT IN AND PARTS YOUR HAIR.",
|
||||
|
||||
"",
|
||||
"YOU RUN OUT ON DECK, THEN REALIZE THAT MAYA IS STILL TIED UP. "
|
||||
"AS YOU TURN TO GO BACK THE BOAT BLOWS UP.",
|
||||
"AFTER YOU FAIL TO PROVE YOUR DIVINITY THE NATIVES EAT YOU FOR LUNCH.",
|
||||
"THIS IS THE GENERIC DEATH SCENE",
|
||||
"YOU ONLY MAKE IT HALFWAY ACROSS THE RIVER BEFORE THE PIRANHA STRIKE.",
|
||||
"WITH NOTHING TO PROTECT HIM FROM THE HAIL OF BULLETS ALLEN IS QUICKLY GUNNED DOWN. "
|
||||
"JASON AND MAYA SOON FOLLOW...",
|
||||
"THE COMBINATION OF THE WIND AND GUNFIRE KNOCK THE CORRUGATED IRON OVER, "
|
||||
"LEAVING YOU WITHOUT PROTECTION.",
|
||||
"WITHOUT SUFFICIENT AMMUNITION, ALLEN IS UNABLE TO HOLD OFF THE ATTACKERS FOR LONG. "
|
||||
"THIS RESULTS IN A SERIOUS CASE OF LEAD POISONING. ADDITIONAL AMMUNITION SHOULD "
|
||||
"HAVE BEEN PURCHASED AT THE RIO BLANCO TRADING POST (CHAPTER 6).",
|
||||
"ALLEN IS A MARVELOUS SHOT, BUT HIS AMMUNITION IS NOT UNLIMITED. "
|
||||
"SOON IT IS ALL OVER.",
|
||||
"THE PILOT FEELS YOU ARE TOO CLOSE AND PULLS THE TRIGGER.",
|
||||
|
||||
"THE PILOT SHOOTS YOU IN THE HEART, THEN TOSSES YOUR LIFELESS BODY OUT THE DOOR.",
|
||||
"THE PLANE CRASHES INTO THE JUNGLE CANOPY AT 200 MPH.",
|
||||
"THE CANOE HITS THE ROCKS AND CAPSIZES, AND THE PIRANHA MAKE YOU THEIR LUNCH GUESTS.",
|
||||
"YOU TAKE THE WRONG BRANCH AND ACCIDENTALLY DISCOVER THE FOURTH TALLEST WATERFALL "
|
||||
"IN SOUTH AMERICA.",
|
||||
"YOU TAKE THE WRONG BRANCH AND DISCOVER A VERY HUNGRY TRIBE OF CANNIBALS.",
|
||||
"YOU TAKE THE WRONG BRANCH AND BECOME LOST IN THE WINDING WATERWAYS. "
|
||||
"YOU WANDER UNTIL YOU STARVE TO DEATH.",
|
||||
"YOU TAKE THE WRONG BRANCH AND BECOME TRAPPED IN THE RAPIDS. "
|
||||
"EVENTUALLY YOU AND MAYA ARE CRUSHED BETWEEN THE ROCKS.",
|
||||
"YOU WAIT AROUND FOR SOME TIME, BUT HANS STROHEIM NEVER SPEAKS TO YOU AGAIN. "
|
||||
"FINALLY YOU RETURN HOME KNOWING YOU HAVE FAILED.",
|
||||
"DECIDING THAT YOU THREATEN HIM AND HIS WORK, HANS STROHEIM HAS THE NATIVES "
|
||||
"IN THE VILLAGE KILL YOU.",
|
||||
"YOU DO NOT GET FAR ENOUGH AWAY BEFORE THE DYNAMITE EXPLODES AND YOU ARE BLOWN "
|
||||
"INTO A THOUSAND PIECES.",
|
||||
|
||||
"YOU ARE STANDING SO CLOSE TO THE ENTRANCE WHEN SANCEZ AND HIS MEN BREAK THROUGH "
|
||||
"THE WALL THAT YOU ARE QUICKLY SPOTTED AND SHOT",
|
||||
"THE AMAZON SENTINELS SPOT YOU AND FILL YOU FULL OF ARROWS.",
|
||||
"SAM MAY BE UGLY, BUT HE'S NOT DEAF. HE HEARS ALL THE NOISE YOU ARE MAKING AND "
|
||||
"CANCELS YOUR BOARDING PASS.",
|
||||
"WITH THE BAR OFF THE DOOR THE CAPTAIN WALTZES IN AND BLOWS YOU AWAY",
|
||||
"THE BEAR WANDERS OFF INTO THE WOODS AND DISTURBS THE TWO LOVEBIRDS. "
|
||||
"WHEN THEY COME OUT THEY FIND YOU AND PUT YOU IN THE BIG HOUSE FOR TWENTY YEARS.",
|
||||
"WHEN YOU DO NOT LEAVE THE SECURITY AREA QUICKLY ENOUGH YOU ARE ARRESTED AND CONVICTED "
|
||||
"AS A COMMIE SPY. YOU EMBARK ON A NEW CAREER STAMPING OUT LICENSE PLATES.",
|
||||
"THE HUNGRY BEAR SPOTS YOU AND DECIDES YOU WILL MAKE A NICE APPETIZER.",
|
||||
"YOU DISTURB THE BEAR'S LUNCH AND HE EATS YOU FOR DESSERT.",
|
||||
"AFTER FAILING TO FIND ANY LUNCH AT THE GARBAGE CAN THE BEAR EATS YOU INSTEAD.",
|
||||
"THE SUSPICIOUS LIBRARIAN CALLS SECURITY AND YOU ARE SENT TO JAIL.",
|
||||
|
||||
"YOU PLUMMET 10,000 FEET TO YOUR DEATH.",
|
||||
"EL LOCO FLIES INTO AN INSANE RAGE AND BEATS YOU TO A BLOODY PULP.",
|
||||
"THE WOMAN WALKS OUT THE DOOR AND NEVER RETURNS. YOU SPEND THE REST OF YOUR LIFE "
|
||||
"IN A FUTILE ATTEMPT TO LOCATE ALLEN.",
|
||||
"YOU SLIP OFF THE PLATFORM AND FALL TO YOUR DEATH.",
|
||||
"YOU SLIP OFF THE PLATFORM AND FALL TO YOUR DEATH.",
|
||||
"YOU COME TOO CLOSE TO THE POWERFUL JAWS OF THE ANT AND HE SNIPS YOU IN TWO BEFORE "
|
||||
"DEVOURING YOU.",
|
||||
"B.O.B. HAS A FLAW IN HIS PROGRAMMING THAT DIRECTS HIM TO SHOOT FIRST AND ASK QUESTIONS LATER.",
|
||||
"THE PLANE SINKS AND THE PIRHANA ATTACK BEFORE YOU EVEN GET OUT THE DOOR.",
|
||||
"MAYA FALLS OFF THE END OF THE BROKEN BRIDGE.",
|
||||
"YOUR WEIGHT IS JUST ENOUGH TO CAUSE THE REMAINING SUPPORT CABLE TO SNAP AND YOU "
|
||||
"FALL TO THE BOTTOM OF THE GORGE.",
|
||||
|
||||
"EVEN WITH REPAIRS THE BRIDGE IS NOT STRONG ENOUGH TO HOLD TWO PEOPLE.",
|
||||
"SANCHEZ AND HIS MEN FIND YOU AND HOLD FIRING SQUAD PRACTICE.",
|
||||
"THE TWO GUARDS ARE DISTURBED IN THEIR LOVE NEST AND COME LOOKING FOR ANYONE ACTING SUSPICIOUS. "
|
||||
"THEY FIND YOU AND SEND YOU UP THE RIVER.",
|
||||
"THE PARACHUTE IS NOT LARGE ENOUGH TO SUPPORT YOU, AND YOU HIT THE TREES AT 140 M.P.H.",
|
||||
"SANCHEZ AND HIS MEN FOLLOW YOU ACROSS THE BRIDGE AND CUT YOU DOWN IN A HAIL OF GUNFIRE",
|
||||
"YOU TRIED TO STAB THE ANT BUT HIS SHELL IS TOO DIFFICULT TO PENETRATE. "
|
||||
"YOU NOTICE A SLIGHT CUT IN THE SHELL UNDERNEATH BUT YOU CAN'T GET TO IT "
|
||||
"AND HE SNIPS YOU INTO DELICIOUS MEATY CHUNKS.",
|
||||
"AFTER THE ANT FINISHES SUCKING ALL OF THE SAP OUT OF THE VINE HE TURNS HIS ATTENTION BACK TO YOU "
|
||||
"AND BITES YOUR HEAD OFF.",
|
||||
"THE CANTINA OWNER NOTICES YOU ARE TRYING TO STEAL OBJECTS FROM THE TABLES. "
|
||||
"TWENTY YEARS LATER YOU ARE RELEASED FROM A SOUTH AMERICAN PRISON."
|
||||
};
|
||||
|
||||
const int DEATH_CELLS[12][3] = {
|
||||
{ 0, 94, 3 },
|
||||
{ 0, 94, 4 },
|
||||
{ 0, 94, 5 },
|
||||
{ 0, 94, 6 },
|
||||
{ 0, 94, 7 },
|
||||
{ 0, 94, 8 },
|
||||
{ 0, 94, 9 },
|
||||
{ 0, 94, 10 },
|
||||
{ 0, 94, 11 },
|
||||
{ 0, 94, 12 },
|
||||
{ 0, 94, 13 },
|
||||
{ 0, 94, 14 }
|
||||
};
|
||||
|
||||
} // End of namespace Amazon
|
||||
|
||||
} // End of namespace Access
|
||||
|
|
|
@ -52,6 +52,12 @@ extern const byte FONT6x6_DATA[];
|
|||
extern const char *const NO_HELP_MESSAGE;
|
||||
extern const char *const NO_HINTS_MESSAGE;
|
||||
|
||||
extern const byte DEATH_SCREENS[58];
|
||||
|
||||
extern const char *const DEATH_TEXT[58];
|
||||
|
||||
extern const int DEATH_CELLS[12][3];
|
||||
|
||||
} // End of namespace Amazon
|
||||
|
||||
} // End of namespace Access
|
||||
|
|
|
@ -88,6 +88,16 @@ public:
|
|||
FileIdent _vidSound;
|
||||
};
|
||||
|
||||
struct DeathEntry {
|
||||
int _screenId;
|
||||
Common::String _msg;
|
||||
};
|
||||
|
||||
class DeathList : public Common::Array<DeathEntry> {
|
||||
public:
|
||||
Common::Array<CellIdent> _cells;
|
||||
};
|
||||
|
||||
} // End of namespace Access
|
||||
|
||||
#endif /* ACCESS_DATA_H */
|
||||
|
|
|
@ -84,6 +84,7 @@ FileManager::FileManager(AccessEngine *vm): _vm(vm) {
|
|||
}
|
||||
|
||||
_fileNumber = -1;
|
||||
_loadPalFlag = true;
|
||||
}
|
||||
|
||||
FileManager::~FileManager() {
|
||||
|
@ -135,7 +136,11 @@ void FileManager::loadScreen(Graphics::Surface *dest, int fileNum, int subfile)
|
|||
}
|
||||
|
||||
void FileManager::handleScreen(Graphics::Surface *dest, Resource *res) {
|
||||
_vm->_screen->loadPalette(res->_stream);
|
||||
if (_loadPalFlag) {
|
||||
_vm->_screen->loadPalette(res->_stream);
|
||||
} else {
|
||||
res->_stream->skip(PALETTE_SIZE);
|
||||
}
|
||||
|
||||
// The remainder of the file after the palette may be separately compressed,
|
||||
// so call handleFile to handle it if it is
|
||||
|
|
|
@ -94,6 +94,7 @@ private:
|
|||
public:
|
||||
int _fileNumber;
|
||||
Common::Array<uint32> _fileIndex;
|
||||
bool _loadPalFlag;
|
||||
public:
|
||||
FileManager(AccessEngine *vm);
|
||||
~FileManager();
|
||||
|
|
|
@ -98,7 +98,7 @@ void MartianEngine::doTitle() {
|
|||
_sound->queueSound(0, 98, 30);
|
||||
_sound->_soundPriority[0] = 1;
|
||||
|
||||
_screen->_loadPalFlag = false;
|
||||
_files->_loadPalFlag = false;
|
||||
_files->loadScreen(0, 3);
|
||||
|
||||
_buffer2.copyFrom(*_screen);
|
||||
|
@ -112,7 +112,7 @@ void MartianEngine::doTitle() {
|
|||
|
||||
_sound->playSound(1);
|
||||
|
||||
_screen->_loadPalFlag = false;
|
||||
_files->_loadPalFlag = false;
|
||||
_files->loadScreen(0, 4);
|
||||
_sound->playSound(1);
|
||||
|
||||
|
|
|
@ -49,7 +49,6 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) {
|
|||
_vesaCurrentWin = 0;
|
||||
_currentPanel = 0;
|
||||
_hideFlag = true;
|
||||
_loadPalFlag = false;
|
||||
_startColor = _numColors = 0;
|
||||
_scrollCol = _scrollRow = 0;
|
||||
_windowXAdd = _windowYAdd = 0;
|
||||
|
@ -100,7 +99,7 @@ void Screen::setInitialPalettte() {
|
|||
void Screen::loadPalette(Common::SeekableReadStream *stream) {
|
||||
loadRawPalette(stream);
|
||||
setPalette();
|
||||
_loadPalFlag = true;
|
||||
_vm->_files->_loadPalFlag = true;
|
||||
}
|
||||
|
||||
void Screen::loadPalette(int fileNum, int subfile) {
|
||||
|
|
|
@ -64,7 +64,6 @@ private:
|
|||
void updatePalette();
|
||||
public:
|
||||
int _vesaMode;
|
||||
bool _loadPalFlag;
|
||||
int _startColor, _numColors;
|
||||
Common::Point _bufferStart;
|
||||
int _scrollCol, _scrollRow;
|
||||
|
|
|
@ -133,7 +133,7 @@ void Scripts::executeCommand(int commandIndex) {
|
|||
&Scripts::cmdFreeSound, &Scripts::cmdSetVideoSound, &Scripts::cmdPlayVideoSound,
|
||||
&Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION,
|
||||
&Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::cmdPlayerOff,
|
||||
&Scripts::cmdPlayerOn, &Scripts::CMDDEAD, &Scripts::cmdFadeOut,
|
||||
&Scripts::cmdPlayerOn, &Scripts::cmdDead, &Scripts::cmdFadeOut,
|
||||
&Scripts::CMDENDVID
|
||||
};
|
||||
|
||||
|
@ -740,7 +740,73 @@ void Scripts::cmdPlayerOn() {
|
|||
_vm->_player->_playerOff = false;
|
||||
}
|
||||
|
||||
void Scripts::CMDDEAD() { error("TODO CMDDEAD"); }
|
||||
void Scripts::cmdDead() {
|
||||
int deathId = _data->readByte();
|
||||
_vm->_events->hideCursor();
|
||||
_vm->_screen->forceFadeOut();
|
||||
cmdFreeSound();
|
||||
|
||||
_vm->_sound->_soundTable[0] = _vm->_files->loadFile(98, 44);
|
||||
_vm->_sound->_soundPriority[1] = 1;
|
||||
|
||||
_vm->_screen->clearScreen();
|
||||
_vm->_screen->setPanel(3);
|
||||
|
||||
if (deathId != 10) {
|
||||
_vm->_sound->newMusic(62, 0);
|
||||
_vm->_files->_loadPalFlag = false;
|
||||
_vm->_files->loadScreen(94, 0);
|
||||
_vm->_files->_loadPalFlag = true;
|
||||
_vm->_buffer2.copyFrom(*_vm->_screen);
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
_vm->_sound->playSound(0);
|
||||
_vm->_screen->forceFadeIn();
|
||||
_vm->_sound->playSound(0);
|
||||
_vm->_screen->forceFadeOut();
|
||||
}
|
||||
_vm->freeCells();
|
||||
|
||||
// Load the cell list for the death screen
|
||||
DeathEntry &de = _vm->_deaths[deathId];
|
||||
Common::Array<CellIdent> cells;
|
||||
cells.push_back(_vm->_deaths._cells[de._screenId]);
|
||||
_vm->loadCells(cells);
|
||||
|
||||
_vm->_screen->setDisplayScan();
|
||||
_vm->_files->_loadPalFlag = false;
|
||||
_vm->_files->loadScreen(&_vm->_buffer2, 94, 1);
|
||||
_vm->_screen->setIconPalette();
|
||||
|
||||
_vm->_buffer2.plotImage(_vm->_objectsTable[0], 0, Common::Point(105, 25));
|
||||
_vm->_buffer2.copyTo(_vm->_screen);
|
||||
_vm->_screen->forceFadeIn();
|
||||
|
||||
_vm->_fonts._charSet._hi = 10;
|
||||
_vm->_fonts._charSet._lo = 1;
|
||||
_vm->_fonts._charFor._lo = 55;
|
||||
_vm->_fonts._charFor._hi = 255;
|
||||
_vm->_screen->_maxChars = 46;
|
||||
_vm->_screen->_printOrg = Common::Point(20, 155);
|
||||
_vm->_screen->_printStart = Common::Point(20, 155);
|
||||
|
||||
Common::String &msg = de._msg;
|
||||
_vm->_printEnd = 180;
|
||||
_vm->_fonts._font2.printText(_vm->_screen, msg);
|
||||
_vm->_screen->forceFadeOut();
|
||||
|
||||
_vm->_sound->newMusic(0, 1);
|
||||
_vm->_events->showCursor();
|
||||
_vm->_room->clearRoom();
|
||||
_vm->freeChar();
|
||||
|
||||
warning("TODO: restart game");
|
||||
_vm->quitGame();
|
||||
}
|
||||
else {
|
||||
_vm->quitGame();
|
||||
}
|
||||
}
|
||||
|
||||
void Scripts::cmdFadeOut() {
|
||||
_vm->_screen->forceFadeOut();
|
||||
|
|
|
@ -119,7 +119,7 @@ protected:
|
|||
void CMDPUSHLOCATION();
|
||||
void cmdPlayerOff();
|
||||
void cmdPlayerOn();
|
||||
void CMDDEAD();
|
||||
void cmdDead();
|
||||
void cmdFadeOut();
|
||||
void CMDENDVID();
|
||||
public:
|
||||
|
|
|
@ -93,6 +93,10 @@ void SoundManager::freeSounds() {
|
|||
// TODO
|
||||
}
|
||||
|
||||
void SoundManager::newMusic(int musicId, int mode) {
|
||||
warning("TODO: newMusic");
|
||||
}
|
||||
|
||||
void SoundManager::freeMusic() {
|
||||
delete _music;
|
||||
_music = nullptr;
|
||||
|
|
|
@ -67,6 +67,8 @@ public:
|
|||
|
||||
void freeSounds();
|
||||
|
||||
void newMusic(int musicId, int mode);
|
||||
|
||||
void freeMusic();
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue