Skip to content

Commit

Permalink
DREAMWEB: Don't use Madeuproomdat as a global when not necessary
Browse files Browse the repository at this point in the history
  • Loading branch information
wjp committed Dec 3, 2011
1 parent 1585684 commit a64c89e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 14 deletions.
37 changes: 24 additions & 13 deletions engines/dreamweb/saveload.cpp
Expand Up @@ -78,7 +78,7 @@ void DreamGenContext::doLoad() {
};
checkCoords(loadlist);
if (data.byte(kGetback) == 1)
break;
break; // This signalled that actualLoad loaded a game
if (data.byte(kGetback) == 2)
return; // "quitloaded"
}
Expand Down Expand Up @@ -106,6 +106,10 @@ void DreamGenContext::doLoad() {
data.byte(kGetback) = 1;
}

// If we reach this point, loadPosition() has just been called.
// Note: Among other things, it will have filled kMadeuproomdat.


// kTempgraphics might not have been allocated if we bypassed all menus
if (data.word(kTempgraphics) != 0xFFFF)
getRidOfTemp();
Expand Down Expand Up @@ -307,17 +311,16 @@ void DreamGenContext::actualLoad() {

void DreamGenContext::savePosition(unsigned int slot, const uint8 *descbuf) {

const Room *currentRoom = (const Room *)cs.ptr(kRoomdata + sizeof(Room)*data.byte(kLocation), sizeof(Room));
Room *madeUpRoom = (Room *)cs.ptr(kMadeuproomdat, sizeof(Room));
const Room &currentRoom = g_roomData[data.byte(kLocation)];

*madeUpRoom = *currentRoom;
madeUpRoom->roomsSample = data.byte(kRoomssample);
madeUpRoom->mapX = data.byte(kMapx);
madeUpRoom->mapY = data.byte(kMapy);
madeUpRoom->liftFlag = data.byte(kLiftflag);
madeUpRoom->b21 = data.byte(kManspath);
madeUpRoom->facing = data.byte(kFacing);
madeUpRoom->b27 = 255;
Room madeUpRoom = currentRoom;
madeUpRoom.roomsSample = data.byte(kRoomssample);
madeUpRoom.mapX = data.byte(kMapx);
madeUpRoom.mapY = data.byte(kMapy);
madeUpRoom.liftFlag = data.byte(kLiftflag);
madeUpRoom.b21 = data.byte(kManspath);
madeUpRoom.facing = data.byte(kFacing);
madeUpRoom.b27 = 255;

openForSave(slot);

Expand All @@ -342,7 +345,11 @@ void DreamGenContext::savePosition(unsigned int slot, const uint8 *descbuf) {
engine->writeToSaveFile(data.ptr(kStartvars, len[1]), len[1]);
engine->writeToSaveFile(getSegment(data.word(kExtras)).ptr(kExframedata, len[2]), len[2]);
engine->writeToSaveFile(getSegment(data.word(kBuffers)).ptr(kListofchanges, len[3]), len[3]);
engine->writeToSaveFile(data.ptr(kMadeuproomdat, len[4]), len[4]);

// len[4] == 48, which is sizeof(Room) plus 16 for 'Roomscango'
engine->writeToSaveFile((const uint8 *)&madeUpRoom, sizeof(Room));
engine->writeToSaveFile(data.ptr(kRoomscango, 16), 16);

engine->writeToSaveFile(data.ptr(kReelroutines, len[5]), len[5]);
closeFile();
}
Expand Down Expand Up @@ -374,7 +381,11 @@ void DreamGenContext::loadPosition(unsigned int slot) {
engine->readFromSaveFile(data.ptr(kStartvars, len[1]), len[1]);
engine->readFromSaveFile(getSegment(data.word(kExtras)).ptr(kExframedata, len[2]), len[2]);
engine->readFromSaveFile(getSegment(data.word(kBuffers)).ptr(kListofchanges, len[3]), len[3]);
engine->readFromSaveFile(data.ptr(kMadeuproomdat, len[4]), len[4]);

// len[4] == 48, which is sizeof(Room) plus 16 for 'Roomscango'
engine->readFromSaveFile(data.ptr(kMadeuproomdat, sizeof(Room)), sizeof(Room));
engine->readFromSaveFile(data.ptr(kRoomscango, 16), 16);

engine->readFromSaveFile(cs.ptr(kReelroutines, len[5]), len[5]);

closeFile();
Expand Down
2 changes: 1 addition & 1 deletion engines/dreamweb/structs.h
Expand Up @@ -208,7 +208,7 @@ struct Room {
uint8 b30;
uint8 realLocation;
};
extern const Room g_RoomData[];
extern const Room g_roomData[];

struct Rain {
uint8 x;
Expand Down

0 comments on commit a64c89e

Please sign in to comment.