mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
DREAMWEB: Create MapFlags struct, remove backdrops segment
This commit is contained in:
@@ -241,6 +241,9 @@ p = parser(skip_binary_data = [
|
||||
'ch1blockstocopy',
|
||||
'sounddata',
|
||||
'sounddata2',
|
||||
'mapstore',
|
||||
'mapdata',
|
||||
'backdrops',
|
||||
# vgagrafx.asm
|
||||
'cityname',
|
||||
'extragraphics1',
|
||||
@@ -284,7 +287,6 @@ p = parser(skip_binary_data = [
|
||||
'endtextname',
|
||||
'gungraphic',
|
||||
'monkface',
|
||||
'mapstore',
|
||||
])
|
||||
p.strip_path = 3
|
||||
context = p.parse('dreamweb/dreamweb.asm')
|
||||
|
||||
@@ -28,7 +28,6 @@ void DreamBase::doBlocks() {
|
||||
uint16 dstOffset = data.word(kMapady) * 320 + data.word(kMapadx);
|
||||
uint16 mapOffset = kMap + data.byte(kMapy) * kMapwidth + data.byte(kMapx);
|
||||
const uint8 *mapData = _mapData + mapOffset;
|
||||
const uint8 *blocks = getSegment(data.word(kBackdrop)).ptr(kBlocks, 0);
|
||||
uint8 *dstBuffer = workspace() + dstOffset;
|
||||
|
||||
for (size_t i = 0; i < 10; ++i) {
|
||||
@@ -36,7 +35,7 @@ void DreamBase::doBlocks() {
|
||||
uint16 blockType = mapData[j];
|
||||
if (blockType != 0) {
|
||||
uint8 *dst = dstBuffer + i * 320 * 16 + j * 16;
|
||||
const uint8 *block = blocks + blockType * 256;
|
||||
const uint8 *block = _backdropBlocks + blockType * 256;
|
||||
for (size_t k = 0; k < 4; ++k) {
|
||||
memcpy(dst, block, 16);
|
||||
block += 16;
|
||||
@@ -162,17 +161,17 @@ void DreamBase::showAllObs() {
|
||||
}
|
||||
}
|
||||
|
||||
bool DreamBase::addAlong(const uint8 *mapFlags) {
|
||||
static bool addAlong(const MapFlag *mapFlags) {
|
||||
for (size_t i = 0; i < 11; ++i) {
|
||||
if (mapFlags[3 * i] != 0)
|
||||
if (mapFlags[i]._flag != 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DreamBase::addLength(const uint8 *mapFlags) {
|
||||
static bool addLength(const MapFlag *mapFlags) {
|
||||
for (size_t i = 0; i < 10; ++i) {
|
||||
if (mapFlags[3 * 11 * i] != 0)
|
||||
if (mapFlags[11 * i]._flag != 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -180,19 +179,19 @@ bool DreamBase::addLength(const uint8 *mapFlags) {
|
||||
|
||||
void DreamBase::getDimension(uint8 *mapXstart, uint8 *mapYstart, uint8 *mapXsize, uint8 *mapYsize) {
|
||||
uint8 yStart = 0;
|
||||
while (! addAlong(_mapFlags + 3 * 11 * yStart))
|
||||
while (! addAlong(_mapFlags + 11 * yStart))
|
||||
++yStart;
|
||||
|
||||
uint8 xStart = 0;
|
||||
while (! addLength(_mapFlags + 3 * xStart))
|
||||
while (! addLength(_mapFlags + xStart))
|
||||
++xStart;
|
||||
|
||||
uint8 yEnd = 10;
|
||||
while (! addAlong(_mapFlags + 3 * 11 * (yEnd - 1)))
|
||||
while (! addAlong(_mapFlags + 11 * (yEnd - 1)))
|
||||
--yEnd;
|
||||
|
||||
uint8 xEnd = 11;
|
||||
while (! addLength(_mapFlags + 3 * (xEnd - 1)))
|
||||
while (! addLength(_mapFlags + (xEnd - 1)))
|
||||
--xEnd;
|
||||
|
||||
*mapXstart = xStart;
|
||||
@@ -241,18 +240,17 @@ void DreamBase::showAllFree() {
|
||||
}
|
||||
|
||||
void DreamBase::drawFlags() {
|
||||
uint8 *mapFlags = _mapFlags;
|
||||
MapFlag *mapFlag = _mapFlags;
|
||||
uint16 mapOffset = kMap + data.byte(kMapy) * kMapwidth + data.byte(kMapx);
|
||||
const uint8 *mapData = _mapData + mapOffset;
|
||||
const uint8 *backdropFlags = getSegment(data.word(kBackdrop)).ptr(kFlags, 0);
|
||||
|
||||
for (size_t i = 0; i < 10; ++i) {
|
||||
for (size_t j = 0; j < 11; ++j) {
|
||||
uint8 tile = mapData[i * kMapwidth + j];
|
||||
mapFlags[0] = backdropFlags[2 * tile + 0];
|
||||
mapFlags[1] = backdropFlags[2 * tile + 1];
|
||||
mapFlags[2] = tile;
|
||||
mapFlags += 3;
|
||||
mapFlag->_flag = _backdropFlags[tile]._flag;
|
||||
mapFlag->_flagEx = _backdropFlags[tile]._flagEx;
|
||||
mapFlag->_type = tile;
|
||||
mapFlag++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,8 @@ protected:
|
||||
DreamWeb::DreamWebEngine *engine;
|
||||
|
||||
// from backdrop.cpp
|
||||
uint8 *_backdropBlocks;
|
||||
BackdropMapFlag _backdropFlags[96];
|
||||
uint8 _mapData[kLengthOfMap + 32];
|
||||
|
||||
// from keypad.cpp
|
||||
@@ -103,7 +105,7 @@ protected:
|
||||
ObjectRef _openInvList[16];
|
||||
ObjectRef _ryanInvList[30];
|
||||
uint8 _pointerBack[32*32];
|
||||
uint8 _mapFlags[11*10*3];
|
||||
MapFlag _mapFlags[11*10];
|
||||
uint8 _startPal[3*256];
|
||||
uint8 _endPal[3*256];
|
||||
uint8 _mainPal[3*256];
|
||||
@@ -137,8 +139,6 @@ public:
|
||||
void calcFrFrame(const Frame *frameBase, uint16 frameNum, uint8* width, uint8* height, uint16 x, uint16 y, ObjPos *objPos);
|
||||
void makeBackOb(SetObject *objData, uint16 x, uint16 y);
|
||||
void showAllObs();
|
||||
bool addAlong(const uint8 *mapFlags);
|
||||
bool addLength(const uint8 *mapFlags);
|
||||
void getDimension(uint8 *mapXstart, uint8 *mapYstart, uint8 *mapXsize, uint8 *mapYsize);
|
||||
void calcMapAd();
|
||||
void showAllFree();
|
||||
|
||||
@@ -65,15 +65,15 @@ void DreamGenContext::__start() {
|
||||
//0x0100: .... .... .... ....
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
//0x0110: .... .... .... ....
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
//0x0120: .... .... .... ....
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
//0x0130: .... .... .... ....
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
//0x0140: .... .... .... ....
|
||||
0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
//0x0150: .... .... .... ....
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, };
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, };
|
||||
ds.assign(src, src + sizeof(src));
|
||||
dreamweb();
|
||||
}
|
||||
|
||||
+42
-43
@@ -254,49 +254,48 @@ static const uint16 kWorkspace = 282;
|
||||
static const uint16 kCharset1 = 284;
|
||||
static const uint16 kMainsprites = 286;
|
||||
static const uint16 kBackdrop = 288;
|
||||
static const uint16 kMapdata = 290;
|
||||
static const uint16 kRecordspace = 292;
|
||||
static const uint16 kFreedat = 294;
|
||||
static const uint16 kSetdat = 296;
|
||||
static const uint16 kReel1 = 298;
|
||||
static const uint16 kReel2 = 300;
|
||||
static const uint16 kReel3 = 302;
|
||||
static const uint16 kRoomdesc = 304;
|
||||
static const uint16 kFreedesc = 306;
|
||||
static const uint16 kSetdesc = 308;
|
||||
static const uint16 kBlockdesc = 310;
|
||||
static const uint16 kSetframes = 312;
|
||||
static const uint16 kFreeframes = 314;
|
||||
static const uint16 kPeople = 316;
|
||||
static const uint16 kReels = 318;
|
||||
static const uint16 kCommandtext = 320;
|
||||
static const uint16 kPuzzletext = 322;
|
||||
static const uint16 kTraveltext = 324;
|
||||
static const uint16 kTempgraphics = 326;
|
||||
static const uint16 kTempgraphics2 = 328;
|
||||
static const uint16 kTempgraphics3 = 330;
|
||||
static const uint16 kTempsprites = 332;
|
||||
static const uint16 kTextfile1 = 334;
|
||||
static const uint16 kTextfile2 = 336;
|
||||
static const uint16 kTextfile3 = 338;
|
||||
static const uint16 kBlinkframe = 340;
|
||||
static const uint16 kBlinkcount = 341;
|
||||
static const uint16 kReasseschanges = 342;
|
||||
static const uint16 kPointerspath = 343;
|
||||
static const uint16 kManspath = 344;
|
||||
static const uint16 kPointerfirstpath = 345;
|
||||
static const uint16 kFinaldest = 346;
|
||||
static const uint16 kDestination = 347;
|
||||
static const uint16 kLinestartx = 348;
|
||||
static const uint16 kLinestarty = 350;
|
||||
static const uint16 kLineendx = 352;
|
||||
static const uint16 kLineendy = 354;
|
||||
static const uint16 kLinepointer = 356;
|
||||
static const uint16 kLinedirection = 357;
|
||||
static const uint16 kLinelength = 358;
|
||||
static const uint16 kCh0playing = 359;
|
||||
static const uint16 kCh0repeat = 360;
|
||||
static const uint16 kCh1playing = 361;
|
||||
static const uint16 kRecordspace = 290;
|
||||
static const uint16 kFreedat = 292;
|
||||
static const uint16 kSetdat = 294;
|
||||
static const uint16 kReel1 = 296;
|
||||
static const uint16 kReel2 = 298;
|
||||
static const uint16 kReel3 = 300;
|
||||
static const uint16 kRoomdesc = 302;
|
||||
static const uint16 kFreedesc = 304;
|
||||
static const uint16 kSetdesc = 306;
|
||||
static const uint16 kBlockdesc = 308;
|
||||
static const uint16 kSetframes = 310;
|
||||
static const uint16 kFreeframes = 312;
|
||||
static const uint16 kPeople = 314;
|
||||
static const uint16 kReels = 316;
|
||||
static const uint16 kCommandtext = 318;
|
||||
static const uint16 kPuzzletext = 320;
|
||||
static const uint16 kTraveltext = 322;
|
||||
static const uint16 kTempgraphics = 324;
|
||||
static const uint16 kTempgraphics2 = 326;
|
||||
static const uint16 kTempgraphics3 = 328;
|
||||
static const uint16 kTempsprites = 330;
|
||||
static const uint16 kTextfile1 = 332;
|
||||
static const uint16 kTextfile2 = 334;
|
||||
static const uint16 kTextfile3 = 336;
|
||||
static const uint16 kBlinkframe = 338;
|
||||
static const uint16 kBlinkcount = 339;
|
||||
static const uint16 kReasseschanges = 340;
|
||||
static const uint16 kPointerspath = 341;
|
||||
static const uint16 kManspath = 342;
|
||||
static const uint16 kPointerfirstpath = 343;
|
||||
static const uint16 kFinaldest = 344;
|
||||
static const uint16 kDestination = 345;
|
||||
static const uint16 kLinestartx = 346;
|
||||
static const uint16 kLinestarty = 348;
|
||||
static const uint16 kLineendx = 350;
|
||||
static const uint16 kLineendy = 352;
|
||||
static const uint16 kLinepointer = 354;
|
||||
static const uint16 kLinedirection = 355;
|
||||
static const uint16 kLinelength = 356;
|
||||
static const uint16 kCh0playing = 357;
|
||||
static const uint16 kCh0repeat = 358;
|
||||
static const uint16 kCh1playing = 359;
|
||||
static const uint16 kBlocktextdat = (0);
|
||||
static const uint16 kPersonframes = (0);
|
||||
static const uint16 kDebuglevel1 = (0);
|
||||
|
||||
@@ -539,10 +539,10 @@ void DreamBase::moveMap(uint8 param) {
|
||||
void DreamBase::checkOne(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uint8 *type, uint8 *flagX, uint8 *flagY) {
|
||||
*flagX = x / 16;
|
||||
*flagY = y / 16;
|
||||
const uint8 *tileData = &_mapFlags[(*flagY * 11 + *flagX) * 3];
|
||||
*flag = tileData[0];
|
||||
*flagEx = tileData[1];
|
||||
*type = tileData[2];
|
||||
const MapFlag &tileData = _mapFlags[*flagY * 11 + *flagX];
|
||||
*flag = tileData._flag;
|
||||
*flagEx = tileData._flagEx;
|
||||
*type = tileData._type;
|
||||
}
|
||||
|
||||
uint8 DreamBase::getBlockOfPixel(uint8 x, uint8 y) {
|
||||
@@ -1101,7 +1101,7 @@ void DreamBase::clearBeforeLoad() {
|
||||
|
||||
//clearRest
|
||||
memset(_mapData, 0, kMaplen);
|
||||
deallocateMem(data.word(kBackdrop));
|
||||
delete[] _backdropBlocks;
|
||||
deallocateMem(data.word(kSetframes));
|
||||
deallocateMem(data.word(kReels));
|
||||
deallocateMem(data.word(kPeople));
|
||||
|
||||
@@ -281,6 +281,17 @@ struct ObjectRef {
|
||||
}
|
||||
};
|
||||
|
||||
struct BackdropMapFlag {
|
||||
uint8 _flag;
|
||||
uint8 _flagEx;
|
||||
};
|
||||
|
||||
struct MapFlag {
|
||||
uint8 _flag;
|
||||
uint8 _flagEx;
|
||||
uint8 _type;
|
||||
};
|
||||
|
||||
} // End of namespace DreamWeb
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2148,7 +2148,7 @@ void DreamBase::getRidOfTempsP() {
|
||||
}
|
||||
|
||||
void DreamBase::getRidOfAll() {
|
||||
deallocateMem(data.word(kBackdrop));
|
||||
delete[] _backdropBlocks;
|
||||
deallocateMem(data.word(kSetframes));
|
||||
deallocateMem(data.word(kReel1));
|
||||
deallocateMem(data.word(kReel2));
|
||||
@@ -2174,7 +2174,11 @@ void DreamBase::loadRoomData(const Room &room, bool skipDat) {
|
||||
for (int i = 0; i < 15; ++i)
|
||||
len[i] = header.len(i);
|
||||
|
||||
data.word(kBackdrop) = allocateAndLoad(len[0]);
|
||||
assert(len[0] >= 192);
|
||||
_backdropBlocks = new uint8[len[0] - 192];
|
||||
engine->readFromFile((uint8 *)_backdropFlags, 192);
|
||||
engine->readFromFile(_backdropBlocks, len[0] - 192);
|
||||
|
||||
clearAndLoad(workspace(), 0, len[1], 132*66); // 132*66 = maplen
|
||||
sortOutMap();
|
||||
data.word(kSetframes) = allocateAndLoad(len[2]);
|
||||
|
||||
Reference in New Issue
Block a user