- fixed spritesheet conversion and setup
[gba_blender] / src / main.c
index 30d92c2..af2f6d3 100644 (file)
@@ -29,11 +29,24 @@ along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #include "sprites.h"
 #include "dma.h"
 
+enum {
+       SIDX_DEL0, SIDX_DEL1, SIDX_DEL2,
+       SIDX_TIME,
+       SIDX_ICONS_BASE
+};
+
+enum {
+       SNAM_DEL0       = 512,
+       SNAM_DEL1       = SNAM_DEL0 + 8,
+       SNAM_DEL2       = SNAM_DEL1 + 8
+};
+
 #define MENU_HEIGHT            17
 #define TRACK_HEIGHT   18
 #define VP_HEIGHT              (160 - MENU_HEIGHT - TRACK_HEIGHT)
 
 static void handle_keys(void);
+static void show_msgbox(int en);
 
 extern struct { unsigned char r, g, b; } bgimg_cmap[];
 extern unsigned char bgimg_pixels[];
@@ -65,6 +78,10 @@ static struct xvertex gridaxes[] = {
        {0, 0, -AXIS1,  0, 0, 0, 93},
 };
 
+#define MAX_SIDX       8
+static uint16_t oam[4 * MAX_SIDX];
+
+
 int main(void)
 {
        int i;
@@ -96,11 +113,10 @@ int main(void)
                r = i / 5 + 6;
                *cptr++ = r | (r << 5) | (r << 10);
        }
-       dma_copy16(3, fbptr[0], bgimg_pixels, 240 * 160 / 2);
-       dma_copy16(3, fbptr[1], bgimg_pixels, 240 * 160 / 2);
+       dma_copy16(3, fbptr[0], bgimg_pixels, 240 * 160 / 2, 0);
+       dma_copy16(3, fbptr[1], bgimg_pixels, 240 * 160 / 2, 0);
 
        init_sprites();
-       set_sprite(0, 0, 512, 42, 42, 0, SPR_SZ64);
 
        xgl_init();
        xgl_viewport(0, 0, 240, VP_HEIGHT);
@@ -108,6 +124,10 @@ int main(void)
 
        key_repeat(75, 75, KEY_LEFT | KEY_RIGHT | KEY_DOWN | KEY_UP);
 
+       /* every vblank, copy the shadow OAM automatically */
+       /*dma_copy16(3, (void*)OAM_ADDR, oam, sizeof oam / 2, DMACNT_VBLANK |
+                       DMACNT_REPEAT | DMACNT_INC_RELOAD);*/
+
        for(;;) {
                handle_keys();
 
@@ -115,7 +135,8 @@ int main(void)
 
                fb = fbptr[backbuf] + 240 * MENU_HEIGHT;
                polyfill_framebuffer(fb, 240, VP_HEIGHT);
-               memset(fb, 14, 240 * VP_HEIGHT);
+               //memset(fb, 14, 240 * VP_HEIGHT);
+               dma_fill16(3, fb, 0x0e0e, 240 * VP_HEIGHT / 2);
 
                xgl_load_identity();
                xgl_translate(0, 0, 8 << 16);
@@ -154,6 +175,7 @@ int main(void)
 
                wait_vblank();
                present(backbuf);
+               dma_copy16(3, (void*)OAM_ADDR, oam, sizeof oam / 2, 0);
        }
 
        return 0;
@@ -187,12 +209,33 @@ static void handle_keys(void)
        }
 
        if(KEYPRESS(KEY_A)) {
-               show_del ^= 1;
+               if(!show_del) {
+                       if(show_obj) show_del = 1;
+               } else {
+                       show_del = 0;
+               }
+               show_msgbox(show_del);
        }
        if(KEYPRESS(KEY_B)) {
                if(show_del) {
                        show_obj = 0;
                        show_del = 0;
+                       show_msgbox(0);
+               }
+       }
+}
+
+static void show_msgbox(int en)
+{
+       int i;
+
+       if(en) {
+               for(i=0; i<3; i++) {
+                       set_sprite(oam, SIDX_DEL0 + i, SNAM_DEL0 + i * 8, 42 + i * 64, 42, 0, SPR_SZ64);
+               }
+       } else {
+               for(i=0; i<3; i++) {
+                       set_sprite(oam, SIDX_DEL0 + i, 0, 0, 0, 0, 0);
                }
        }
 }