summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c281
1 files changed, 202 insertions, 79 deletions
diff --git a/src/main.c b/src/main.c
index 8008c32..2876e18 100644
--- a/src/main.c
+++ b/src/main.c
@@ -688,49 +688,6 @@ int main(void) {
688 // Initialize the A/B button sprites. 688 // Initialize the A/B button sprites.
689 int buttons_x = SCREEN_WIDTH / 2; 689 int buttons_x = SCREEN_WIDTH / 2;
690 int buttons_y = SCREEN_HEIGHT / 2; 690 int buttons_y = SCREEN_HEIGHT / 2;
691 ButtonSprite btn_b = {
692 .id = load_packed_sprite_data(&gba_btn_b_data, 4, 1),
693 .x = buttons_x + 32,
694 .y = buttons_y + 32,
695 .frame = 0,
696 .state = BTN_STATE_IDLE,
697 };
698 OBJ_ATTR_0(btn_b.id) = btn_b.y;
699 OBJ_ATTR_1(btn_b.id) = btn_b.x | (1 << 0xE);
700 OBJ_ATTR_2(btn_b.id) = sprites[btn_b.id].tile_start;
701
702 ButtonSprite btn_a = {
703 .id = load_packed_sprite_data(&gba_btn_a_data, 4, 1),
704 .x = buttons_x + 32 + 20,
705 .y = buttons_y + 32 - 16,
706 .frame = 0,
707 .state = BTN_STATE_IDLE,
708 };
709 OBJ_ATTR_0(btn_a.id) = btn_a.y;
710 OBJ_ATTR_1(btn_a.id) = btn_a.x | (1 << 0xE);
711 OBJ_ATTR_2(btn_a.id) = sprites[btn_a.id].tile_start;
712
713 ButtonSprite btn_start = {
714 .id = load_packed_sprite_data(&gba_btn_startselect_data, 2, 2),
715 .x = buttons_x - 10,
716 .y = buttons_y + 40,
717 .frame = 0,
718 .state = BTN_STATE_IDLE,
719 };
720 OBJ_ATTR_0(btn_start.id) = btn_start.y | (1 << 0xE);
721 OBJ_ATTR_1(btn_start.id) = btn_start.x;
722 OBJ_ATTR_2(btn_start.id) = sprites[btn_start.id].tile_start;
723
724 ButtonSprite btn_select = {
725 .id = load_packed_sprite_data(&gba_btn_startselect_data, 2, 2),
726 .x = buttons_x - 32,
727 .y = buttons_y + 40,
728 .frame = 0,
729 .state = BTN_STATE_IDLE,
730 };
731 OBJ_ATTR_0(btn_select.id) = btn_select.y | (1 << 0xE);
732 OBJ_ATTR_1(btn_select.id) = btn_select.x;
733 OBJ_ATTR_2(btn_select.id) = sprites[btn_select.id].tile_start;
734 691
735 MultiSprite buttons[] = { 692 MultiSprite buttons[] = {
736 // DOWN. 693 // DOWN.
@@ -918,7 +875,7 @@ int main(void) {
918 .x = buttons_x - 64 - 28, 875 .x = buttons_x - 64 - 28,
919 .y = buttons_y - 32 - 20, 876 .y = buttons_y - 32 - 20,
920 .data = &gba_btn_l_data, 877 .data = &gba_btn_l_data,
921 .n_tiles = 4, 878 .n_tiles = 2,
922 .frames = 1, 879 .frames = 1,
923 .obj_attr_0 = OBJ_SHAPE_WIDE, 880 .obj_attr_0 = OBJ_SHAPE_WIDE,
924 .obj_attr_1 = OBJ_SIZE_SMALL, 881 .obj_attr_1 = OBJ_SIZE_SMALL,
@@ -961,7 +918,7 @@ int main(void) {
961 .x = buttons_x + 32 + 20 + 24, 918 .x = buttons_x + 32 + 20 + 24,
962 .y = buttons_y - 32 - 20, 919 .y = buttons_y - 32 - 20,
963 .data = &gba_btn_r_data, 920 .data = &gba_btn_r_data,
964 .n_tiles = 4, 921 .n_tiles = 2,
965 .frames = 1, 922 .frames = 1,
966 .obj_attr_0 = OBJ_SHAPE_WIDE, 923 .obj_attr_0 = OBJ_SHAPE_WIDE,
967 .obj_attr_1 = OBJ_SIZE_SMALL, 924 .obj_attr_1 = OBJ_SIZE_SMALL,
@@ -991,6 +948,178 @@ int main(void) {
991 }, 948 },
992 }, 949 },
993 }, 950 },
951 // A.
952 {
953 .frame = 0,
954 .n_obj = 3,
955 .n_frames = 8,
956 .state = BTN_STATE_RELEASED,
957 .animations = &btn_animation_ab,
958 .sprites = &(ObjState[]){
959 {
960 .id = 0,
961 .x = buttons_x + 32 + 20 + 20,
962 .y = buttons_y + 32 - 16,
963 .data = &gba_btn_a_data,
964 .n_tiles = 4,
965 .frames = 1,
966 .obj_attr_0 = OBJ_SHAPE_SQUARE,
967 .obj_attr_1 = OBJ_SIZE_MID,
968 .obj_attr_2 = 0
969 },
970 {
971 .id = 0,
972 .x = buttons_x + 32 + 20 + 20,
973 .y = buttons_y + 32 - 16 + 8,
974 .data = &gba_btn_ab_shadow_data,
975 .n_tiles = 2,
976 .frames = 1,
977 .obj_attr_0 = OBJ_SHAPE_WIDE,
978 .obj_attr_1 = OBJ_SIZE_SMALL,
979 .obj_attr_2 = 0
980 },
981 {
982 .id = 0,
983 .x = buttons_x + 32 + 19 - 7 + 20,
984 .y = buttons_y + 32 - 23,
985 .data = &gba_btn_fx_ab,
986 .n_tiles = 16,
987 .frames = 3,
988 .obj_attr_0 = OBJ_SHAPE_SQUARE,
989 .obj_attr_1 = OBJ_SIZE_BIG,
990 .obj_attr_2 = 0
991 },
992 },
993 },
994 // B.
995 {
996 .frame = 0,
997 .n_obj = 3,
998 .n_frames = 8,
999 .state = BTN_STATE_RELEASED,
1000 .animations = &btn_animation_ab,
1001 .sprites = &(ObjState[]){
1002 {
1003 .id = 0,
1004 .x = buttons_x + 32 + 20,
1005 .y = buttons_y + 32,
1006 .data = &gba_btn_b_data,
1007 .n_tiles = 4,
1008 .frames = 1,
1009 .obj_attr_0 = OBJ_SHAPE_SQUARE,
1010 .obj_attr_1 = OBJ_SIZE_MID,
1011 .obj_attr_2 = 0
1012 },
1013 {
1014 .id = 0,
1015 .x = buttons_x + 32 + 20,
1016 .y = buttons_y + 32 + 8,
1017 .data = &gba_btn_ab_shadow_data,
1018 .n_tiles = 2,
1019 .frames = 1,
1020 .obj_attr_0 = OBJ_SHAPE_WIDE,
1021 .obj_attr_1 = OBJ_SIZE_SMALL,
1022 .obj_attr_2 = 0
1023 },
1024 {
1025 .id = 0,
1026 .x = buttons_x + 32 - 8 + 20,
1027 .y = buttons_y + 33 + 8 - 16,
1028 .data = &gba_btn_fx_ab,
1029 .n_tiles = 16,
1030 .frames = 3,
1031 .obj_attr_0 = OBJ_SHAPE_SQUARE,
1032 .obj_attr_1 = OBJ_SIZE_BIG,
1033 .obj_attr_2 = 0
1034 },
1035 },
1036 },
1037 // START.
1038 {
1039 .frame = 0,
1040 .n_obj = 3,
1041 .n_frames = 8,
1042 .state = BTN_STATE_RELEASED,
1043 .animations = &btn_animation_startselect,
1044 .sprites = &(ObjState[]){
1045 {
1046 .id = 0,
1047 .x = buttons_x - 10 - 14,
1048 .y = buttons_y + 40 + 10,
1049 .data = &gba_btn_startselect_data,
1050 .n_tiles = 2,
1051 .frames = 2,
1052 .obj_attr_0 = OBJ_SHAPE_WIDE,
1053 .obj_attr_1 = OBJ_SIZE_SMALL,
1054 .obj_attr_2 = 0
1055 },
1056 {
1057 .id = 0,
1058 .x = buttons_x - 18 - 14,
1059 .y = buttons_y + 46 + 10,
1060 .data = &gba_btn_start_text,
1061 .n_tiles = 4,
1062 .frames = 1,
1063 .obj_attr_0 = OBJ_SHAPE_WIDE,
1064 .obj_attr_1 = OBJ_SIZE_MID,
1065 .obj_attr_2 = 0
1066 },
1067 {
1068 .id = 0,
1069 .x = buttons_x - 19 - 14,
1070 .y = buttons_y + 37 + 10,
1071 .data = &gba_btn_fx_startselect,
1072 .n_tiles = 4,
1073 .frames = 4,
1074 .obj_attr_0 = OBJ_SHAPE_WIDE,
1075 .obj_attr_1 = OBJ_SIZE_MID,
1076 .obj_attr_2 = 0
1077 },
1078 },
1079 },
1080 // SELECT.
1081 {
1082 .frame = 0,
1083 .n_obj = 3,
1084 .n_frames = 8,
1085 .state = BTN_STATE_RELEASED,
1086 .animations = &btn_animation_startselect,
1087 .sprites = &(ObjState[]){
1088 {
1089 .id = 0,
1090 .x = buttons_x - 10 + 26 - 14,
1091 .y = buttons_y + 40 + 10,
1092 .data = &gba_btn_startselect_data,
1093 .n_tiles = 2,
1094 .frames = 2,
1095 .obj_attr_0 = OBJ_SHAPE_WIDE,
1096 .obj_attr_1 = OBJ_SIZE_SMALL,
1097 .obj_attr_2 = 0
1098 },
1099 {
1100 .id = 0,
1101 .x = buttons_x - 18 + 26 - 14,
1102 .y = buttons_y + 46 + 10,
1103 .data = &gba_btn_select_text,
1104 .n_tiles = 4,
1105 .frames = 1,
1106 .obj_attr_0 = OBJ_SHAPE_WIDE,
1107 .obj_attr_1 = OBJ_SIZE_MID,
1108 .obj_attr_2 = 0
1109 },
1110 {
1111 .id = 0,
1112 .x = buttons_x - 19 + 26 - 14,
1113 .y = buttons_y + 37 + 10,
1114 .data = &gba_btn_fx_startselect,
1115 .n_tiles = 4,
1116 .frames = 4,
1117 .obj_attr_0 = OBJ_SHAPE_WIDE,
1118 .obj_attr_1 = OBJ_SIZE_MID,
1119 .obj_attr_2 = 0
1120 },
1121 },
1122 },
994 }; 1123 };
995 for (size_t i = 0; i < sizeof(buttons) / sizeof(MultiSprite); ++i) { 1124 for (size_t i = 0; i < sizeof(buttons) / sizeof(MultiSprite); ++i) {
996 init_button_sprite(&buttons[i]); 1125 init_button_sprite(&buttons[i]);
@@ -1003,40 +1132,6 @@ int main(void) {
1003 wait_vsync(); 1132 wait_vsync();
1004 poll_keys(); 1133 poll_keys();
1005 1134
1006 // if (key_pressed(KEY_B)) {
1007 // btn_b.frame = 0;
1008 // btn_b.state = BTN_STATE_PRESSED;
1009 // } else if (key_hold(KEY_B)) {
1010 // if (btn_b.frame < btn_b.n_frames - 1) {
1011 // btn_b.frame++;
1012 // }
1013 // } else {
1014 // // Finish the animation and reset idle state.
1015 // if (btn_b.frame > 0 && btn_b.frame < btn_b.n_frames - 1) {
1016 // btn_b.frame++;
1017 // } else {
1018 // btn_b.frame = 0;
1019 // btn_b.state = BTN_STATE_IDLE;
1020 // }
1021 // }
1022 // if (key_pressed(KEY_A)) {
1023 // btn_a.frame = 0;
1024 // btn_a.state = BTN_STATE_PRESSED;
1025 // } else if (key_hold(KEY_A)) {
1026 // size_t n_frames = animation_states[btn_a.state]->n_frames;
1027 // if (btn_a.frame < n_frames - 1) {
1028 // btn_a.frame++;
1029 // }
1030 // } else {
1031 // // Finish the animation and reset idle state.
1032 // size_t n_frames = animation_states[btn_a.state]->n_frames;
1033 // if (btn_a.frame > 0 && btn_a.frame < n_frames - 1) {
1034 // btn_a.frame++;
1035 // } else {
1036 // btn_a.frame = 0;
1037 // btn_a.state = BTN_STATE_IDLE;
1038 // }
1039 // }
1040 if (key_pressed(KEY_DOWN)) { 1135 if (key_pressed(KEY_DOWN)) {
1041 buttons[0].state = BTN_STATE_PRESSED; 1136 buttons[0].state = BTN_STATE_PRESSED;
1042 } else if (key_hold(KEY_DOWN)) { 1137 } else if (key_hold(KEY_DOWN)) {
@@ -1079,6 +1174,34 @@ int main(void) {
1079 } else { 1174 } else {
1080 buttons[5].state = BTN_STATE_RELEASED; 1175 buttons[5].state = BTN_STATE_RELEASED;
1081 } 1176 }
1177 if (key_pressed(KEY_A)) {
1178 buttons[6].state = BTN_STATE_PRESSED;
1179 } else if (key_hold(KEY_A)) {
1180 buttons[6].state = BTN_STATE_HOLD;
1181 } else {
1182 buttons[6].state = BTN_STATE_RELEASED;
1183 }
1184 if (key_pressed(KEY_B)) {
1185 buttons[7].state = BTN_STATE_PRESSED;
1186 } else if (key_hold(KEY_B)) {
1187 buttons[7].state = BTN_STATE_HOLD;
1188 } else {
1189 buttons[7].state = BTN_STATE_RELEASED;
1190 }
1191 if (key_pressed(KEY_START)) {
1192 buttons[8].state = BTN_STATE_PRESSED;
1193 } else if (key_hold(KEY_START)) {
1194 buttons[8].state = BTN_STATE_HOLD;
1195 } else {
1196 buttons[8].state = BTN_STATE_RELEASED;
1197 }
1198 if (key_pressed(KEY_SELECT)) {
1199 buttons[9].state = BTN_STATE_PRESSED;
1200 } else if (key_hold(KEY_SELECT)) {
1201 buttons[9].state = BTN_STATE_HOLD;
1202 } else {
1203 buttons[9].state = BTN_STATE_RELEASED;
1204 }
1082 1205
1083 if (key_hold(KEY_DOWN)) { 1206 if (key_hold(KEY_DOWN)) {
1084 y += 3; 1207 y += 3;