mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-07 10:48:43 +00:00
DREAMWEB: Reduce dependency on globals and move functions to DreamBase
This commit is contained in:
parent
6f85de6b6e
commit
cb3eee8635
@ -222,6 +222,16 @@ public:
|
||||
void reExFromInv();
|
||||
void swapWithInv();
|
||||
void transferText(uint8 from, uint8 to);
|
||||
void pickupConts(uint8 from, uint8 containerEx);
|
||||
byte transferToEx(uint8 from);
|
||||
void swapWithOpen();
|
||||
void outOfOpen();
|
||||
void inToInv();
|
||||
void outOfInv();
|
||||
bool checkObjectSize();
|
||||
void useOpened();
|
||||
void setPickup();
|
||||
void selectOpenOb();
|
||||
|
||||
// from pathfind.cpp
|
||||
void turnPathOn(uint8 param);
|
||||
@ -576,6 +586,10 @@ public:
|
||||
void showSymbol();
|
||||
void updateSymbolTop();
|
||||
void updateSymbolBot();
|
||||
void pickupOb(uint8 command, uint8 pos);
|
||||
void errorMessage1();
|
||||
void errorMessage2();
|
||||
void errorMessage3();
|
||||
|
||||
// from talk.cpp
|
||||
void talk();
|
||||
@ -600,6 +614,7 @@ public:
|
||||
void loadIntroRoom();
|
||||
void set16ColPalette();
|
||||
void realCredits();
|
||||
uint8 getExPos();
|
||||
|
||||
// from use.cpp
|
||||
void placeFreeObject(uint8 index);
|
||||
|
@ -163,8 +163,8 @@ void DreamGenContext::examineOb(bool examineAgain) {
|
||||
RectWithCallback<DreamGenContext> examList[] = {
|
||||
{ 273,320,157,198,&DreamBase::getBackFromOb },
|
||||
{ 260,300,0,44,&DreamGenContext::useObject },
|
||||
{ 210,254,0,44,&DreamGenContext::selectOpenOb },
|
||||
{ 144,176,64,96,&DreamGenContext::setPickup },
|
||||
{ 210,254,0,44,&DreamBase::selectOpenOb },
|
||||
{ 144,176,64,96,&DreamBase::setPickup },
|
||||
{ 0,50,50,200,&DreamBase::examineInventory },
|
||||
{ 0,320,0,200,&DreamBase::blank },
|
||||
{ 0xFFFF,0,0,0,0 }
|
||||
@ -174,12 +174,12 @@ void DreamGenContext::examineOb(bool examineAgain) {
|
||||
}
|
||||
case 1: {
|
||||
// Note: This table contains the non-constant _openChangeSize!
|
||||
RectWithCallback<DreamGenContext> invList1[] = {
|
||||
RectWithCallback<DreamBase> invList1[] = {
|
||||
{ 273,320,157,198,&DreamBase::getBackFromOb },
|
||||
{ 255,294,0,24,&DreamGenContext::dropObject },
|
||||
{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage },
|
||||
{ kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened },
|
||||
{ kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamGenContext::inToInv },
|
||||
{ 255,294,0,24,&DreamBase::dropObject },
|
||||
{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage },
|
||||
{ kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamBase::useOpened },
|
||||
{ kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamBase::inToInv },
|
||||
{ 0,320,0,200,&DreamBase::blank },
|
||||
{ 0xFFFF,0,0,0,0 }
|
||||
};
|
||||
@ -189,7 +189,7 @@ void DreamGenContext::examineOb(bool examineAgain) {
|
||||
default: {
|
||||
RectWithCallback<DreamGenContext> withList1[] = {
|
||||
{ 273,320,157,198,&DreamBase::getBackFromOb },
|
||||
{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage },
|
||||
{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage },
|
||||
{ kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb },
|
||||
{ 0,320,0,200,&DreamBase::blank },
|
||||
{ 0xFFFF,0,0,0,0 }
|
||||
@ -383,7 +383,7 @@ void DreamGenContext::selectOb() {
|
||||
useRoutine();
|
||||
}
|
||||
|
||||
void DreamGenContext::setPickup() {
|
||||
void DreamBase::setPickup() {
|
||||
if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) {
|
||||
// Object types 1 and 3 are excluded, so the resulting object is a DynObject
|
||||
uint8 dummy;
|
||||
@ -414,9 +414,9 @@ void DreamGenContext::setPickup() {
|
||||
data.byte(kInvopen) = 2;
|
||||
|
||||
if (data.byte(kObjecttype) != kExObjectType) {
|
||||
data.byte(kItemframe) = data.byte(kCommand);
|
||||
assert(data.byte(kObjecttype) == kFreeObjectType);
|
||||
data.byte(kOpenedob) = 255;
|
||||
data.byte(kItemframe) = transferToEx();
|
||||
data.byte(kItemframe) = transferToEx(data.byte(kCommand));
|
||||
data.byte(kObjecttype) = kExObjectType;
|
||||
DynObject *object = getExAd(data.byte(kItemframe));
|
||||
object->mapad[0] = 20;
|
||||
@ -502,7 +502,7 @@ void DreamBase::removeObFromInv() {
|
||||
deleteExObject(data.byte(kCommand));
|
||||
}
|
||||
|
||||
void DreamGenContext::inToInv() {
|
||||
void DreamBase::inToInv() {
|
||||
if (!data.byte(kPickup)) {
|
||||
outOfInv();
|
||||
return;
|
||||
@ -542,7 +542,7 @@ void DreamGenContext::inToInv() {
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::outOfInv() {
|
||||
void DreamBase::outOfInv() {
|
||||
ObjectRef subject = findInvPos();
|
||||
|
||||
if (subject._index == 255) {
|
||||
@ -713,7 +713,7 @@ void DreamBase::dropObject() {
|
||||
object->currentLocation = data.byte(kReallocation);
|
||||
}
|
||||
|
||||
bool DreamGenContext::checkObjectSize() {
|
||||
bool DreamBase::checkObjectSize() {
|
||||
byte containerSize = getOpenedSlotSize();
|
||||
DynObject *object = getEitherAdCPP();
|
||||
// If there is no size defined for the object in the editor, set its size
|
||||
@ -742,7 +742,7 @@ bool DreamGenContext::checkObjectSize() {
|
||||
return false;
|
||||
}
|
||||
|
||||
void DreamGenContext::selectOpenOb() {
|
||||
void DreamBase::selectOpenOb() {
|
||||
uint8 slotSize, slotCount;
|
||||
getAnyAd(&slotSize, &slotCount);
|
||||
if (slotCount == 255) {
|
||||
@ -823,7 +823,7 @@ void DreamBase::swapWithInv() {
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::useOpened() {
|
||||
void DreamBase::useOpened() {
|
||||
if (data.byte(kOpenedob) == 255)
|
||||
return; // cannot use opened object
|
||||
|
||||
@ -887,7 +887,7 @@ void DreamGenContext::useOpened() {
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::outOfOpen() {
|
||||
void DreamBase::outOfOpen() {
|
||||
if (data.byte(kOpenedob) == 255)
|
||||
return; // cannot use opened object
|
||||
|
||||
@ -921,7 +921,8 @@ void DreamGenContext::outOfOpen() {
|
||||
data.byte(kItemframe) = objectId._index;
|
||||
|
||||
if (data.byte(kObjecttype) != kExObjectType) {
|
||||
data.byte(kItemframe) = transferToEx();
|
||||
assert(objectId._type == kFreeObjectType);
|
||||
data.byte(kItemframe) = transferToEx(objectId._index);
|
||||
data.byte(kObjecttype) = kExObjectType;
|
||||
}
|
||||
|
||||
@ -938,7 +939,7 @@ void DreamGenContext::outOfOpen() {
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::swapWithOpen() {
|
||||
void DreamBase::swapWithOpen() {
|
||||
ObjectRef subject;
|
||||
subject._type = data.byte(kObjecttype);
|
||||
subject._index = data.byte(kItemframe);
|
||||
@ -975,7 +976,8 @@ void DreamGenContext::swapWithOpen() {
|
||||
data.byte(kItemframe) = objectId._index;
|
||||
|
||||
if (data.byte(kObjecttype) != kExObjectType) {
|
||||
data.byte(kItemframe) = transferToEx();
|
||||
assert(objectId._type == kFreeObjectType);
|
||||
data.byte(kItemframe) = transferToEx(objectId._index);
|
||||
data.byte(kObjecttype) = kExObjectType;
|
||||
}
|
||||
|
||||
@ -1011,30 +1013,30 @@ ObjectRef DreamBase::findOpenPos() {
|
||||
return _openInvList[pos];
|
||||
}
|
||||
|
||||
byte DreamGenContext::transferToEx() {
|
||||
byte DreamBase::transferToEx(uint8 from) {
|
||||
emergencyPurge();
|
||||
|
||||
DynObject *exObject = getExPos(); // Also sets es:di
|
||||
byte pos = data.byte(kExpos);
|
||||
byte pos = getExPos();
|
||||
DynObject *exObject = getExAd(pos);
|
||||
|
||||
DynObject *freeObject = getFreeAd(data.byte(kItemframe));
|
||||
DynObject *freeObject = getFreeAd(from);
|
||||
|
||||
memcpy(exObject, freeObject, sizeof(DynObject));
|
||||
|
||||
exObject->currentLocation = data.byte(kReallocation);
|
||||
exObject->initialLocation = data.byte(kReallocation);
|
||||
exObject->index = data.byte(kItemframe);
|
||||
exObject->index = from;
|
||||
exObject->mapad[0] = 4;
|
||||
exObject->mapad[1] = 255;
|
||||
exObject->mapad[2] = data.byte(kLastinvpos);
|
||||
|
||||
transferFrame(data.byte(kItemframe), pos, 0);
|
||||
transferFrame(data.byte(kItemframe), pos, 1);
|
||||
transferText(data.byte(kItemframe), pos);
|
||||
transferFrame(from, pos, 0);
|
||||
transferFrame(from, pos, 1);
|
||||
transferText(from, pos);
|
||||
|
||||
freeObject->mapad[0] = 254;
|
||||
|
||||
pickupConts();
|
||||
pickupConts(from, pos);
|
||||
|
||||
return pos;
|
||||
}
|
||||
@ -1082,35 +1084,33 @@ void DreamBase::findAllOpen() {
|
||||
}
|
||||
}
|
||||
|
||||
void DreamGenContext::pickupConts() {
|
||||
assert(data.byte(kObjecttype) == kFreeObjectType);
|
||||
const DynObject *obj = getFreeAd(data.byte(kItemframe));
|
||||
void DreamBase::pickupConts(uint8 from, uint8 containerEx) {
|
||||
const DynObject *obj = getFreeAd(from);
|
||||
|
||||
if (obj->slotCount == 255)
|
||||
return; // not openable
|
||||
|
||||
uint8 expos = data.byte(kExpos);
|
||||
|
||||
for (uint8 index = 0; index < 80; ++index) {
|
||||
DynObject *freeObj = getFreeAd(index);
|
||||
|
||||
if (freeObj->mapad[0] != data.byte(kObjecttype))
|
||||
if (freeObj->mapad[0] != kFreeObjectType)
|
||||
continue;
|
||||
if (freeObj->mapad[1] != data.byte(kItemframe))
|
||||
if (freeObj->mapad[1] != from)
|
||||
continue;
|
||||
|
||||
DynObject *exObj = getExPos(); // Also sets es:di to exObj
|
||||
uint8 pos = getExPos();
|
||||
DynObject *exObj = getExAd(pos);
|
||||
|
||||
memcpy(exObj, freeObj, sizeof(DynObject));
|
||||
exObj->currentLocation = data.byte(kReallocation);
|
||||
exObj->initialLocation = data.byte(kReallocation);
|
||||
exObj->index = index;
|
||||
exObj->mapad[0] = 4; // kExObjectType?
|
||||
exObj->mapad[1] = expos;
|
||||
exObj->mapad[1] = containerEx;
|
||||
|
||||
transferFrame(index, data.byte(kExpos), 0);
|
||||
transferFrame(index, data.byte(kExpos), 1);
|
||||
transferText(index, data.byte(kExpos));
|
||||
transferFrame(index, pos, 0);
|
||||
transferFrame(index, pos, 1);
|
||||
transferText(index, pos);
|
||||
|
||||
freeObj->mapad[0] = 0xFF;
|
||||
}
|
||||
|
@ -1364,19 +1364,13 @@ void DreamBase::deleteTaken() {
|
||||
}
|
||||
}
|
||||
|
||||
DynObject *DreamGenContext::getExPos() {
|
||||
es = data.word(kExtras);
|
||||
uint8 DreamBase::getExPos() {
|
||||
DynObject *objects = (DynObject *)getSegment(data.word(kExtras)).ptr(kExdata, sizeof(DynObject));
|
||||
for (size_t i = 0; i < kNumexobjects; ++i) {
|
||||
if (objects[i].mapad[0] == 0xff) {
|
||||
data.byte(kExpos) = i;
|
||||
di = kExdata + i * sizeof(DynObject);
|
||||
return &objects[i];
|
||||
}
|
||||
if (objects[i].mapad[0] == 0xff)
|
||||
return i;
|
||||
}
|
||||
data.byte(kExpos) = kNumexobjects;
|
||||
di = kExdata + kNumexobjects * sizeof(DynObject);
|
||||
return 0;
|
||||
error("Out of Ex object positions");
|
||||
}
|
||||
|
||||
void DreamBase::placeSetObject(uint8 index) {
|
||||
@ -2717,14 +2711,14 @@ void DreamBase::newGame() {
|
||||
data.byte(kGetback) = 3;
|
||||
}
|
||||
|
||||
void DreamGenContext::pickupOb(uint8 command, uint8 pos) {
|
||||
void DreamBase::pickupOb(uint8 command, uint8 pos) {
|
||||
data.byte(kLastinvpos) = pos;
|
||||
data.byte(kObjecttype) = kFreeObjectType;
|
||||
data.byte(kItemframe) = command;
|
||||
data.byte(kCommand) = command;
|
||||
//uint8 dummy;
|
||||
//getAnyAd(&dummy, &dummy); // was in the original source, seems useless here
|
||||
transferToEx();
|
||||
transferToEx(command);
|
||||
}
|
||||
|
||||
void DreamGenContext::initialInv() {
|
||||
@ -2870,7 +2864,7 @@ void DreamBase::delEverything() {
|
||||
}
|
||||
}
|
||||
|
||||
void DreamGenContext::errorMessage1() {
|
||||
void DreamBase::errorMessage1() {
|
||||
delPointer();
|
||||
printMessage(76, 21, 58, 240, (240 & 1));
|
||||
readMouse();
|
||||
@ -2888,7 +2882,7 @@ void DreamGenContext::errorMessage1() {
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::errorMessage2() {
|
||||
void DreamBase::errorMessage2() {
|
||||
data.byte(kCommandtype) = 255;
|
||||
delPointer();
|
||||
printMessage(76, 21, 59, 240, (240 & 1));
|
||||
@ -2907,7 +2901,7 @@ void DreamGenContext::errorMessage2() {
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::errorMessage3() {
|
||||
void DreamBase::errorMessage3() {
|
||||
delPointer();
|
||||
printMessage(76, 21, 60, 240, (240 & 1));
|
||||
workToScreenM();
|
||||
@ -3606,7 +3600,6 @@ void DreamBase::clearChanges() {
|
||||
|
||||
memcpy(data.ptr(kStartvars, kLengthofvars), _initialVars, kLengthofvars);
|
||||
|
||||
data.byte(kExpos) = 0;
|
||||
data.word(kExframepos) = 0;
|
||||
data.word(kExtextpos) = 0;
|
||||
|
||||
|
@ -66,7 +66,6 @@
|
||||
void walkAndExamine();
|
||||
void obName(uint8 command, uint8 commandType);
|
||||
|
||||
DynObject *getExPos();
|
||||
bool checkIfSet(uint8 x, uint8 y);
|
||||
void obToInv();
|
||||
void obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) {
|
||||
@ -103,13 +102,9 @@
|
||||
void inventory();
|
||||
void mainScreen();
|
||||
void zoomOnOff();
|
||||
void pickupOb(uint8 command, uint8 pos);
|
||||
void initialInv();
|
||||
void walkIntoRoom();
|
||||
void allPointer();
|
||||
void errorMessage1();
|
||||
void errorMessage2();
|
||||
void errorMessage3();
|
||||
void afterNewRoom();
|
||||
void madmanRun();
|
||||
void decide();
|
||||
@ -117,21 +112,11 @@
|
||||
void triggerMessage(uint16 index);
|
||||
void processTrigger();
|
||||
bool execCommand();
|
||||
bool checkObjectSize();
|
||||
void identifyOb();
|
||||
void selectOb();
|
||||
void setPickup();
|
||||
void getKeyAndLogo();
|
||||
void signOn();
|
||||
void inToInv();
|
||||
void outOfInv();
|
||||
void selectOpenOb();
|
||||
void useOpened();
|
||||
void outOfOpen();
|
||||
void swapWithOpen();
|
||||
void searchForFiles(uint16 segment);
|
||||
byte transferToEx();
|
||||
void dirCom();
|
||||
void pickupConts();
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user