#include <mygba.h>
#include "materiel.h"
#include "routines.h"

#include "Res/Listes/def.h"
#include "Res/all.h"

//MULTIBOOT

void CopieMap_16x16();
void CopieListe();

int main(void)
{
   // Passer en mode 0, avec le BG0 activé:
   REG_DISPCNT = (VIDEO_MODE0 | VIDEO_BG0_ENABLED | OBJ_ENABLED | 0x40);
   // Configure le plan 0
   REG_BG0CNT = BG_TEXTE_256x256 | BG_16_PALETTES | BG_WRAP | 31<<8;
   
   //Copie la palette graphique
   CopieDMA((void*)pal_gfx_palette, Palette, sizeof(pal_gfx_palette)>>1, DMA_16im);
   //Copie le tileset
   CopieDMA((void*)til_gfx_tiles, (void*)CharBaseBlock(0), sizeof(til_gfx_tiles)>>1, DMA_16im);

   //Palette des objets
   CopieDMA((void*)pal_obj_palette, Palette+256, sizeof(pal_obj_palette)>>1, DMA_16im);
   //Tileset des objets
   CopieDMA((void*)til_obj_tiles, (void*)CharBaseBlock(4), sizeof(til_obj_tiles)>>1, DMA_16im);

   //Copie la map
   CopieMap_16x16();
   //Et la liste
   CopieListe();
   
   while(1);
   return 0;
}

#define map_31(x,y) (*((unsigned short*)ScreenBaseBlock(31)+(y)*32+(x)))

void CopieMap_16x16()    {
   unsigned short *dst = (void*)ScreenBaseBlock(31);            //Map de destination
   int x,y;

   //Map: 15x10
   for (y=0;y<10;y++)
      for (x=0;x<15;x++)      {
         map_31(x*2,y*2)=map_gfx_map[y][x]*4;
         map_31(x*2+1,y*2)=map_gfx_map[y][x]*4+1;
         map_31(x*2,y*2+1)=map_gfx_map[y][x]*4+2;
         map_31(x*2+1,y*2+1)=map_gfx_map[y][x]*4+3;
      }
}

void CopieListe()    {
   int idx;

   //Pour copier la liste, on la parcourt et on crée des objets. Une fois adapté à votre jeu, cela sera peut-être plus compliqué
   for (idx=0;idx<obj_liste_liste_nbEle;idx++)     {
      //TOOL_OAM_OBJ_CREATE crée un objet (sprite) en mémoire OAM
      TOOL_OAM_OBJ_CREATE( idx,                          //n° de sprite
                           4*obj_liste_liste[idx].type,  //Tiles (comme c'est du 16x16, on en a 4 par sprite)
                           obj_liste_liste[idx].x,       //Position x
                           obj_liste_liste[idx].y,       //Position y
                           0,0,1,0,0,1,0,0,0,0,0,0);     //Le reste
   }

}


/* END OF FILE */
