#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <SDL/SDL.h>
#include "main.h"
#include "evenements.h"
#include "options.h"


void chargeniv(FILE *fich)
{
  int x, y, i, n;
  //int nevt=0;
  //Coord evt[50];
  char niv, c;
  //printf("Chargement du niveau...");

  fscanf(fich, "REGEN=%i\n", &REGEN);
  fscanf(fich, "BONUSFREQ=%i\n", &BONUSFREQ);
  fscanf(fich, "NBOMBES=%i\n", &NBOMBES);
  fscanf(fich, "REBOURS=%i\n", &REBOURS);

  n=aleat(8);
  if (!danslemenu)
    for (i=0; i<8; i++)
      {
	fscanf(fich, "perso[%*i]:(%i,%i)\n", &x, &y);
	perso[(i+n)%8].pos.x=x;
	perso[(i+n)%8].pos.y=y;
      }
  else
    for (i=0; i<8; i++)
      {
	fscanf(fich, "perso[%*i]:(%i,%i)\n", &x, &y);
	perso[i].pos.x=x;
	perso[i].pos.y=y;
      }
  
  do
    fread(&niv, 1, 1, fich);
  while (niv!='{');

  fread(&c, 1, 1, fich);
  for(y=0; y<15; y++)
    for(x=0; x<16; x++)
      {
	int params[260];
	int nparams=0;
	niv=c;
	while (niv=='\n' || niv==' ')
	  fread(&niv, 1, 1, fich);

	fread(&c, 1, 1, fich);
	while (c=='[') {
	  fscanf(fich, "%i]", &params[nparams]);
	  nparams++;
	  fread(&c, 1, 1, fich); }

	pl[x][y].elem=sol;
	pl[x][y].type=LIBRE;
	pl[x][y].anim=0;
	pl[x][y].frame=0;
	pl[x][y].bombe=0;
	pl[x][y].sol=0;
	pl[x][y].elemsg=NULL;
	if (nparams)
	  pl[x][y].params=(int *)realloc(pl[x][y].params,
					 nparams*sizeof(int));
	for (i=0; i<nparams; i++)
	  pl[x][y].params[i]=params[i];
	pl[x][y].nparams=nparams;

	switch (niv)
	  {
	  case '_' :
	    if (!nparams)
	      {
		if (rand()>0.9*RAND_MAX)
		  pl[x][y].anim = 1;
		pl[x][y].frame = aleat(sol->anims[pl[x][y].anim]->nframes);
	      }
	    else
	      {
		pl[x][y].anim=2;
		pl[x][y].frame=params[0];
	      }
	    break;
	  case '#' :
	    pl[x][y].elem=bloc;
	    pl[x][y].type=DESTRUCTIBLE;
	    pl[x][y].sol=1;
	    pl[x][y].frame=(!nparams) ? aleat( bloc->anims[0]->nframes )
	      : params[0];
	    break;
	  case '+' :
	    pl[x][y].elem=mur;
	    pl[x][y].type=INDESTRUCTIBLE;
	    pl[x][y].frame=(!nparams) ? aleat ( mur->anims[0]->nframes )
	      : params[0];
	    break;
	  case '§' :
	    pl[x][y].elem=mur;
	    pl[x][y].frame=(!nparams) ? aleat ( mur->anims[0]->nframes )
	      : params[0];
	    break;
	  case '=' :
	    pl[x][y].elem=tunnel;
	    pl[x][y].type=TUNNEL;
	    pl[x][y].frame=params[0];
	    break;
	  case '>' :
	    pl[x][y].type=SENSUNIQUE;
	    pl[x][y].elem=fleche;
	    pl[x][y].anim=params[0];
	    pl[x][y].sol=1;
	    if (danslemenu==2) /* Menu de choix du perso */
	      animsplus(fleche, params[0], 10, 0, x, y);
	    break;
	  case 'T' :
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=teleportation;
	    animsplus(teleport, 0, 5, 0, x, y);
	    break;
	  case 'O' :
	    pl[x][y].elem=bouton;
	    pl[x][y].sol=1;
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=changecase;
	    break;
	  case '0' :
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=changecase;
	    break;
	  case 'M' :
	    pl[x][y].elem=sol;
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=menuevt;
	    if (danslemenu==2 || (99<params[0] && params[0]<106)) /* Menu de choix du perso */
	      animsplus(bouton, 0, 3, 0, x, y);
	    break;
	  case 'P' :
	    pl[x][y].elem=sol;
	    fauxperso[params[0]].x=x;
	    fauxperso[params[0]].y=y;
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].params[0]=params[0]+121;
	    pl[x][y].evt=menuevt;
	    break;
	  case '*' :
	    pl[x][y].elem=sol;
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=recharge;
	    animsplus(fontaine, 0, 3, 0, x, y);
	    break;
	    /* Les deux derniers sont pour l'écran des options */
	  case 'R' :
	    pl[x][y].elem=sol;
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=reglage;
	    animsplus(bouton, 1, 0, 0, x, y);
	    evtsplus(dessineregl, 0, x, y, 0, 0, params[0], AVANT, NULL);
	    break;
	  case 'S' :
	    pl[x][y].elem=sol;
	    pl[x][y].type=EVENEMENT;
	    pl[x][y].evt=onoff;
	    evtsplus(dessinebouton, 0, x, y, 0, 0, params[0], AVANT, NULL);
	    break;
	  }
      }
  
  do
    fread(&niv, 1, 1, fich);
  while (niv!='}');

/*    for (i=0; i<nevt; i++) */
/*      { */
/*        fscanf(fich, " E%*i: %c", &niv); */
/*        switch (niv) */
/*  	{ */
/*  	} */
/*      } */
  
  //printf("OK\n");
/*    for (y=0; y<15; y++) */
/*      { */
/*        for (x=0; x<16; x++) */
/*    	    printf("%2i", pl[x][y].type); */
/*        printf("\n"); */
/*      } */
  return;
}
