/* Recording of custom chip register changes. */
static int current_change_set;
-static struct sprite_entry sprite_entries[2][MAX_SPR_PIXELS / 16];
+static struct sprite_entry sprite_entries[2][MAX_SPR_PIXELS / 32];
static struct color_change color_changes[2][MAX_REG_CHANGE];
struct decision line_decisions[2 * (MAXVPOS + MAXVPOS_WRAPLINES) + 1];
static int next_sprite_entry = 0, last_sprite_entry = 0;
static int prev_next_sprite_entry;
static int next_sprite_forced = 1;
+static int spixels_max;
struct sprite_entry *curr_sprite_entries, *prev_sprite_entries;
struct color_change *curr_color_changes, *prev_color_changes;
if (next_sprite_entry >= last_sprite_entry) {
return;
}
+ if (e->first_pixel >= spixels_max) {
+ return;
+ }
half = 0;
dbl = sprite_buffer_res - sprres;
}
prev_next_sprite_entry = next_sprite_entry;
next_sprite_entry = 0;
- last_sprite_entry = MAX_SPR_PIXELS - 1;
+ last_sprite_entry = MAX_SPR_PIXELS - 2;
+ spixels_max = sizeof(spixels) / sizeof(*spixels) - MAX_PIXELS_PER_LINE;
next_lineno = calculate_lineno(vpos);
last_color_change = 0;
#define MAXVPOS_WRAPLINES 10
/* No divisors for MAX_PIXELS_PER_LINE; we support AGA and SHRES sprites */
-#define MAX_SPR_PIXELS ((((MAXVPOS + MAXVPOS_WRAPLINES) * 2 + 1) * MAX_PIXELS_PER_LINE) / 12)
+#define MAX_SPR_PIXELS ((((MAXVPOS + MAXVPOS_WRAPLINES) * 2 + 1) * MAX_PIXELS_PER_LINE) / 4)
struct sprite_entry
{