mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-18 07:39:08 +00:00
AVALANCHE: Implement fadeIn and fadeOut (dusk and dawn)
This commit is contained in:
parent
cf36706b98
commit
b0255c9406
@ -769,7 +769,7 @@ void Animation::callSpecial(uint16 which) {
|
||||
}
|
||||
break;
|
||||
case 4: // This is the ghost room link.
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_sprites[0].turn(kDirRight); // you'll see this after we get back from bootstrap
|
||||
_vm->_timer->addTimer(1, Timer::kProcGhostRoomPhew, Timer::kReasonGhostRoomPhew);
|
||||
//_vm->_enid->backToBootstrap(3); TODO: Replace it with proper ScummVM-friendly function(s)! Do not remove until then!
|
||||
@ -837,7 +837,7 @@ void Animation::callSpecial(uint16 which) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_vm->_catacombY--;
|
||||
catacombMove(4);
|
||||
if (_vm->_room != kRoomCatacombs)
|
||||
@ -855,7 +855,7 @@ void Animation::callSpecial(uint16 which) {
|
||||
dawnDelay();
|
||||
break;
|
||||
case 11: // _vm->special 11: transfer east in catacombs.
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_vm->_catacombX++;
|
||||
catacombMove(1);
|
||||
if (_vm->_room != kRoomCatacombs)
|
||||
@ -864,7 +864,7 @@ void Animation::callSpecial(uint16 which) {
|
||||
dawnDelay();
|
||||
break;
|
||||
case 12: // _vm->special 12: transfer south in catacombs.
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_vm->_catacombY++;
|
||||
catacombMove(2);
|
||||
if (_vm->_room != kRoomCatacombs)
|
||||
@ -873,7 +873,7 @@ void Animation::callSpecial(uint16 which) {
|
||||
dawnDelay();
|
||||
break;
|
||||
case 13: // _vm->special 13: transfer west in catacombs.
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_vm->_catacombX--;
|
||||
catacombMove(3);
|
||||
if (_vm->_room != kRoomCatacombs)
|
||||
|
@ -50,6 +50,8 @@ AvalancheEngine::AvalancheEngine(OSystem *syst, const AvalancheGameDescription *
|
||||
|
||||
_totalTime = 0;
|
||||
_showDebugLines = false;
|
||||
|
||||
memset(_fxPal, 0, 16 * 16 * 3);
|
||||
}
|
||||
|
||||
AvalancheEngine::~AvalancheEngine() {
|
||||
@ -359,7 +361,7 @@ bool AvalancheEngine::loadGame(const int16 slot) {
|
||||
|
||||
if (_holdTheDawn) {
|
||||
_holdTheDawn = false;
|
||||
dawn();
|
||||
fadeIn();
|
||||
}
|
||||
|
||||
_background->release();
|
||||
|
@ -274,8 +274,8 @@ public:
|
||||
void fxToggle();
|
||||
void refreshObjectList();
|
||||
void errorLed();
|
||||
void dusk();
|
||||
void dawn();
|
||||
void fadeOut();
|
||||
void fadeIn();
|
||||
void drawDirection(); // Draws the little icon at the left end of the text input field.
|
||||
void gameOver();
|
||||
uint16 bearing(byte whichPed); // Returns the bearing from ped 'whichped' to Avvy, in degrees.
|
||||
@ -306,6 +306,8 @@ private:
|
||||
|
||||
// Will be used in dusk() and dawn().
|
||||
bool _fxHidden;
|
||||
byte _fxPal[16][16][3];
|
||||
|
||||
bool _spludwickAtHome; // Is Spludwick at home?
|
||||
bool _passedCwytalotInHerts; // Have you passed Cwytalot in Herts?
|
||||
bool _holdTheDawn; // If this is true, calling Dawn will do nothing. It's used, for example, at the start, to stop Load from dawning.
|
||||
@ -328,8 +330,6 @@ private:
|
||||
void findPeople(byte room);
|
||||
void putGeidaAt(byte whichPed, byte ped);
|
||||
void guideAvvy(Common::Point cursorPos);
|
||||
void fadeOut(byte n);
|
||||
void fadeIn(byte n);
|
||||
void enterRoom(Room room, byte ped);
|
||||
void exitRoom(byte x);
|
||||
void drawToolbar();
|
||||
@ -339,8 +339,6 @@ private:
|
||||
void fixFlashers();
|
||||
void loadAlso(byte num);
|
||||
void resetVariables();
|
||||
|
||||
int8 fades(int8 x);
|
||||
};
|
||||
|
||||
} // End of namespace Avalanche
|
||||
|
@ -28,8 +28,11 @@
|
||||
/* AVALOT The kernel of the program. */
|
||||
|
||||
#include "avalanche/avalanche.h"
|
||||
|
||||
#include "common/random.h"
|
||||
#include "common/system.h"
|
||||
#include "common/config-manager.h"
|
||||
#include "graphics/palette.h"
|
||||
|
||||
namespace Avalanche {
|
||||
|
||||
@ -297,7 +300,7 @@ void AvalancheEngine::setup() {
|
||||
init();
|
||||
|
||||
_dialogs->reset();
|
||||
dusk();
|
||||
fadeOut();
|
||||
_graphics->loadDigits();
|
||||
|
||||
_parser->_inputTextPos = 0;
|
||||
@ -308,7 +311,7 @@ void AvalancheEngine::setup() {
|
||||
drawToolbar();
|
||||
_dialogs->setReadyLight(2);
|
||||
|
||||
dawn();
|
||||
fadeIn();
|
||||
_parser->_cursorState = false;
|
||||
_parser->cursorOn();
|
||||
_animation->_sprites[0]._speedX = kWalk;
|
||||
@ -376,7 +379,6 @@ void AvalancheEngine::init() {
|
||||
#endif
|
||||
|
||||
_letMeOut = false;
|
||||
_holdTheDawn = true;
|
||||
_currentMouse = 177;
|
||||
_dropsOk = true;
|
||||
_mouseText = "";
|
||||
@ -837,7 +839,7 @@ void AvalancheEngine::enterRoom(Room roomId, byte ped) {
|
||||
|
||||
case kRoomMap:
|
||||
// You're entering the map.
|
||||
dawn();
|
||||
fadeIn();
|
||||
if (ped > 0)
|
||||
_graphics->zoomOut(_peds[ped]._x, _peds[ped]._y);
|
||||
|
||||
@ -1294,25 +1296,72 @@ void AvalancheEngine::errorLed() {
|
||||
warning("STUB: errorled()");
|
||||
}
|
||||
|
||||
int8 AvalancheEngine::fades(int8 x) {
|
||||
warning("STUB: fades()");
|
||||
return 0;
|
||||
/**
|
||||
* Displays a fade out, full screen.
|
||||
* This version is different to the one in the original, which was fading in 3 steps.
|
||||
* @remarks Originally called 'dusk'
|
||||
*/
|
||||
void AvalancheEngine::fadeOut() {
|
||||
byte pal[3], tmpPal[3];
|
||||
|
||||
_graphics->setBackgroundColor(kColorBlack);
|
||||
if (_fxHidden)
|
||||
return;
|
||||
_fxHidden = true;
|
||||
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int j = 0; j < 16; j++) {
|
||||
g_system->getPaletteManager()->grabPalette((byte *)tmpPal, j, 1);
|
||||
_fxPal[i][j][0] = tmpPal[0];
|
||||
_fxPal[i][j][1] = tmpPal[1];
|
||||
_fxPal[i][j][2] = tmpPal[2];
|
||||
if (tmpPal[0] >= 16)
|
||||
pal[0] = tmpPal[0] - 16;
|
||||
else
|
||||
pal[0] = 0;
|
||||
|
||||
if (tmpPal[1] >= 16)
|
||||
pal[1] = tmpPal[1] - 16;
|
||||
else
|
||||
pal[1] = 0;
|
||||
|
||||
if (tmpPal[2] >= 16)
|
||||
pal[2] = tmpPal[2] - 16;
|
||||
else
|
||||
pal[2] = 0;
|
||||
|
||||
g_system->getPaletteManager()->setPalette(pal, j, 1);
|
||||
}
|
||||
_system->delayMillis(10);
|
||||
_graphics->refreshScreen();
|
||||
}
|
||||
}
|
||||
|
||||
void AvalancheEngine::fadeOut(byte n) {
|
||||
warning("STUB: fadeOut()");
|
||||
}
|
||||
/**
|
||||
* Displays a fade in, full screen.
|
||||
* This version is different to the one in the original, which was fading in 3 steps.
|
||||
* @remarks Originally called 'dawn'
|
||||
*/
|
||||
void AvalancheEngine::fadeIn() {
|
||||
if (_holdTheDawn || !_fxHidden)
|
||||
return;
|
||||
|
||||
_fxHidden = false;
|
||||
|
||||
byte pal[3];
|
||||
for (int i = 15; i >= 0; i--) {
|
||||
for (int j = 0; j < 16; j++) {
|
||||
pal[0] = _fxPal[i][j][0];
|
||||
pal[1] = _fxPal[i][j][1];
|
||||
pal[2] = _fxPal[i][j][2];
|
||||
g_system->getPaletteManager()->setPalette(pal, j, 1);
|
||||
}
|
||||
_system->delayMillis(10);
|
||||
_graphics->refreshScreen();
|
||||
}
|
||||
|
||||
void AvalancheEngine::dusk() {
|
||||
warning("STUB: dusk()");
|
||||
}
|
||||
|
||||
void AvalancheEngine::fadeIn(byte n) {
|
||||
warning("STUB: fadeIn()");
|
||||
}
|
||||
|
||||
void AvalancheEngine::dawn() {
|
||||
warning("STUB: dawn()");
|
||||
if ((_room == kRoomYours) && _avvyInBed && _teetotal)
|
||||
_graphics->setBackgroundColor(kColorYellow);
|
||||
}
|
||||
|
||||
void AvalancheEngine::drawDirection() { // It's data is loaded in load_digits().
|
||||
@ -1344,7 +1393,7 @@ void AvalancheEngine::gameOver() {
|
||||
}
|
||||
|
||||
void AvalancheEngine::minorRedraw() {
|
||||
dusk();
|
||||
fadeOut();
|
||||
|
||||
enterRoom(_room, 0); // Ped unknown or non-existant.
|
||||
|
||||
@ -1352,7 +1401,7 @@ void AvalancheEngine::minorRedraw() {
|
||||
_scoreToDisplay[i] = -1; // impossible digits
|
||||
drawScore();
|
||||
|
||||
dawn();
|
||||
fadeIn();
|
||||
}
|
||||
|
||||
void AvalancheEngine::majorRedraw() {
|
||||
@ -1652,7 +1701,7 @@ void AvalancheEngine::flipRoom(Room room, byte ped) {
|
||||
}
|
||||
|
||||
exitRoom(_room);
|
||||
dusk();
|
||||
fadeOut();
|
||||
|
||||
for (int16 i = 1; i < _animation->kSpriteNumbMax; i++) {
|
||||
if (_animation->_sprites[i]._quick)
|
||||
@ -1669,7 +1718,7 @@ void AvalancheEngine::flipRoom(Room room, byte ped) {
|
||||
_animation->setDirection(_animation->_sprites[0]._facingDir);
|
||||
drawDirection();
|
||||
|
||||
dawn();
|
||||
fadeIn();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -748,7 +748,7 @@ void GraphicManager::setDialogColor(Color bg, Color text) {
|
||||
|
||||
// Original name background()
|
||||
void GraphicManager::setBackgroundColor(Color x) {
|
||||
warning("STUB: setBackgroundColor(%d)", x);
|
||||
warning("STUB: setBackgroundColor()");
|
||||
}
|
||||
|
||||
} // End of namespace Avalanche
|
||||
|
@ -1421,7 +1421,7 @@ void Parser::drink() {
|
||||
_vm->_avvyIsAwake = false;
|
||||
_vm->_avvyInBed = true;
|
||||
_vm->refreshObjectList();
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_vm->flipRoom(kRoomYours, 1);
|
||||
_vm->_graphics->setBackgroundColor(kColorYellow);
|
||||
_vm->_animation->_sprites[0]._visible = false;
|
||||
@ -2348,17 +2348,17 @@ void Parser::doThat() {
|
||||
_vm->_timer->addTimer(1, Timer::kProcAvvySitDown, Timer::kReasonSittingDown);
|
||||
}
|
||||
} else { // Default doodah.
|
||||
_vm->dusk();
|
||||
_vm->dawn();
|
||||
_vm->fadeOut();
|
||||
_vm->fadeIn();
|
||||
Common::String tmpStr = Common::String::format("A few hours later...%cnothing much has happened...", kControlParagraph);
|
||||
_vm->_dialogs->displayText(tmpStr);
|
||||
}
|
||||
break;
|
||||
case kVerbCodeRestart:
|
||||
if (_vm->_dialogs->displayQuestion("Restart game and lose changes?")) {
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
_vm->newGame();
|
||||
_vm->dawn();
|
||||
_vm->fadeIn();
|
||||
}
|
||||
break;
|
||||
case kVerbCodePardon:
|
||||
@ -2383,12 +2383,12 @@ void Parser::doThat() {
|
||||
}
|
||||
|
||||
void Parser::verbOpt(byte verb, Common::String &answer, char &ansKey) {
|
||||
// kVerbCodegive isn't dealt with by this procedure, but by ddm__with.
|
||||
switch (verb) {
|
||||
case kVerbCodeExam:
|
||||
answer = "Examine";
|
||||
ansKey = 'x';
|
||||
break; // The ubiquitous one.
|
||||
// kVerbCodegive isn't dealt with by this procedure, but by ddm__with.
|
||||
break;
|
||||
case kVerbCodeDrink:
|
||||
answer = "Drink";
|
||||
ansKey = 'D';
|
||||
|
@ -70,7 +70,7 @@ void Pingo::zonk() {
|
||||
|
||||
void Pingo::winningPic() {
|
||||
Common::File f;
|
||||
_vm->dusk();
|
||||
_vm->fadeOut();
|
||||
|
||||
if (!f.open("finale.avd"))
|
||||
error("AVALANCHE: File not found: finale.avd");
|
||||
@ -89,7 +89,7 @@ void Pingo::winningPic() {
|
||||
|
||||
warning("STUB: Pingo::winningPic()");
|
||||
|
||||
_vm->dawn();
|
||||
_vm->fadeIn();
|
||||
|
||||
#if 0
|
||||
do {
|
||||
|
@ -149,7 +149,7 @@ void Timer::updateTimer() {
|
||||
crapulusSaysSpludOut();
|
||||
break;
|
||||
case kProcDawnDelay:
|
||||
_vm->dawn();
|
||||
_vm->fadeIn();
|
||||
break;
|
||||
case kProcBuyDrinks:
|
||||
buyDrinks();
|
||||
|
Loading…
Reference in New Issue
Block a user