From 5884c6735dc911fcf732b564324feebc4cf1c0cf Mon Sep 17 00:00:00 2001 From: Gregory Montoir Date: Thu, 2 Dec 2004 22:59:57 +0000 Subject: simplified palette handling svn-id: r15971 --- queen/cutaway.cpp | 6 +---- queen/defs.h | 4 ++- queen/display.cpp | 81 +++++++++++++++++++++++++++++-------------------------- queen/display.h | 7 +++-- queen/journal.cpp | 15 +++++------ queen/journal.h | 3 +-- queen/logic.cpp | 15 ++++------- queen/logic.h | 3 --- queen/queen.cpp | 13 ++++----- 9 files changed, 70 insertions(+), 77 deletions(-) (limited to 'queen') diff --git a/queen/cutaway.cpp b/queen/cutaway.cpp index 1e8f390989..9aadf79e84 100644 --- a/queen/cutaway.cpp +++ b/queen/cutaway.cpp @@ -881,12 +881,8 @@ void Cutaway::run(char *nextFilename) { if (_roomFade) { _vm->update(); - int end = 223; - if (Logic::isIntroRoom(_vm->logic()->currentRoom())) { - end = 255; - } BobSlot *j = _vm->graphics()->bob(0); - _vm->display()->palFadeIn(0, end, _vm->logic()->currentRoom(), j->active, j->x, j->y); + _vm->display()->palFadeIn(_vm->logic()->currentRoom(), j->active, j->x, j->y); _roomFade = false; } diff --git a/queen/defs.h b/queen/defs.h index 4e5069a428..33f3a945cc 100644 --- a/queen/defs.h +++ b/queen/defs.h @@ -244,7 +244,9 @@ enum { FAYE_HEAD = 37, AZURA_HEAD = 106, - FRANK_HEAD = 107 + FRANK_HEAD = 107, + + ROOM_JOURNAL = 200 // dummy value to keep Display methods happy }; diff --git a/queen/display.cpp b/queen/display.cpp index 32fda4126a..9524fdfd3d 100644 --- a/queen/display.cpp +++ b/queen/display.cpp @@ -98,7 +98,7 @@ void Display::dynalumInit(const char *roomName, uint16 roomNum) { delete[] _dynalum.lumBuf; _dynalum.lumBuf = NULL; - if (!(Logic::isAltIntroRoom(roomNum) || Logic::isIntroRoom(roomNum))) { + if (!isPalFadingDisabled(roomNum)) { char filename[20]; sprintf(filename, "%s.msk", roomName); if (_vm->resource()->fileExists(filename)) { @@ -119,12 +119,12 @@ void Display::dynalumUpdate(int16 x, int16 y) { if (x < 0) { x = 0; - } else if (x >= _bdWidth) { + } else if (x > _bdWidth) { x = _bdWidth; } if (y < 0) { y = 0; - } else if (y >= ROOM_ZONE_HEIGHT - 1) { + } else if (y > ROOM_ZONE_HEIGHT - 1) { y = ROOM_ZONE_HEIGHT - 1; } @@ -191,54 +191,42 @@ void Display::palSetPanel() { memcpy(_pal.screen + 144 * 3, _pal.panel, (256 - 144) * 3); } -void Display::palFadeIn(int start, int end, uint16 roomNum, bool dynalum, int16 dynaX, int16 dynaY) { - debug(9, "Display::palFadeIn(%d, %d)", start, end); - memcpy(_pal.screen, _pal.room, 256 * 3); - if (!(Logic::isAltIntroRoom(roomNum) || Logic::isIntroRoom(roomNum))) { +void Display::palFadeIn(uint16 roomNum, bool dynalum, int16 dynaX, int16 dynaY) { + debug(9, "Display::palFadeIn(%d)", roomNum); + int n = getNumColorsForRoom(roomNum); + memcpy(_pal.screen, _pal.room, n * 3); + if (!isPalFadingDisabled(roomNum)) { if (dynalum) { dynalumUpdate(dynaX, dynaY); } - int n = end - start + 1; uint8 tempPal[256 * 3]; - int i; - for (i = 0; i <= FADE_SPEED; ++i) { - int j = n * 3; - uint8 *outPal = tempPal + start * 3; - const uint8 *inPal = _pal.screen + start * 3; - while (j--) { - *outPal = *inPal * i / FADE_SPEED; - ++outPal; - ++inPal; + for (int i = 0; i <= FADE_SPEED; ++i) { + for (int j = 0; j < n * 3; ++j) { + tempPal[j] = _pal.screen[j] * i / FADE_SPEED; } - palSet(tempPal, start, end, true); + palSet(tempPal, 0, n - 1, true); } } - _pal.dirtyMin = start; - _pal.dirtyMax = end; + _pal.dirtyMin = 0; + _pal.dirtyMax = n - 1; _pal.scrollable = true; } -void Display::palFadeOut(int start, int end, uint16 roomNum) { - debug(9, "Display::palFadeOut(%d, %d, %d)", start, end, roomNum); +void Display::palFadeOut(uint16 roomNum) { + debug(9, "Display::palFadeOut(%d)", roomNum); _pal.scrollable = false; - int n = end - start + 1; - if (Logic::isAltIntroRoom(roomNum) || Logic::isIntroRoom(roomNum)) { - memset(_pal.screen + start * 3, 0, n * 3); - palSet(_pal.screen, start, end, true); + int n = getNumColorsForRoom(roomNum); + if (isPalFadingDisabled(roomNum)) { + memset(_pal.screen, 0, n * 3); + palSet(_pal.screen, 0, n - 1, true); } else { uint8 tempPal[256 * 3]; - memcpy(tempPal + start * 3, _pal.screen + start * 3, n * 3); - int i; - for (i = FADE_SPEED; i >= 0; --i) { - int j = n * 3; - uint8 *outPal = _pal.screen + start * 3; - const uint8 *inPal = tempPal + start * 3; - while (j--) { - *outPal = *inPal * i / FADE_SPEED; - ++outPal; - ++inPal; + memcpy(tempPal, _pal.screen, n * 3); + for (int i = FADE_SPEED; i >= 0; --i) { + for (int j = 0; j < n * 3; ++j) { + _pal.screen[j] = tempPal[j] * i / FADE_SPEED; } - palSet(_pal.screen, start, end, true); + palSet(_pal.screen, 0, n - 1, true); } } } @@ -560,6 +548,19 @@ void Display::palCustomLightsOn(uint16 roomNum) { _pal.scrollable = true; } +int Display::getNumColorsForRoom(uint16 room) const { + int n = 224; + if (room >= 114 && room <= 125) { + n = 256; + } + return n; +} + +bool Display::isPalFadingDisabled(uint16 room) const { + // introduction rooms don't fade palette + return (room >= 90 && room <= 94) || (room >= 115 && room <= 125); +} + void Display::screenMode(int comPanel, bool inCutaway) { debug(6, "Display::screenMode(%d, %d)", comPanel, inCutaway); @@ -669,7 +670,11 @@ void Display::setupNewRoom(const char *name, uint16 room) { _bdWidth = READ_LE_UINT16(pcxBuf + 12); _bdHeight = READ_LE_UINT16(pcxBuf + 14); readPCX(_backdropBuf, BACKDROP_W, pcxBuf + 128, _bdWidth, _bdHeight); - memcpy(_pal.room, pcxBuf + size - 768, Logic::isIntroRoom(room) ? 256 * 3 : 144 * 3); + int n = getNumColorsForRoom(room); + if (n != 256) { + n = 144; + } + memcpy(_pal.room, pcxBuf + size - 768, n * 3); delete[] pcxBuf; palCustomColors(room); diff --git a/queen/display.h b/queen/display.h index 6aa111ca4d..4c5857018f 100644 --- a/queen/display.h +++ b/queen/display.h @@ -46,8 +46,8 @@ public: void palSetJoeDress(); void palSetJoeNormal(); void palSetPanel(); - void palFadeIn(int start, int end, uint16 roomNum, bool dynalum = false, int16 dynaX = 0, int16 dynaY = 0); - void palFadeOut(int start, int end, uint16 roomNum); + void palFadeIn(uint16 roomNum, bool dynalum = false, int16 dynaX = 0, int16 dynaY = 0); + void palFadeOut(uint16 roomNum); void palGreyPanel(); void palScroll(int start, int end); void palCustomColors(uint16 roomNum); @@ -57,6 +57,9 @@ public: void palCustomLightsOn(uint16 roomNum); void palSetAllDirty() { _pal.dirtyMin = 0; _pal.dirtyMax = 255; } + int getNumColorsForRoom(uint16 room) const; + bool isPalFadingDisabled(uint16 room) const; + void screenMode(int comPanel, bool inCutaway); void prepareUpdate(); diff --git a/queen/journal.cpp b/queen/journal.cpp index f1a32bd6a5..3d77aa4ae8 100644 --- a/queen/journal.cpp +++ b/queen/journal.cpp @@ -51,11 +51,11 @@ void Journal::use() { memset(_saveDescriptions, 0, sizeof(_saveDescriptions)); _vm->findGameStateDescriptions(_saveDescriptions); _panelTextCount = 0; - _vm->display()->palFadeOut(0, 255, JOURNAL_ROOM); + _vm->display()->palFadeOut(_vm->logic()->currentRoom()); prepare(); redraw(); update(); - _vm->display()->palFadeIn(0, 255, JOURNAL_ROOM); + _vm->display()->palFadeIn(ROOM_JOURNAL); _quitCleanly = true; _quit = false; @@ -123,7 +123,7 @@ void Journal::prepare() { _vm->grid()->setZone(GS_ROOM, ZN_VOICE_TOGGLE, 158 - 24, 155, 168, 164); _vm->grid()->setZone(GS_ROOM, ZN_TEXT_TOGGLE, 125 - 16, 168, 135, 177); - _vm->display()->setupNewRoom("journal", JOURNAL_ROOM); + _vm->display()->setupNewRoom("journal", ROOM_JOURNAL); _vm->bankMan()->load("journal.BBK", JOURNAL_BANK); for (i = 1; i <= 20; ++i) { int frameNum = JOURNAL_FRAMES + i; @@ -141,7 +141,7 @@ void Journal::prepare() { void Journal::restore() { _vm->display()->fullscreen(false); _vm->display()->forceFullRefresh(); - + _vm->logic()->joePos(_prevJoeX, _prevJoeY); _vm->logic()->joeCutFacing(_vm->logic()->joeFacing()); @@ -157,7 +157,7 @@ void Journal::redraw() { } void Journal::update() { - _vm->graphics()->update(JOURNAL_ROOM); + _vm->graphics()->update(ROOM_JOURNAL); if (_edit.enable) { int16 x = 136 + _edit.posCursor; int16 y = 9 + _currentSaveSlot * 13 + 8; @@ -178,8 +178,7 @@ void Journal::hideBob(int bobNum) { } void Journal::drawSaveDescriptions() { - int i; - for (i = 0; i < SAVE_PER_PAGE; ++i) { + for (int i = 0; i < SAVE_PER_PAGE; ++i) { int n = _currentSavePage * 10 + i; char nb[4]; sprintf(nb, "%d", n + 1); @@ -269,7 +268,7 @@ void Journal::handleYesNoMode(int16 zoneNum) { case ZN_REVIEW_ENTRY: if (_saveDescriptions[currentSlot][0]) { _vm->graphics()->clearBobs(); - _vm->display()->palFadeOut(0, 223, JOURNAL_ROOM); + _vm->display()->palFadeOut(ROOM_JOURNAL); _vm->music()->stopSong(); _vm->loadGameState(currentSlot); _vm->display()->clearTexts(0, GAME_SCREEN_HEIGHT - 1); diff --git a/queen/journal.h b/queen/journal.h index 025ced4e71..9e7a4a8c83 100644 --- a/queen/journal.h +++ b/queen/journal.h @@ -36,8 +36,7 @@ public: enum { JOURNAL_BANK = 8, - JOURNAL_FRAMES = 40, - JOURNAL_ROOM = 0 // dummy value to make Graphics methods happy + JOURNAL_FRAMES = 40 }; enum { diff --git a/queen/logic.cpp b/queen/logic.cpp index bceb872755..565476ecf1 100644 --- a/queen/logic.cpp +++ b/queen/logic.cpp @@ -478,11 +478,7 @@ void Logic::eraseRoom() { _vm->bankMan()->close(10); _vm->bankMan()->close(12); - if (_currentRoom >= 114) { - _vm->display()->palFadeOut(0, 255, _currentRoom); - } else { - _vm->display()->palFadeOut(0, 223, _currentRoom); - } + _vm->display()->palFadeOut(_currentRoom); // invalidates all persons animations _vm->graphics()->clearPersonFrames(); @@ -544,8 +540,7 @@ void Logic::displayRoom(uint16 room, RoomDisplayMode mode, uint16 scale, int com if (mode != RDM_NOFADE_JOE) { _vm->update(); BobSlot *joe = _vm->graphics()->bob(0); - int end = isIntroRoom(_currentRoom) ? 255 : 223; - _vm->display()->palFadeIn(0, end, _currentRoom, joe->active, joe->x, joe->y); + _vm->display()->palFadeIn(_currentRoom, joe->active, joe->x, joe->y); } if (mode != RDM_FADE_NOJOE && joeX() != 0 && joeY() != 0) { int16 jx = joeX(); @@ -1218,7 +1213,7 @@ void Logic::handlePinnacleRoom() { joe->animating = piton->animating = false; _vm->update(); - _vm->display()->palFadeIn(0, 223, ROOM_JUNGLE_PINNACLE, joe->active, joe->x, joe->y); + _vm->display()->palFadeIn(ROOM_JUNGLE_PINNACLE, joe->active, joe->x, joe->y); _entryObj = 0; uint16 prevObj = 0; @@ -1291,7 +1286,7 @@ void Logic::handlePinnacleRoom() { // camera follows Joe again _vm->graphics()->putCameraOnBob(0); - _vm->display()->palFadeOut(0, 223, ROOM_JUNGLE_PINNACLE); + _vm->display()->palFadeOut(ROOM_JUNGLE_PINNACLE); } void Logic::update() { @@ -1821,7 +1816,7 @@ void Logic::asmScaleEnding() { for (i = 0; i < 50; ++i) { _vm->update(); } - _vm->display()->palFadeOut(0, 255, currentRoom()); + _vm->display()->palFadeOut(_currentRoom); } void Logic::asmWaitForCarPosition() { diff --git a/queen/logic.h b/queen/logic.h index 09cf76c02b..483a6c25fc 100644 --- a/queen/logic.h +++ b/queen/logic.h @@ -72,9 +72,6 @@ public: _newRoom = room; } - static bool isAltIntroRoom(uint16 room) { return room >= 90 && room <= 94; } - static bool isIntroRoom(uint16 room) { return room >= 115 && room <= 125; } - ObjectData *objectData(int index) const; uint16 roomData(int room) const { return _roomData[room]; } GraphicData *graphicData(int index) const { return &_graphicData[index]; } diff --git a/queen/queen.cpp b/queen/queen.cpp index 97c5e5b8b2..353c4b7cd5 100644 --- a/queen/queen.cpp +++ b/queen/queen.cpp @@ -314,17 +314,14 @@ int QueenEngine::go() { if (_logic->currentRoom() == _logic->newRoom()) { _logic->newRoom(0); } + } else if (_logic->joeWalk() == JWM_EXECUTE) { + _logic->joeWalk(JWM_NORMAL); + _command->executeCurrentAction(); } else { - if (_logic->joeWalk() == JWM_EXECUTE) { - _logic->joeWalk(JWM_NORMAL); - _command->executeCurrentAction(); - } else { - _logic->joeWalk(JWM_NORMAL); - update(true); - } + _logic->joeWalk(JWM_NORMAL); + update(true); } } - return 0; } -- cgit v1.2.3