DREAMWEB: Move most of saveload.cpp to DreamBase

This commit is contained in:
Max Horn 2011-12-20 09:39:33 +01:00 committed by Filippos Karapetis
parent 2bdcbadbfe
commit d033566f6d
4 changed files with 122 additions and 123 deletions

View file

@ -238,9 +238,18 @@ public:
void namesToOld();
void showMainOps();
void showDiscOps();
void showNames();
void actualSave();
void actualLoad();
void loadPosition(unsigned int slot);
void savePosition(unsigned int slot, const char *descbuf);
void loadSaveBox();
void showNames();
void checkInput();
void selectSlot();
void showSlots();
void showOpBox();
void showSaveOps();
void showLoadOps();
// from sound.cpp
bool loadSpeech(byte type1, int idx1, byte type2, int idx2);
@ -320,7 +329,6 @@ public:
Frame *tempGraphics2();
Frame *tempGraphics3();
void showArrows();
void showOpBox();
void middlePanel();
void showDiary();
void readMouse();
@ -446,6 +454,9 @@ public:
void personNameText();
void walkToText();
void entryTexts();
void setAllChanges();
void restoreAll();
void redrawMainScrn();
// from use.cpp
void placeFreeObject(uint8 index);

View file

@ -81,9 +81,9 @@ void DreamGenContext::doLoad(int savegameId) {
dumpPointer();
dumpTextLine();
RectWithCallback loadlist[] = {
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamGenContext::getBackToOps },
{ kOpsx+128,kOpsx+190,kOpsy+12,kOpsy+100,&DreamGenContext::actualLoad },
{ kOpsx+2,kOpsx+92,kOpsy+4,kOpsy+81,&DreamGenContext::selectSlot },
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps },
{ kOpsx+128,kOpsx+190,kOpsy+12,kOpsy+100,&DreamBase::actualLoad },
{ kOpsx+2,kOpsx+92,kOpsy+4,kOpsy+81,&DreamBase::selectSlot },
{ 0,320,0,200,&DreamBase::blank },
{ 0xFFFF,0,0,0,0 }
};
@ -177,9 +177,9 @@ void DreamGenContext::saveGame() {
dumpTextLine();
RectWithCallback savelist[] = {
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamGenContext::getBackToOps },
{ kOpsx+128,kOpsx+190,kOpsy+12,kOpsy+100,&DreamGenContext::actualSave },
{ kOpsx+2,kOpsx+92,kOpsy+4,kOpsy+81,&DreamGenContext::selectSlot },
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps },
{ kOpsx+128,kOpsx+190,kOpsy+12,kOpsy+100,&DreamBase::actualSave },
{ kOpsx+2,kOpsx+92,kOpsy+4,kOpsy+81,&DreamBase::selectSlot },
{ 0,320,0,200,&DreamBase::blank },
{ 0xFFFF,0,0,0,0 }
};
@ -268,7 +268,7 @@ void DreamGenContext::doSaveLoad() {
workToScreenCPP();
RectWithCallback opsList[] = {
{ kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamGenContext::getBackFromOps },
{ kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamBase::getBackFromOps },
{ kOpsx+10,kOpsx+77,kOpsy+10,kOpsy+59,&DreamBase::DOSReturn },
{ kOpsx+128,kOpsx+190,kOpsy+16,kOpsy+100,&DreamGenContext::discOps },
{ 0,320,0,200,&DreamBase::blank },
@ -316,6 +316,27 @@ void DreamGenContext::doSaveLoad() {
data.byte(kManisoffscreen) = 0;
}
void DreamBase::getBackFromOps() {
if (data.byte(kMandead) == 2)
blank();
else
getBack1();
}
void DreamBase::getBackToOps() {
if (data.byte(kCommandtype) != 201) {
data.byte(kCommandtype) = 201;
commandOnly(42);
}
if (data.word(kMousebutton) != data.word(kOldbutton)) {
if (data.word(kMousebutton) & 1) {
oldToNames();
data.byte(kGetback) = 2;
}
}
}
void DreamBase::showMainOps() {
showFrame(tempGraphics(), kOpsx+10, kOpsy+10, 8, 0);
showFrame(tempGraphics(), kOpsx+59, kOpsy+30, 7, 0);
@ -329,7 +350,46 @@ void DreamBase::showDiscOps() {
showFrame(tempGraphics(), kOpsx+176+2, kOpsy+60-4, 5, 0);
}
void DreamGenContext::actualSave() {
void DreamGenContext::discOps() {
if (data.byte(kCommandtype) != 249) {
data.byte(kCommandtype) = 249;
commandOnly(43);
}
if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
return;
scanForNames();
data.byte(kLoadingorsave) = 2;
showOpBox();
showDiscOps();
data.byte(kCurrentslot) = 0;
workToScreenM();
data.byte(kGetback) = 0;
RectWithCallback discOpsList[] = {
{ kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamGenContext::loadGame },
{ kOpsx+10,kOpsx+79,kOpsy+10,kOpsy+59,&DreamGenContext::saveGame },
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps },
{ 0,320,0,200,&DreamBase::blank },
{ 0xFFFF,0,0,0,0 }
};
do {
if (data.byte(kQuitrequested) != 0)
return; // quitdiscops
delPointer();
readMouse();
showPointer();
vSync();
dumpPointer();
dumpTextLine();
checkCoords(discOpsList);
} while (!data.byte(kGetback));
}
void DreamBase::actualSave() {
if (data.byte(kCommandtype) != 222) {
data.byte(kCommandtype) = 222;
commandOnly(44);
@ -356,7 +416,7 @@ void DreamGenContext::actualSave() {
data.byte(kGetback) = 4;
}
void DreamGenContext::actualLoad() {
void DreamBase::actualLoad() {
if (data.byte(kCommandtype) != 221) {
data.byte(kCommandtype) = 221;
commandOnly(41);
@ -584,7 +644,7 @@ void DreamGenContext::loadOld() {
data.byte(kGetback) = 0;
}
void DreamGenContext::loadSaveBox() {
void DreamBase::loadSaveBox() {
loadIntoTemp("DREAMWEB.G08");
}
@ -612,7 +672,7 @@ void DreamBase::showNames() {
}
}
void DreamGenContext::checkInput() {
void DreamBase::checkInput() {
if (data.byte(kLoadingorsave) == 3)
return;
@ -649,7 +709,7 @@ void DreamGenContext::checkInput() {
workToScreenM();
}
void DreamGenContext::selectSlot() {
void DreamBase::selectSlot() {
if (data.byte(kCommandtype) != 244) {
data.byte(kCommandtype) = 244;
commandOnly(45);
@ -677,8 +737,41 @@ void DreamGenContext::selectSlot() {
showSaveOps();
readMouse();
showPointer();
workToScreen();
workToScreenCPP();
delPointer();
}
void DreamBase::showSlots() {
showFrame(tempGraphics(), kOpsx + 7, kOpsy + 8, 2, 0);
uint16 y = kOpsy + 11;
for (int slot = 0; slot < 7; slot++) {
if (slot == data.byte(kCurrentslot))
showFrame(tempGraphics(), kOpsx + 10, y, 3, 0);
y += 10;
}
}
void DreamBase::showOpBox() {
showFrame(tempGraphics(), kOpsx, kOpsy, 0, 0);
// CHECKME: There seem to be versions of dreamweb in which this call
// should be removed. It displays a red dot on the ops dialogs if left in.
showFrame(tempGraphics(), kOpsx, kOpsy + 55, 4, 0);
}
void DreamBase::showLoadOps() {
showFrame(tempGraphics(), kOpsx + 128 + 4, kOpsy + 12, 1, 0);
showFrame(tempGraphics(), kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
printMessage(kOpsx + 104, kOpsy + 14, 55, 101, (101 & 1));
}
void DreamBase::showSaveOps() {
showFrame(tempGraphics(), kOpsx + 128 + 4, kOpsy + 12, 1, 0);
showFrame(tempGraphics(), kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
printMessage(kOpsx + 104, kOpsy + 14, 54, 101, (101 & 1));
}
} // End of namespace DreamGen

View file

@ -1314,7 +1314,7 @@ void DreamBase::findOrMake(uint8 index, uint8 value, uint8 type) {
change->type = type;
}
void DreamGenContext::setAllChanges() {
void DreamBase::setAllChanges() {
Change *change = (Change *)getSegment(data.word(kBuffers)).ptr(kListofchanges, sizeof(Change));
for (; change->index != 0xff; ++change)
if (change->location == data.byte(kReallocation))
@ -2309,7 +2309,7 @@ void DreamBase::loadRoomData(const Room &room, bool skipDat) {
engine->closeFile();
}
void DreamGenContext::restoreAll() {
void DreamBase::restoreAll() {
const Room &room = g_roomData[data.byte(kLocation)];
loadRoomData(room, true);
setAllChanges();
@ -3131,27 +3131,6 @@ void DreamGenContext::newGame() {
data.byte(kGetback) = 3;
}
void DreamBase::getBackFromOps() {
if (data.byte(kMandead) == 2)
blank();
else
getBack1();
}
void DreamBase::getBackToOps() {
if (data.byte(kCommandtype) != 201) {
data.byte(kCommandtype) = 201;
commandOnly(42);
}
if (data.word(kMousebutton) != data.word(kOldbutton)) {
if (data.word(kMousebutton) & 1) {
oldToNames();
data.byte(kGetback) = 2;
}
}
}
void DreamGenContext::pickupOb(uint8 command, uint8 pos) {
data.byte(kLastinvpos) = pos;
data.byte(kObjecttype) = kFreeObjectType;
@ -3234,7 +3213,7 @@ void DreamGenContext::gettingShot() {
clearBeforeLoad();
}
void DreamGenContext::redrawMainScrn() {
void DreamBase::redrawMainScrn() {
data.word(kTimecount) = 0;
createPanel();
data.byte(kNewobs) = 0;
@ -3630,26 +3609,6 @@ void DreamBase::showArrows() {
showFrame(tempGraphics(), 280, 14, 2, 0);
}
void DreamBase::showOpBox() {
showFrame(tempGraphics(), kOpsx, kOpsy, 0, 0);
// CHECKME: There seem to be versions of dreamweb in which this call
// should be removed. It displays a red dot on the ops dialogs if left in.
showFrame(tempGraphics(), kOpsx, kOpsy + 55, 4, 0);
}
void DreamGenContext::showLoadOps() {
showFrame(tempGraphics(), kOpsx + 128 + 4, kOpsy + 12, 1, 0);
showFrame(tempGraphics(), kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
printMessage(kOpsx + 104, kOpsy + 14, 55, 101, (101 & 1));
}
void DreamGenContext::showSaveOps() {
showFrame(tempGraphics(), kOpsx + 128 + 4, kOpsy + 12, 1, 0);
showFrame(tempGraphics(), kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
printMessage(kOpsx + 104, kOpsy + 14, 54, 101, (101 & 1));
}
void DreamBase::middlePanel() {
Frame *tempSprites = (Frame *)getSegment(data.word(kTempsprites)).ptr(0, 0);
showFrame(tempSprites, 72 + 47 + 20, 0, 48, 0);
@ -3891,45 +3850,6 @@ void DreamGenContext::talk() {
}
}
void DreamGenContext::discOps() {
if (data.byte(kCommandtype) != 249) {
data.byte(kCommandtype) = 249;
commandOnly(43);
}
if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
return;
scanForNames();
data.byte(kLoadingorsave) = 2;
showOpBox();
showDiscOps();
data.byte(kCurrentslot) = 0;
workToScreenM();
data.byte(kGetback) = 0;
RectWithCallback discOpsList[] = {
{ kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamGenContext::loadGame },
{ kOpsx+10,kOpsx+79,kOpsy+10,kOpsy+59,&DreamGenContext::saveGame },
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamGenContext::getBackToOps },
{ 0,320,0,200,&DreamBase::blank },
{ 0xFFFF,0,0,0,0 }
};
do {
if (data.byte(kQuitrequested) != 0)
return; // quitdiscops
delPointer();
readMouse();
showPointer();
vSync();
dumpPointer();
dumpTextLine();
checkCoords(discOpsList);
} while (!data.byte(kGetback));
}
void DreamGenContext::hangOnPQ() {
data.byte(kGetback) = 0;
@ -4510,19 +4430,6 @@ void DreamGenContext::lookAtCard() {
putBackObStuff();
}
void DreamGenContext::showSlots() {
showFrame(tempGraphics(), kOpsx + 7, kOpsy + 8, 2, 0);
uint16 y = kOpsy + 11;
for (int slot = 0; slot < 7; slot++) {
if (slot == data.byte(kCurrentslot))
showFrame(tempGraphics(), kOpsx + 10, y, 3, 0);
y += 10;
}
}
void DreamBase::clearBuffers() {
memset(getSegment(data.word(kBuffers)).ptr(0, kLengthofbuffer), 0, kLengthofbuffer);

View file

@ -87,7 +87,6 @@
SetObject *getSetAd(uint8 index) {
return DreamBase::getSetAd(index);
}
void setAllChanges();
void deleteTaken();
bool finishedWalkingCPP();
void finishedWalking();
@ -162,9 +161,6 @@
void doLook();
void showFirstUse();
void showSecondUse();
void actualSave();
void actualLoad();
void restoreAll();
void enterSymbol();
void viewFolder();
void edensCDPlayer();
@ -221,7 +217,6 @@
void nextFolder();
void lastFolder();
void singleKey(uint8 key, uint16 x, uint16 y);
void loadSaveBox();
uint8 nextSymbol(uint8 symbol);
void showSymbol();
void enterCode(uint8 digit0, uint8 digit1, uint8 digit2, uint8 digit3);
@ -247,9 +242,6 @@
void loadIntroRoom();
void afterIntroRoom();
void gettingShot();
void redrawMainScrn();
void selectSlot();
void selectSlot2();
void allPointer();
void openYourNeighbour();
void openRyan();
@ -294,8 +286,6 @@
return DreamBase::loadSpeech(type1, idx1, type2, idx2);
}
void set16ColPalette();
void showSaveOps();
void showLoadOps();
void afterNewRoom();
void madmanRun();
void showDecisions();
@ -307,7 +297,6 @@
void hangOnPQ();
void showGun();
void endGame();
void checkInput();
void dropError();
void cantDrop();
void newPlace();
@ -341,7 +330,6 @@
void notHeldError();
void useGun();
void identifyOb();
void showSlots();
void useCashCard();
void useStereo();
void selectOb();