// Header File // Created 25/12/2003; 13:42:56 //Gestions des fichiers de niveaux et de boss ainsi que des scénarios... //Nombres de niveaux static unsigned short MAP_SIZE; //Niveau en cours static unsigned short MAP_LVL; //Direction de venu du niveau static unsigned char MAP_DIR; //Fin niveau static BOOL EndLevel=FALSE; static unsigned char EndLevel_Sprite=0; //Animation static BOOL PlayAnimEndLevel=FALSE; static short AnimEndLevel_x=0; //Interruption #define INT1_DOORS_ENDLEVEL 4 #define __INT1_DOORS_ENDLEVEL_FREQUENCY 514 static unsigned short __COUNTER_DOORS_ENDLEVEL=0; //Niveau en cours //void *MAP_PTR=NULL; //Pointeurs MAP #define MAP_BYTES 236 #define LVL_LEFT 0 #define LVL_RIGHT 1 //#define MAP_GetDecors (*(BYTE*)(MAP_PTR))&0x0F //Charge un fichier de niveaux BOOL Levels_OpenFile (unsigned char *name) { //entry FILE entry_fileLVL=GetSymByName (FindFile (name)); if (entry_fileLVL==NULL) return FALSE; //Si n'existe pas? entry_fileLVL->handle=HeapLock (entry_fileLVL->handle); if (entry_fileLVL==H_NULL) return FALSE; //Pointeur FileLVL=HeapDeref (entry_fileLVL->handle)+2; //Taille du fichier en niveaux MAP_SIZE=*(unsigned short*)(FileLVL); //Niveau 1 LEVEL=1; return TRUE; } //Charge le niveau voulu BOOL Levels_SetMap (unsigned char level,unsigned char dir) { long offset; //Gestion d'erreur dépassement de capacités if (level>MAP_SIZE) return FALSE; offset=((MAP_BYTES*2)*(level-1))-MAP_BYTES+(MAP_BYTES*dir)+2; if (offset<0) return FALSE; //Variables niveau MAP_LVL=level; MAP_DIR=dir; //Pointeur de données MAP_PTR=(void *)(FileLVL+offset); //Scénario de la MAP MAP_SCENARIO=*(unsigned char*)(FileLVL+offset); //Remplie le buffer LevelMap memcpy (LevelMap,MAP_PTR+2,18*13); //Niveau non terminé EndLevel=FALSE; LEVEL=level; LEVEL_DIR=dir; billes_counter_time=0; //Décors du niveau en cours MNU_ShowDecors (0); return TRUE; }