Bond697 icon

Untitled

Bond697 | PRO | 12/13/12 07:22:32 AM UTC | 0 ⭐ | 604 👁️ | Never ⏰ | []
C |

9.38 KB

|

None

|

0 👍

/

0 👎

#include <nds.h>
#include <stdio.h>
#include <maxmod9.h>
#include <ctime>
 
#include "Mem_int.h"
#include "Divmod.h"
#include "images.h"
 
#include "soundbank.h"
#include "soundbank_bin.h"
 
 
using namespace std;
 
 
#define MAX_IMG 36
#define LCD_X 256
#define LCD_Y 192
 
vu32 vframe = 0;
 
bool g_auto_run;
 
//glb store for array idx-
typedef struct{
 
    u32 imgNum;
    u32 imgNumSub;
    u32 prevImgNum;
    u32 prevImgNumSub;
 
} ImgIdx;
 
 
void InitImgSystem(ImgIdx* ImgSys, const u32* nameSet[]);
void UpdateImgSystem(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data);
void buttonChange(ImgIdx* ImgSys, const u32* nameSet[]);
void touchChange(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data);
 
 
void VBlankHandler()
{
 
    vframe++;
 
}
 
 
int main(void) {
 
    irqEnable(IRQ_VBLANK);
    irqSet(IRQ_VBLANK, VBlankHandler);
 
    srand(time(NULL));
    ImgIdx idx;
    touchPosition pad;
    g_auto_run = false;
 
    mmInitDefaultMem((mm_addr)soundbank_bin);
    mmLoad( MOD_PIANO2 );
    mmStart( MOD_PIANO2, MM_PLAY_LOOP );
 
    const u32* imgNames[] = {
 
        _S11IBitmap,
        _sz3tBitmap,
        qPqqBBitmap,
        QekDFBitmap,
        PgxwNBitmap,
        oWdtNBitmap,
        N8vGYBitmap,
        myObXhBitmap,
        MQHYBBitmap,
        lNk8UBitmap,
        L6KqSBitmap,
        IwbHgBitmap,
        if2K3Bitmap,
        GvvZbBitmap,
        _8pvOBitmap,
        _7be3Bitmap,
        wUZ2rBitmap,
        UwnCABitmap,
        twGxYBitmap,
        Tg7krBitmap,
        TbwWnBitmap,
        TbMXIBitmap,
        skSpOBitmap,
        rkfEKBitmap,
        _gf5sBitmap,
        _MUiJBitmap,
        _nDbnBitmap,
        _C6luBitmap,
        _cHkJBitmap,
        _EI7eBitmap,
        _6lUbBitmap,
        _4ReeBitmap,
        _9U23Bitmap,
        rFOlvBitmap,
        WScaBBitmap,
        lkem4Bitmap  };
 
 
    //engine modes ------------
    videoSetMode(MODE_5_2D);
    videoSetModeSub(MODE_5_2D); 
 
 
    //engine banks ------------
    vramSetBankA(VRAM_A_MAIN_BG);
    vramSetBankC(VRAM_C_SUB_BG);
 
 
    // set up our bitmap backgrounds, both engines
    bgInit(3, BgType_Bmp16, BgSize_B16_256x256, 0,0);
    bgInitSub(3, BgType_Bmp16, BgSize_B16_256x256, 0,0);
 
 
    InitImgSystem(&idx, imgNames);
 
    while(1) {
        swiWaitForVBlank();
        scanKeys();
        touchRead(&pad);
 
        if(keysDown() & KEY_R)
        {
            if(g_auto_run)
            {
                g_auto_run = false;
            }
            else
            {
                g_auto_run = true;
            }
        }
 
        UpdateImgSystem(&idx, imgNames, &pad);
 
    }
 
    return 0;
}
 
 
void InitImgSystem(ImgIdx* ImgSys, const u32* nameSet[])
{
    //pick 1st pic---------------------------------------------
    ImgSys->imgNum          = DivmodUnsigned(rand(), MAX_IMG, MOD);
    ImgSys->imgNumSub       = DivmodUnsigned(rand(), MAX_IMG, MOD);
    ImgSys->prevImgNum      = 0;
    ImgSys->prevImgNumSub   = 0;
 
    //make sure the first picture is never the same------------
    while(ImgSys->imgNum == ImgSys->imgNumSub)
    {
        ImgSys->imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
    }
 
    decompress(nameSet[ImgSys->imgNum], BG_GFX,  LZ77Vram);
    decompress(nameSet[ImgSys->imgNumSub], BG_GFX_SUB,  LZ77Vram);
}
 
 
void UpdateImgSystem(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data)
{
    
    buttonChange(ImgSys, nameSet);
    touchChange(ImgSys, nameSet, data);
}
 
 
void buttonChange(ImgIdx* ImgSys, const u32* nameSet[])
{
 
    if(!g_auto_run)
    {
 
        if(keysDown() & KEY_A)
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNum    = ImgSys->prevImgNum;
 
            l_prevImgNum = l_imgNum;
            l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNum == l_prevImgNum) || (l_imgNum == l_imgNumSub))
            {
                l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
            }
 
            ImgSys->imgNum      = l_imgNum;
            ImgSys->prevImgNum  = l_prevImgNum;
 
            Memset8(BG_GFX, 0, 0x20000);
            decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
        }
        else if(keysDown() & KEY_B)
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
 
            l_prevImgNumSub = l_imgNumSub;
            l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNumSub == l_prevImgNumSub) || (l_imgNumSub == l_imgNum))
            {
                l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
            }
 
            ImgSys->imgNumSub       = l_imgNumSub;
            ImgSys->prevImgNumSub   = l_prevImgNumSub;
 
            Memset8(BG_GFX_SUB, 0, 0x20000);
            decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
        }
        else if(keysDown() & KEY_L)
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNum    = ImgSys->prevImgNum;
            u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
 
            l_prevImgNum    = l_imgNum;
            l_prevImgNumSub = l_imgNumSub;
            l_imgNum    = DivmodUnsigned(rand(), MAX_IMG, MOD);
            l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNum == l_prevImgNum) || (l_imgNumSub == l_prevImgNumSub) || (l_imgNum == l_imgNumSub))
            {
                if(l_imgNum == l_prevImgNum)
                {
                    l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
                else if(l_imgNumSub == l_prevImgNumSub)
                {
                    l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
                else if(l_imgNum == l_imgNumSub)
                {
                    l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
            }
 
            ImgSys->imgNum          = l_imgNum;
            ImgSys->prevImgNum      = l_prevImgNum;
            ImgSys->imgNumSub       = l_imgNumSub;
            ImgSys->prevImgNumSub   = l_prevImgNumSub;
 
            Memset8(BG_GFX, 0, 0x20000);
            Memset8(BG_GFX_SUB, 0, 0x20000);
 
            decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
            decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
        }
    }
    else
    {
        if(DivmodUnsigned(vframe, 360, MOD) == 1)
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNum    = ImgSys->prevImgNum;
            u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
 
            l_prevImgNum    = l_imgNum;
            l_prevImgNumSub = l_imgNumSub;
            l_imgNum    = DivmodUnsigned(rand(), MAX_IMG, MOD);
            l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNum == l_prevImgNum) || (l_imgNumSub == l_prevImgNumSub) || (l_imgNum == l_imgNumSub))
            {
                if(l_imgNum == l_prevImgNum)
                {
                    l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
                else if(l_imgNumSub == l_prevImgNumSub)
                {
                    l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
                else if(l_imgNum == l_imgNumSub)
                {
                    l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
            }
 
            ImgSys->imgNum          = l_imgNum;
            ImgSys->prevImgNum      = l_prevImgNum;
            ImgSys->imgNumSub       = l_imgNumSub;
            ImgSys->prevImgNumSub   = l_prevImgNumSub;
 
            Memset8(BG_GFX, 0, 0x20000);
            Memset8(BG_GFX_SUB, 0, 0x20000);
 
            decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
            decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
        }
    }
}
 
 
void touchChange(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data)
{
 
    if(!g_auto_run)
    {
        u32 l_px = data->px;
        u32 l_py = data->py;
 
        if((keysDown() & KEY_TOUCH) && ((l_px < (LCD_X / 2)) && (l_py < (LCD_Y / 2))))
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNum    = ImgSys->prevImgNum;
 
            l_prevImgNum = l_imgNum;
            l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNum == l_prevImgNum) || (l_imgNum == l_imgNumSub))
            {
                l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
            }
 
            ImgSys->imgNum      = l_imgNum;
            ImgSys->prevImgNum  = l_prevImgNum;
 
            Memset8(BG_GFX, 0, 0x20000);
            decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
        }
        else if((keysDown() & KEY_TOUCH) && ((l_px >= (LCD_X / 2)) && (l_py < (LCD_Y / 2))))
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
 
            l_prevImgNumSub = l_imgNumSub;
            l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNumSub == l_prevImgNumSub) || (l_imgNumSub == l_imgNum))
            {
                l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
            }
 
            ImgSys->imgNumSub       = l_imgNumSub;
            ImgSys->prevImgNumSub   = l_prevImgNumSub;
 
            Memset8(BG_GFX_SUB, 0, 0x20000);
            decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
        }
        else if((keysDown() & KEY_TOUCH) && ((l_px < (LCD_X / 2)) && (l_py >= (LCD_Y / 2))))
        {
            u32 l_imgNum        = ImgSys->imgNum;
            u32 l_imgNumSub     = ImgSys->imgNumSub;
            u32 l_prevImgNum    = ImgSys->prevImgNum;
            u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
 
            l_prevImgNum    = l_imgNum;
            l_prevImgNumSub = l_imgNumSub;
            l_imgNum    = DivmodUnsigned(rand(), MAX_IMG, MOD);
            l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
 
            while((l_imgNum == l_prevImgNum) || (l_imgNumSub == l_prevImgNumSub) || (l_imgNum == l_imgNumSub))
            {
                if(l_imgNum == l_prevImgNum)
                {
                    l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
                else if(l_imgNumSub == l_prevImgNumSub)
                {
                    l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
                else if(l_imgNum == l_imgNumSub)
                {
                    l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
                }
            }
 
            ImgSys->imgNum          = l_imgNum;
            ImgSys->prevImgNum      = l_prevImgNum;
            ImgSys->imgNumSub       = l_imgNumSub;
            ImgSys->prevImgNumSub   = l_prevImgNumSub;
 
            Memset8(BG_GFX, 0, 0x20000);
            Memset8(BG_GFX_SUB, 0, 0x20000);
 
            decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
            decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
        }
    }
 
 
    u32 l_px = data->px;
    u32 l_py = data->py;
 
    if((keysDown() & KEY_TOUCH) && ((l_px >= (LCD_X / 2)) && (l_py >= (LCD_Y / 2))))
    {
        if(g_auto_run)
        {
            g_auto_run = false;
        }
        else
        {
            g_auto_run = true;
        }
    }
    
 
}

Comments