Bond697

Untitled

Dec 13th, 2012
646
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.38 KB | None | 0 0
  1. #include <nds.h>
  2. #include <stdio.h>
  3. #include <maxmod9.h>
  4. #include <ctime>
  5.  
  6. #include "Mem_int.h"
  7. #include "Divmod.h"
  8. #include "images.h"
  9.  
  10. #include "soundbank.h"
  11. #include "soundbank_bin.h"
  12.  
  13.  
  14. using namespace std;
  15.  
  16.  
  17. #define MAX_IMG 36
  18. #define LCD_X 256
  19. #define LCD_Y 192
  20.  
  21. vu32 vframe = 0;
  22.  
  23. bool g_auto_run;
  24.  
  25. //glb store for array idx-
  26. typedef struct{
  27.  
  28.     u32 imgNum;
  29.     u32 imgNumSub;
  30.     u32 prevImgNum;
  31.     u32 prevImgNumSub;
  32.  
  33. } ImgIdx;
  34.  
  35.  
  36. void InitImgSystem(ImgIdx* ImgSys, const u32* nameSet[]);
  37. void UpdateImgSystem(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data);
  38. void buttonChange(ImgIdx* ImgSys, const u32* nameSet[]);
  39. void touchChange(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data);
  40.  
  41.  
  42. void VBlankHandler()
  43. {
  44.  
  45.     vframe++;
  46.  
  47. }
  48.  
  49.  
  50. int main(void) {
  51.  
  52.     irqEnable(IRQ_VBLANK);
  53.     irqSet(IRQ_VBLANK, VBlankHandler);
  54.  
  55.     srand(time(NULL));
  56.     ImgIdx idx;
  57.     touchPosition pad;
  58.     g_auto_run = false;
  59.  
  60.     mmInitDefaultMem((mm_addr)soundbank_bin);
  61.     mmLoad( MOD_PIANO2 );
  62.     mmStart( MOD_PIANO2, MM_PLAY_LOOP );
  63.  
  64.     const u32* imgNames[] = {
  65.  
  66.         _S11IBitmap,
  67.         _sz3tBitmap,
  68.         qPqqBBitmap,
  69.         QekDFBitmap,
  70.         PgxwNBitmap,
  71.         oWdtNBitmap,
  72.         N8vGYBitmap,
  73.         myObXhBitmap,
  74.         MQHYBBitmap,
  75.         lNk8UBitmap,
  76.         L6KqSBitmap,
  77.         IwbHgBitmap,
  78.         if2K3Bitmap,
  79.         GvvZbBitmap,
  80.         _8pvOBitmap,
  81.         _7be3Bitmap,
  82.         wUZ2rBitmap,
  83.         UwnCABitmap,
  84.         twGxYBitmap,
  85.         Tg7krBitmap,
  86.         TbwWnBitmap,
  87.         TbMXIBitmap,
  88.         skSpOBitmap,
  89.         rkfEKBitmap,
  90.         _gf5sBitmap,
  91.         _MUiJBitmap,
  92.         _nDbnBitmap,
  93.         _C6luBitmap,
  94.         _cHkJBitmap,
  95.         _EI7eBitmap,
  96.         _6lUbBitmap,
  97.         _4ReeBitmap,
  98.         _9U23Bitmap,
  99.         rFOlvBitmap,
  100.         WScaBBitmap,
  101.         lkem4Bitmap  };
  102.  
  103.  
  104.     //engine modes ------------
  105.     videoSetMode(MODE_5_2D);
  106.     videoSetModeSub(MODE_5_2D);
  107.  
  108.  
  109.     //engine banks ------------
  110.     vramSetBankA(VRAM_A_MAIN_BG);
  111.     vramSetBankC(VRAM_C_SUB_BG);
  112.  
  113.  
  114.     // set up our bitmap backgrounds, both engines
  115.     bgInit(3, BgType_Bmp16, BgSize_B16_256x256, 0,0);
  116.     bgInitSub(3, BgType_Bmp16, BgSize_B16_256x256, 0,0);
  117.  
  118.  
  119.     InitImgSystem(&idx, imgNames);
  120.  
  121.     while(1) {
  122.         swiWaitForVBlank();
  123.         scanKeys();
  124.         touchRead(&pad);
  125.  
  126.         if(keysDown() & KEY_R)
  127.         {
  128.             if(g_auto_run)
  129.             {
  130.                 g_auto_run = false;
  131.             }
  132.             else
  133.             {
  134.                 g_auto_run = true;
  135.             }
  136.         }
  137.  
  138.         UpdateImgSystem(&idx, imgNames, &pad);
  139.  
  140.     }
  141.  
  142.     return 0;
  143. }
  144.  
  145.  
  146. void InitImgSystem(ImgIdx* ImgSys, const u32* nameSet[])
  147. {
  148.     //pick 1st pic---------------------------------------------
  149.     ImgSys->imgNum          = DivmodUnsigned(rand(), MAX_IMG, MOD);
  150.     ImgSys->imgNumSub       = DivmodUnsigned(rand(), MAX_IMG, MOD);
  151.     ImgSys->prevImgNum      = 0;
  152.     ImgSys->prevImgNumSub   = 0;
  153.  
  154.     //make sure the first picture is never the same------------
  155.     while(ImgSys->imgNum == ImgSys->imgNumSub)
  156.     {
  157.         ImgSys->imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  158.     }
  159.  
  160.     decompress(nameSet[ImgSys->imgNum], BG_GFX,  LZ77Vram);
  161.     decompress(nameSet[ImgSys->imgNumSub], BG_GFX_SUB,  LZ77Vram);
  162. }
  163.  
  164.  
  165. void UpdateImgSystem(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data)
  166. {
  167.    
  168.     buttonChange(ImgSys, nameSet);
  169.     touchChange(ImgSys, nameSet, data);
  170. }
  171.  
  172.  
  173. void buttonChange(ImgIdx* ImgSys, const u32* nameSet[])
  174. {
  175.  
  176.     if(!g_auto_run)
  177.     {
  178.  
  179.         if(keysDown() & KEY_A)
  180.         {
  181.             u32 l_imgNum        = ImgSys->imgNum;
  182.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  183.             u32 l_prevImgNum    = ImgSys->prevImgNum;
  184.  
  185.             l_prevImgNum = l_imgNum;
  186.             l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  187.  
  188.             while((l_imgNum == l_prevImgNum) || (l_imgNum == l_imgNumSub))
  189.             {
  190.                 l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  191.             }
  192.  
  193.             ImgSys->imgNum      = l_imgNum;
  194.             ImgSys->prevImgNum  = l_prevImgNum;
  195.  
  196.             Memset8(BG_GFX, 0, 0x20000);
  197.             decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
  198.         }
  199.         else if(keysDown() & KEY_B)
  200.         {
  201.             u32 l_imgNum        = ImgSys->imgNum;
  202.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  203.             u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
  204.  
  205.             l_prevImgNumSub = l_imgNumSub;
  206.             l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  207.  
  208.             while((l_imgNumSub == l_prevImgNumSub) || (l_imgNumSub == l_imgNum))
  209.             {
  210.                 l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  211.             }
  212.  
  213.             ImgSys->imgNumSub       = l_imgNumSub;
  214.             ImgSys->prevImgNumSub   = l_prevImgNumSub;
  215.  
  216.             Memset8(BG_GFX_SUB, 0, 0x20000);
  217.             decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
  218.         }
  219.         else if(keysDown() & KEY_L)
  220.         {
  221.             u32 l_imgNum        = ImgSys->imgNum;
  222.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  223.             u32 l_prevImgNum    = ImgSys->prevImgNum;
  224.             u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
  225.  
  226.             l_prevImgNum    = l_imgNum;
  227.             l_prevImgNumSub = l_imgNumSub;
  228.             l_imgNum    = DivmodUnsigned(rand(), MAX_IMG, MOD);
  229.             l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  230.  
  231.             while((l_imgNum == l_prevImgNum) || (l_imgNumSub == l_prevImgNumSub) || (l_imgNum == l_imgNumSub))
  232.             {
  233.                 if(l_imgNum == l_prevImgNum)
  234.                 {
  235.                     l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  236.                 }
  237.                 else if(l_imgNumSub == l_prevImgNumSub)
  238.                 {
  239.                     l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  240.                 }
  241.                 else if(l_imgNum == l_imgNumSub)
  242.                 {
  243.                     l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  244.                 }
  245.             }
  246.  
  247.             ImgSys->imgNum          = l_imgNum;
  248.             ImgSys->prevImgNum      = l_prevImgNum;
  249.             ImgSys->imgNumSub       = l_imgNumSub;
  250.             ImgSys->prevImgNumSub   = l_prevImgNumSub;
  251.  
  252.             Memset8(BG_GFX, 0, 0x20000);
  253.             Memset8(BG_GFX_SUB, 0, 0x20000);
  254.  
  255.             decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
  256.             decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
  257.         }
  258.     }
  259.     else
  260.     {
  261.         if(DivmodUnsigned(vframe, 360, MOD) == 1)
  262.         {
  263.             u32 l_imgNum        = ImgSys->imgNum;
  264.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  265.             u32 l_prevImgNum    = ImgSys->prevImgNum;
  266.             u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
  267.  
  268.             l_prevImgNum    = l_imgNum;
  269.             l_prevImgNumSub = l_imgNumSub;
  270.             l_imgNum    = DivmodUnsigned(rand(), MAX_IMG, MOD);
  271.             l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  272.  
  273.             while((l_imgNum == l_prevImgNum) || (l_imgNumSub == l_prevImgNumSub) || (l_imgNum == l_imgNumSub))
  274.             {
  275.                 if(l_imgNum == l_prevImgNum)
  276.                 {
  277.                     l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  278.                 }
  279.                 else if(l_imgNumSub == l_prevImgNumSub)
  280.                 {
  281.                     l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  282.                 }
  283.                 else if(l_imgNum == l_imgNumSub)
  284.                 {
  285.                     l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  286.                 }
  287.             }
  288.  
  289.             ImgSys->imgNum          = l_imgNum;
  290.             ImgSys->prevImgNum      = l_prevImgNum;
  291.             ImgSys->imgNumSub       = l_imgNumSub;
  292.             ImgSys->prevImgNumSub   = l_prevImgNumSub;
  293.  
  294.             Memset8(BG_GFX, 0, 0x20000);
  295.             Memset8(BG_GFX_SUB, 0, 0x20000);
  296.  
  297.             decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
  298.             decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
  299.         }
  300.     }
  301. }
  302.  
  303.  
  304. void touchChange(ImgIdx* ImgSys, const u32* nameSet[], touchPosition* data)
  305. {
  306.  
  307.     if(!g_auto_run)
  308.     {
  309.         u32 l_px = data->px;
  310.         u32 l_py = data->py;
  311.  
  312.         if((keysDown() & KEY_TOUCH) && ((l_px < (LCD_X / 2)) && (l_py < (LCD_Y / 2))))
  313.         {
  314.             u32 l_imgNum        = ImgSys->imgNum;
  315.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  316.             u32 l_prevImgNum    = ImgSys->prevImgNum;
  317.  
  318.             l_prevImgNum = l_imgNum;
  319.             l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  320.  
  321.             while((l_imgNum == l_prevImgNum) || (l_imgNum == l_imgNumSub))
  322.             {
  323.                 l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  324.             }
  325.  
  326.             ImgSys->imgNum      = l_imgNum;
  327.             ImgSys->prevImgNum  = l_prevImgNum;
  328.  
  329.             Memset8(BG_GFX, 0, 0x20000);
  330.             decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
  331.         }
  332.         else if((keysDown() & KEY_TOUCH) && ((l_px >= (LCD_X / 2)) && (l_py < (LCD_Y / 2))))
  333.         {
  334.             u32 l_imgNum        = ImgSys->imgNum;
  335.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  336.             u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
  337.  
  338.             l_prevImgNumSub = l_imgNumSub;
  339.             l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  340.  
  341.             while((l_imgNumSub == l_prevImgNumSub) || (l_imgNumSub == l_imgNum))
  342.             {
  343.                 l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  344.             }
  345.  
  346.             ImgSys->imgNumSub       = l_imgNumSub;
  347.             ImgSys->prevImgNumSub   = l_prevImgNumSub;
  348.  
  349.             Memset8(BG_GFX_SUB, 0, 0x20000);
  350.             decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
  351.         }
  352.         else if((keysDown() & KEY_TOUCH) && ((l_px < (LCD_X / 2)) && (l_py >= (LCD_Y / 2))))
  353.         {
  354.             u32 l_imgNum        = ImgSys->imgNum;
  355.             u32 l_imgNumSub     = ImgSys->imgNumSub;
  356.             u32 l_prevImgNum    = ImgSys->prevImgNum;
  357.             u32 l_prevImgNumSub = ImgSys->prevImgNumSub;
  358.  
  359.             l_prevImgNum    = l_imgNum;
  360.             l_prevImgNumSub = l_imgNumSub;
  361.             l_imgNum    = DivmodUnsigned(rand(), MAX_IMG, MOD);
  362.             l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  363.  
  364.             while((l_imgNum == l_prevImgNum) || (l_imgNumSub == l_prevImgNumSub) || (l_imgNum == l_imgNumSub))
  365.             {
  366.                 if(l_imgNum == l_prevImgNum)
  367.                 {
  368.                     l_imgNum = DivmodUnsigned(rand(), MAX_IMG, MOD);
  369.                 }
  370.                 else if(l_imgNumSub == l_prevImgNumSub)
  371.                 {
  372.                     l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  373.                 }
  374.                 else if(l_imgNum == l_imgNumSub)
  375.                 {
  376.                     l_imgNumSub = DivmodUnsigned(rand(), MAX_IMG, MOD);
  377.                 }
  378.             }
  379.  
  380.             ImgSys->imgNum          = l_imgNum;
  381.             ImgSys->prevImgNum      = l_prevImgNum;
  382.             ImgSys->imgNumSub       = l_imgNumSub;
  383.             ImgSys->prevImgNumSub   = l_prevImgNumSub;
  384.  
  385.             Memset8(BG_GFX, 0, 0x20000);
  386.             Memset8(BG_GFX_SUB, 0, 0x20000);
  387.  
  388.             decompress(nameSet[l_imgNum], BG_GFX,  LZ77Vram);
  389.             decompress(nameSet[l_imgNumSub], BG_GFX_SUB,  LZ77Vram);
  390.         }
  391.     }
  392.  
  393.  
  394.     u32 l_px = data->px;
  395.     u32 l_py = data->py;
  396.  
  397.     if((keysDown() & KEY_TOUCH) && ((l_px >= (LCD_X / 2)) && (l_py >= (LCD_Y / 2))))
  398.     {
  399.         if(g_auto_run)
  400.         {
  401.             g_auto_run = false;
  402.         }
  403.         else
  404.         {
  405.             g_auto_run = true;
  406.         }
  407.     }
  408.    
  409.  
  410. }
Advertisement
Add Comment
Please, Sign In to add comment