Level select background animation

This commit is contained in:
Lucas S. Vieira 2024-10-12 11:14:47 -03:00
parent 96fc0ad2e6
commit 6f5789edaa
2 changed files with 47 additions and 5 deletions

View file

@ -22,13 +22,21 @@
typedef struct { typedef struct {
uint8_t menu_choice; uint8_t menu_choice;
char buffer[255]; char buffer[255];
int32_t bg_prect_x; int32_t bg_prect_x;
int32_t bg_prect_y; int32_t bg_prect_y;
uint8_t bg_mode; uint8_t bg_mode;
uint8_t bg_frame;
uint8_t bg_state;
uint16_t bg_timer;
} screen_levelselect_data; } screen_levelselect_data;
extern int debug_mode; extern int debug_mode;
#define BG_PAUSE 90
#define BG_FPS 4
#define BG_FRAMES 4
void void
screen_levelselect_load() screen_levelselect_load()
{ {
@ -44,6 +52,10 @@ screen_levelselect_load()
data->bg_prect_x = bg.prect->x; data->bg_prect_x = bg.prect->x;
data->bg_prect_y = bg.prect->y; data->bg_prect_y = bg.prect->y;
free(img); free(img);
data->bg_frame = 0;
data->bg_state = 0;
data->bg_timer = BG_PAUSE;
sound_play_xa("\\BGM\\MNU001.XA;1", 0, 0, 0); sound_play_xa("\\BGM\\MNU001.XA;1", 0, 0, 0);
} }
@ -65,6 +77,36 @@ screen_levelselect_update(void *d)
screen_levelselect_data *data = (screen_levelselect_data *)d; screen_levelselect_data *data = (screen_levelselect_data *)d;
if((data->bg_state == 0) || (data->bg_state == 2)) {
data->bg_timer--;
if(data->bg_timer == 0) {
data->bg_state++;
data->bg_timer = BG_FPS;
}
} else if(data->bg_state == 1) {
data->bg_timer--;
if(data->bg_timer == 0) {
data->bg_frame++;
data->bg_timer = BG_FPS;
if(data->bg_frame == BG_FRAMES - 1) {
data->bg_state++;
data->bg_timer = BG_PAUSE;
}
}
} else if(data->bg_state == 3) {
data->bg_timer--;
if(data->bg_timer == 0) {
data->bg_frame--;
data->bg_timer = BG_FPS;
if(data->bg_frame == 0) {
data->bg_state = 0;
data->bg_timer = BG_PAUSE;
}
}
}
if(pad_pressed(PAD_DOWN)) if(pad_pressed(PAD_DOWN))
data->menu_choice++; data->menu_choice++;
else if(pad_pressed(PAD_UP)) { else if(pad_pressed(PAD_UP)) {
@ -114,7 +156,7 @@ screen_levelselect_draw(void *d)
data->bg_prect_y); data->bg_prect_y);
poly->clut = 0; poly->clut = 0;
setXYWH(poly, x, y, 48, 32); setXYWH(poly, x, y, 48, 32);
setUVWH(poly, 0, 0, 48, 32); setUVWH(poly, 0, 32 * data->bg_frame, 48, 32);
sort_prim(poly, 3); sort_prim(poly, 3);
} }
} }

View file

@ -79,7 +79,7 @@ screen_modeltest_update(void *d)
} }
if(pad_pressed(PAD_SELECT)) { if(pad_pressed(PAD_SELECT)) {
scene_change(SCREEN_TITLE); scene_change(SCREEN_LEVELSELECT);
} }
} }