Browse code

Sprite wipe helper

Devine Lu Linvega authored on 01/03/2023 04:54:32
Showing 1 changed files
... ...
@@ -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 */