aboutsummaryrefslogtreecommitdiff
path: root/queen
diff options
context:
space:
mode:
authorGregory Montoir2004-12-02 22:59:57 +0000
committerGregory Montoir2004-12-02 22:59:57 +0000
commit5884c6735dc911fcf732b564324feebc4cf1c0cf (patch)
treefd8a175c13d2e82ce21b41a0654d457d72acf0b7 /queen
parent891970cd767760cbb682319d3215786d4a651c08 (diff)
downloadscummvm-rg350-5884c6735dc911fcf732b564324feebc4cf1c0cf.tar.gz
scummvm-rg350-5884c6735dc911fcf732b564324feebc4cf1c0cf.tar.bz2
scummvm-rg350-5884c6735dc911fcf732b564324feebc4cf1c0cf.zip
simplified palette handling
svn-id: r15971
Diffstat (limited to 'queen')
-rw-r--r--queen/cutaway.cpp6
-rw-r--r--queen/defs.h4
-rw-r--r--queen/display.cpp81
-rw-r--r--queen/display.h7
-rw-r--r--queen/journal.cpp15
-rw-r--r--queen/journal.h3
-rw-r--r--queen/logic.cpp15
-rw-r--r--queen/logic.h3
-rw-r--r--queen/queen.cpp13
9 files changed, 70 insertions, 77 deletions
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;
}