#include #include #include #include #include #include #include #include #include #include #include "structs.h" #include "primitives.h" #define DEBUG 0 #define R_ROUGE 0 #define R_VERT 1 #define R_BLEU 2 #define R_NOIR 3 #define R_ROSE 4 #define R_CYAN 5 #define R_JAUNE 6 #define R_BLANC 7 #define LAYER_BELOW_RAYS 0 #define LAYER_ABOVE_RAYS 1 unsigned int SIZE = 16; unsigned int OFFSET_X = 12; unsigned int OFFSET_Y = 12; unsigned int OFFSET_X_MINIMAP = 312; unsigned int OFFSET_Y_MINIMAP = 160; unsigned char SCALE_X_MINIMAP = 8; unsigned char SCALE_Y_MINIMAP = 6; unsigned char ALPHA_OPAQUE_DEFAULT = 80; //191 unsigned char ALPHA_TRANSPARENT_DEFAULT = 40; //62 unsigned char ALPHA_OPAQUE = ALPHA_OPAQUE_DEFAULT; unsigned char ALPHA_TRANSPARENT = ALPHA_TRANSPARENT_DEFAULT; unsigned char ALPHA_BLOQUE = 1; unsigned char SPEEDUP_RAY = 1; unsigned char SPEEDUP_WALL = 1; char LEVELCOLOR=0; const char* Revision = "Revision 1.0A"; const char* RevShort = "v1.0A"; static const uint16_t *filepath = u"\\\\fls0\\MgcLght.sav"; bool saveexist = false; unsigned int sizeoffile; GameSaveStatus sauvegarde; LevelSaveStatus partielevel[33]; #define NB_LEVELS 32 unsigned char NbReceptorsLevel; unsigned char NbDoorsLevel; unsigned char NbBlocksLevel; unsigned char NbTreasureLevel; unsigned char NbObstacleLevel; unsigned char NbMonsterLevel; unsigned char NbBossLevel; unsigned char NbBulletLevel; selection selected = JOUEUR; unsigned int score; unsigned char life = 3; unsigned char lifeMax = 5; unsigned char SIZE_MAP_X=13; unsigned char SIZE_MAP_Y=11; Player joueur; Light lumiere; //MapItem carte[SIZE_MAP_X][SIZE_MAP_Y]; Wall murs[4]; Blocks* BlocRouge; Blocks* BlocVert ; Blocks* BlocBleu; Blocks* BlocNoir; Blocks* BlocksCollection=NULL; Receptor* ReceptorCollection=NULL; Door* DoorCollection=NULL; Treasure* TreasureCollection=NULL; Obstacle* ObstaclesCollection=NULL; Monster* MonstersCollection=NULL; Boss* BossCollection=NULL; Bullet* BulletCollection=NULL; Minimap Map[ 33 ]; unsigned char ALPHA_VALIDE = 255; unsigned char ALPHA_NON_VALIDE = 100; unsigned char EPSILON = 16; extern bopti_image_t maintitle; extern bopti_image_t leveltiles; extern bopti_image_t sprites; extern bopti_image_t player; extern bopti_image_t light; extern bopti_image_t cursor; extern bopti_image_t parchemin; extern bopti_image_t treasures; extern bopti_image_t chests; extern bopti_image_t monstres; extern bopti_image_t hearts; extern bopti_image_t bossmages; extern bopti_image_t bigboss; extern bopti_image_t bigparch; extern bopti_image_t bulletsbicolor; extern bopti_image_t fragments; extern bopti_image_t village; extern bopti_image_t castletitle; extern bopti_image_t theend; uint16_t palette[256]; bool BlackFrag=false; bool WhiteFrag=false; bool RedFrag=false; bool GreenFrag=false; bool BlueFrag=false; extern font_t font_fantasy; extern font_t font_tiny; bool GotoMainMenu=false; bool doneMain = false; bool donePause = false; bool doneOption = false; bool doneGame = false; bool doneStart = false; bool doneTitle = false; bool doneLoose = false; bool doneDifficulty = false; bool doneStory = false; bool doneEnd = false; bool attackboss = false; unsigned int compteur_mouvement = 0; unsigned char frame_cursor = 0; unsigned char frame_light = 0; unsigned char frame_monster = 0; unsigned char frame_boss = 0; unsigned char frame=0; unsigned char frame_boss_attack=0; unsigned int xbossattack; unsigned int ybossattack; unsigned char frame_bullet=0; unsigned char attacktype; unsigned char attackpattern; bool mouvement=false; orientations direction=HAUT; unsigned char nextLevel; unsigned char currentLevel; unsigned char selectStartMenu = 0; unsigned char selectDifficultyMenu = 0; unsigned char selectOptionMenu = 0; unsigned char selectOptionPause = 0; unsigned char selectOptionLoose = 0; unsigned char selectStoryMenu = 0; unsigned char selectEndMenu = 0; unsigned char difficulty = 0; void is_save_existing( void ) { int file = BFile_Open( filepath, BFile_ReadOnly ); if (file>=0) { saveexist=true; BFile_Close( file ); } else { saveexist=false; BFile_Close( file ); } } bool is_save_existing_boolean( void ) { int file = BFile_Open( filepath, BFile_ReadOnly ); if (file>=0) { BFile_Close( file ); return true; } else { BFile_Close( file ); return false; } } void delete_save( void ) { BFile_Remove( filepath ); } void saveprogress( void ) { sizeoffile = sizeof( GameSaveStatus ) + 33*sizeof( LevelSaveStatus ); unsigned int sizecopy = sizeoffile; unsigned char* buffer; buffer = (unsigned char*) malloc( sizeoffile ); buffer[0] = sauvegarde.currentScore[0]; buffer[1] = sauvegarde.currentScore[1]; buffer[2] = sauvegarde.currentLevel; for (unsigned char k = 0; k<=32; k++ ) buffer[3+k] = sauvegarde.visitedLevels[k]; buffer[36] = sauvegarde.currentDifficulty; buffer[37] = sauvegarde.currentLife; buffer[38] = sauvegarde.redFrag; buffer[39] = sauvegarde.greenFrag; buffer[40] = sauvegarde.blueFrag; buffer[41] = sauvegarde.blackFrag; buffer[42] = sauvegarde.whiteFrag; buffer[43] = sauvegarde.terminator; ///TODO implement Room Saves int index; for (unsigned char k = 0; k<=32; k++ ) { index = sizeof( GameSaveStatus )+k*sizeof( LevelSaveStatus ); //for( int i=0; i<8; i++ ) buffer[index+0] = partielevel[k].chestStatusSave[ 0 ]; buffer[index+1] = partielevel[k].chestStatusSave[ 1 ]; buffer[index+2] = partielevel[k].chestStatusSave[ 2 ]; buffer[index+3] = partielevel[k].chestStatusSave[ 3 ]; buffer[index+4] = partielevel[k].chestStatusSave[ 4 ]; buffer[index+5] = partielevel[k].chestStatusSave[ 5 ]; buffer[index+6] = partielevel[k].chestStatusSave[ 6 ]; buffer[index+7] = partielevel[k].chestStatusSave[ 7 ]; //for( unsigned char i=8; i<12; i++ ) buffer[index+8] = partielevel[k].doorStatusSave[ 0 ]; buffer[index+9] = partielevel[k].doorStatusSave[ 1 ]; buffer[index+10] = partielevel[k].doorStatusSave[ 2 ]; buffer[index+11] = partielevel[k].doorStatusSave[ 3 ]; //for( unsigned char i=12; i<20; i++ ) buffer[index+12] = partielevel[k].bossStatusSave[ 0 ]; buffer[index+13] = partielevel[k].bossStatusSave[ 1 ]; buffer[index+14] = partielevel[k].bossStatusSave[ 2 ]; buffer[index+15] = partielevel[k].bossStatusSave[ 3 ]; buffer[index+16] = partielevel[k].bossStatusSave[ 4 ]; buffer[index+17] = partielevel[k].bossStatusSave[ 5 ]; buffer[index+18] = partielevel[k].bossStatusSave[ 6 ]; buffer[index+19] = partielevel[k].bossStatusSave[ 7 ]; //for( unsigned char i=20; i<28; i++ ) buffer[index+20] = partielevel[k].monsterStatusSave[ 0 ]; buffer[index+21] = partielevel[k].monsterStatusSave[ 1 ]; buffer[index+22] = partielevel[k].monsterStatusSave[ 2 ]; buffer[index+23] = partielevel[k].monsterStatusSave[ 3 ]; buffer[index+24] = partielevel[k].monsterStatusSave[ 4 ]; buffer[index+25] = partielevel[k].monsterStatusSave[ 5 ]; buffer[index+26] = partielevel[k].monsterStatusSave[ 6 ]; buffer[index+27] = partielevel[k].monsterStatusSave[ 7 ]; //for( unsigned char i=28; i<30; i++ ) buffer[index+28] = partielevel[k].redBlockSave[ 0 ]; buffer[index+29] = partielevel[k].redBlockSave[ 1 ]; //for( unsigned char i=30; i<32; i++ ) buffer[index+30] = partielevel[k].greenBlockSave[ 0 ]; buffer[index+31] = partielevel[k].greenBlockSave[ 1 ]; //for( unsigned char i=32; i<34; i++ ) buffer[index+32] = partielevel[k].blueBlockSave[ 0 ]; buffer[index+33] = partielevel[k].blueBlockSave[ 1 ]; //for( unsigned char i=34; i<36; i++ ) buffer[index+34] = partielevel[k].blackBlockSave[ 0 ]; buffer[index+35] = partielevel[k].blackBlockSave[ 1 ]; //for( unsigned char i=36; i<38; i++ ) buffer[index+36] = partielevel[k].lightSave[ 0 ]; buffer[index+37] = partielevel[k].lightSave[ 1 ]; } /* int file = BFile_Open( filepath, BFile_ReadOnly ); if ( file >= 0 ) { BFile_Close( file ); file = BFile_Remove( filepath ); } */ int file; BFile_Remove( filepath ); BFile_Create( filepath, BFile_File, &sizecopy ); file = BFile_Open( filepath, BFile_WriteOnly ); BFile_Write( file, buffer, sizeoffile ); BFile_Close( file ); free( buffer ); } void loadprogress( void ) { sizeoffile = sizeof( GameSaveStatus ) + 33*sizeof( LevelSaveStatus ); unsigned int sizecopy = sizeoffile; unsigned char* buffer; buffer = (unsigned char*) malloc( sizeoffile ); int file; file = BFile_Open( filepath, BFile_ReadOnly ); BFile_Read( file, buffer, sizeoffile, -1 ); BFile_Close( file ); sauvegarde.currentScore[0] = buffer[0]; sauvegarde.currentScore[1] = buffer[1]; sauvegarde.currentLevel = buffer[2]; for (unsigned char k = 0; k<=32; k++ ) sauvegarde.visitedLevels[k] = buffer[3+k]; sauvegarde.currentDifficulty = buffer[36]; sauvegarde.currentLife = buffer[37]; sauvegarde.redFrag = buffer[38]; sauvegarde.greenFrag = buffer[39]; sauvegarde.blueFrag = buffer[40]; sauvegarde.blackFrag = buffer[41]; sauvegarde.whiteFrag = buffer[42]; sauvegarde.terminator = buffer[43]; int index; for (int k = 0; k<=32; k++ ) { index = sizeof(GameSaveStatus)+k*sizeof( LevelSaveStatus ); //for( unsigned char i=0; i<8; i++ ) partielevel[k].chestStatusSave[ 0 ] = buffer[index+0]; partielevel[k].chestStatusSave[ 1 ] = buffer[index+1]; partielevel[k].chestStatusSave[ 2 ] = buffer[index+2]; partielevel[k].chestStatusSave[ 3 ] = buffer[index+3]; partielevel[k].chestStatusSave[ 4 ] = buffer[index+4]; partielevel[k].chestStatusSave[ 5 ] = buffer[index+5]; partielevel[k].chestStatusSave[ 6 ] = buffer[index+6]; partielevel[k].chestStatusSave[ 7 ] = buffer[index+7]; //for( unsigned char i=8; i<12; i++ ) partielevel[k].doorStatusSave[ 0 ] = buffer[index+8]; partielevel[k].doorStatusSave[ 1 ] = buffer[index+9]; partielevel[k].doorStatusSave[ 2 ] = buffer[index+10]; partielevel[k].doorStatusSave[ 3 ] = buffer[index+11]; //for( unsigned char i=12; i<20; i++ ) partielevel[k].bossStatusSave[ 0 ] = buffer[index+12]; partielevel[k].bossStatusSave[ 1 ] = buffer[index+13]; partielevel[k].bossStatusSave[ 2 ] = buffer[index+14]; partielevel[k].bossStatusSave[ 3 ] = buffer[index+15]; partielevel[k].bossStatusSave[ 4 ] = buffer[index+16]; partielevel[k].bossStatusSave[ 5 ] = buffer[index+17]; partielevel[k].bossStatusSave[ 6 ] = buffer[index+18]; partielevel[k].bossStatusSave[ 7 ] = buffer[index+19]; //for( unsigned char i=20; i<28; i++ ) partielevel[k].monsterStatusSave[ 0 ] = buffer[index+20]; partielevel[k].monsterStatusSave[ 1 ] = buffer[index+21]; partielevel[k].monsterStatusSave[ 2 ] = buffer[index+22]; partielevel[k].monsterStatusSave[ 3 ] = buffer[index+23]; partielevel[k].monsterStatusSave[ 4 ] = buffer[index+24]; partielevel[k].monsterStatusSave[ 5 ] = buffer[index+25]; partielevel[k].monsterStatusSave[ 6 ] = buffer[index+26]; partielevel[k].monsterStatusSave[ 7 ] = buffer[index+27]; //for( unsigned char i=28; i<30; i++ ) partielevel[k].redBlockSave[ 0 ] = buffer[index+28]; partielevel[k].redBlockSave[ 1 ] = buffer[index+29]; //for( unsigned char i=30; i<32; i++ ) partielevel[k].greenBlockSave[ 0 ] = buffer[index+30]; partielevel[k].greenBlockSave[ 1 ] = buffer[index+31]; //for( unsigned char i=32; i<34; i++ ) partielevel[k].blueBlockSave[ 0 ] = buffer[index+32]; partielevel[k].blueBlockSave[ 1 ] = buffer[index+33]; //for( unsigned char i=34; i<36; i++ ) partielevel[k].blackBlockSave[ 0 ] = buffer[index+34]; partielevel[k].blackBlockSave[ 1 ] = buffer[index+35]; //for( unsigned char i=36; i<38; i++ ) partielevel[k].lightSave[ 0 ] = buffer[index+36]; partielevel[k].lightSave[ 1 ] = buffer[index+37]; } free( buffer ); } void updateCurrentState( void ) { sauvegarde.currentScore[0] = score/256; sauvegarde.currentScore[1] = score%256; sauvegarde.currentLevel = currentLevel; for( unsigned char k=0; k<=32; k++ ) if (Map[k].visited==true) sauvegarde.visitedLevels[k] = 1; else sauvegarde.visitedLevels[k] = 0; sauvegarde.currentDifficulty = difficulty; sauvegarde.currentLife = life; if (RedFrag==true) sauvegarde.redFrag=true; else sauvegarde.redFrag=false; if (GreenFrag==true) sauvegarde.greenFrag=true; else sauvegarde.greenFrag=false; if (BlueFrag==true) sauvegarde.blueFrag=true; else sauvegarde.blueFrag=false; if (BlackFrag==true) sauvegarde.blackFrag=true; else sauvegarde.blackFrag=false; if (WhiteFrag==true) sauvegarde.whiteFrag=true; else sauvegarde.whiteFrag=false; for( unsigned char i=0; ix; partielevel[currentLevel].redBlockSave[1]=BlocRouge->y; partielevel[currentLevel].greenBlockSave[0]=BlocVert->x; partielevel[currentLevel].greenBlockSave[1]=BlocVert->y; partielevel[currentLevel].blueBlockSave[0]=BlocBleu->x; partielevel[currentLevel].blueBlockSave[1]=BlocBleu->y; partielevel[currentLevel].blackBlockSave[0]=BlocNoir->x; partielevel[currentLevel].blackBlockSave[1]=BlocNoir->y; partielevel[currentLevel].lightSave[0]=lumiere.x; partielevel[currentLevel].lightSave[1]=lumiere.y; } void initMap( void ) { for( unsigned char k=0; k < 33; k++) Map[k].visited = false; currentLevel = 0; } void adjustLevel( int lev ) { for( int i=0; ix = partielevel[lev].redBlockSave[0]; BlocRouge->y = partielevel[lev].redBlockSave[1]; BlocVert->x = partielevel[lev].greenBlockSave[0]; BlocVert->y = partielevel[lev].greenBlockSave[1]; BlocBleu->x = partielevel[lev].blueBlockSave[0]; BlocBleu->y = partielevel[lev].blueBlockSave[1]; BlocNoir->x = partielevel[lev].blackBlockSave[0]; BlocNoir->y = partielevel[lev].blackBlockSave[1]; lumiere.x = partielevel[lev].lightSave[0]; lumiere.y = partielevel[lev].lightSave[1]; } void loadLevel( unsigned char numLevel ) { free(BlocksCollection); free(ReceptorCollection); free(DoorCollection); free(TreasureCollection); free(ObstaclesCollection); free(MonstersCollection); BlocksCollection=NULL; ReceptorCollection=NULL; DoorCollection=NULL; TreasureCollection=NULL; ObstaclesCollection=NULL; MonstersCollection=NULL; attackboss=false; bool needcorrection=false; // if (sauvegarde.visitedLevels[numLevel]==1) // The level to be loaded has already been played so we will have to make corrections as per save state if (Map[numLevel].visited==true) needcorrection = true; else needcorrection = false; if (numLevel==0) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 16; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=0; Map[numLevel].y=0; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; ObstaclesCollection[0] = {4,1,BLOCK_STONE}; ObstaclesCollection[1] = {8,1,BLOCK_STONE}; ObstaclesCollection[2] = {1,3,BLOCK_STONE}; ObstaclesCollection[3] = {11,3,BLOCK_STONE}; ObstaclesCollection[4] = {1,7,BLOCK_STONE}; ObstaclesCollection[5] = {11,7,BLOCK_STONE}; ObstaclesCollection[6] = {4,9,BLOCK_STONE}; ObstaclesCollection[7] = {8,9,BLOCK_STONE}; ObstaclesCollection[8] = {5,4,BLOCK_WATER}; ObstaclesCollection[9] = {6,4,BLOCK_WATER}; ObstaclesCollection[10] = {7,4,BLOCK_WATER}; ObstaclesCollection[11] = {5,5,BLOCK_WATER}; ObstaclesCollection[12] = {7,5,BLOCK_WATER}; ObstaclesCollection[13] = {5,6,BLOCK_WATER}; ObstaclesCollection[14] = {6,6,BLOCK_WATER}; ObstaclesCollection[15] = {7,6,BLOCK_WATER}; BlocksCollection[0] = { 2, 4, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 10, 4, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 10, 6, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 2, 6, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 2, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 10, 0, BAS, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 10, 10, HAUT, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 2, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 8, 0, BAS, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 1, { R_ROUGE, -1, -1 }, 2}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { R_BLEU, -1, -1 }, 0}; // Door WEST //DoorCollection[2] = { 12, 5, DROITE, false, true, 1, { R_VERT, -1, -1 }, 0}; // Door EAST //DoorCollection[3] = { 6, 10, BAS, false, false, 0, { -1 -1, -1 }, -1}; // Door SOUTH //TreasureCollection[0] = {1,1, T_RED, false, WHITE_FRAGMENT, 100, true }; //TreasureCollection[1] = {2,1, T_YELLOW, false, BLACK_FRAGMENT, 100, true }; //TreasureCollection[2] = {3,1, T_GREEN, false, RED_FRAGMENT, 100, true }; //TreasureCollection[3] = {4,1, T_BLUE, false, GREEN_FRAGMENT, 100, true }; //TreasureCollection[4] = {5,1, T_BLUE, false, BLUE_FRAGMENT, 100, true }; //MonstersCollection[0] = { 6, 4, 2, 10, HORIZONTAL, GAUCHE, BLOB }; //MonstersCollection[1] = { 7, 5, 2, 8, VERTICAL, HAUT, SKELETON }; } else if (numLevel==1) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 16; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-1; Map[numLevel].y=-1; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; ObstaclesCollection[0] = {1,1,BLOCK_STONE}; ObstaclesCollection[1] = {11,1,BLOCK_STONE}; ObstaclesCollection[2] = {1,9,BLOCK_STONE}; ObstaclesCollection[3] = {11,9,BLOCK_STONE}; ObstaclesCollection[4] = {1,2,BLOCK_WATER}; ObstaclesCollection[5] = {2,1,BLOCK_WATER}; ObstaclesCollection[6] = {2,2,BLOCK_WATER}; ObstaclesCollection[7] = {10,1,BLOCK_WATER}; ObstaclesCollection[8] = {10,2,BLOCK_WATER}; ObstaclesCollection[9] = {11,2,BLOCK_WATER}; ObstaclesCollection[10] = {10,9,BLOCK_WATER}; ObstaclesCollection[11] = {10,8,BLOCK_WATER}; ObstaclesCollection[12] = {11,8,BLOCK_WATER}; ObstaclesCollection[13] = {1,8,BLOCK_WATER}; ObstaclesCollection[14] = {2,8,BLOCK_WATER}; ObstaclesCollection[15] = {2,9,BLOCK_WATER}; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 5, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 12, 4, GAUCHE, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 0, 6, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 6, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 8, 0, BAS, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 2, { R_ROUGE,R_BLEU, -1 }, 4}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { R_BLEU, -1, -1 }, 0}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 2, { R_VERT, R_NOIR, -1 }, 2}; // Door EAST //DoorCollection[3] = { 6, 10, BAS, false, false, 0, { -1 -1, -1 }, -1}; // Door SOUTH TreasureCollection[0] = {4,4, T_RED, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[1] = {8,4, T_YELLOW, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[2] = {4,6, T_GREEN, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[3] = {8,6, T_BLUE, false, PIERRE_BLANCHE, 100, true }; MonstersCollection[0] = { 6, 3, 1, 11, HORIZONTAL, DROITE, SPIDER }; MonstersCollection[1] = { 6, 7, 1, 11, HORIZONTAL, GAUCHE, SPIDER }; MonstersCollection[2] = { 3, 5, 1, 9, VERTICAL, HAUT, SPIDER }; MonstersCollection[3] = { 9, 5, 1, 9, VERTICAL, BAS, SPIDER }; //MonstersCollection[1] = { 1, 5, 1, 9, VERTICAL, BAS, SPIDER }; //MonstersCollection[2] = { 10, 5, 1, 9, VERTICAL, HAUT, GHOST }; } else if (numLevel==2) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 2; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 24; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=0; Map[numLevel].y=-1; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; ObstaclesCollection[0] = {1,4,BLOCK_STONE}; ObstaclesCollection[1] = {2,4,BLOCK_STONE}; ObstaclesCollection[2] = {1,6,BLOCK_STONE}; ObstaclesCollection[3] = {2,6,BLOCK_STONE}; ObstaclesCollection[4] = {10,4,BLOCK_STONE}; ObstaclesCollection[5] = {11,4,BLOCK_STONE}; ObstaclesCollection[6] = {10,6,BLOCK_STONE}; ObstaclesCollection[7] = {11,6,BLOCK_STONE}; ObstaclesCollection[8] = {5,8,BLOCK_STONE}; ObstaclesCollection[9] = {5,9,BLOCK_STONE}; ObstaclesCollection[10] = {7,8,BLOCK_STONE}; ObstaclesCollection[11] = {7,9,BLOCK_STONE}; ObstaclesCollection[12] = {5,2,BLOCK_WATER}; ObstaclesCollection[13] = {6,2,BLOCK_WATER}; ObstaclesCollection[14] = {7,2,BLOCK_WATER}; ObstaclesCollection[15] = {5,3,BLOCK_WATER}; ObstaclesCollection[16] = {7,3,BLOCK_WATER}; ObstaclesCollection[17] = {5,4,BLOCK_WATER}; ObstaclesCollection[18] = {7,4,BLOCK_WATER}; ObstaclesCollection[19] = {5,5,BLOCK_WATER}; ObstaclesCollection[20] = {7,5,BLOCK_WATER}; ObstaclesCollection[21] = {5,6,BLOCK_WATER}; ObstaclesCollection[22] = {6,6,BLOCK_WATER}; ObstaclesCollection[23] = {7,6,BLOCK_WATER}; BlocksCollection[0] = { 2, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 3, 1, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 10, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 9, 1, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 0, 3, DROITE, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 2, 0, BAS, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 12, 3, GAUCHE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 10, 0, BAS, 0, 0, 0, false }; // Receptor BLACK //ReceptorCollection[4] = { 8, 0, BAS, 255, 0, 255, false }; // Receptor PINK //ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN //ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW //ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE //DoorCollection[0] = { 6,0, HAUT, false, true, 1, { R_ROUGE,R_BLEU, R_VERT }, 1}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 2, { R_ROUGE, R_VERT, -1 }, 1}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 2, { R_BLEU, R_NOIR, -1 }, 3}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 2, { R_ROUGE, R_BLEU, -1 }, 0}; // Door SOUTH TreasureCollection[0] = {1,1, T_RED, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[1] = {11,1, T_YELLOW, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[2] = {1,9, T_GREEN, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[3] = {11,9, T_BLUE, false, PIERRE_BLANCHE, 100, true }; } else if (numLevel==3) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 8; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=1; Map[numLevel].y=-1; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; ObstaclesCollection[0] = {2,2,BLOCK_SUN}; ObstaclesCollection[1] = {10,2,BLOCK_SUN}; ObstaclesCollection[2] = {2,8,BLOCK_SUN}; ObstaclesCollection[3] = {10,8,BLOCK_SUN}; ObstaclesCollection[4] = {4,5,BLOCK_WATER}; ObstaclesCollection[5] = {8,5,BLOCK_WATER}; ObstaclesCollection[6] = {6,3,BLOCK_WATER}; ObstaclesCollection[7] = {6,7,BLOCK_WATER}; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 5, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 12, 4, GAUCHE, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 0, 6, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 12, 7, GAUCHE, 0, 0, 0, false }; // Receptor BLACK //ReceptorCollection[4] = { 8, 0, BAS, 255, 0, 255, false }; // Receptor PINK //ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN //ReceptorCollection[3] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW //ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 3, { R_ROUGE,R_BLEU, R_VERT }, 5}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { R_BLEU, 3, -1 }, 2}; // Door WEST //DoorCollection[2] = { 12, 5, DROITE, false, true, 1, { R_VERT, -1, -1 }, 0}; // Door EAST //DoorCollection[3] = { 6, 10, BAS, false, false, 0, { -1 -1, -1 }, -1}; // Door SOUTH TreasureCollection[0] = {4,4, T_RED, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[1] = {8,4, T_YELLOW, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[2] = {4,6, T_GREEN, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[3] = {8,6, T_BLUE, false, PIERRE_BLANCHE, 100, true }; MonstersCollection[0] = { 6, 2, 1, 11, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[1] = { 6, 8, 1, 11, HORIZONTAL, GAUCHE, SKELETON }; MonstersCollection[2] = { 2, 5, 1, 9, VERTICAL, HAUT, SKELETON }; MonstersCollection[3] = { 10, 5, 1, 9, VERTICAL, BAS, SKELETON }; } else if (numLevel==4) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 5; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 4; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-1; Map[numLevel].y=-2; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 6, 1,1,1,0, false }; //ObstaclesCollection[0] = {2,2,BLOCK_SUN}; //ObstaclesCollection[1] = {10,2,BLOCK_SUN}; //ObstaclesCollection[2] = {2,8,BLOCK_SUN}; //ObstaclesCollection[3] = {10,8,BLOCK_SUN}; ObstaclesCollection[0] = {5,6,BLOCK_WATER}; ObstaclesCollection[1] = {7,6,BLOCK_WATER}; ObstaclesCollection[2] = {6,5,BLOCK_WATER}; ObstaclesCollection[3] = {6,7,BLOCK_WATER}; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 5, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 12, 4, GAUCHE, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 0, 6, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 12, 8, GAUCHE, 0, 0, 0, false }; // Receptor BLACK ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 255, 0, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 2, { 2,4, -1 }, 7}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { R_BLEU, -1, -1 }, 0}; // Door WEST //DoorCollection[2] = { 12, 5, DROITE, false, true, 1, { R_VERT, -1, -1 }, 0}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 1, { R_NOIR, -1, -1 }, 1}; // Door SOUTH TreasureCollection[0] = {1,1, T_RED, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[1] = {11,1, T_YELLOW, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[2] = {11,9, T_GREEN, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[3] = {1,9, T_BLUE, false, PIERRE_BLANCHE, 100, true }; //BossCollection[0] = { 6, 2, 2, 10, HORIZONTAL, GAUCHE, B_RED }; //BossCollection[1] = { 2, 5, 2, 8, VERTICAL, HAUT, B_GREEN }; //BossCollection[2] = { 6, 9, 2, 10, HORIZONTAL, GAUCHE, B_BLUE }; //BossCollection[3] = { 10, 5, 2, 8, VERTICAL, HAUT, B_BLACK }; } else if (numLevel==5) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 8; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=1; Map[numLevel].y=-2; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 6, 1,1,1,0, false }; ObstaclesCollection[0] = {6,3,BLOCK_SUN}; ObstaclesCollection[1] = {5,4,BLOCK_WATER}; ObstaclesCollection[2] = {7,4,BLOCK_WATER}; ObstaclesCollection[3] = {5,5,BLOCK_SUN}; ObstaclesCollection[4] = {7,5,BLOCK_SUN}; ObstaclesCollection[5] = {5,6,BLOCK_WATER}; ObstaclesCollection[6] = {7,6,BLOCK_WATER}; ObstaclesCollection[7] = {6,7,BLOCK_SUN}; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 8, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 4, 10, HAUT, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 4, 0, BAS, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 8, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 2, { 0, 2, -1 }, 9}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { R_BLEU, -1, -1 }, 0}; // Door WEST //DoorCollection[2] = { 12, 5, DROITE, false, true, 1, { R_VERT, -1, -1 }, 0}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 2, { 1, 3, -1 }, 3}; // Door SOUTH TreasureCollection[0] = {1,1, T_RED, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[1] = {11,1, T_YELLOW, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[2] = {11,9, T_GREEN, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[3] = {1,9, T_BLUE, false, PIERRE_BLANCHE, 100, true }; //BossCollection[0] = { 6, 2, 2, 10, HORIZONTAL, GAUCHE, B_RED }; //BossCollection[1] = { 2, 5, 2, 8, VERTICAL, HAUT, B_GREEN }; //BossCollection[2] = { 6, 9, 2, 10, HORIZONTAL, GAUCHE, B_BLUE }; //BossCollection[3] = { 10, 5, 2, 8, VERTICAL, HAUT, B_BLACK }; } else if (numLevel==6) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 2; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 8; NbMonsterLevel = 8; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-2; Map[numLevel].y=-3; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 }, 11}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 0}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 1, { 3, -1, -1 }, 7}; // Door EAST //DoorCollection[1] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 0}; // Door SOUTH ObstaclesCollection[0] = {5,4,BLOCK_WATER}; ObstaclesCollection[1] = {5,5,BLOCK_WATER}; ObstaclesCollection[2] = {5,6,BLOCK_WATER}; ObstaclesCollection[3] = {6,6,BLOCK_WATER}; ObstaclesCollection[4] = {7,6,BLOCK_WATER}; ObstaclesCollection[5] = {7,5,BLOCK_WATER}; ObstaclesCollection[6] = {7,4,BLOCK_WATER}; ObstaclesCollection[7] = {6,4,BLOCK_WATER}; ReceptorCollection[0] = { 5, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 0, 5, DROITE, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 12, 4, GAUCHE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 6, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE MonstersCollection[0] = { 5, 3, 1, 5, HORIZONTAL, GAUCHE, BLOB }; MonstersCollection[1] = { 5, 2, 1, 5, HORIZONTAL, GAUCHE, BLOB }; MonstersCollection[2] = { 7, 3, 7, 11, HORIZONTAL, DROITE, BLOB }; MonstersCollection[3] = { 7, 2, 7, 11, HORIZONTAL, DROITE, BLOB }; MonstersCollection[4] = { 5, 7, 1, 5, HORIZONTAL, GAUCHE, BLOB }; MonstersCollection[5] = { 5, 8, 1, 5, HORIZONTAL, GAUCHE, BLOB }; MonstersCollection[6] = { 7, 7, 7, 11, HORIZONTAL, DROITE, BLOB }; MonstersCollection[7] = { 7, 8, 7, 11, HORIZONTAL, DROITE, BLOB }; } else if (numLevel==7) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 6; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 7; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-1; Map[numLevel].y=-3; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 7, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; ReceptorCollection[0] = { 12, 3, GAUCHE, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 6, 0, BAS, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 0, 3, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 11, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK //ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK ReceptorCollection[4] = { 1, 0, BAS, 0, 255, 255, false }; // Receptor CYAN ReceptorCollection[5] = { 11, 0, BAS, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 }, 11}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 2, { 2, 0, -1 }, 6}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 3, { 1, 5, 4 }, 8}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 4}; // Door SOUTH ObstaclesCollection[0] = {5,6,BLOCK_WATER}; //ObstaclesCollection[1] = {6,6,BLOCK_WATER}; ObstaclesCollection[1] = {7,6,BLOCK_WATER}; ObstaclesCollection[2] = {5,7,BLOCK_WATER}; ObstaclesCollection[3] = {7,7,BLOCK_WATER}; ObstaclesCollection[4] = {5,8,BLOCK_WATER}; ObstaclesCollection[5] = {6,8,BLOCK_WATER}; ObstaclesCollection[6] = {7,8,BLOCK_WATER}; } else if (numLevel==8) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 2; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 5; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 0; NbMonsterLevel = 0; NbBossLevel = 1; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=0; Map[numLevel].y=-3; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 2,3,4 },12}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 3, { 1, 4, 2 }, 7}; // Door WEST DoorCollection[2] = { 12, 5, DROITE, false, true, 3, { 0, 3, 2 }, 9}; // Door EAST //DoorCollection[2] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 4}; // Door SOUTH ReceptorCollection[0] = { 12, 8, GAUCHE, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 0, 8, DROITE, 0, 255, 0, false }; // Receptor GREEN //ReceptorCollection[2] = { 0, 6, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[2] = { 6, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK ReceptorCollection[3] = { 9, 10, HAUT, 255, 0, 255, false }; // Receptor PINK ReceptorCollection[4] = { 3, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE BossCollection[0] = { 6, 3, 2, 10, HORIZONTAL, GAUCHE, B_RED }; } else if (numLevel==9) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 6; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 7; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=1; Map[numLevel].y=-3; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 7, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; ReceptorCollection[0] = { 3, 0, BAS, 255, 0, 255, false }; // Receptor RED ReceptorCollection[1] = { 6, 0, BAS, 255, 0, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 9, 0, BAS, 255, 255, 0, false }; // Receptor BLUE ReceptorCollection[3] = { 11, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK //ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK ReceptorCollection[4] = { 1, 0, BAS, 255, 0, 0, false }; // Receptor CYAN ReceptorCollection[5] = { 11, 0, BAS, 255, 0, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 }, 11}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 3, { 0, 2, 1 }, 8}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 3, { 1, 4, 5 }, 10}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 5}; // Door SOUTH ObstaclesCollection[0] = {5,6,BLOCK_WATER}; ObstaclesCollection[1] = {7,6,BLOCK_WATER}; ObstaclesCollection[2] = {5,7,BLOCK_WATER}; ObstaclesCollection[3] = {7,7,BLOCK_WATER}; ObstaclesCollection[4] = {5,8,BLOCK_WATER}; ObstaclesCollection[5] = {6,8,BLOCK_WATER}; ObstaclesCollection[6] = {7,8,BLOCK_WATER}; } else if (numLevel==10) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 8; NbMonsterLevel = 8; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=2; Map[numLevel].y=-3; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 },13}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { 3, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST //DoorCollection[2] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 5}; // Door SOUTH ObstaclesCollection[0] = {5,4,BLOCK_WATER}; ObstaclesCollection[1] = {5,5,BLOCK_WATER}; ObstaclesCollection[2] = {5,6,BLOCK_WATER}; ObstaclesCollection[3] = {6,6,BLOCK_WATER}; ObstaclesCollection[4] = {7,6,BLOCK_WATER}; ObstaclesCollection[5] = {7,5,BLOCK_WATER}; ObstaclesCollection[6] = {7,4,BLOCK_WATER}; ObstaclesCollection[7] = {6,4,BLOCK_WATER}; ReceptorCollection[0] = { 5, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 12, 5, GAUCHE, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 0, 4, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 6, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE MonstersCollection[0] = { 5, 3, 1, 5, HORIZONTAL, GAUCHE, GHOST }; MonstersCollection[1] = { 5, 2, 1, 5, HORIZONTAL, GAUCHE, GHOST }; MonstersCollection[2] = { 7, 3, 7, 11, HORIZONTAL, DROITE, GHOST }; MonstersCollection[3] = { 7, 2, 7, 11, HORIZONTAL, DROITE, GHOST }; MonstersCollection[4] = { 5, 7, 1, 5, HORIZONTAL, GAUCHE, GHOST }; MonstersCollection[5] = { 5, 8, 1, 5, HORIZONTAL, GAUCHE, GHOST }; MonstersCollection[6] = { 7, 7, 7, 11, HORIZONTAL, DROITE, GHOST }; MonstersCollection[7] = { 7, 8, 7, 11, HORIZONTAL, DROITE, GHOST }; } else if (numLevel==11) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 24; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-2; Map[numLevel].y=-4; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 9, 1, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 4, 10, HAUT, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 3, 3, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 5, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 },15}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 6}; // Door SOUTH ObstaclesCollection[0] = {5,3,BLOCK_WATER}; ObstaclesCollection[1] = {5,5,BLOCK_WATER}; ObstaclesCollection[2] = {5,7,BLOCK_WATER}; ObstaclesCollection[3] = {6,6,BLOCK_WATER}; ObstaclesCollection[4] = {7,3,BLOCK_WATER}; ObstaclesCollection[5] = {7,5,BLOCK_WATER}; ObstaclesCollection[6] = {7,7,BLOCK_WATER}; ObstaclesCollection[7] = {6,4,BLOCK_WATER}; ObstaclesCollection[8] = {1,3,BLOCK_MOON}; ObstaclesCollection[9] = {3,3,BLOCK_MOON}; ObstaclesCollection[10] = {1,5,BLOCK_MOON}; ObstaclesCollection[11] = {3,5,BLOCK_MOON}; ObstaclesCollection[12] = {1,7,BLOCK_MOON}; ObstaclesCollection[13] = {3,7,BLOCK_MOON}; ObstaclesCollection[14] = {3,1,BLOCK_MOON}; ObstaclesCollection[15] = {3,9,BLOCK_MOON}; ObstaclesCollection[16] = {11,3,BLOCK_MOON}; ObstaclesCollection[17] = {9,3,BLOCK_MOON}; ObstaclesCollection[18] = {11,5,BLOCK_MOON}; ObstaclesCollection[19] = {9,5,BLOCK_MOON}; ObstaclesCollection[20] = {11,7,BLOCK_MOON}; ObstaclesCollection[21] = {9,7,BLOCK_MOON}; ObstaclesCollection[22] = {9,1,BLOCK_MOON}; ObstaclesCollection[23] = {9,9,BLOCK_MOON}; TreasureCollection[0] = {1,1, T_RED, false, HEART_SINGLE, 100, true }; TreasureCollection[1] = {11,1, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {11,9, T_GREEN, false, HEART_SINGLE, 100, true }; TreasureCollection[3] = {1,9, T_BLUE, false, HEART_SINGLE, 100, true }; MonstersCollection[0] = { 2, 1, 1, 9, VERTICAL, BAS, BAT }; MonstersCollection[1] = { 10, 1, 1, 9, VERTICAL, HAUT, BAT }; MonstersCollection[2] = { 1, 2, 1, 11, HORIZONTAL, DROITE, BAT }; MonstersCollection[3] = { 11, 8, 1, 11, HORIZONTAL, GAUCHE, BAT }; } else if (numLevel==12) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 2; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 1; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 3; NbObstacleLevel = 0; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=0; Map[numLevel].y=-4; Map[numLevel].R=255; Map[numLevel].G=0; Map[numLevel].B=0; Map[numLevel].A=255; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 0, 5, DROITE, 255, 255, 255, false }; // Receptor WHITE //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },6}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[0] = { 6, 10, BAS, false, true, 1, { 0, -1, -1 }, 8}; // Door SOUTH TreasureCollection[0] = {6,2, T_RED, false, RED_FRAGMENT, 1000, true }; TreasureCollection[1] = {1,2, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {11,2, T_YELLOW, false, HEART_SINGLE, 100, true }; //TreasureCollection[3] = {1,1, T_BLUE, true, PIERRE_BLANCHE, 100, true }; } else if (numLevel==13) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 24; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=2; Map[numLevel].y=-4; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 9, 1, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 4, 10, HAUT, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 3, 3, DROITE, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 5, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK // ReceptorCollection[4] = { 12, 3, GAUCHE, 255, 0, 255, false }; // Receptor PINK // ReceptorCollection[5] = { 9, 10, HAUT, 0, 255, 255, false }; // Receptor CYAN // ReceptorCollection[6] = { 12, 8, GAUCHE, 255, 255, 0, false }; // Receptor YELLOW // ReceptorCollection[7] = { 0, 7, DROITE, 255, 255, 255, false }; // Receptor WHITE DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1, 2 },19}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 10}; // Door SOUTH ObstaclesCollection[0] = {5,3,BLOCK_WATER}; ObstaclesCollection[1] = {5,5,BLOCK_WATER}; ObstaclesCollection[2] = {5,7,BLOCK_WATER}; ObstaclesCollection[3] = {6,6,BLOCK_WATER}; ObstaclesCollection[4] = {7,3,BLOCK_WATER}; ObstaclesCollection[5] = {7,5,BLOCK_WATER}; ObstaclesCollection[6] = {7,7,BLOCK_WATER}; ObstaclesCollection[7] = {6,4,BLOCK_WATER}; ObstaclesCollection[8] = {1,3,BLOCK_SUN}; ObstaclesCollection[9] = {3,3,BLOCK_SUN}; ObstaclesCollection[10] = {1,5,BLOCK_SUN}; ObstaclesCollection[11] = {3,5,BLOCK_SUN}; ObstaclesCollection[12] = {1,7,BLOCK_SUN}; ObstaclesCollection[13] = {3,7,BLOCK_SUN}; ObstaclesCollection[14] = {3,1,BLOCK_SUN}; ObstaclesCollection[15] = {3,9,BLOCK_SUN}; ObstaclesCollection[16] = {11,3,BLOCK_SUN}; ObstaclesCollection[17] = {9,3,BLOCK_SUN}; ObstaclesCollection[18] = {11,5,BLOCK_SUN}; ObstaclesCollection[19] = {9,5,BLOCK_SUN}; ObstaclesCollection[20] = {11,7,BLOCK_SUN}; ObstaclesCollection[21] = {9,7,BLOCK_SUN}; ObstaclesCollection[22] = {9,1,BLOCK_SUN}; ObstaclesCollection[23] = {9,9,BLOCK_SUN}; TreasureCollection[0] = {1,1, T_RED, false, HEART_SINGLE, 100, true }; TreasureCollection[1] = {11,1, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {11,9, T_GREEN, false, HEART_SINGLE, 100, true }; TreasureCollection[3] = {1,9, T_BLUE, false, HEART_SINGLE, 100, true }; MonstersCollection[0] = { 2, 1, 1, 9, VERTICAL, BAS, GHOST }; MonstersCollection[1] = { 10, 9, 1, 9, VERTICAL, HAUT, BAT }; MonstersCollection[2] = { 1, 2, 1, 11, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[3] = { 11, 8, 1, 11, HORIZONTAL, GAUCHE, SPIDER }; } else if (numLevel==14) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 2; NbObstacleLevel = 20; NbMonsterLevel = 3; NbBossLevel = 1; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-3; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 }, 21}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 0}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 1, { 3, -1, -1 }, 15}; // Door EAST //DoorCollection[1] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 0}; // Door SOUTH ReceptorCollection[0] = { 1, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 11, 0, BAS, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 11, 10, HAUT, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 1, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK BossCollection[0] = { 6, 2, 2, 10, HORIZONTAL, GAUCHE, B_GREEN }; ObstaclesCollection[0] = {1,4,BLOCK_WATER}; ObstaclesCollection[1] = {1,6,BLOCK_WATER}; ObstaclesCollection[2] = {3,4,BLOCK_WATER}; ObstaclesCollection[3] = {3,6,BLOCK_WATER}; ObstaclesCollection[4] = {4,4,BLOCK_WATER}; ObstaclesCollection[5] = {4,6,BLOCK_WATER}; ObstaclesCollection[6] = {8,4,BLOCK_WATER}; ObstaclesCollection[7] = {8,6,BLOCK_WATER}; ObstaclesCollection[8] = {9,4,BLOCK_WATER}; ObstaclesCollection[9] = {9,6,BLOCK_WATER}; ObstaclesCollection[10] = {11,4,BLOCK_WATER}; ObstaclesCollection[11] = {11,6,BLOCK_WATER}; ObstaclesCollection[12] = {5,1,BLOCK_WATER}; ObstaclesCollection[13] = {7,1,BLOCK_WATER}; ObstaclesCollection[14] = {5,3,BLOCK_WATER}; ObstaclesCollection[15] = {7,3,BLOCK_WATER}; ObstaclesCollection[16] = {5,7,BLOCK_WATER}; ObstaclesCollection[17] = {7,7,BLOCK_WATER}; ObstaclesCollection[18] = {5,9,BLOCK_WATER}; ObstaclesCollection[19] = {7,9,BLOCK_WATER}; TreasureCollection[0] = {1,5, T_GREEN, false, HEART_FULL, 10000, true }; TreasureCollection[1] = {6,9, T_YELLOW, false, PIERRE_BLANCHE, 1000, true }; //MonstersCollection[0] = { 6, 2, 4, 8, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[0] = { 6, 8, 4, 8, HORIZONTAL, DROITE, BLOB }; MonstersCollection[1] = { 2, 5, 3, 7, VERTICAL, HAUT, BAT }; MonstersCollection[2] = { 10, 5, 3, 7, VERTICAL, BAS, GHOST }; } else if (numLevel==15) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 7; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 12; NbMonsterLevel = 3; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-2; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 }, 11}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 3, { 4, 5, 6 }, 14}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 3, { 0, 1, 2 }, 16}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 11}; // Door SOUTH ReceptorCollection[0] = { 10, 0, BAS, 0, 0, 255, false }; ReceptorCollection[1] = { 12, 2, GAUCHE, 255, 255, 0, false }; ReceptorCollection[2] = { 11, 0, BAS, 255, 0, 255, false }; ReceptorCollection[3] = { 1, 10, HAUT, 0, 0, 0, false }; ReceptorCollection[4] = { 0, 2, DROITE, 255, 0, 255, false }; ReceptorCollection[5] = { 1, 0, BAS, 0, 255, 255, false }; ReceptorCollection[6] = { 3, 0, BAS, 0, 255, 0, false }; ObstaclesCollection[0] = {6,2,BLOCK_WATER}; ObstaclesCollection[1] = {5,3,BLOCK_WATER}; ObstaclesCollection[2] = {7,3,BLOCK_WATER}; ObstaclesCollection[3] = {4,4,BLOCK_WATER}; ObstaclesCollection[4] = {8,4,BLOCK_WATER}; ObstaclesCollection[5] = {3,5,BLOCK_WATER}; ObstaclesCollection[6] = {9,5,BLOCK_WATER}; ObstaclesCollection[7] = {4,6,BLOCK_WATER}; ObstaclesCollection[8] = {8,6,BLOCK_WATER}; ObstaclesCollection[9] = {5,7,BLOCK_WATER}; ObstaclesCollection[10] = {7,7,BLOCK_WATER}; ObstaclesCollection[11] = {6,8,BLOCK_WATER}; MonstersCollection[0] = { 6, 1, 1, 11, HORIZONTAL, DROITE, GHOST }; MonstersCollection[1] = { 1, 5, 1, 9, VERTICAL, HAUT, GHOST }; MonstersCollection[2] = { 11, 5, 1, 9, VERTICAL, HAUT, GHOST }; } else if (numLevel==16) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 9; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 8; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-1; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; ObstaclesCollection[0] = {2,2,BLOCK_SUN}; ObstaclesCollection[1] = {10,2,BLOCK_SUN}; ObstaclesCollection[2] = {2,8,BLOCK_SUN}; ObstaclesCollection[3] = {10,8,BLOCK_SUN}; ObstaclesCollection[4] = {4,5,BLOCK_WATER}; ObstaclesCollection[5] = {8,5,BLOCK_WATER}; ObstaclesCollection[6] = {6,3,BLOCK_WATER}; ObstaclesCollection[7] = {6,7,BLOCK_WATER}; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 2, 8, HAUT, 0, 255, 0, false }; ReceptorCollection[1] = { 9, 10, HAUT, 255, 0, 255, false }; ReceptorCollection[2] = { 12, 2, GAUCHE, 0, 0, 0, false }; ReceptorCollection[3] = { 10, 8, HAUT, 0, 0, 255, false }; ReceptorCollection[4] = { 5, 10, HAUT, 255, 0, 0, false }; ReceptorCollection[5] = { 8, 0, BAS, 0, 0, 0, false }; ReceptorCollection[6] = { 2, 10, HAUT, 255, 255, 0, false }; ReceptorCollection[7] = { 8, 10, HAUT, 255, 0, 255, false }; ReceptorCollection[8] = { 12, 7, GAUCHE, 0, 0, 255, false }; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1, 2 }, 22}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 3, { 3, 4, 5 }, 15}; // Door WEST DoorCollection[2] = { 12, 5, DROITE, false, true, 3, { 6, 7, 8 }, 18}; // Door EAST //DoorCollection[3] = { 6, 10, BAS, false, false, 0, { -1 -1, -1 }, -1}; // Door SOUTH TreasureCollection[0] = {4,4, T_RED, false, PIERRE_BLANCHE, 1000, true }; TreasureCollection[1] = {8,4, T_YELLOW, false, HEART_FULL, 1000, true }; TreasureCollection[2] = {4,6, T_GREEN, false, HEART_FULL, 1000, true }; TreasureCollection[3] = {8,6, T_BLUE, false, PIERRE_BLANCHE, 1000, true }; MonstersCollection[0] = { 6, 2, 1, 11, HORIZONTAL, DROITE, GHOST }; MonstersCollection[1] = { 6, 8, 1, 11, HORIZONTAL, GAUCHE, GHOST }; MonstersCollection[2] = { 2, 5, 1, 9, VERTICAL, HAUT, GHOST }; MonstersCollection[3] = { 10, 5, 1, 9, VERTICAL, BAS, GHOST }; } else if (numLevel==17) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 0; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 1; NbObstacleLevel = 20; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-0; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 1, 1, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 11, 1, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 11, 9, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 1, 9, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 }, 23}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 16}; // Door WEST DoorCollection[2] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 18}; // Door EAST //DoorCollection[2] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 4}; // Door SOUTH ObstaclesCollection[0] = {1,4,BLOCK_STONE}; ObstaclesCollection[1] = {1,6,BLOCK_STONE}; ObstaclesCollection[2] = {3,4,BLOCK_STONE}; ObstaclesCollection[3] = {3,6,BLOCK_STONE}; ObstaclesCollection[4] = {4,4,BLOCK_STONE}; ObstaclesCollection[5] = {4,6,BLOCK_STONE}; ObstaclesCollection[6] = {8,4,BLOCK_STONE}; ObstaclesCollection[7] = {8,6,BLOCK_STONE}; ObstaclesCollection[8] = {9,4,BLOCK_STONE}; ObstaclesCollection[9] = {9,6,BLOCK_STONE}; ObstaclesCollection[10] = {11,4,BLOCK_STONE}; ObstaclesCollection[11] = {11,6,BLOCK_STONE}; ObstaclesCollection[12] = {5,1,BLOCK_STONE}; ObstaclesCollection[13] = {7,1,BLOCK_STONE}; ObstaclesCollection[14] = {5,3,BLOCK_STONE}; ObstaclesCollection[15] = {7,3,BLOCK_STONE}; ObstaclesCollection[16] = {5,7,BLOCK_STONE}; ObstaclesCollection[17] = {7,7,BLOCK_STONE}; ObstaclesCollection[18] = {5,9,BLOCK_STONE}; ObstaclesCollection[19] = {7,9,BLOCK_STONE}; TreasureCollection[0] = {6,9, T_GREEN, false, HEART_FULL, 10000, true }; MonstersCollection[0] = { 6, 2, 4, 8, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[1] = { 6, 8, 4, 8, HORIZONTAL, DROITE, BLOB }; MonstersCollection[2] = { 2, 5, 3, 7, VERTICAL, HAUT, BAT }; MonstersCollection[3] = { 10, 5, 3, 7, VERTICAL, BAS, GHOST }; } else if (numLevel==18) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 2; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 9; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 8; NbMonsterLevel = 4; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=1; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; ObstaclesCollection[0] = {2,2,BLOCK_SUN}; ObstaclesCollection[1] = {10,2,BLOCK_SUN}; ObstaclesCollection[2] = {2,8,BLOCK_SUN}; ObstaclesCollection[3] = {10,8,BLOCK_SUN}; ObstaclesCollection[4] = {4,5,BLOCK_WATER}; ObstaclesCollection[5] = {8,5,BLOCK_WATER}; ObstaclesCollection[6] = {6,3,BLOCK_WATER}; ObstaclesCollection[7] = {6,7,BLOCK_WATER}; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 2, 8, HAUT, 0, 255, 0, false }; ReceptorCollection[1] = { 9, 10, HAUT, 255, 0, 255, false }; ReceptorCollection[2] = { 12, 2, GAUCHE, 0, 0, 0, false }; ReceptorCollection[3] = { 10, 8, HAUT, 0, 0, 255, false }; ReceptorCollection[4] = { 5, 10, HAUT, 255, 0, 0, false }; ReceptorCollection[5] = { 8, 0, BAS, 0, 0, 0, false }; ReceptorCollection[6] = { 2, 10, HAUT, 255, 255, 0, false }; ReceptorCollection[7] = { 8, 10, HAUT, 255, 0, 255, false }; ReceptorCollection[8] = { 12, 7, GAUCHE, 0, 0, 255, false }; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1, 2 }, 24}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 3, { 3, 4, 5 }, 17}; // Door WEST DoorCollection[2] = { 12, 5, DROITE, false, true, 3, { 6, 7, 8 }, 19}; // Door EAST //DoorCollection[3] = { 6, 10, BAS, false, false, 0, { -1 -1, -1 }, -1}; // Door SOUTH TreasureCollection[0] = {4,4, T_RED, false, PIERRE_BLANCHE, 1000, true }; TreasureCollection[1] = {8,4, T_YELLOW, false, HEART_FULL, 1000, true }; TreasureCollection[2] = {4,6, T_GREEN, false, HEART_FULL, 1000, true }; TreasureCollection[3] = {8,6, T_BLUE, false, PIERRE_BLANCHE, 1000, true }; MonstersCollection[0] = { 6, 2, 1, 11, HORIZONTAL, DROITE, BLOB }; MonstersCollection[1] = { 6, 8, 1, 11, HORIZONTAL, GAUCHE, BLOB }; MonstersCollection[2] = { 2, 5, 1, 9, VERTICAL, HAUT, BLOB }; MonstersCollection[3] = { 10, 5, 1, 9, VERTICAL, BAS, BLOB }; } else if (numLevel==19) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 7; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 12; NbMonsterLevel = 3; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=2; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },12}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 3, { 4, 5, 6 }, 18}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 3, { 0, 1, 2 }, 20}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 13}; // Door SOUTH ReceptorCollection[0] = { 8, 0, BAS, 255, 0, 0, false }; ReceptorCollection[1] = { 9, 0, BAS, 255, 255, 0, false }; ReceptorCollection[2] = { 11, 0, BAS, 0, 255, 0, false }; ReceptorCollection[3] = { 1, 10, HAUT, 0, 0, 0, false }; ReceptorCollection[4] = { 0, 2, DROITE, 255, 0, 255, false }; ReceptorCollection[5] = { 1, 0, BAS, 0, 255, 255, false }; ReceptorCollection[6] = { 3, 0, BAS, 0, 255, 0, false }; ObstaclesCollection[0] = {6,2,BLOCK_WATER}; ObstaclesCollection[1] = {5,3,BLOCK_WATER}; ObstaclesCollection[2] = {7,3,BLOCK_WATER}; ObstaclesCollection[3] = {4,4,BLOCK_WATER}; ObstaclesCollection[4] = {8,4,BLOCK_WATER}; ObstaclesCollection[5] = {3,5,BLOCK_WATER}; ObstaclesCollection[6] = {9,5,BLOCK_WATER}; ObstaclesCollection[7] = {4,6,BLOCK_WATER}; ObstaclesCollection[8] = {8,6,BLOCK_WATER}; ObstaclesCollection[9] = {5,7,BLOCK_WATER}; ObstaclesCollection[10] = {7,7,BLOCK_WATER}; ObstaclesCollection[11] = {6,8,BLOCK_WATER}; MonstersCollection[0] = { 6, 1, 1, 11, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[1] = { 1, 5, 1, 9, VERTICAL, HAUT, SKELETON }; MonstersCollection[2] = { 11, 5, 1, 9, VERTICAL, HAUT, SKELETON }; } else if (numLevel==20) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 4; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 2; NbObstacleLevel = 20; NbMonsterLevel = 3; NbBossLevel = 1; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=3; Map[numLevel].y=-5; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 },25}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 1, { 3, -1, -1 }, 19}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST //DoorCollection[2] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 5}; // Door SOUTH ReceptorCollection[0] = { 1, 0, BAS, 255, 0, 0, false }; // Receptor RED ReceptorCollection[1] = { 11, 0, BAS, 0, 255, 0, false }; // Receptor GREEN ReceptorCollection[2] = { 11, 10, HAUT, 0, 0, 255, false }; // Receptor BLUE ReceptorCollection[3] = { 1, 10, HAUT, 0, 0, 0, false }; // Receptor BLACK BossCollection[0] = { 6, 2, 2, 10, HORIZONTAL, GAUCHE, B_BLUE }; ObstaclesCollection[0] = {1,4,BLOCK_WATER}; ObstaclesCollection[1] = {1,6,BLOCK_WATER}; ObstaclesCollection[2] = {3,4,BLOCK_WATER}; ObstaclesCollection[3] = {3,6,BLOCK_WATER}; ObstaclesCollection[4] = {4,4,BLOCK_WATER}; ObstaclesCollection[5] = {4,6,BLOCK_WATER}; ObstaclesCollection[6] = {8,4,BLOCK_WATER}; ObstaclesCollection[7] = {8,6,BLOCK_WATER}; ObstaclesCollection[8] = {9,4,BLOCK_WATER}; ObstaclesCollection[9] = {9,6,BLOCK_WATER}; ObstaclesCollection[10] = {11,4,BLOCK_WATER}; ObstaclesCollection[11] = {11,6,BLOCK_WATER}; ObstaclesCollection[12] = {5,1,BLOCK_WATER}; ObstaclesCollection[13] = {7,1,BLOCK_WATER}; ObstaclesCollection[14] = {5,3,BLOCK_WATER}; ObstaclesCollection[15] = {7,3,BLOCK_WATER}; ObstaclesCollection[16] = {5,7,BLOCK_WATER}; ObstaclesCollection[17] = {7,7,BLOCK_WATER}; ObstaclesCollection[18] = {5,9,BLOCK_WATER}; ObstaclesCollection[19] = {7,9,BLOCK_WATER}; TreasureCollection[0] = {11,5, T_BLUE, false, HEART_FULL, 10000, true }; TreasureCollection[1] = {6,9, T_YELLOW, false, PIERRE_BLANCHE, 1000, true }; //MonstersCollection[0] = { 6, 2, 4, 8, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[0] = { 6, 8, 4, 8, HORIZONTAL, DROITE, SPIDER }; MonstersCollection[1] = { 2, 5, 3, 7, VERTICAL, HAUT, SKELETON }; MonstersCollection[2] = { 10, 5, 3, 7, VERTICAL, BAS, GHOST }; } else if (numLevel==21) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 1; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 3; NbObstacleLevel = 0; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-3; Map[numLevel].y=-6; Map[numLevel].R=0; Map[numLevel].G=255; Map[numLevel].B=0; Map[numLevel].A=255; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 0, 5, DROITE, 255, 255, 255, false }; // Receptor WHITE //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },6}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[0] = { 6, 10, BAS, false, true, 1, { 0, -1, -1 }, 14}; // Door SOUTH TreasureCollection[0] = {6,2, T_GREEN, false, GREEN_FRAGMENT, 1000, true }; TreasureCollection[1] = {1,2, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {11,2, T_YELLOW, false, HEART_SINGLE, 100, true }; //TreasureCollection[3] = {1,1, T_BLUE, true, PIERRE_BLANCHE, 100, true }; } else if (numLevel==22) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 6; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 16; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-1; Map[numLevel].y=-6; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 },27}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 3, { 3,4,5 }, 16}; // Door SOUTH ReceptorCollection[0] = { 2, 6, DROITE, 0, 255, 255, false }; ReceptorCollection[1] = { 2, 2, DROITE, 0, 0, 255, false }; ReceptorCollection[2] = { 5, 2, BAS, 0, 0, 0, false }; ReceptorCollection[3] = { 7, 2, BAS, 0, 0, 0, false }; ReceptorCollection[4] = { 10, 2, GAUCHE, 0, 0, 255, false }; ReceptorCollection[5] = { 10, 6, GAUCHE, 255, 0, 255, false }; ObstaclesCollection[0] = {2,2,BLOCK_SUN}; ObstaclesCollection[1] = {5,2,BLOCK_SUN}; ObstaclesCollection[2] = {7,2,BLOCK_SUN}; ObstaclesCollection[3] = {10,2,BLOCK_SUN}; ObstaclesCollection[4] = {2,4,BLOCK_SUN}; ObstaclesCollection[5] = {5,4,BLOCK_WATER}; ObstaclesCollection[6] = {7,4,BLOCK_WATER}; ObstaclesCollection[7] = {10,4,BLOCK_SUN}; ObstaclesCollection[8] = {2,6,BLOCK_SUN}; ObstaclesCollection[9] = {5,6,BLOCK_WATER}; ObstaclesCollection[10] = {7,6,BLOCK_WATER}; ObstaclesCollection[11] = {10,6,BLOCK_SUN}; ObstaclesCollection[12] = {2,8,BLOCK_SUN}; ObstaclesCollection[13] = {5,8,BLOCK_SUN}; ObstaclesCollection[14] = {7,8,BLOCK_SUN}; ObstaclesCollection[15] = {10,8,BLOCK_SUN}; } else if (numLevel==23) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 6; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 5; NbObstacleLevel = 7; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-0; Map[numLevel].y=-6; Map[numLevel].R=0; Map[numLevel].G=0; Map[numLevel].B=0; Map[numLevel].A=255; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 4, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 2, 10, HAUT, 0, 0, 255, false }; // Receptor WHITE ReceptorCollection[1] = { 3, 10, HAUT, 0, 255, 255, false }; // Receptor WHITE ReceptorCollection[2] = { 5, 7, HAUT, 0, 0, 255, false }; // Receptor WHITE ReceptorCollection[3] = { 7, 7, HAUT, 255, 0, 0, false }; // Receptor WHITE ReceptorCollection[4] = { 9, 10, HAUT, 0, 0, 0, false }; // Receptor WHITE ReceptorCollection[5] = { 10, 10, HAUT, 255, 0, 0, false }; // Receptor WHITE ObstaclesCollection[0] = {5,9,BLOCK_STONE}; ObstaclesCollection[1] = {5,8,BLOCK_WATER}; ObstaclesCollection[2] = {5,7,BLOCK_STONE}; ObstaclesCollection[3] = {6,7,BLOCK_WATER}; ObstaclesCollection[4] = {7,7,BLOCK_STONE}; ObstaclesCollection[5] = {7,8,BLOCK_WATER}; ObstaclesCollection[6] = {7,9,BLOCK_STONE}; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0, 1, 5 }, 28}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 2, { 2, 3, -1 }, 17}; // Door SOUTH TreasureCollection[0] = {6,6, T_GREEN, false, BLACK_FRAGMENT, 1000, true }; TreasureCollection[1] = {4,6, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {8,6, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[3] = {2,6, T_BLUE, false, PIERRE_BLANCHE, 1000, true }; TreasureCollection[4] = {10,6, T_BLUE, false, PIERRE_BLANCHE, 1000, true }; } else if (numLevel==24) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 6; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 16; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=1; Map[numLevel].y=-6; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,1,2 },29}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 3, { 3,4,5 }, 18}; // Door SOUTH ReceptorCollection[0] = { 2, 6, DROITE, 255, 255, 0, false }; ReceptorCollection[1] = { 2, 2, DROITE, 255, 0, 0, false }; ReceptorCollection[2] = { 5, 2, BAS, 255, 0, 255, false }; ReceptorCollection[3] = { 7, 2, BAS, 255, 0, 255, false }; ReceptorCollection[4] = { 10, 2, GAUCHE, 255, 0, 0, false }; ReceptorCollection[5] = { 10, 6, GAUCHE, 0, 0, 0, false }; ObstaclesCollection[0] = {2,2,BLOCK_SUN}; ObstaclesCollection[1] = {5,2,BLOCK_SUN}; ObstaclesCollection[2] = {7,2,BLOCK_SUN}; ObstaclesCollection[3] = {10,2,BLOCK_SUN}; ObstaclesCollection[4] = {2,4,BLOCK_SUN}; ObstaclesCollection[5] = {5,4,BLOCK_WATER}; ObstaclesCollection[6] = {7,4,BLOCK_WATER}; ObstaclesCollection[7] = {10,4,BLOCK_SUN}; ObstaclesCollection[8] = {2,6,BLOCK_SUN}; ObstaclesCollection[9] = {5,6,BLOCK_WATER}; ObstaclesCollection[10] = {7,6,BLOCK_WATER}; ObstaclesCollection[11] = {10,6,BLOCK_SUN}; ObstaclesCollection[12] = {2,8,BLOCK_SUN}; ObstaclesCollection[13] = {5,8,BLOCK_SUN}; ObstaclesCollection[14] = {7,8,BLOCK_SUN}; ObstaclesCollection[15] = {10,8,BLOCK_SUN}; } else if (numLevel==25) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 2; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 1; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 3; NbObstacleLevel = 0; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=3; Map[numLevel].y=-6; Map[numLevel].R=0; Map[numLevel].G=0; Map[numLevel].B=255; Map[numLevel].A=255; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; ReceptorCollection[0] = { 0, 5, DROITE, 255, 255, 255, false }; // Receptor WHITE //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },6}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[0] = { 6, 10, BAS, false, true, 1, { 0, -1, -1 }, 20}; // Door SOUTH TreasureCollection[0] = {6,2, T_BLUE, false, BLUE_FRAGMENT, 1000, true }; TreasureCollection[1] = {1,2, T_YELLOW, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {11,2, T_YELLOW, false, HEART_SINGLE, 100, true }; //TreasureCollection[3] = {1,1, T_BLUE, true, PIERRE_BLANCHE, 100, true }; } else if (numLevel==26) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 3; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 12; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-2; Map[numLevel].y=-7; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },6}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST DoorCollection[0] = { 12, 5, DROITE, false, true, 3, { 0, 1, 2 }, 27}; // Door EAST //DoorCollection[0] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 14}; // Door SOUTH ReceptorCollection[0] = { 0, 5, DROITE, 255, 255, 255, false }; ReceptorCollection[1] = { 2, 1, BAS, 0, 255, 255, false }; ReceptorCollection[2] = { 2, 9, DROITE, 0, 0, 0, false }; TreasureCollection[0] = {2, 2, T_BLUE, false, HEART_SINGLE, 100, true }; TreasureCollection[1] = {10,2, T_BLUE, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {2, 8, T_BLUE, false, HEART_SINGLE, 100, true }; TreasureCollection[3] = {10,8, T_BLUE, false, HEART_SINGLE, 100, true }; ObstaclesCollection[0] = {1,1,BLOCK_STONE}; ObstaclesCollection[1] = {2,1,BLOCK_STONE}; ObstaclesCollection[2] = {1,2,BLOCK_STONE}; ObstaclesCollection[3] = {11,1,BLOCK_STONE}; ObstaclesCollection[4] = {10,1,BLOCK_STONE}; ObstaclesCollection[5] = {11,2,BLOCK_STONE}; ObstaclesCollection[6] = {1,9,BLOCK_STONE}; ObstaclesCollection[7] = {2,9,BLOCK_STONE}; ObstaclesCollection[8] = {1,8,BLOCK_STONE}; ObstaclesCollection[9] = {11,9,BLOCK_STONE}; ObstaclesCollection[10] = {10,9,BLOCK_STONE}; ObstaclesCollection[11] = {11,8,BLOCK_STONE}; } else if (numLevel==27) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 7; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 12; NbMonsterLevel = 3; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-1; Map[numLevel].y=-7; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 }, 11}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 3, { 4, 5, 6 }, 26}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 3, { 0, 1, 2 }, 28}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 22}; // Door SOUTH ReceptorCollection[0] = { 10, 0, BAS, 0, 0, 255, false }; ReceptorCollection[1] = { 12, 2, GAUCHE, 255, 255, 0, false }; ReceptorCollection[2] = { 11, 0, BAS, 255, 0, 255, false }; ReceptorCollection[3] = { 1, 10, HAUT, 0, 0, 0, false }; ReceptorCollection[4] = { 0, 2, DROITE, 255, 0, 255, false }; ReceptorCollection[5] = { 1, 0, BAS, 0, 255, 255, false }; ReceptorCollection[6] = { 3, 0, BAS, 0, 255, 0, false }; ObstaclesCollection[0] = {6,2,BLOCK_WATER}; ObstaclesCollection[1] = {5,3,BLOCK_WATER}; ObstaclesCollection[2] = {7,3,BLOCK_WATER}; ObstaclesCollection[3] = {4,4,BLOCK_WATER}; ObstaclesCollection[4] = {8,4,BLOCK_WATER}; ObstaclesCollection[5] = {3,5,BLOCK_WATER}; ObstaclesCollection[6] = {9,5,BLOCK_WATER}; ObstaclesCollection[7] = {4,6,BLOCK_WATER}; ObstaclesCollection[8] = {8,6,BLOCK_WATER}; ObstaclesCollection[9] = {5,7,BLOCK_WATER}; ObstaclesCollection[10] = {7,7,BLOCK_WATER}; ObstaclesCollection[11] = {6,8,BLOCK_WATER}; MonstersCollection[0] = { 6, 1, 1, 11, HORIZONTAL, DROITE, GHOST }; MonstersCollection[1] = { 1, 5, 1, 9, VERTICAL, HAUT, GHOST }; MonstersCollection[2] = { 11, 5, 1, 9, VERTICAL, HAUT, GHOST }; } else if (numLevel==28) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 12; NbDoorsLevel = 4; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 0; NbMonsterLevel = 4; NbBossLevel = 1; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=0; Map[numLevel].y=-7; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 6, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 0,7,2 },31}; // Door NORTH DoorCollection[1] = { 0, 5, GAUCHE, false, true, 3, { 10, 1, 4 }, 27}; // Door WEST DoorCollection[2] = { 12, 5, DROITE, false, true, 3, { 6, 9, 11 }, 29}; // Door EAST DoorCollection[3] = { 6, 10, BAS, false, true, 3, { 8, 3, 5 }, 23}; // Door SOUTH BossCollection[0] = { 6, 5, 2, 10, HORIZONTAL, GAUCHE, B_BLACK }; MonstersCollection[0] = { 3, 5, 1, 9, VERTICAL, HAUT, SKELETON }; MonstersCollection[1] = { 5, 5, 1, 9, VERTICAL, BAS, SKELETON }; MonstersCollection[2] = { 7, 5, 1, 9, VERTICAL, BAS, SKELETON }; MonstersCollection[3] = { 9, 5, 1, 9, VERTICAL, HAUT, SKELETON }; ReceptorCollection[0] = { 1, 0, BAS, 255, 255, 0, false }; ReceptorCollection[1] = { 0, 6, DROITE, 255, 255, 0, false }; ReceptorCollection[2] = { 0, 7, DROITE, 255, 255, 255, false }; ReceptorCollection[3] = { 0, 9, DROITE, 255, 255, 255, false }; ReceptorCollection[4] = { 2, 10, HAUT, 255, 0, 255, false }; ReceptorCollection[5] = { 4, 10, HAUT, 255, 0, 255, false }; ReceptorCollection[6] = { 12, 1, GAUCHE, 255, 0, 0, false }; ReceptorCollection[7] = { 5, 0, BAS, 0, 0, 0, false }; ReceptorCollection[8] = { 2, 0, BAS, 255, 0, 0, false }; ReceptorCollection[9] = { 7, 0, BAS, 0, 0, 0, false }; ReceptorCollection[10] = { 11, 0, BAS, 255, 0, 0, false }; ReceptorCollection[11] = { 12, 7, GAUCHE, 255, 0, 0, false }; } else if (numLevel==29) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 1; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 7; NbDoorsLevel = 3; NbBlocksLevel = 4; NbTreasureLevel = 0; NbObstacleLevel = 12; NbMonsterLevel = 3; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=1; Map[numLevel].y=-7; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=true; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },12}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 3, { 4, 5, 6 }, 28}; // Door WEST DoorCollection[1] = { 12, 5, DROITE, false, true, 3, { 0, 1, 2 }, 30}; // Door EAST DoorCollection[2] = { 6, 10, BAS, false, true, 1, { 3, -1, -1 }, 24}; // Door SOUTH ReceptorCollection[0] = { 8, 0, BAS, 255, 0, 0, false }; ReceptorCollection[1] = { 9, 0, BAS, 255, 255, 0, false }; ReceptorCollection[2] = { 11, 0, BAS, 0, 255, 0, false }; ReceptorCollection[3] = { 1, 10, HAUT, 0, 0, 0, false }; ReceptorCollection[4] = { 0, 2, DROITE, 255, 0, 255, false }; ReceptorCollection[5] = { 1, 0, BAS, 0, 255, 255, false }; ReceptorCollection[6] = { 3, 0, BAS, 0, 255, 0, false }; ObstaclesCollection[0] = {6,2,BLOCK_WATER}; ObstaclesCollection[1] = {5,3,BLOCK_WATER}; ObstaclesCollection[2] = {7,3,BLOCK_WATER}; ObstaclesCollection[3] = {4,4,BLOCK_WATER}; ObstaclesCollection[4] = {8,4,BLOCK_WATER}; ObstaclesCollection[5] = {3,5,BLOCK_WATER}; ObstaclesCollection[6] = {9,5,BLOCK_WATER}; ObstaclesCollection[7] = {4,6,BLOCK_WATER}; ObstaclesCollection[8] = {8,6,BLOCK_WATER}; ObstaclesCollection[9] = {5,7,BLOCK_WATER}; ObstaclesCollection[10] = {7,7,BLOCK_WATER}; ObstaclesCollection[11] = {6,8,BLOCK_WATER}; MonstersCollection[0] = { 6, 1, 1, 11, HORIZONTAL, DROITE, SKELETON }; MonstersCollection[1] = { 1, 5, 1, 9, VERTICAL, HAUT, SKELETON }; MonstersCollection[2] = { 11, 5, 1, 9, VERTICAL, HAUT, SKELETON }; } else if (numLevel==30) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 3; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 12; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=2; Map[numLevel].y=-7; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=true; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=false; joueur = { 6, 9, HAUT }; lumiere = { 6, 5, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },12}; // Door NORTH DoorCollection[0] = { 0, 5, GAUCHE, false, true, 3, { 0, 1, 2 }, 29}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 30}; // Door EAST //DoorCollection[2] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 24}; // Door SOUTH ReceptorCollection[0] = { 12, 5, GAUCHE, 255, 255, 255, false }; ReceptorCollection[1] = { 10, 1, BAS, 255, 0, 255, false }; ReceptorCollection[2] = { 2, 9, DROITE, 0, 0, 0, false }; TreasureCollection[0] = {2, 2, T_BLUE, false, HEART_SINGLE, 100, true }; TreasureCollection[1] = {10,2, T_BLUE, false, HEART_SINGLE, 100, true }; TreasureCollection[2] = {2, 8, T_BLUE, false, HEART_SINGLE, 100, true }; TreasureCollection[3] = {10,8, T_BLUE, false, HEART_SINGLE, 100, true }; ObstaclesCollection[0] = {1,1,BLOCK_STONE}; ObstaclesCollection[1] = {2,1,BLOCK_STONE}; ObstaclesCollection[2] = {1,2,BLOCK_STONE}; ObstaclesCollection[3] = {11,1,BLOCK_STONE}; ObstaclesCollection[4] = {10,1,BLOCK_STONE}; ObstaclesCollection[5] = {11,2,BLOCK_STONE}; ObstaclesCollection[6] = {1,9,BLOCK_STONE}; ObstaclesCollection[7] = {2,9,BLOCK_STONE}; ObstaclesCollection[8] = {1,8,BLOCK_STONE}; ObstaclesCollection[9] = {11,9,BLOCK_STONE}; ObstaclesCollection[10] = {10,9,BLOCK_STONE}; ObstaclesCollection[11] = {11,8,BLOCK_STONE}; } else if (numLevel==31) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 5; NbDoorsLevel = 2; NbBlocksLevel = 4; NbTreasureLevel = 4; NbObstacleLevel = 13; NbMonsterLevel = 0; NbBossLevel = 1; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=-0; Map[numLevel].y=-8; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=0; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=true; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 6, 7, 1,1,1,0, false }; BlocksCollection[0] = { 8, 3, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 4, 7, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 4, 3, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 8, 7, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; DoorCollection[0] = { 6,0, HAUT, false, true, 3, { 2,3,4 },32}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[1] = { 6, 10, BAS, false, true, 2, { 0,1, -1 }, 28}; // Door SOUTH ReceptorCollection[0] = { 1, 1, DROITE, 255, 0, 0, false }; ReceptorCollection[1] = { 11, 1, GAUCHE, 255, 0, 0, false }; ReceptorCollection[2] = { 6, 3, BAS, 0, 0, 0, false }; // Receptor WHITE ReceptorCollection[3] = { 3, 1, BAS, 255, 0, 255, false }; // Receptor WHITE ReceptorCollection[4] = { 9, 1, BAS, 255, 255, 0, false }; // Receptor WHITE TreasureCollection[0] = {1,5, T_RED, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[1] = {11,5, T_YELLOW, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[2] = {11,7, T_GREEN, false, PIERRE_BLANCHE, 100, true }; TreasureCollection[3] = {1,7, T_BLUE, false, PIERRE_BLANCHE, 100, true }; ObstaclesCollection[0] = {1,1,BLOCK_STONE}; ObstaclesCollection[1] = {3,1,BLOCK_STONE}; ObstaclesCollection[2] = {5,1,BLOCK_STONE}; ObstaclesCollection[3] = {7,1,BLOCK_STONE}; ObstaclesCollection[4] = {9,1,BLOCK_STONE}; ObstaclesCollection[5] = {11,1,BLOCK_STONE}; ObstaclesCollection[6] = {1,9,BLOCK_STONE}; ObstaclesCollection[7] = {3,9,BLOCK_STONE}; ObstaclesCollection[8] = {5,9,BLOCK_STONE}; ObstaclesCollection[9] = {7,9,BLOCK_STONE}; ObstaclesCollection[10] = {9,9,BLOCK_STONE}; ObstaclesCollection[11] = {11,9,BLOCK_STONE}; ObstaclesCollection[12] = {6,3,BLOCK_STONE}; BossCollection[0] = { 6, 4, 1, 11, HORIZONTAL, GAUCHE, BIGBOSS }; } else if (numLevel==32) // VALIDATED [OK] { currentLevel = numLevel; LEVELCOLOR = 0; SIZE_MAP_X=13; SIZE_MAP_Y=11; NbReceptorsLevel = 0; NbDoorsLevel = 1; NbBlocksLevel = 4; NbTreasureLevel = 1; NbObstacleLevel = 32; NbMonsterLevel = 0; NbBossLevel = 0; BlocksCollection = (Blocks*) malloc( NbBlocksLevel * sizeof( Blocks) ); ReceptorCollection = (Receptor*) malloc( NbReceptorsLevel * sizeof( Receptor) ); DoorCollection = (Door*) malloc( NbDoorsLevel * sizeof( Door) ); TreasureCollection = (Treasure*) malloc( NbTreasureLevel * sizeof( Treasure) ); ObstaclesCollection = (Obstacle*) malloc( NbObstacleLevel * sizeof( Obstacle) ); MonstersCollection = (Monster*) malloc( NbMonsterLevel * sizeof( Monster) ); BossCollection = (Boss*) malloc( NbBossLevel * sizeof( Boss ) ); Map[numLevel].x=0; Map[numLevel].y=-9; Map[numLevel].R=255; Map[numLevel].G=255; Map[numLevel].B=255; Map[numLevel].A=255; Map[numLevel].visited=true; Map[numLevel].doorWest=false; Map[numLevel].doorNorth=false; Map[numLevel].doorEast=false; Map[numLevel].doorSouth=true; joueur = { 6, 9, HAUT }; lumiere = { 3, 5, 1,1,1,0, false }; BlocksCollection[0] = { 2, 4, 255, 0, 0, 127, TRANSPARENT }; BlocksCollection[1] = { 2, 5, 0, 255, 0, 127, TRANSPARENT }; BlocksCollection[2] = { 2, 6, 0, 0, 255, 127, TRANSPARENT }; BlocksCollection[3] = { 10, 5, 0, 0, 0, 255, OPAQUE }; BlocRouge = &BlocksCollection[0]; BlocVert = &BlocksCollection[1]; BlocBleu = &BlocksCollection[2]; BlocNoir = &BlocksCollection[3]; //DoorCollection[0] = { 6,0, HAUT, false, true, 0, { -1,-1, -1 },6}; // Door NORTH //DoorCollection[1] = { 0, 5, GAUCHE, false, true, 0, { -1, -1, -1 }, 9}; // Door WEST //DoorCollection[1] = { 12, 5, DROITE, false, true, 0, { -1, -1, -1 }, 10}; // Door EAST DoorCollection[0] = { 6, 10, BAS, false, true, 0, { -1, -1, -1 }, 31}; // Door SOUTH TreasureCollection[0] = {6,2, T_BLUE, false, WHITE_FRAGMENT, 10000, true }; ObstaclesCollection[0] = {1,1,BLOCK_STONE}; ObstaclesCollection[1] = {2,1,BLOCK_STONE}; ObstaclesCollection[2] = {1,2,BLOCK_STONE}; ObstaclesCollection[3] = {11,1,BLOCK_STONE}; ObstaclesCollection[4] = {10,1,BLOCK_STONE}; ObstaclesCollection[5] = {11,2,BLOCK_STONE}; ObstaclesCollection[6] = {1,9,BLOCK_STONE}; ObstaclesCollection[7] = {2,9,BLOCK_STONE}; ObstaclesCollection[8] = {1,8,BLOCK_STONE}; ObstaclesCollection[9] = {11,9,BLOCK_STONE}; ObstaclesCollection[10] = {10,9,BLOCK_STONE}; ObstaclesCollection[11] = {11,8,BLOCK_STONE}; ObstaclesCollection[12] = {4,1,BLOCK_WATER}; ObstaclesCollection[13] = {4,2,BLOCK_WATER}; ObstaclesCollection[14] = {4,3,BLOCK_WATER}; ObstaclesCollection[15] = {4,4,BLOCK_WATER}; ObstaclesCollection[16] = {5,4,BLOCK_WATER}; ObstaclesCollection[17] = {5,5,BLOCK_WATER}; ObstaclesCollection[18] = {5,6,BLOCK_WATER}; ObstaclesCollection[19] = {5,7,BLOCK_WATER}; ObstaclesCollection[20] = {5,8,BLOCK_WATER}; ObstaclesCollection[21] = {5,9,BLOCK_WATER}; ObstaclesCollection[22] = {8,1,BLOCK_WATER}; ObstaclesCollection[23] = {8,2,BLOCK_WATER}; ObstaclesCollection[24] = {8,3,BLOCK_WATER}; ObstaclesCollection[25] = {8,4,BLOCK_WATER}; ObstaclesCollection[26] = {7,4,BLOCK_WATER}; ObstaclesCollection[27] = {7,5,BLOCK_WATER}; ObstaclesCollection[28] = {7,6,BLOCK_WATER}; ObstaclesCollection[29] = {7,7,BLOCK_WATER}; ObstaclesCollection[30] = {7,8,BLOCK_WATER}; ObstaclesCollection[31] = {7,9,BLOCK_WATER}; } if (needcorrection==true) adjustLevel( numLevel ); } void synchroniseGame( void ) { score = sauvegarde.currentScore[0]*256+sauvegarde.currentScore[1]; currentLevel = sauvegarde.currentLevel; difficulty = sauvegarde.currentDifficulty; life = sauvegarde.currentLife; RedFrag = sauvegarde.redFrag==1 ? true : false; GreenFrag = sauvegarde.greenFrag==1 ? true : false; BlueFrag = sauvegarde.blueFrag==1 ? true : false; BlackFrag = sauvegarde.blackFrag==1 ? true : false; WhiteFrag = sauvegarde.whiteFrag==1 ? true : false; for( unsigned char k =0; k<33; k++) { if (sauvegarde.visitedLevels[k]==0x01) { loadLevel( k ); } else Map[k].visited= false; } } void exitAndFree( void ) { free(BlocksCollection); free(ReceptorCollection); free(DoorCollection); free(TreasureCollection); free(ObstaclesCollection); free(MonstersCollection); free(BossCollection); free(BulletCollection); } void initWalls( void ) { murs[0] = { HORIZONTAL, OFFSET_X+SIZE*1, OFFSET_X+SIZE*(SIZE_MAP_X-1), OFFSET_Y+SIZE }; murs[1] = { VERTICAL, OFFSET_Y+SIZE*1, OFFSET_Y+SIZE*(SIZE_MAP_Y-1), OFFSET_X+SIZE*(SIZE_MAP_X-1) }; murs[2] = { HORIZONTAL, OFFSET_X+SIZE*1, OFFSET_X+SIZE*(SIZE_MAP_X-1), OFFSET_Y+SIZE*(SIZE_MAP_Y-1) }; murs[3] = { VERTICAL, OFFSET_Y+SIZE*1, OFFSET_Y+SIZE*(SIZE_MAP_Y-1), OFFSET_X+SIZE }; for(unsigned char k=0; kR || *G!=BlocNoir->G || *B!=BlocNoir->B || *A!=ALPHA_OPAQUE ) // We check if the light is not already a black ray { if (BlocksCollection[k].type == OPAQUE) { if (*R==lumiere.R && *G==lumiere.G && *B==lumiere.B && *A==lumiere.A) { *R = (*R-lumiere.R) & BlocksCollection[k].R; *G = (*G-lumiere.G) & BlocksCollection[k].G; *B = (*B-lumiere.B) & BlocksCollection[k].B; *A = ALPHA_OPAQUE; } else { *R = *R & BlocksCollection[k].R; *G = *G & BlocksCollection[k].G; *B = *B & BlocksCollection[k].B; *A = ALPHA_OPAQUE; } } if (BlocksCollection[k].type == TRANSPARENT) { if (*R==lumiere.R && *G==lumiere.G && *B==lumiere.B && *A==lumiere.A) { *R = (*R-lumiere.R) | BlocksCollection[k].R; *G = (*G-lumiere.G) | BlocksCollection[k].G; *B = (*B-lumiere.B) | BlocksCollection[k].B; *A = ALPHA_TRANSPARENT; } else { *R = *R | BlocksCollection[k].R; *G = *G | BlocksCollection[k].G; *B = *B | BlocksCollection[k].B; *A = ALPHA_TRANSPARENT; } } } } } for( unsigned char k=0; kdx) { temp=dx; dx=dy; dy=temp; swp=1; } p=2*dy-dx; for(i=0; i=0) { p=p-2*dx; if(swp) x+=s1*SPEEDUP_RAY; else y+=s2*SPEEDUP_RAY; } p=p+2*dy; if(swp) y+=s2*SPEEDUP_RAY; else x+=s1*SPEEDUP_RAY; } } void renderWalls( void ) { unsigned char lR = lumiere.R; unsigned char lG = lumiere.G; unsigned char lB = lumiere.B; unsigned char lA = lumiere.A; unsigned int lX = SIZE*lumiere.x+OFFSET_X+SIZE/2; unsigned int lY = SIZE*lumiere.y+OFFSET_Y+SIZE/2; for( unsigned char k=0; k<4; k++ ) { if (murs[k].direction == HORIZONTAL) for( unsigned int z=murs[k].mini; z<=murs[k].maxi; z+=SPEEDUP_WALL) { lR = lumiere.R; lG = lumiere.G; lB = lumiere.B; lA = lumiere.A; rayCast( lX, lY, z, murs[k].fixe, &lR,&lG,&lB,&lA ); if (lR!=lumiere.R || lG!=lumiere.G || lB!=lumiere.B || lA!=lumiere.A ) { if(lA!=ALPHA_BLOQUE) { _pixelRGBA( z, murs[k].fixe+1, lR,lG,lB, 255 ); _pixelRGBA( z, murs[k].fixe, lR,lG,lB, 255 ); _pixelRGBA( z, murs[k].fixe-1, lR,lG,lB, 255 ); } } } if (murs[k].direction == VERTICAL) for( unsigned int z=murs[k].mini; z<=murs[k].maxi; z+=SPEEDUP_WALL) { lR = lumiere.R; lG = lumiere.G; lB = lumiere.B; lA = lumiere.A; rayCast( lX, lY, murs[k].fixe, z, &lR,&lG,&lB,&lA ); if (lR!=lumiere.R || lG!=lumiere.G || lB!=lumiere.B || lA!=lumiere.A ) { if (lA!=ALPHA_BLOQUE) { _pixelRGBA( murs[k].fixe+1, z, lR,lG,lB,255 ); _pixelRGBA( murs[k].fixe, z, lR,lG,lB,255 ); _pixelRGBA( murs[k].fixe-1, z, lR,lG,lB,255 ); } } } } } void renderObstacles( int passnumber ) { if (passnumber == LAYER_BELOW_RAYS) { for( unsigned char k=0; k>1 ); _rectangleRGBA( lX-4, lY-3, lX+4, lY+3, R, G, B, 255); if (Map[k].doorWest==true) _lineRGBA( lX-5, lY-1, lX-5, lY+1, 255, 255, 255, 255); if (Map[k].doorEast==true) _lineRGBA( lX+5, lY-1, lX+5, lY+1, 255, 255, 255, 255); if (Map[k].doorNorth==true) _lineRGBA( lX-1, lY-4, lX+1, lY-4, 255, 255, 255, 255); if (Map[k].doorSouth==true) _lineRGBA( lX-1, lY+4, lX+1, lY+4, 255, 255, 255, 255); if (k==currentLevel) { _rectangleRGBA( lX-4, lY-3, lX+4, lY+3, 255, 0, 255, 255); _rectangleRGBA( lX-3, lY-2, lX+3, lY+2, 255, 0, 255, 255); } } } } void drawInterface( void ) { unsigned int midX, midY; dsubimage( 232, 0, &parchemin, 0,0, 164, 210, DIMAGE_NONE); dfont( &font_fantasy ); dprint( 256, 36, C_RGB(150,150,150), "MAGIC Light %s", RevShort); dprint( 255, 35, C_BLACK, "MAGIC Light %s", RevShort); dfont( &font_tiny ); dprint( 251, 56, C_RGB(150,150,150), "Score : %d", score ); dprint( 250, 55, C_BLACK, "Score : %d", score ); dprint( 251, 66, C_RGB(150,150,150), "Level : %d", currentLevel ); dprint( 250, 65, C_BLACK, "Level : %d", currentLevel ); dprint( 316, 56, C_RGB(150,150,150), "Life :"); dprint( 315, 55, C_BLACK, "Life :" ); for( unsigned char k = 0; k< life; k++) { dsubimage( 340 + k*8, 57, &hearts, 8, 0, 8, 8, DIMAGE_NONE); } for( unsigned char k = life; k< lifeMax; k++) { dsubimage( 340 + k*8, 57, &hearts, 0, 0, 8, 8, DIMAGE_NONE); } if (WhiteFrag==true) dsubimage( 340, 66, &fragments, 0, 0, 32, 32, DIMAGE_NONE); if (BlackFrag==true) dsubimage( 340, 66, &fragments, 32, 0, 32, 32, DIMAGE_NONE); if (RedFrag==true) dsubimage( 340, 66, &fragments, 64, 0, 32, 32, DIMAGE_NONE); if (GreenFrag==true) dsubimage( 340, 66, &fragments, 96, 0, 32, 32, DIMAGE_NONE); if (BlueFrag==true) dsubimage( 340, 66, &fragments, 128, 0, 32, 32, DIMAGE_NONE); midY=(200+224)/2; midX=(66)/2; dsubimage( midX-8, midY-8, &player, 0,0,16,16, DIMAGE_NONE); midX+=66; dsubimage( midX-8, midY-8, &light, 0,0,16,16, DIMAGE_NONE); midX+=66; dsubimage( midX-8, midY-8, &sprites, 16,0,16,16, DIMAGE_NONE); midX+=66; dsubimage( midX-8, midY-8, &sprites, 48,0,16,16, DIMAGE_NONE); midX+=66; dsubimage( midX-8, midY-8, &sprites, 32,0,16,16, DIMAGE_NONE); midX+=66; dsubimage( midX-8, midY-8, &sprites, 64,0,16,16, DIMAGE_NONE); if (selected >=1 && selected <=6) { if (frame_cursor==0) dsubimage( 66*(selected)-33-11, midY-11, &cursor, 0,0,22,22, DIMAGE_NONE); else if (frame_cursor==1) dsubimage( 66*(selected)-33-11, midY-11, &cursor, 22,0,22,22, DIMAGE_NONE); else if (frame_cursor==2) dsubimage( 66*(selected)-33-11, midY-11, &cursor, 44,0,22,22, DIMAGE_NONE); else if (frame_cursor==3) dsubimage( 66*(selected)-33-11, midY-11, &cursor, 22,0,22,22, DIMAGE_NONE); } } bool isValidMove( selection selected, unsigned char x, unsigned char y, orientations sens ) { if (selected == JOUEUR) for(unsigned char k=0; kSIZE_MAP_X-2 || y<1 || y>SIZE_MAP_Y-2) { return false; } else if (selected == JOUEUR) { if (x==lumiere.x && y==lumiere.y) return false; else if (x==BlocRouge->x && y==BlocRouge->y) return false; else if (x==BlocVert->x && y==BlocVert->y) return false; else if (x==BlocBleu->x && y==BlocBleu->y) return false; else if (x==BlocNoir->x && y==BlocNoir->y) return false; else { for (unsigned char k =0; kx && y==BlocVert->y) return false; else if (x==BlocBleu->x && y==BlocBleu->y) return false; else if (x==BlocNoir->x && y==BlocNoir->y) return false; else { for (unsigned char k =0; kx && y==BlocRouge->y) return false; else if (x==BlocBleu->x && y==BlocBleu->y) return false; else if (x==BlocNoir->x && y==BlocNoir->y) return false; else { for (unsigned char k =0; kx && y==BlocRouge->y) return false; else if (x==BlocVert->x && y==BlocVert->y) return false; else if (x==BlocNoir->x && y==BlocNoir->y) return false; else { for (unsigned char k =0; kx && y==BlocRouge->y) return false; else if (x==BlocVert->x && y==BlocVert->y) return false; else if (x==BlocBleu->x && y==BlocBleu->y) return false; else { for (unsigned char k =0; kx-1, BlocRouge->y, touche )) BlocRouge->x--; else if (what==VERT && isValidMove(VERT, BlocVert->x-1, BlocVert->y, touche)) BlocVert->x--; else if (what==BLEU && isValidMove(BLEU, BlocBleu->x-1, BlocBleu->y, touche)) BlocBleu->x--; else if (what==NOIR && isValidMove(NOIR, BlocNoir->x-1, BlocNoir->y, touche)) BlocNoir->x--; } if (touche==DROITE) { if (what==JOUEUR && isValidMove(JOUEUR, joueur.x+1, joueur.y, touche)) { joueur.x++; frame=0; direction=DROITE; mouvement=true; } else if (what==JOUEUR && !isValidMove(JOUEUR, joueur.x+1, joueur.y, touche)) { frame=0; direction=DROITE; } else if (what==LUMIERE && isValidMove(LUMIERE, lumiere.x+1, lumiere.y, touche)) lumiere.x++; else if (what==ROUGE && isValidMove(ROUGE, BlocRouge->x+1, BlocRouge->y, touche)) BlocRouge->x++; else if (what==VERT && isValidMove(VERT, BlocVert->x+1, BlocVert->y, touche)) BlocVert->x++; else if (what==BLEU && isValidMove(BLEU, BlocBleu->x+1, BlocBleu->y, touche)) BlocBleu->x++; else if (what==NOIR && isValidMove(NOIR, BlocNoir->x+1, BlocNoir->y, touche)) BlocNoir->x++; } if (touche==HAUT) { if (what==JOUEUR && isValidMove(JOUEUR, joueur.x, joueur.y-1, touche)) { joueur.y--; frame=0; direction=HAUT; mouvement=true; } else if (what==JOUEUR && !isValidMove(JOUEUR, joueur.x, joueur.y-1, touche)) { frame=0; direction=HAUT; } else if (what==LUMIERE && isValidMove(LUMIERE, lumiere.x, lumiere.y-1, touche)) lumiere.y--; else if (what==ROUGE && isValidMove(ROUGE, BlocRouge->x, BlocRouge->y-1, touche)) BlocRouge->y--; else if (what==VERT && isValidMove(VERT, BlocVert->x, BlocVert->y-1, touche)) BlocVert->y--; else if (what==BLEU && isValidMove(BLEU, BlocBleu->x, BlocBleu->y-1, touche)) BlocBleu->y--; else if (what==NOIR && isValidMove(NOIR, BlocNoir->x, BlocNoir->y-1, touche)) BlocNoir->y--; } if (touche==BAS) { if (what==JOUEUR && isValidMove(JOUEUR, joueur.x, joueur.y+1, touche)) { joueur.y++; frame=0; direction=BAS; mouvement=true; } else if (what==JOUEUR && !isValidMove(JOUEUR, joueur.x, joueur.y+1, touche)) { frame=0; direction=BAS; } else if (what==LUMIERE && isValidMove(LUMIERE, lumiere.x, lumiere.y+1, touche)) lumiere.y++; else if (what==ROUGE && isValidMove(ROUGE, BlocRouge->x, BlocRouge->y+1, touche)) BlocRouge->y++; else if (what==VERT && isValidMove(VERT, BlocVert->x, BlocVert->y+1, touche)) BlocVert->y++; else if (what==BLEU && isValidMove(BLEU, BlocBleu->x, BlocBleu->y+1, touche)) BlocBleu->y++; else if (what==NOIR && isValidMove(NOIR, BlocNoir->x, BlocNoir->y+1, touche)) BlocNoir->y++; } } bool checkNextPositionMonster( unsigned int Xtarget, unsigned int Ytarget, unsigned int direction ) { for( unsigned char k=0; k=lumiere.x-1 && Xtarget<=lumiere.x+1 && Ytarget>=lumiere.y-1 && Ytarget<=lumiere.y+1) if (Xtarget==lumiere.x && Ytarget==lumiere.y) { return false; } else if (Xtarget==joueur.x && Ytarget==joueur.y) { if (life>0) life--; return false; } else if (Xtarget==BlocRouge->x && Ytarget==BlocRouge->y) { if (direction==HAUT) { if (isValidMove( ROUGE, BlocRouge->x, BlocRouge->y-1, HAUT)) { BlocRouge->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( ROUGE, BlocRouge->x, BlocRouge->y+1, BAS)) { BlocRouge->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( ROUGE, BlocRouge->x-1, BlocRouge->y, GAUCHE)) { BlocRouge->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( ROUGE, BlocRouge->x+1, BlocRouge->y, DROITE)) { BlocRouge->x+=1; return true; } else return false; } } else if (Xtarget==BlocVert->x && Ytarget==BlocVert->y) { if (direction==HAUT) { if (isValidMove( VERT, BlocVert->x, BlocVert->y-1, HAUT)) { BlocVert->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( VERT, BlocVert->x, BlocVert->y+1, BAS)) { BlocVert->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( VERT, BlocVert->x-1, BlocVert->y, GAUCHE)) { BlocVert->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( VERT, BlocVert->x+1, BlocVert->y, DROITE)) { BlocVert->x+=1; return true; } else return false; } } else if (Xtarget==BlocBleu->x && Ytarget==BlocBleu->y) { if (direction==HAUT) { if (isValidMove( BLEU, BlocBleu->x, BlocBleu->y-1, HAUT)) { BlocBleu->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( BLEU, BlocBleu->x, BlocBleu->y+1, BAS)) { BlocBleu->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( BLEU, BlocBleu->x-1, BlocBleu->y, GAUCHE)) { BlocBleu->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( BLEU, BlocBleu->x+1, BlocBleu->y, DROITE)) { BlocBleu->x+=1; return true; } else return false; } } else if (Xtarget==BlocNoir->x && Ytarget==BlocNoir->y) { if (direction==HAUT) { if (isValidMove( NOIR, BlocNoir->x, BlocNoir->y-1, HAUT)) { BlocNoir->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( NOIR, BlocNoir->x, BlocNoir->y+1, BAS)) { BlocNoir->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( NOIR, BlocNoir->x-1, BlocNoir->y, GAUCHE)) { BlocNoir->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( NOIR, BlocNoir->x+1, BlocNoir->y, DROITE)) { BlocNoir->x+=1; return true; } else return false; } } return true; } void updateMonsters( void ) { for( unsigned char k=0; kmini && checkNextPositionMonster( X, Y-1, HAUT)==true) { MonstersCollection[k].ycur--; MonstersCollection[k].sens=HAUT; } else { MonstersCollection[k].sens=BAS; } } } else if (direction==HORIZONTAL) { if (sens==DROITE) { if (Xmini && checkNextPositionMonster( X-1, Y, GAUCHE)==true) { MonstersCollection[k].xcur--; MonstersCollection[k].sens=GAUCHE; } else { MonstersCollection[k].sens=DROITE; } } } } } void renderMonsters( void ) { for( unsigned char k=0; kmini) { if (frame_monster==0) dsubimage( lX, lY, &monstres, OFFSET_X_MONSTER,32,16,16, DIMAGE_NONE); else if (frame_monster==1) dsubimage( lX, lY-3, &monstres, OFFSET_X_MONSTER+16,32,16,16, DIMAGE_NONE); else if (frame_monster==2) dsubimage( lX, lY-5, &monstres, OFFSET_X_MONSTER+32,32,16,16, DIMAGE_NONE); else if (frame_monster==3) dsubimage( lX, lY-8, &monstres, OFFSET_X_MONSTER,32,16,16, DIMAGE_NONE); else if (frame_monster==4) dsubimage( lX, lY-11, &monstres, OFFSET_X_MONSTER+16,32,16,16, DIMAGE_NONE); else if (frame_monster==5) dsubimage( lX, lY-13, &monstres, OFFSET_X_MONSTER+32,32,16,16, DIMAGE_NONE); } else if (sens==HAUT && MonstersCollection[k].ycur==mini) { dsubimage( lX, lY, &monstres, OFFSET_X_MONSTER,32,16,16, DIMAGE_NONE); } } else if (direction==HORIZONTAL) { /* if (true) { _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY+SIZE/2, 255, 0, 0, 255 ); _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY+1+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY+1+SIZE/2, 255, 0, 0, 255 ); _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY-1+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY-1+SIZE/2, 255, 0, 0, 255 ); } */ if (sens==GAUCHE && MonstersCollection[k].xcur>mini) { if (frame_monster==0) dsubimage( lX, lY, &monstres, OFFSET_X_MONSTER,48,16,16, DIMAGE_NONE); else if (frame_monster==1) dsubimage( lX-3, lY, &monstres, OFFSET_X_MONSTER+16,48,16,16, DIMAGE_NONE); else if (frame_monster==2) dsubimage( lX-5, lY, &monstres, OFFSET_X_MONSTER+32,48,16,16, DIMAGE_NONE); else if (frame_monster==3) dsubimage( lX-8, lY, &monstres, OFFSET_X_MONSTER,48,16,16, DIMAGE_NONE); else if (frame_monster==4) dsubimage( lX-11, lY, &monstres, OFFSET_X_MONSTER+16,48,16,16, DIMAGE_NONE); else if (frame_monster==5) dsubimage( lX-13, lY, &monstres, OFFSET_X_MONSTER+32,48,16,16, DIMAGE_NONE); } else if (sens==GAUCHE && MonstersCollection[k].xcur==mini) { dsubimage( lX, lY, &monstres, OFFSET_X_MONSTER,48,16,16, DIMAGE_NONE); } else if (sens==DROITE && MonstersCollection[k].xcur=lumiere.x-1 && Xtarget<=lumiere.x+1 && Ytarget>=lumiere.y-1 && Ytarget<=lumiere.y+1) if (Xtarget==lumiere.x && Ytarget==lumiere.y) { return false; } else if (Xtarget==joueur.x && Ytarget==joueur.y) { if (life>0) life--; return false; } else if (Xtarget==BlocRouge->x && Ytarget==BlocRouge->y) { if (direction==HAUT) { if (isValidMove( ROUGE, BlocRouge->x, BlocRouge->y-1, HAUT)) { BlocRouge->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( ROUGE, BlocRouge->x, BlocRouge->y+1, BAS)) { BlocRouge->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( ROUGE, BlocRouge->x-1, BlocRouge->y, GAUCHE)) { BlocRouge->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( ROUGE, BlocRouge->x+1, BlocRouge->y, DROITE)) { BlocRouge->x+=1; return true; } else return false; } } else if (Xtarget==BlocVert->x && Ytarget==BlocVert->y) { if (direction==HAUT) { if (isValidMove( VERT, BlocVert->x, BlocVert->y-1, HAUT)) { BlocVert->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( VERT, BlocVert->x, BlocVert->y+1, BAS)) { BlocVert->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( VERT, BlocVert->x-1, BlocVert->y, GAUCHE)) { BlocVert->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( VERT, BlocVert->x+1, BlocVert->y, DROITE)) { BlocVert->x+=1; return true; } else return false; } } else if (Xtarget==BlocBleu->x && Ytarget==BlocBleu->y) { if (direction==HAUT) { if (isValidMove( BLEU, BlocBleu->x, BlocBleu->y-1, HAUT)) { BlocBleu->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( BLEU, BlocBleu->x, BlocBleu->y+1, BAS)) { BlocBleu->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( BLEU, BlocBleu->x-1, BlocBleu->y, GAUCHE)) { BlocBleu->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( BLEU, BlocBleu->x+1, BlocBleu->y, DROITE)) { BlocBleu->x+=1; return true; } else return false; } } else if (Xtarget==BlocNoir->x && Ytarget==BlocNoir->y) { if (direction==HAUT) { if (isValidMove( NOIR, BlocNoir->x, BlocNoir->y-1, HAUT)) { BlocNoir->y-=1; return true; } else return false; } else if (direction==BAS) { if (isValidMove( NOIR, BlocNoir->x, BlocNoir->y+1, BAS)) { BlocNoir->y+=1; return true; } else return false; } else if (direction==GAUCHE) { if (isValidMove( NOIR, BlocNoir->x-1, BlocNoir->y, GAUCHE)) { BlocNoir->x-=1; return true; } else return false; } else if (direction==DROITE) { if (isValidMove( NOIR, BlocNoir->x+1, BlocNoir->y, DROITE)) { BlocNoir->x+=1; return true; } else return false; } } return true; } void updateBoss( void ) { for( unsigned char k=0; kmini && checkNextPositionMonster( X, Y-1, HAUT)==true) { BossCollection[k].ycur--; BossCollection[k].sens=HAUT; } else { BossCollection[k].sens=BAS; } } } else if (direction==HORIZONTAL) { if (sens==DROITE) { if (Xmini && checkNextPositionMonster( X-1, Y, GAUCHE)==true) { BossCollection[k].xcur--; BossCollection[k].sens=GAUCHE; } else { BossCollection[k].sens=DROITE; } } } } } void renderBoss( void ) { for( unsigned char k=0; kmini) { if (frame_boss==0) dsubimage( lX, lY, &bigboss, OFFSET_X_MONSTER,0,32,32, DIMAGE_NONE); else if (frame_boss==1) dsubimage( lX, lY-3, &bigboss, OFFSET_X_MONSTER+32,0,32,32, DIMAGE_NONE); else if (frame_boss==2) dsubimage( lX, lY-5, &bigboss, OFFSET_X_MONSTER+64,0,32,32, DIMAGE_NONE); else if (frame_boss==3) dsubimage( lX, lY-8, &bigboss, OFFSET_X_MONSTER,32,0,32, DIMAGE_NONE); else if (frame_boss==4) dsubimage( lX, lY-11, &bigboss, OFFSET_X_MONSTER+32,0,32,32, DIMAGE_NONE); else if (frame_boss==5) dsubimage( lX, lY-13, &bigboss, OFFSET_X_MONSTER+64,0,32,32, DIMAGE_NONE); } else if (sens==HAUT && BossCollection[k].ycur==mini) { dsubimage( lX, lY, &bigboss, OFFSET_X_MONSTER,0,32,32, DIMAGE_NONE); } } else if (direction==HORIZONTAL) { /* if (true) { _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY+SIZE/2, 255, 0, 0, 255 ); _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY+1+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY+1+SIZE/2, 255, 0, 0, 255 ); _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY-1+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY-1+SIZE/2, 255, 0, 0, 255 ); } */ if (sens==GAUCHE && BossCollection[k].xcur>mini) { if (frame_boss==0) dsubimage( lX, lY, &bigboss, OFFSET_X_MONSTER,96,32,32, DIMAGE_NONE); else if (frame_boss==1) dsubimage( lX-3, lY, &bigboss, OFFSET_X_MONSTER+32,96,32,32, DIMAGE_NONE); else if (frame_boss==2) dsubimage( lX-5, lY, &bigboss, OFFSET_X_MONSTER+64,96,32,32, DIMAGE_NONE); else if (frame_boss==3) dsubimage( lX-8, lY, &bigboss, OFFSET_X_MONSTER,96,32,32, DIMAGE_NONE); else if (frame_boss==4) dsubimage( lX-11, lY, &bigboss, OFFSET_X_MONSTER+32,96,32,32, DIMAGE_NONE); else if (frame_boss==5) dsubimage( lX-13, lY, &bigboss, OFFSET_X_MONSTER+64,96,32,32, DIMAGE_NONE); } else if (sens==GAUCHE && BossCollection[k].xcur==mini) { dsubimage( lX, lY, &bigboss, OFFSET_X_MONSTER,96,32,32, DIMAGE_NONE); } else if (sens==DROITE && BossCollection[k].xcurmini) { if (frame_boss==0) dsubimage( lX, lY, &bossmages, OFFSET_X_MONSTER,0,16,18, DIMAGE_NONE); else if (frame_boss==1) dsubimage( lX, lY-3, &bossmages, OFFSET_X_MONSTER+16,0,16,18, DIMAGE_NONE); else if (frame_boss==2) dsubimage( lX, lY-5, &bossmages, OFFSET_X_MONSTER+32,0,16,18, DIMAGE_NONE); else if (frame_boss==3) dsubimage( lX, lY-8, &bossmages, OFFSET_X_MONSTER,0,16,18, DIMAGE_NONE); else if (frame_boss==4) dsubimage( lX, lY-11, &bossmages, OFFSET_X_MONSTER+16,0,16,18, DIMAGE_NONE); else if (frame_boss==5) dsubimage( lX, lY-13, &bossmages, OFFSET_X_MONSTER+32,0,16,18, DIMAGE_NONE); } else if (sens==HAUT && BossCollection[k].ycur==mini) { dsubimage( lX, lY, &bossmages, OFFSET_X_MONSTER,0,16,18, DIMAGE_NONE); } } else if (direction==HORIZONTAL) { /* if (true) { _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY+SIZE/2, 255, 0, 0, 255 ); _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY+1+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY+1+SIZE/2, 255, 0, 0, 255 ); _lineRGBA( mini*SIZE+OFFSET_X+SIZE/2, lY-1+SIZE/2, maxi*SIZE+OFFSET_X+SIZE/2, lY-1+SIZE/2, 255, 0, 0, 255 ); } */ if (sens==GAUCHE && BossCollection[k].xcur>mini) { if (frame_boss==0) dsubimage( lX, lY, &bossmages, OFFSET_X_MONSTER,54,16,18, DIMAGE_NONE); else if (frame_boss==1) dsubimage( lX-3, lY, &bossmages, OFFSET_X_MONSTER+16,54,16,18, DIMAGE_NONE); else if (frame_boss==2) dsubimage( lX-5, lY, &bossmages, OFFSET_X_MONSTER+32,54,16,18, DIMAGE_NONE); else if (frame_boss==3) dsubimage( lX-8, lY, &bossmages, OFFSET_X_MONSTER,54,16,18, DIMAGE_NONE); else if (frame_boss==4) dsubimage( lX-11, lY, &bossmages, OFFSET_X_MONSTER+16,54,16,18, DIMAGE_NONE); else if (frame_boss==5) dsubimage( lX-13, lY, &bossmages, OFFSET_X_MONSTER+32,54,16,18, DIMAGE_NONE); } else if (sens==GAUCHE && BossCollection[k].xcur==mini) { dsubimage( lX, lY, &bossmages, OFFSET_X_MONSTER,54,16,18, DIMAGE_NONE); } else if (sens==DROITE && BossCollection[k].xcur=Rr-EPSILON && Rm<=Rr+EPSILON && Gm>=Gr-EPSILON && Gm<=Gr+EPSILON && Bm>=Br-EPSILON && Bm<=Br+EPSILON) { ReceptorCollection[k].isvalide = true; } else { ReceptorCollection[k].isvalide = false; } } } void renderDoors( void ) { for( unsigned char k=0; kR, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X+SIZE/2-2, Y-2, X+SIZE/2+2, Y+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==2) { _boxRGBA( X+SIZE/3*(j+1)-1, Y-1, X+SIZE/3*(j+1)+1, Y+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X+SIZE/3*(j+1)-2, Y-2, X+SIZE/3*(j+1)+2, Y+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==3) { _boxRGBA( X+SIZE/4*(j+1)-1, Y-1, X+SIZE/4*(j+1)+1, Y+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X+SIZE/4*(j+1)-2, Y-2, X+SIZE/4*(j+1)+2, Y+2, 150, 150, 150, 255); } } else if(DoorCollection[k].direction==BAS) { int X = DoorCollection[k].x*SIZE+OFFSET_X; int Y = DoorCollection[k].y*SIZE+3*SIZE/2+OFFSET_Y; if (DoorCollection[k].nbreceptor==1) { _boxRGBA( X+SIZE/2-1, Y-1, X+SIZE/2+1, Y+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X+SIZE/2-2, Y-2, X+SIZE/2+2, Y+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==2) { _boxRGBA( X+SIZE/3*(j+1)-1, Y-1, X+SIZE/3*(j+1)+1, Y+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X+SIZE/3*(j+1)-2, Y-2, X+SIZE/3*(j+1)+2, Y+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==3) { _boxRGBA( X+SIZE/4*(j+1)-1, Y-1, X+SIZE/4*(j+1)+1, Y+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X+SIZE/4*(j+1)-2, Y-2, X+SIZE/4*(j+1)+2, Y+2, 150, 150, 150, 255); } } else if(DoorCollection[k].direction==GAUCHE) { int X = DoorCollection[k].x*SIZE-SIZE/2+OFFSET_X; int Y = DoorCollection[k].y*SIZE+OFFSET_Y; if (DoorCollection[k].nbreceptor==1) { _boxRGBA( X-1, Y+SIZE/2-1, X+1, Y+SIZE/2+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X-2, Y+SIZE/2-2, X+2, Y+SIZE/2+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==2) { _boxRGBA( X-1, Y+SIZE/3*(j+1)-1, X+1, Y+SIZE/3*(j+1)+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X-2, Y+SIZE/3*(j+1)-2, X+2, Y+SIZE/3*(j+1)+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==3) { _boxRGBA( X-1, Y+SIZE/4*(j+1)-1, X+1, Y+SIZE/4*(j+1)+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X-2, Y+SIZE/4*(j+1)-2, X+2, Y+SIZE/4*(j+1)+2, 150, 150, 150, 255); } } else if(DoorCollection[k].direction==DROITE) { int X = DoorCollection[k].x*SIZE+3*SIZE/2+OFFSET_X; int Y = DoorCollection[k].y*SIZE+OFFSET_Y; if (DoorCollection[k].nbreceptor==1) { _boxRGBA( X-1, Y+SIZE/2-1, X+1, Y+SIZE/2+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X-2, Y+SIZE/2-2, X+2, Y+SIZE/2+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==2) { _boxRGBA( X-1, Y+SIZE/3*(j+1)-1, X+1, Y+SIZE/3*(j+1)+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X-2, Y+SIZE/3*(j+1)-2, X+2, Y+SIZE/3*(j+1)+2, 150, 150, 150, 255); } else if (DoorCollection[k].nbreceptor==3) { _boxRGBA( X-1, Y+SIZE/4*(j+1)-1, X+1, Y+SIZE/4*(j+1)+1, tempRecept->R, tempRecept->G, tempRecept->B, 255); _rectangleRGBA( X-2, Y+SIZE/4*(j+1)-2, X+2, Y+SIZE/4*(j+1)+2, 150, 150, 150, 255); } } } } DoorCollection[k].isopen=temp; } } } int my_profile(int key, int duration, int count) { // key: Key being repeated // duration: How long that key has been pressed // count: How many times it's been repeated already // Return value: how long to wait before next repeat (µs) // Only allow KEY_LEFT and KEY_RIGHT if(key != KEY_LEFT && key != KEY_RIGHT) return -1; // 500 ms for first repeat, 50 ms after that; stop after 10 repeats if(count == 0) return 500*1000; else return 50*1000; /*else if(count < 10) return 50*1000; else return -1; */ } static int get_inputs_option(void) { //int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; //int timeout = 1; getkey_set_repeat_profile(my_profile); int opt = GETKEY_DEFAULT | GETKEY_REP_PROFILE; int timeout = 1; //getkey_opt(opt, &timeout); while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXIT) { doneOption = true; } if (key==KEY_UP && selectOptionMenu>0) { selectOptionMenu--; } if (key==KEY_DOWN && selectOptionMenu<3) { selectOptionMenu++; } if (key==KEY_LEFT && selectOptionMenu==1) { if (ALPHA_TRANSPARENT>0) ALPHA_TRANSPARENT--; } if (key==KEY_RIGHT && selectOptionMenu==1) { if (ALPHA_TRANSPARENT<255) ALPHA_TRANSPARENT++; } if (key==KEY_LEFT && selectOptionMenu==2) { if (ALPHA_OPAQUE>0) ALPHA_OPAQUE--; } if (key==KEY_RIGHT && selectOptionMenu==2) { if (ALPHA_OPAQUE<255) ALPHA_OPAQUE++; } if (key==KEY_EXE && selectOptionMenu==3) { ALPHA_OPAQUE = ALPHA_OPAQUE_DEFAULT; ALPHA_TRANSPARENT = ALPHA_TRANSPARENT_DEFAULT; } if (key ==KEY_EXE && selectOptionMenu!=3) { doneOption = true; } } } void drawOption( void ) { doneOption = false; unsigned int lX = 0; unsigned int lY = 0; frame_light = 0; while (!doneOption) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); dfont( &font_fantasy ); dprint( 90, 95, C_RGB(150,150,150), "Back to Game"); dprint( 89, 94, C_BLACK, "Back to Game"); dfont( &font_fantasy ); dprint( 90, 110, C_RGB(150,150,150), "Adjust Color Alpha"); dprint( 89, 109, C_BLACK, "Adjust Color Alpha"); dfont( &font_fantasy ); dprint( 90, 125, C_RGB(150,150,150), "Adjust Black Alpha"); dprint( 89, 124, C_BLACK, "Adjust Black Alpha"); dfont( &font_fantasy ); dprint( 90, 140, C_RGB(150,150,150), "Set Default Settings"); dprint( 89, 139, C_BLACK, "Set Default Settings"); dfont( &font_tiny ); _boxRGBA( 220, 105, 253, 117, 255, 0, 0, ALPHA_TRANSPARENT ); _boxRGBA( 254, 105, 286, 117, 0, 255, 0, ALPHA_TRANSPARENT ); _boxRGBA( 287, 105, 320, 117, 0, 0, 255, ALPHA_TRANSPARENT ); _rectangleRGBA(220, 105, 320, 117, 255, 255, 255, 255); dprint( 265, 107, C_BLACK, "%d", ALPHA_TRANSPARENT); _boxRGBA( 220, 120, 320, 132, 0, 0, 0, ALPHA_OPAQUE ); _rectangleRGBA(220, 120, 320, 132, 255, 255, 255, 255); dprint( 265, 122, C_WHITE, "%d", ALPHA_OPAQUE); if (selectOptionMenu == 0) { lX = 70; lY = 89; } else if (selectOptionMenu == 1) { lX = 70; lY = 104; } else if (selectOptionMenu == 2) { lX = 70; lY = 119; } else if (selectOptionMenu == 3) { lX = 70; lY = 134; } frame_light%=6; dsubimage( lX, lY, &light, 16*frame_light,0,16,16, DIMAGE_NONE); frame_light++; dfont( &font_tiny ); dprint( 90, 160, C_RGB(150,150,150), "[UP] [DOWN] : select / [LEFT] [RIGHT] : adjust"); dprint( 89, 159, C_BLACK, "[UP] [DOWN] : select / [LEFT] [RIGHT] : adjust"); dprint( 90, 170, C_RGB(150,150,150), "[EXE] : validate / [EXIT] : escape"); dprint( 89, 169, C_BLACK,"[EXE] : validate / [EXIT] : escape"); dupdate(); get_inputs_option(); } } static int get_inputs_quit(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXIT) { donePause = true; selectOptionPause = 0; } if (key==KEY_UP && selectOptionPause>0) { selectOptionPause--; } if (key==KEY_DOWN && selectOptionPause<2) { selectOptionPause++; } if (key==KEY_EXE) { donePause = true; } } } void drawQuit( void ) { donePause = false; unsigned int lX = 0; unsigned int lY = 0; frame_light = 0; while (!donePause) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); dfont( &font_fantasy ); dprint( 90, 95, C_RGB(150,150,150), "Game Currently in Pause Mode"); dprint( 89, 94, C_BLACK, "Game Currently in Pause Mode"); dfont( &font_fantasy ); dprint( 90, 105, C_RGB(150,150,150), "Are You Sure You Want To Leave ?"); dprint( 89, 104, C_BLACK, "Are You Sure You Want To Leave ?"); dfont( &font_fantasy ); dprint( 90, 125, C_RGB(150,150,150), "No - Get Me Back To Game"); dprint( 89, 124, C_BLACK, "No - Get Me Back To Game"); dfont( &font_fantasy ); dprint( 90, 140, C_RGB(150,150,150), "Yes - For Now, But I'll Come Back !"); dprint( 89, 139, C_BLACK, "Yes - For Now, But I'll Come Back !"); dfont( &font_fantasy ); dprint( 90, 155, C_RGB(150,150,150), "Please, Send Me Back to Main Menu"); dprint( 89, 154, C_BLACK, "Please, Send Me Back to Main Menu"); dfont( &font_tiny ); if (selectOptionPause == 0) { lX = 70; lY = 119; GotoMainMenu=false; } else if (selectOptionPause == 1) { lX = 70; lY = 134; GotoMainMenu=false; } else if (selectOptionPause == 2) { lX = 70; lY = 149; GotoMainMenu=true; } frame_light%=6; dsubimage( lX, lY, &light, 16*frame_light,0,16,16, DIMAGE_NONE); frame_light++; dfont( &font_tiny ); dprint( 55, 170, C_RGB(150,150,150), "[UP] [DOWN] : select / [EXE] : validate / [EXIT] : escape"); dprint( 54, 169, C_BLACK,"[UP] [DOWN] : select / [EXE] : validate / [EXIT] : escape"); dupdate(); get_inputs_quit(); } } static int get_inputs_loose(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXIT) { doneLoose = true; selectOptionLoose = 1; } if (key==KEY_UP && selectOptionLoose>0) { selectOptionLoose--; } if (key==KEY_DOWN && selectOptionLoose<1) { selectOptionLoose++; } if (key==KEY_EXE) { doneLoose = true; } } } void drawLoose( void ) { doneLoose = false; unsigned int lX = 0; unsigned int lY = 0; frame_light = 0; while (!doneLoose) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); dfont( &font_fantasy ); dprint( 90, 95, C_RGB(150,150,150), "You Loose : Be Careful Of the Monsters" ); dprint( 89, 94, C_BLACK, "You Loose : Be Careful Of the Monsters" ); dfont( &font_fantasy ); dprint( 90, 105, C_RGB(150,150,150), "RetryThis Level ?" ); dprint( 89, 104, C_BLACK, "RetryThis Level ?" ); dfont( &font_fantasy ); dprint( 90, 125, C_RGB(150,150,150), "Yes - I Never Give Up !!!"); dprint( 89, 124, C_BLACK, "Yes - I Never Give Up !!!"); dfont( &font_fantasy ); dprint( 90, 140, C_RGB(150,150,150), "No - Better If I Quit !!! "); dprint( 89, 139, C_BLACK, "No - Better If I Quit !!! "); dfont( &font_tiny ); if (selectOptionLoose == 0) { lX = 70; lY = 119; } else if (selectOptionLoose == 1) { lX = 70; lY = 134; } frame_light%=6; dsubimage( lX, lY, &light, 16*frame_light,0,16,16, DIMAGE_NONE); frame_light++; dfont( &font_tiny ); dprint( 55, 170, C_RGB(150,150,150), "[UP] [DOWN] : select / [EXE] : validate / [EXIT] : escape"); dprint( 54, 169, C_BLACK,"[UP] [DOWN] : select / [EXE] : validate / [EXIT] : escape"); dupdate(); get_inputs_loose(); } } static int get_inputs_title(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneTitle = true; } } void drawTitle( void ) { doneTitle = false; unsigned int positionGuy = 75; int dir = 1; frame = 0; unsigned char flickers = 0; while (!doneTitle) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); if (dir==1) // the guy is going to the right { if (positionGuy>=285) dir=-1; if (frame==0) dsubimage( positionGuy, 100, &player, 0,16,16,16, DIMAGE_NONE); else if (frame==1) dsubimage( positionGuy, 100, &player, 16,16,16,16, DIMAGE_NONE); else if (frame==2) dsubimage( positionGuy, 100, &player, 32,16,16,16, DIMAGE_NONE); frame++; positionGuy+=1; if (frame==3) frame=0; } else if (dir==-1) // the guy is going to the left { if (positionGuy<=75) dir=1; if (frame==0) dsubimage( positionGuy, 100, &player, 0,48,16,16, DIMAGE_NONE); else if (frame==1) dsubimage( positionGuy, 100, &player, 16,48,16,16, DIMAGE_NONE); else if (frame==2) dsubimage( positionGuy, 100, &player, 32,48,16,16, DIMAGE_NONE); frame++; positionGuy-=1; if (frame==3) frame=0; } if (flickers<20) { dfont( &font_fantasy ); dprint( 120, 130, C_RGB(150,150,150), "[ Press EXE Key To Start ]"); dprint( 119, 129, C_BLACK, "[ Press EXE Key To Start ]"); } dfont( &font_tiny ); dprint( 110, 156, C_RGB(150,150,150), "Welcome to Magic Light %s", Revision); dprint( 109, 155, C_BLACK, "Welcome to Magic Light %s", Revision); dprint( 110, 166, C_RGB(150,150,150), " 12/2021 - by SlyVTT "); dprint( 109, 165, C_BLACK, " 12/2021 - by SlyVTT "); flickers++; if (flickers==40) flickers=0; dupdate(); get_inputs_title(); } } static int get_inputs_difficultymenu(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneDifficulty = true; if (key==KEY_UP && selectStartMenu>0) selectDifficultyMenu--; if (key==KEY_DOWN && selectStartMenu<2) selectDifficultyMenu++; } } unsigned char drawDifficultyMenu( void ) { doneDifficulty = false; unsigned int lX = 0; unsigned int lY = 0; frame_light = 0; while (!doneDifficulty) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); dfont( &font_fantasy ); dprint( 90, 100, C_RGB(150,150,150), "Sweet Like a Cherry Cake"); dprint( 89, 99, C_BLACK, "Sweet Like a Cherry Cake"); for( unsigned char k = 0; k< 5; k++) { dsubimage( 250 + k*8, 100, &hearts, 8, 0, 8, 8, DIMAGE_NONE); } for( unsigned char k = 5; k< 5; k++) { dsubimage( 250 + k*8, 100, &hearts, 0, 0, 8, 8, DIMAGE_NONE); } dfont( &font_fantasy ); dprint( 90, 120, C_RGB(150,150,150), "Acid Like an Orange Juice"); dprint( 89, 119, C_BLACK, "Acid Like an Orange Juice"); for( unsigned char k = 0; k< 3; k++) { dsubimage( 250 + k*8, 120, &hearts, 8, 0, 8, 8, DIMAGE_NONE); } for( unsigned char k = 3; k< 5; k++) { dsubimage( 250 + k*8, 120, &hearts, 0, 0, 8, 8, DIMAGE_NONE); } dfont( &font_fantasy ); dprint( 90, 140, C_RGB(150,150,150), "Bitter Like a Dark Beer"); dprint( 89, 139, C_BLACK, "Bitter Like a Dark Beer"); for( unsigned char k = 0; k< 1; k++) { dsubimage( 250 + k*8, 140, &hearts, 8, 0, 8, 8, DIMAGE_NONE); } for( unsigned char k = 1; k< 5; k++) { dsubimage( 250 + k*8, 140, &hearts, 0, 0, 8, 8, DIMAGE_NONE); } if (selectDifficultyMenu == 0) { lX = 70; lY = 94; } else if (selectDifficultyMenu == 1) { lX = 70; lY = 114; } else if (selectDifficultyMenu == 2) { lX = 70; lY = 134; } frame_light%=6; dsubimage( lX, lY, &light, 16*frame_light,0,16,16, DIMAGE_NONE); frame_light++; dfont( &font_tiny ); dprint( 90, 166, C_RGB(150,150,150), "[UP] [DOWN] : select / [EXE] : validate"); dprint( 89, 165, C_BLACK,"[UP] [DOWN] : select / [EXE] : validate"); dupdate(); get_inputs_difficultymenu(); } return selectDifficultyMenu; } static int get_inputs_startmenu(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneStart = true; if (saveexist==false && key==KEY_UP && selectStartMenu>1) selectStartMenu--; if (saveexist==true && key==KEY_UP && selectStartMenu>0) selectStartMenu--; if (key==KEY_DOWN && selectStartMenu<2) selectStartMenu++; } } unsigned char drawStartMenu( void ) { doneStart = false; unsigned int lX = 0; unsigned int lY = 0; frame_light = 0; saveexist = false; gint_world_switch( GINT_CALL( is_save_existing ) ); if (saveexist==false) selectStartMenu = 1; else selectStartMenu = 0; while (!doneStart) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); if (saveexist==false) { dfont( &font_fantasy ); dprint( 80, 100, C_RGB(150,150,150), "Continue Previous Game"); dprint( 79, 99, C_RGB(240,240,240), "Continue Previous Game"); dfont( &font_fantasy ); dprint( 80, 120, C_RGB(150,150,150), "Start New Game"); dprint( 79, 119, C_BLACK, "Start New Game"); } else { dfont( &font_fantasy ); dprint( 80, 100, C_RGB(150,150,150), "Continue Previous Game"); dprint( 79, 99, C_BLACK, "Continue Previous Game"); dfont( &font_fantasy ); dprint( 80, 120, C_RGB(150,150,150), "Start New Game (Will Trash Previous Save)"); dprint( 79, 119, C_RED, "Start New Game (Will Trash Previous Save)"); } dfont( &font_fantasy ); dprint( 80, 140, C_RGB(150,150,150), "Quit And Back To OS"); dprint( 79, 139, C_BLACK, "Quit And Back To OS"); if (selectStartMenu == 0) { lX = 60; lY = 94; } else if (selectStartMenu == 1) { lX = 60; lY = 114; } else if (selectStartMenu == 2) { lX = 60; lY = 134; } frame_light%=6; dsubimage( lX, lY, &light, 16*frame_light,0,16,16, DIMAGE_NONE); frame_light++; dfont( &font_tiny ); dprint( 90, 166, C_RGB(150,150,150), "[UP] [DOWN] : select / [EXE] : validate"); dprint( 89, 165, C_BLACK,"[UP] [DOWN] : select / [EXE] : validate"); dupdate(); get_inputs_startmenu(); } return selectStartMenu; } static int get_inputs_story(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE || key==KEY_EXIT) doneStory = true; if (key==KEY_UP && selectStoryMenu>1) selectStoryMenu--; if (key==KEY_DOWN && selectStoryMenu<2) selectStoryMenu++; } } void drawStoryMenu( void ) { doneStory = false; selectStoryMenu = 1; while (!doneStory) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 63, 41, &village); dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_story(); } doneStory = false; selectStoryMenu = 1; while (!doneStory) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dfont( &font_fantasy ); dprint( 70, 55, C_RGB(150,150,150), "A long time ago, in a peaceful and colorful "); dprint( 69, 54, C_BLACK, "A long time ago, in a peaceful and colorful"); dfont( &font_fantasy ); dprint( 55, 75, C_RGB(150,150,150), "village came a Dark Sorcerer with the terrible"); dprint( 54, 74, C_BLACK, "village came a Dark Sorcerer with the terrible"); dfont( &font_fantasy ); dprint( 55, 95, C_RGB(150,150,150), "ambition of stealing all lights and colors. Making" ); dprint( 54, 94, C_BLACK, "ambition of stealing all lights and colors. Making " ); dfont( &font_fantasy ); dprint( 60, 115, C_RGB(150,150,150), "darkness and fear the only remaining things " ); dprint( 59, 114, C_BLACK, "darkness and fear the only remaining things" ); dfont( &font_fantasy ); dprint( 60, 135, C_RGB(150,150,150), "here ..." ); dprint( 59, 134, C_BLACK, "here ..." ); dfont( &font_tiny ); dprint( 70, 166, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 69, 165, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_story(); } doneStory = false; selectStoryMenu = 1; /* while (!doneStory) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 63, 41, &village); dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_story(); } */ int nbstep = 128; memcpy( palette, village.data, 512 ); uint16_t paletteNB[256]; uint16_t paletteTemp[256]; uint16_t paletteStart[256][3]; uint16_t paletteEnd[256][3]; uint16_t paletteNow[256][3]; int16_t paletteDelta[256][3]; for( int k=0; k<255; k++) { unsigned char B=(unsigned char) ((palette[k] & 0b0000000000011111)<<3); unsigned char G=(unsigned char) (((palette[k] & 0b0000011111100000) >> 5)<<2); unsigned char R=(unsigned char) (((palette[k] & 0b1111100000000000) >> 11)<<3); paletteStart[k][0] = R<<8; paletteStart[k][1] = G<<8; paletteStart[k][2] = B<<8; uint16_t Moy = (0.299*R+0.587*G+0.114*B); paletteEnd[k][0] = Moy<<8; paletteEnd[k][1] = Moy<<8; paletteEnd[k][2] = Moy<<8; paletteDelta[k][0] = (paletteEnd[k][0] - paletteStart[k][0])/nbstep; paletteDelta[k][1] = (paletteEnd[k][1] - paletteStart[k][1])/nbstep; paletteDelta[k][2] = (paletteEnd[k][2] - paletteStart[k][2])/nbstep; paletteNB[k] = (uint16_t) (((Moy>>3) << 11) | ((Moy>>2) << 5 ) | (Moy>>3)); } //memcpy( village.data, paletteNB, 512 ); int framevillage = 0; doneStory = false; while (!doneStory) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); if (framevillage<=nbstep) { for( int k=0; k<255; k++) { paletteNow[k][0] = (paletteStart[k][0]+framevillage*paletteDelta[k][0])>>8; paletteNow[k][1] = (paletteStart[k][1]+framevillage*paletteDelta[k][1])>>8; paletteNow[k][2] = (paletteStart[k][2]+framevillage*paletteDelta[k][2])>>8; paletteTemp[k] = (uint16_t) (((paletteNow[k][0]>>3) << 11) | ((paletteNow[k][1]>>2) << 5 ) | (paletteNow[k][2]>>3)); } memcpy( village.data, paletteTemp, 512 ); } else { memcpy( village.data, paletteNB, 512 ); } framevillage++; if (framevillage>=nbstep) framevillage=nbstep; dimage( 63, 41, &village); dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_story(); } doneStory = false; selectStoryMenu = 1; while (!doneStory) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dfont( &font_fantasy ); dprint( 60, 55, C_RGB(150,150,150), "The Sorcerer returned to his Castle" ); dprint( 59, 54, C_BLACK, "The Sorcerer returned to his Castle" ); dfont( &font_fantasy ); dprint( 60, 75, C_RGB(150,150,150), "and ruled his Daughters to protect his loot..." ); dprint( 59, 74, C_BLACK, "and ruled his Daughters to protect his loot..." ); dfont( &font_fantasy ); dprint( 65, 95, C_RGB(150,150,150), "Guided only by courage, you entered the" ); dprint( 64, 94, C_BLACK, "Guided only by courage, you entered the" ); dfont( &font_fantasy ); dprint( 65, 115, C_RGB(150,150,150), "castle to defeat all dangers and help the" ); dprint( 64, 114, C_BLACK, "castle to defeat all dangers and help the" ); dfont( &font_fantasy ); dprint( 65, 135, C_RGB(150,150,150), "villagers ... Good luck my Friend !!!" ); dprint( 64, 134, C_BLACK, "villagers ... Good luck my Friend !!!" ); dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_story(); } doneStory = false; selectStoryMenu = 1; while (!doneStory) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 63, 41, &castletitle); dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] Play"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] Play"); dupdate(); get_inputs_story(); } memcpy( village.data, palette, 512 ); } void updateTreasures( selection what ) { if (what==JOUEUR) { unsigned char X = joueur.x; unsigned char Y= joueur.y; for (unsigned char k=0; k0) life--; BulletCollection[k].visible = false; } if (xpartOFFSET_X+SIZE*(SIZE_MAP_X-1) || ypart OFFSET_Y+SIZE*(SIZE_MAP_Y-1)) { BulletCollection[k].visible = false; } if ( BulletCollection[k].visible == true ) dsubimage( xpart-8, ypart-8, &bulletsbicolor, frame_bullet*16,attacktype*16,16,16, DIMAGE_NONE); } } } else if ( attackpattern == 1) { for( unsigned char k=0; k0) life--; BulletCollection[k].visible = false; } if (xpartOFFSET_X+SIZE*(SIZE_MAP_X-1) || ypart OFFSET_Y+SIZE*(SIZE_MAP_Y-1)) { BulletCollection[k].visible = false; } if ( BulletCollection[k].visible == true ) dsubimage( xpart-8, ypart-8, &bulletsbicolor, frame_bullet*16,attacktype*16,16,16, DIMAGE_NONE); } } } frame_bullet++; if (frame_bullet==8) frame_bullet=0; frame_boss_attack++; if (frame_boss_attack==100) { frame_boss_attack=0; attackboss=false; free( BulletCollection ); BulletCollection=NULL; } } static int get_inputs(void) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS & ~GETKEY_MOD_SHIFT & ~GETKEY_MOD_ALPHA; int timeout = 1; unsigned char choice_exit=0; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXIT) { drawQuit(); } if (key==KEY_OPTN) { drawOption(); } if (key==KEY_F1) { selected = JOUEUR; } if (key==KEY_F2) { selected = LUMIERE; } if (key==KEY_F3) { selected = ROUGE; } if (key==KEY_F4) { selected = VERT; } if (key==KEY_F5) { selected = BLEU; } if (key==KEY_F6) { selected = NOIR; } if (key==KEY_LEFT) { gameMechanics( selected, GAUCHE); } if (key==KEY_RIGHT) { gameMechanics( selected, DROITE); } if (key==KEY_UP) { gameMechanics( selected, HAUT); } if (key==KEY_DOWN) { gameMechanics( selected, BAS); } if (key==KEY_SHIFT) { updateTreasures( selected ); } #if DEBUG==1 if (key==KEY_1) { if (currentLevel>0) loadLevel(currentLevel-1); } if (key==KEY_7) { if (currentLevel1) selectEndMenu--; if (key==KEY_DOWN && selectEndMenu<2) selectEndMenu++; */ } } void drawEndMenu( void ) { doneEnd = false; selectEndMenu = 0; unsigned int positionGuy = 75; int dir = 1; frame = 0; while (!doneEnd) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); //dfont( &font_fantasy ); //dprint( 70, 45, C_RGB(150,150,150), "The END ... "); //dprint( 69, 44, C_BLACK, "The END ..."); dfont( &font_fantasy ); dprint( 60, 57, C_RGB(150,150,150), "Congratulation my Dear Friend !!!"); dprint( 59, 56, C_BLACK, "Congratulation my Dear Friend !!!"); dfont( &font_fantasy ); dprint( 55, 69, C_RGB(150,150,150), " " ); dprint( 54, 68, C_BLACK, " " ); dfont( &font_fantasy ); dprint( 60, 81, C_RGB(150,150,150), "You defeated the Sorcerer and you brought" ); dprint( 59, 80, C_BLACK, "You defeated the Sorcerer and you brought" ); dfont( &font_fantasy ); dprint( 60, 93, C_RGB(150,150,150), "back the Jewel of Colors to the village. " ); dprint( 59, 92, C_BLACK, "back the Jewel of Colors to the village. " ); dfont( &font_fantasy ); dprint( 60, 105, C_RGB(150,150,150), "You are now a Hero !!!" ); dprint( 59, 104, C_BLACK, "You are now a Hero !!!" ); dfont( &font_fantasy ); dprint( 65, 117, C_RGB(150,150,150), " " ); dprint( 64, 116, C_BLACK, " " ); dfont( &font_fantasy ); dprint( 65, 129, C_RGB(150,150,150), " " ); dprint( 64, 128, C_BLACK, "" ); dfont( &font_fantasy ); dprint( 65, 141, C_RGB(150,150,150), "The End ... At least for Now !!" ); dprint( 64, 140, C_BLACK, "The End ... At least for Now !!" ); if (dir==1) // the guy is going to the right { if (positionGuy>=285) dir=-1; if (frame==0) dsubimage( positionGuy, 117, &player, 0,16,16,16, DIMAGE_NONE); else if (frame==1) dsubimage( positionGuy, 117, &player, 16,16,16,16, DIMAGE_NONE); else if (frame==2) dsubimage( positionGuy, 117, &player, 32,16,16,16, DIMAGE_NONE); frame++; positionGuy+=1; if (frame==3) frame=0; } else if (dir==-1) // the guy is going to the left { if (positionGuy<=75) dir=1; if (frame==0) dsubimage( positionGuy, 117, &player, 0,48,16,16, DIMAGE_NONE); else if (frame==1) dsubimage( positionGuy, 117, &player, 16,48,16,16, DIMAGE_NONE); else if (frame==2) dsubimage( positionGuy, 117, &player, 32,48,16,16, DIMAGE_NONE); frame++; positionGuy-=1; if (frame==3) frame=0; } dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_end(); } doneEnd = false; int framevillage = 0; int nbstep = 128; memcpy( palette, village.data, 512 ); uint16_t paletteNB[256]; uint16_t paletteTemp[256]; uint16_t paletteStart[256][3]; uint16_t paletteEnd[256][3]; uint16_t paletteNow[256][3]; int16_t paletteDelta[256][3]; for( int k=0; k<255; k++) { unsigned char B=(unsigned char) ((palette[k] & 0b0000000000011111)<<3); unsigned char G=(unsigned char) (((palette[k] & 0b0000011111100000) >> 5)<<2); unsigned char R=(unsigned char) (((palette[k] & 0b1111100000000000) >> 11)<<3); paletteEnd[k][0] = R<<8; paletteEnd[k][1] = G<<8; paletteEnd[k][2] = B<<8; uint16_t Moy = (0.299*R+0.587*G+0.114*B); paletteStart[k][0] = Moy<<8; paletteStart[k][1] = Moy<<8; paletteStart[k][2] = Moy<<8; paletteDelta[k][0] = (paletteEnd[k][0] - paletteStart[k][0])/nbstep; paletteDelta[k][1] = (paletteEnd[k][1] - paletteStart[k][1])/nbstep; paletteDelta[k][2] = (paletteEnd[k][2] - paletteStart[k][2])/nbstep; paletteNB[k]= (uint16_t) (((Moy>>3) << 11) | ((Moy>>2) << 5 ) | (Moy>>3)); } memcpy( village.data, paletteNB, 512 ); doneEnd = false; while (!doneEnd) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); if (framevillage<=nbstep) { for( int k=0; k<255; k++) { paletteNow[k][0] = (paletteStart[k][0]+framevillage*paletteDelta[k][0])>>8; paletteNow[k][1] = (paletteStart[k][1]+framevillage*paletteDelta[k][1])>>8; paletteNow[k][2] = (paletteStart[k][2]+framevillage*paletteDelta[k][2])>>8; paletteTemp[k] = (uint16_t) (((paletteNow[k][0]>>3) << 11) | ((paletteNow[k][1]>>2) << 5 ) | (paletteNow[k][2]>>3)); } memcpy( village.data, paletteTemp, 512 ); } else { memcpy( village.data, paletteNB, 512 ); } framevillage++; if (framevillage>=nbstep) framevillage=nbstep; dimage( 63, 41, &village); dfont( &font_tiny ); dprint( 60, 170, C_RGB(150,150,150), "[EXE/EXIT] >>>"); dprint( 59, 169, C_BLACK,"[EXE/EXIT] >>>"); dupdate(); get_inputs_end(); } doneEnd = false; while (!doneEnd) { dclear(C_RGB(0,0,0)); dimage( 0, 10, &bigparch); dimage( 88, 42, &maintitle); dimage( 108, 105, &theend); dfont( &font_tiny ); dprint( 118, 170, C_RGB(150,150,150), "[EXE/EXIT] Back to Main Menu"); dprint( 117, 169, C_BLACK,"[EXE/EXIT] Back to Main Menu"); dupdate(); get_inputs_end(); } } void the_end( void ) { drawEndMenu( ); } int main ( int argc, char** argv ) { do { selectStartMenu = 0; selectDifficultyMenu = 0; selectOptionMenu = 0; selectOptionPause = 0; selectOptionLoose = 0; selectStoryMenu = 0; selectEndMenu = 0; difficulty = 0; doneGame = false; doneMain = false; doneOption = false; donePause = false; doneStart = false; doneTitle = false; doneStory = false; doneEnd = false; GotoMainMenu=false; drawTitle(); unsigned char choice = drawStartMenu(); if (choice==0) { initMap(); loadprogress(); synchroniseGame( ); loadLevel( currentLevel ); adjustLevel( currentLevel ); } else if (choice==1) { // We start a new game, so we load Level #000 difficulty= drawDifficultyMenu(); BlackFrag = false; WhiteFrag = false; RedFrag = false; GreenFrag = false; BlueFrag = false; score = 0; if (difficulty==0) life=5; else if (difficulty==1) life=3; else if (difficulty==2) life=1; drawStoryMenu(); initMap(); loadLevel( 0 ); } else if (choice==2) { exitAndFree(); return 0; } initWalls(); while (!doneGame) { dclear(C_RGB(0,0,0)); frame_cursor++; frame_cursor = frame_cursor % 4; drawInterface( ); drawMinimap( ); renderMap( ); checkDoors( ); renderDoors( ); renderObstacles( LAYER_BELOW_RAYS ); renderObstacles( LAYER_ABOVE_RAYS ); renderWalls( ); checkReceptors( ); renderReceptors( ); renderMovable( ); renderLight( ); renderTreasures( ); renderMonsters( ); renderBoss( ); if (attackboss==false && NbBossLevel!=0 && frame_boss_attack == 0 ) { srand( rtc_ticks() ); unsigned char randomattack = rand() % 101; if (randomattack>=45 && randomattack<=65) launch_Boss_Attack(); } if (attackboss==true) launch_Boss_Attack(); renderPlayer( ); dupdate(); get_inputs(); updateCurrentState( ); if (life==0) drawLoose(); if (selectOptionPause==1 || selectOptionPause==2 || selectOptionLoose==1) doneGame=true; if (life==0 && selectOptionLoose==0) { if (difficulty==0) life=5; else if (difficulty==1) life=3; else if (difficulty==2) life=1; loadLevel( currentLevel); } if (WhiteFrag && BlackFrag && RedFrag && GreenFrag && BlueFrag ) { the_end(); doneGame=true; gint_world_switch( GINT_CALL( delete_save ) ); initMap(); } } //updateCurrentState( ); if (doneEnd==false) gint_world_switch( GINT_CALL( saveprogress ) ); } while (GotoMainMenu); exitAndFree( ); return 0; }