// Copyright (C) 2011 Valeriano Alfonso Rodriguez (Kableado) #include #include #include "GameLib.h" #include "GameEnts.h" #include "GameMap.h" Entity GameMapAux_CreateEnt(Entity ent,int i,int j){ Entity e; e=Entity_Copy(ent); vec2_set(e->pos,16+i*32,16+j*32); Entity_CalcBBox(e); GameLib_AddEntity(e); return(e); } void Aux_Linea(FILE *f,char *line){ int c; int i=0; memset(line,0,1024); while(i<1024){ c=fgetc(f); if(c==EOF){ line[i]=0; break; } if(c=='\r'){ continue; } if(c=='\n'){ line[i]=0; break; } line[i]=c; i++; } } int _startpoint; int GameMapAux_CreatePlayer(Entity ent){ if(ent->type==Ent_SavePoint){ if(ent->A==_startpoint){ Entity e; e=Entity_Copy(ent_player); vec2_copy(e->pos,ent->pos); GameLib_AddEntity(e); return(0); } } return(1); } int GameMapAux_IsFloor(char c){ if( c=='.' || c=='#' || c=='m' || c=='B' || c=='S' || c=='E' || c=='F' || c=='A' || c=='V' || c=='<' || c=='>' || c=='r' || c=='T' || c=='D' || c=='l' ) { return(1); } return(0); } int GameMap_CreateLevel(int level,int point){ char filename[128]; FILE *file; char line[1024]; int w,h; int i,j,i2; int floor; sprintf(filename,"data/level_%02d.txt",level); file=fopen(filename,"r"); if(!file){ return(0); } GameLib_DelEnts(); Aux_Linea(file,line); sscanf(line,"%d %d",&w,&h); for(j=0;j0){ if(GameMapAux_IsFloor(line[i2-2])){ floor|=4; } } if(i<(w-1)){ if(GameMapAux_IsFloor(line[i2+2])){ floor|=1; } } if(GameMapAux_IsFloor(line[i2])){ floor|=2; } if(floor==7){ GameMapAux_CreateEnt(ent_floor,i,j); } if(floor==6){ GameMapAux_CreateEnt(ent_floor_right,i,j); } if(floor==3){ GameMapAux_CreateEnt(ent_floor_left,i,j); } if(floor==2){ GameMapAux_CreateEnt(ent_floor_center,i,j); } // Put the rest of the entities if(line[i2]=='.'){ // Floor }else if(line[i2]=='#'){ // Column GameMapAux_CreateEnt(ent_column,i,j); }else if(line[i2]=='m'){ // Column faded GameMapAux_CreateEnt(ent_column_faded,i,j); }else if(line[i2]=='r'){ // Rock GameMapAux_CreateEnt(ent_rock,i,j); }else if(line[i2]=='l'){ // Lamp GameMapAux_CreateEnt(ent_lamp,i,j); }else if(line[i2]=='B'){ // Barrel GameMapAux_CreateEnt(ent_barrel,i,j); }else if(line[i2]=='|'){ // Spiked hole GameMapAux_CreateEnt(ent_hole_spiked,i,j); }else if(line[i2]=='L'){ // Lava hole GameMapAux_CreateEnt(ent_hole_lava,i,j); }else if(line[i2]=='S'){ Entity e; // Save point e=GameMapAux_CreateEnt(ent_savepoint,i,j); e->A=line[i2+1]-'0'; }else if(line[i2]=='E'){ // Exit point GameMapAux_CreateEnt(ent_exitpoint,i,j); }else if(line[i2]=='F'){ // End point GameMapAux_CreateEnt(ent_endpoint,i,j); }else if(line[i2]=='>'){ // ArrowShooter right GameMapAux_CreateEnt(ent_arrowshooter_right,i,j); }else if(line[i2]=='<'){ // ArrowShooter left GameMapAux_CreateEnt(ent_arrowshooter_left,i,j); }else if(line[i2]=='V'){ // ArrowShooter down GameMapAux_CreateEnt(ent_arrowshooter_down,i,j); }else if(line[i2]=='A'){ // ArrowShooter up GameMapAux_CreateEnt(ent_arrowshooter_up,i,j); }else if(line[i2]=='T'){ // Teleporter Entity ent=GameMapAux_CreateEnt(ent_teleporter,i,j); ent->A=line[i2+1]-'0'; }else if(line[i2]=='D'){ // Teleporter Destination Entity ent=GameMapAux_CreateEnt(ent_teleporter_dest,i,j); ent->A=line[i2+1]-'0'; }else {} } } fclose(file); // Find the player start position _startpoint=point; GameLib_ForEachEnt(GameMapAux_CreatePlayer); // Iluminate //GameLib_Iluminate(); return(1); }