From 30a7de0d7bfd4b076a57a029a08ce1fd9eccd429 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 23 Apr 2021 23:35:44 +0200 Subject: Add new animations for dpad --- src/gba-buttons.c | 57 +++++++++------- src/main.c | 199 ++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 189 insertions(+), 67 deletions(-) diff --git a/src/gba-buttons.c b/src/gba-buttons.c index cbf6f8b..5a2a6e2 100644 --- a/src/gba-buttons.c +++ b/src/gba-buttons.c @@ -55,12 +55,23 @@ u32 gba_btn_startselect_data[] = { u32 gba_btn_fx_downup[] = { 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x40000100, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000201, 0x00000000, - 0x00008000, 0x01010000, 0x00000001, 0x00000000, - 0x00000000, 0x80000000, 0x00000001, 0x00000000, - 0x00000000, 0x00010100, 0x00000001, 0x02000000, - 0x00000000, 0x00400000, 0x00000000, 0x00000000, - 0x00000000, 0x00000001, 0x00000000, 0x00040000, + 0x00000000, 0x00000000, 0x00020100, 0x00000000, + 0x00800001, 0x01000000, 0x00000100, 0x00000000, + 0x00000080, 0x00000000, 0x00000100, 0x00000000, + 0x00000000, 0x01010000, 0x00000102, 0x00000000, + 0x00000000, 0x40000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000100, 0x00000000, 0x04000000, +}; + +u32 gba_btn_fx_leftright[] = { + 0x00000000, 0x00000000, 0x00000100, 0x00000000, + 0x04000000, 0x00000100, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x04020000, 0x00000000, + 0x18000000, 0x00000002, 0x04000000, 0x00000000, + 0x00000000, 0x00000008, 0x04000000, 0x00000000, + 0x30000000, 0x00000000, 0x04080000, 0x00000000, + 0x00000000, 0x00001000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00001000, 0x00000000, }; typedef struct SpriteAnimation { @@ -109,7 +120,7 @@ typedef struct ObjState { u16 obj_attr_2; } ObjState; -AnimationEntry *btn_down_animation[] = { +AnimationEntry *btn_animation[] = { &(AnimationEntry[]){ {0, 0, 0, 0}, {0, 0, 0, 0}, @@ -121,23 +132,23 @@ AnimationEntry *btn_down_animation[] = { {0, 2, 0, 0}, }, &(AnimationEntry[]){ - {0, 11, 0, 0}, - {0, 11, 0, 0}, - {0, 11, 0, 0}, - {0, 11, 0, 0}, - {0, 11, 0, 0}, - {0, 11, 0, 0}, - {0, 11, 0, 0}, - {0, 11, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, }, &(AnimationEntry[]){ - {-8, 17, 0, 1}, - {-8, 17, 0, 0}, - {-8, 17, 4, 0}, - {-8, 17, 4, 0}, - {-8, 17, 8, 0}, - {-8, 17, 8, 0}, - {-8, 17, 12, 0}, - {-8, 17, 12, 1}, + {0, 0, 0, 1}, + {0, 0, 0, 0}, + {0, 0, 4, 0}, + {0, 0, 4, 0}, + {0, 0, 8, 0}, + {0, 0, 8, 0}, + {0, 0, 12, 0}, + {0, 0, 12, 1}, }, }; diff --git a/src/main.c b/src/main.c index e74df00..787d39b 100644 --- a/src/main.c +++ b/src/main.c @@ -710,39 +710,6 @@ int main(void) { OBJ_ATTR_1(btn_a.id) = btn_a.x | (1 << 0xE); OBJ_ATTR_2(btn_a.id) = sprites[btn_a.id].tile_start; - ButtonSprite btn_up = { - .id = load_packed_sprite_data(&gba_btn_updown_data, 4, 1), - .x = buttons_x - 64 - 16, - .y = buttons_y + 32 - 18, - .frame = 0, - .state = BTN_STATE_IDLE, - }; - OBJ_ATTR_0(btn_up.id) = btn_up.y; - OBJ_ATTR_1(btn_up.id) = btn_up.x | (1 << 0xE); - OBJ_ATTR_2(btn_up.id) = sprites[btn_up.id].tile_start; - - ButtonSprite btn_left = { - .id = load_packed_sprite_data(&gba_btn_leftright_data, 4, 1), - .x = buttons_x - 64 - 16 - 10, - .y = buttons_y + 32 - 10, - .frame = 0, - .state = BTN_STATE_IDLE, - }; - OBJ_ATTR_0(btn_left.id) = btn_left.y; - OBJ_ATTR_1(btn_left.id) = btn_left.x | (1 << 0xE); - OBJ_ATTR_2(btn_left.id) = sprites[btn_left.id].tile_start; - - ButtonSprite btn_right = { - .id = load_packed_sprite_data(&gba_btn_leftright_data, 4, 1), - .x = buttons_x - 64 - 16 + 11, - .y = buttons_y + 32 - 10, - .frame = 0, - .state = BTN_STATE_IDLE, - }; - OBJ_ATTR_0(btn_right.id) = btn_right.y; - OBJ_ATTR_1(btn_right.id) = btn_right.x | (1 << 0xE) | (1 << 0xC); - OBJ_ATTR_2(btn_right.id) = sprites[btn_right.id].tile_start; - ButtonSprite btn_l = { .id = load_packed_sprite_data(&gba_btn_l_data, 2, 1), .x = buttons_x - 64 - 28, @@ -788,12 +755,13 @@ int main(void) { OBJ_ATTR_2(btn_select.id) = sprites[btn_select.id].tile_start; MultiSprite buttons[] = { + // DOWN. { .frame = 0, .n_obj = 3, .n_frames = 8, .state = BTN_STATE_RELEASED, - .animations = &btn_down_animation, + .animations = &btn_animation, .sprites = &(ObjState[]){ { .id = 0, @@ -809,7 +777,7 @@ int main(void) { { .id = 0, .x = buttons_x - 64 - 16, - .y = buttons_y + 29, + .y = buttons_y + 29 + 11, .data = &gba_btn_down_shadow_data, .n_tiles = 2, .frames = 1, @@ -817,19 +785,149 @@ int main(void) { .obj_attr_1 = OBJ_SIZE_SMALL, .obj_attr_2 = 0 }, + { + .id = 0, + .x = buttons_x - 64 - 16 - 8, + .y = buttons_y + 29 + 17, + .data = &gba_btn_fx_downup, + .n_tiles = 4, + .frames = 4, + .obj_attr_0 = OBJ_SHAPE_WIDE, + .obj_attr_1 = OBJ_SIZE_MID, + .obj_attr_2 = 0 + }, + }, + }, + // UP. + { + .frame = 0, + .n_obj = 3, + .n_frames = 8, + .state = BTN_STATE_RELEASED, + .animations = &btn_animation, + .sprites = &(ObjState[]){ { .id = 0, .x = buttons_x - 64 - 16, - .y = buttons_y + 29, + .y = buttons_y + 32 - 18, + .data = &gba_btn_updown_data, + .n_tiles = 4, + .frames = 1, + .obj_attr_0 = 0, + .obj_attr_1 = OBJ_SIZE_MID, + .obj_attr_2 = 0 + }, + { + .id = 0, + .x = buttons_x - 64 - 16, + .y = buttons_y + 32 - 18 + 7, + .data = &gba_btn_up_shadow_data, + .n_tiles = 2, + .frames = 1, + .obj_attr_0 = OBJ_SHAPE_WIDE, + .obj_attr_1 = OBJ_SIZE_SMALL, + .obj_attr_2 = 0 + }, + { + .id = 0, + .x = buttons_x - 64 - 16 - 8, + .y = buttons_y + 32 - 18 - 7, .data = &gba_btn_fx_downup, .n_tiles = 4, .frames = 4, .obj_attr_0 = OBJ_SHAPE_WIDE, + .obj_attr_1 = OBJ_V_FLIP | OBJ_SIZE_MID, + .obj_attr_2 = 0 + }, + }, + }, + // LEFT + { + .frame = 0, + .n_obj = 3, + .n_frames = 8, + .state = BTN_STATE_RELEASED, + .animations = &btn_animation, + .sprites = &(ObjState[]){ + { + .id = 0, + .x = buttons_x - 64 - 16 - 10, + .y = buttons_y + 32 - 10, + .data = &gba_btn_leftright_data, + .n_tiles = 4, + .frames = 1, + .obj_attr_0 = 0, + .obj_attr_1 = OBJ_SIZE_MID, + .obj_attr_2 = 0 + }, + { + .id = 0, + .x = buttons_x - 64 - 16 - 10, + .y = buttons_y + 32 - 10 + 6, + .data = &gba_btn_leftright_shadow_data, + .n_tiles = 2, + .frames = 1, + .obj_attr_0 = OBJ_SHAPE_WIDE, + .obj_attr_1 = OBJ_SIZE_SMALL, + .obj_attr_2 = 0 + }, + { + .id = 0, + .x = buttons_x - 64 - 16 - 10 - 6, + .y = buttons_y + 32 - 10 - 8, + .data = &gba_btn_fx_leftright, + .n_tiles = 4, + .frames = 4, + .obj_attr_0 = OBJ_SHAPE_TALL, + .obj_attr_1 = OBJ_H_FLIP | OBJ_SIZE_MID, + .obj_attr_2 = 0 + }, + }, + }, + // RIGHT. + { + .frame = 0, + .n_obj = 3, + .n_frames = 8, + .state = BTN_STATE_RELEASED, + .animations = &btn_animation, + .sprites = &(ObjState[]){ + { + .id = 0, + .x = buttons_x - 64 - 16 + 11, + .y = buttons_y + 32 - 10, + .data = &gba_btn_leftright_data, + .n_tiles = 4, + .frames = 1, + .obj_attr_0 = 0, + .obj_attr_1 = OBJ_H_FLIP | OBJ_SIZE_MID, + .obj_attr_2 = 0 + }, + { + .id = 0, + .x = buttons_x - 64 - 16 + 11, + .y = buttons_y + 32 - 10 + 6, + .data = &gba_btn_leftright_shadow_data, + .n_tiles = 2, + .frames = 1, + .obj_attr_0 = OBJ_SHAPE_WIDE, + .obj_attr_1 = OBJ_H_FLIP | OBJ_SIZE_SMALL, + .obj_attr_2 = 0 + }, + { + .id = 0, + .x = buttons_x - 64 - 16 + 11 + 14, + .y = buttons_y + 32 - 10 - 8, + .data = &gba_btn_fx_leftright, + .n_tiles = 4, + .frames = 4, + .obj_attr_0 = OBJ_SHAPE_TALL, .obj_attr_1 = OBJ_SIZE_MID, .obj_attr_2 = 0 }, }, }, + }; for (size_t i = 0; i < sizeof(buttons) / sizeof(MultiSprite); ++i) { init_button_sprite(&buttons[i]); @@ -883,6 +981,27 @@ int main(void) { } else { buttons[0].state = BTN_STATE_RELEASED; } + if (key_pressed(KEY_UP)) { + buttons[1].state = BTN_STATE_PRESSED; + } else if (key_hold(KEY_UP)) { + buttons[1].state = BTN_STATE_HOLD; + } else { + buttons[1].state = BTN_STATE_RELEASED; + } + if (key_pressed(KEY_LEFT)) { + buttons[2].state = BTN_STATE_PRESSED; + } else if (key_hold(KEY_LEFT)) { + buttons[2].state = BTN_STATE_HOLD; + } else { + buttons[2].state = BTN_STATE_RELEASED; + } + if (key_pressed(KEY_RIGHT)) { + buttons[3].state = BTN_STATE_PRESSED; + } else if (key_hold(KEY_RIGHT)) { + buttons[3].state = BTN_STATE_HOLD; + } else { + buttons[3].state = BTN_STATE_RELEASED; + } if (key_hold(KEY_DOWN)) { y += 3; @@ -897,14 +1016,6 @@ int main(void) { x += 3; } - // OBJ_ATTR_2(btn_b.id) = sprites[btn_b.id].tile_start + animation_states[btn_b.state]->tile_offsets[btn_b.frame]; - // OBJ_ATTR_2(btn_a.id) = sprites[btn_a.id].tile_start + animation_states[btn_a.state]->tile_offsets[btn_a.frame]; - // OBJ_ATTR_2(btn_up.id) = sprites[btn_up.id].tile_start + animation_states[btn_up.state]->tile_offsets[btn_up.frame]; - // // OBJ_ATTR_2(btn_down.id) = sprites[btn_down.id].tile_start + animation_states[btn_down.state]->tile_offsets[btn_down.frame]; - // OBJ_ATTR_2(btn_left.id) = sprites[btn_left.id].tile_start + animation_states[btn_left.state]->tile_offsets[btn_left.frame]; - // OBJ_ATTR_2(btn_right.id) = sprites[btn_right.id].tile_start + animation_states[btn_right.state]->tile_offsets[btn_right.frame]; - // OBJ_ATTR_2(btn_l.id) = sprites[btn_l.id].tile_start + animation_states[btn_l.state]->tile_offsets[btn_l.frame]; - // OBJ_ATTR_2(btn_r.id) = sprites[btn_r.id].tile_start + animation_states[btn_r.state]->tile_offsets[btn_r.frame]; frame_counter++; BG_H_SCROLL_0 = x; BG_V_SCROLL_0 = y; -- cgit v1.2.1