DREAMWEB: Clean up loop
This commit is contained in:
parent
351be2d19d
commit
13b2e89378
1 changed files with 23 additions and 22 deletions
|
@ -518,18 +518,36 @@ const Frame *DreamGenContext::getreelframeax(uint16 frame) {
|
|||
}
|
||||
|
||||
void DreamGenContext::showrain() {
|
||||
Rain *rain = (Rain *)segRef(data.word(kBuffers)).ptr(kRainlist, 0);
|
||||
|
||||
// Do nothing if there's no rain at all
|
||||
if (rain->x == 255)
|
||||
return;
|
||||
|
||||
ds = data.word(kMainsprites);
|
||||
si = 6*58;
|
||||
ax = ds.word(si+2);
|
||||
si = ax + 2080;
|
||||
Rain *rain = (Rain *)segRef(data.word(kBuffers)).ptr(kRainlist, 0);
|
||||
if (rain->x == 255)
|
||||
return;
|
||||
while (true) {
|
||||
if (rain->x == 255) {
|
||||
|
||||
for (; rain->x != 255; ++rain) {
|
||||
uint16 y = rain->y + data.word(kMapady) + data.word(kMapystart);
|
||||
uint16 x = rain->x + data.word(kMapadx) + data.word(kMapxstart);
|
||||
uint16 size = rain->size;
|
||||
ax = ((uint16)(rain->w3() - rain->b5)) & 511;
|
||||
rain->setW3(ax);
|
||||
const uint8 *src = ds.ptr(si, 0) + ax;
|
||||
uint8 *dst = workspace() + y * 320 + x;
|
||||
for(uint16 i = 0; i < size; ++i) {
|
||||
uint8 v = src[i];
|
||||
if (v != 0)
|
||||
*dst = v;
|
||||
dst += 320-1;
|
||||
}
|
||||
}
|
||||
|
||||
if (data.word(kCh1blockstocopy) != 0)
|
||||
return;
|
||||
if ((data.byte(kReallocation) == 2) && (data.byte(kBeenmugged) != 1))
|
||||
if (data.byte(kReallocation) == 2 && data.byte(kBeenmugged) != 1)
|
||||
return;
|
||||
if (data.byte(kReallocation) == 55)
|
||||
return;
|
||||
|
@ -541,23 +559,6 @@ void DreamGenContext::showrain() {
|
|||
else
|
||||
al = 7;
|
||||
playchannel1();
|
||||
return;
|
||||
}
|
||||
uint16 y = rain->y + data.word(kMapady) + data.word(kMapystart);
|
||||
uint16 x = rain->x + data.word(kMapadx) + data.word(kMapxstart);
|
||||
uint16 size = rain->size;
|
||||
ax = ((uint16)(rain->w3() - rain->b5)) & 511;
|
||||
rain->setW3(ax);
|
||||
++rain;
|
||||
const uint8 *src = ds.ptr(si, 0) + ax;
|
||||
uint8 *dst = workspace() + y * 320 + x;
|
||||
for(uint16 i = 0; i < size; ++i) {
|
||||
uint8 v = src[i];
|
||||
if (v != 0)
|
||||
*dst = v;
|
||||
dst += 320-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void (DreamGenContext::*reelCallbacks[])() = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue