Fixed several automation false negatives.
This commit is contained in:
parent
603b8969ab
commit
ae003ee020
@ -20,7 +20,7 @@ static char *bmp_filename;
|
|||||||
static char *log_filename;
|
static char *log_filename;
|
||||||
static FILE *log_file;
|
static FILE *log_file;
|
||||||
static void replace_extension(const char *src, size_t length, char *dest, const char *ext);
|
static void replace_extension(const char *src, size_t length, char *dest, const char *ext);
|
||||||
static bool push_start_a;
|
static bool push_start_a, nekojara_fix;
|
||||||
static unsigned int test_length = 60 * 40;
|
static unsigned int test_length = 60 * 40;
|
||||||
GB_gameboy_t gb;
|
GB_gameboy_t gb;
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ static void vblank(GB_gameboy_t *gb)
|
|||||||
screenshot to be taken while the LCD is off if the press makes the game
|
screenshot to be taken while the LCD is off if the press makes the game
|
||||||
load graphics. */
|
load graphics. */
|
||||||
if (push_start_a && frames < test_length - 120) {
|
if (push_start_a && frames < test_length - 120) {
|
||||||
switch (frames % 40) {
|
switch (frames % (nekojara_fix? 60 : 40)) { /* Nekojara's first menu item is continue, so the normal hueristic won't work. */
|
||||||
case 0:
|
case 0:
|
||||||
gb->keys[7] = true; // Start down
|
gb->keys[7] = true; // Start down
|
||||||
break;
|
break;
|
||||||
@ -58,6 +58,12 @@ static void vblank(GB_gameboy_t *gb)
|
|||||||
case 30:
|
case 30:
|
||||||
gb->keys[4] = false; // A up
|
gb->keys[4] = false; // A up
|
||||||
break;
|
break;
|
||||||
|
case 40:
|
||||||
|
gb->keys[3] = true; // D-Pad Down down
|
||||||
|
break;
|
||||||
|
case 50:
|
||||||
|
gb->keys[3] = false; // D-Pad Down up
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +77,7 @@ static void vblank(GB_gameboy_t *gb)
|
|||||||
GB_log(gb, "The game is probably stuck in an FF loop.\n");
|
GB_log(gb, "The game is probably stuck in an FF loop.\n");
|
||||||
frames = test_length - 1;
|
frames = test_length - 1;
|
||||||
}
|
}
|
||||||
if (gb->halted && (!gb->ime || !gb->interrupt_enable)) {
|
if (gb->halted && !gb->interrupt_enable) {
|
||||||
GB_log(gb, "The game is deadlocked.\n");
|
GB_log(gb, "The game is deadlocked.\n");
|
||||||
frames = test_length - 1;
|
frames = test_length - 1;
|
||||||
}
|
}
|
||||||
@ -272,7 +278,7 @@ int main(int argc, char **argv)
|
|||||||
perror("Failed to load ROM");
|
perror("Failed to load ROM");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
nekojara_fix = strcmp((const char *)(gb.rom + 0x134), "NEKOJARA") == 0; /* It's OK. No overflow is possilbe here. */
|
||||||
/* Run emulation */
|
/* Run emulation */
|
||||||
running = true;
|
running = true;
|
||||||
gb.turbo = gb.turbo_dont_skip = gb.disable_rendering = true;
|
gb.turbo = gb.turbo_dont_skip = gb.disable_rendering = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user