...
|
...
|
@@ -38,6 +38,15 @@ screen_write(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y, Uint8 color)
|
38
|
38
|
}
|
39
|
39
|
}
|
40
|
40
|
|
|
41
|
+static void
|
|
42
|
+screen_wipe(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y)
|
|
43
|
+{
|
|
44
|
+ int v, h;
|
|
45
|
+ for(v = 0; v < 8; v++)
|
|
46
|
+ for(h = 0; h < 8; h++)
|
|
47
|
+ screen_write(p, layer, x + h, y + v, 0);
|
|
48
|
+}
|
|
49
|
+
|
41
|
50
|
static void
|
42
|
51
|
screen_blit(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color, Uint8 flipx, Uint8 flipy, Uint8 twobpp)
|
43
|
52
|
{
|
...
|
...
|
@@ -183,8 +192,12 @@ screen_deo(Uint8 *ram, Uint8 *d, Uint8 port)
|
183
|
192
|
if(addr > 0xfff0)
|
184
|
193
|
return;
|
185
|
194
|
for(i = 0; i <= n; i++) {
|
186
|
|
- screen_blit(&uxn_screen, layer, x + dy * i, y + dx * i, &ram[addr], d[0xf] & 0xf, d[0xf] & 0x10, d[0xf] & 0x20, twobpp);
|
187
|
|
- addr += (d[0x6] & 0x04) << (1 + twobpp);
|
|
195
|
+ if(!(d[0xf] & 0xf))
|
|
196
|
+ screen_wipe(&uxn_screen, layer, x + dy * i, y + dx * i);
|
|
197
|
+ else {
|
|
198
|
+ screen_blit(&uxn_screen, layer, x + dy * i, y + dx * i, &ram[addr], d[0xf] & 0xf, d[0xf] & 0x10, d[0xf] & 0x20, twobpp);
|
|
199
|
+ addr += (d[0x6] & 0x04) << (1 + twobpp);
|
|
200
|
+ }
|
188
|
201
|
}
|
189
|
202
|
POKDEV(0xc, addr); /* auto addr+length */
|
190
|
203
|
POKDEV(0x8, x + dx); /* auto x+8 */
|