Add tests for encounters text

This commit is contained in:
Lorenzo Carletti 2021-11-17 23:29:59 +01:00
parent 9154667efa
commit fe74ac0ca7
10 changed files with 116 additions and 5 deletions

View File

@ -36,6 +36,7 @@ $input_c_files =
$input_c_test_files =
"src/c/tests/main_test.c",
"src/c/tests/battle_test.c",
"src/c/tests/debug_printf/test_print.c",
"src/c/tests/debug_printf/mgba.c",
"src/c/tests/debug_printf/printf.c"

View File

@ -17,4 +17,10 @@ typedef struct BATTLE_DATA {
short enemy_id; //0x92
} BATTLE_DATA;
typedef struct ENEMY_DATA {
byte unknown[0x14];
char* encounter_text;
byte unknown_2[0x28];
} ENEMY_DATA;
#endif

View File

@ -21,6 +21,8 @@ int __attribute__((naked)) m2_sub_a3384(int value) {}
void __attribute__((naked)) m2_sub_d3c50() {}
void __attribute__((naked)) m2_sub_d6844() {}
byte __attribute__((naked)) m2_sub_daf84(short value) {}
byte __attribute__((naked)) m2_battletext_loadstr(char* string) {}
void __attribute__((naked)) m2_set_enemy_name(int val) {}
int __attribute__((naked)) m2_setupwindow(WINDOW* window, short window_x, short window_y, short window_width, short window_height) {}
int __attribute__((naked)) m2_clearwindowtiles(WINDOW* window) {}
void __attribute__((naked)) m2_printstr(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight) {}

82
src/c/tests/battle_test.c Normal file
View File

@ -0,0 +1,82 @@
#include "battle_test.h"
#include "debug_printf/test_print.h"
#include "../locs.h"
bool text_stayed_inside(WINDOW* window);
void test_encounter_text()
{
m2_btl_user_ptr->is_enemy = true;
for(int i = 1; i <= 3; i++)
{
m2_btl_enemies_size = i;
for(int j = 0; j <= 230; j++)
{
m2_btl_user_ptr->id = j;
m2_set_enemy_name(1);
m2_battletext_loadstr(m2_enemies[j].encounter_text);
if(m2_btl_enemies_size == 1)
assert_message(text_stayed_inside(window_pointers[2]), "Enemy %d", j);
else if (m2_btl_enemies_size == 2)
assert_message(text_stayed_inside(window_pointers[2]), "Enemy %d - cohort", j);
else
assert_message(text_stayed_inside(window_pointers[2]), "Enemy %d - cohorts", j);
}
}
}
bool text_stayed_inside(WINDOW* window)
{
for(int i = 0; i < window->window_height; i++)
if((*tilemap_pointer)[(0x20*(window->window_y + i))+window->window_x + window->window_width] != RIGHT_BORDER_TILE)
return false;
return true;
}
void setup_ness_name()
{
for(int i = 0; i < 5; i++)
*(pc_names + i) = W_LETTER;
*(pc_names + 5) = 0;
*(pc_names + 6) = 0xFF;
}
void setup_king_name()
{
for(int i = 0; i < 6; i++)
*(pc_names + KING_OFFSET + i) = W_LETTER;
*(pc_names + KING_OFFSET + 6) = 0;
*(pc_names + KING_OFFSET + 7) = 0xFF;
}
void setup_battle_tests()
{
(window_pointers[2]) = (struct WINDOW*)0x2029F88;
(window_pointers[2])->window_x = 4;
(window_pointers[2])->window_y = 1;
(window_pointers[2])->window_width = 0x16;
(window_pointers[2])->window_height = 4;
(window_pointers[2])->window_area = (window_pointers[2])->window_width * (window_pointers[2])->window_height;
m2_btl_user_ptr = (BATTLE_DATA*)0x2021110;
m2_btl_target_ptr = (BATTLE_DATA*)0x2021110;
setup_ness_name();
setup_king_name();
m2_is_battle = 1;
(*(byte*)(0x3005050)) = 0xFF;
(*(short*)(0x30023DC)) = 0; //Default delay between prints
(*(int*)(0x3005220)) = 0x2028820;
*tilemap_pointer= (unsigned short*)0x2028018;
m2_script_readability = false;
}
void do_battle_tests()
{
test_encounter_text();
}
void start_battle_tests()
{
setup_battle_tests();
do_battle_tests();
}

18
src/c/tests/battle_test.h Normal file
View File

@ -0,0 +1,18 @@
#include "../battle_data.h"
#include "debug_printf/test_print.h"
#define W_LETTER 0x87
#define KING_OFFSET 0x1C
#define RIGHT_BORDER_TILE 0x0095
void start_battle_tests();
extern void m2_battletext_loadstr(char* string);
extern ENEMY_DATA m2_enemies[];
extern bool m2_script_readability;
extern short m2_is_battle;
extern byte m2_btl_enemies_size;
extern BATTLE_DATA* m2_btl_user_ptr;
extern BATTLE_DATA* m2_btl_target_ptr;
extern void m2_set_enemy_name(int val);

View File

@ -1,8 +1,8 @@
#include "mgba.h"
#include "stdbool.h"
#define NULL (0)
#define MAX_STR_SIZE 0x100
#define NULL 0
#define assert(condition) assert_print(condition, __FILE__, __LINE__, NULL)
#define assert_message(condition, format, ...) assert_print(condition, __FILE__, __LINE__, format, __VA_ARGS__)

View File

@ -1,12 +1,12 @@
#include "main_test.h"
#include "battle_test.h"
#include "debug_printf/test_print.h"
void start_tests()
{
start_session();
start_battle_tests();
end_session();

View File

@ -151,7 +151,6 @@ extern byte m12_other_str6[];
extern byte m12_other_str7[];
extern byte m12_other_str8[];
extern byte m2_cstm_last_printed[];
extern byte *m2_script_readability;
extern unsigned short m12_cartridge_palettes[];
extern unsigned short m12_cartridge_palettes_dimmed[];
extern int overworld_buffer;

View File

@ -2406,6 +2406,8 @@ disclaimer_map:
.definelabel m2_curhpwindow_down ,0x80D41D8
.definelabel m2_sub_d6844 ,0x80D6844
.definelabel m2_sub_daf84 ,0x80DAF84
.definelabel m2_battletext_loadstr ,0x80DB168
.definelabel m2_set_enemy_name ,0x80DB04C
.definelabel m2_setupbattlename ,0x80DCD00
.definelabel m2_stat_symb_checker ,0x8B0EDA4
.definelabel vblank ,0x80F47E4
@ -2415,6 +2417,7 @@ disclaimer_map:
.definelabel m2_cast_roll_pointers ,0x82DB25C
.definelabel m2_items ,0x8B1D62C
.definelabel m2_default_names ,0x82B9330
.definelabel m2_enemies ,0x8739D1C
.definelabel m2_psi_print_table ,0x8B2A9C0
.definelabel m2_title_teardown ,0x8000C28

View File

@ -1,6 +1,6 @@
$test_rom_file = "bin/m12test.gba"
$log_file = "bin/test.log"
$sleep_time = 10
$sleep_time = 60
$failure_text = "FAIL"
$end_text = "Done!"
$mgba_name = "mgba-sdl"