mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-21 11:41:25 +00:00
simplified palette handling
svn-id: r15971
This commit is contained in:
parent
891970cd76
commit
5884c6735d
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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() {
|
||||
|
@ -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]; }
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user