// BomberFrag - CQFD Corp and NoFrag // Initial release: 2005/Jan/06 // License: GPL - GNU General Public License, see "raydium/gpl.txt" file. char *version="version 0.01"; #include "raydium/index.c" //#include "raydium/reg_api.c" GLfloat sun[]={1.0,0.9,0.5,1.0}; GLfloat amb[]={1.0,0.0,0.0,1.0}; // tout en vrac ici pour l'instant : #define MAX_SOFT_WALLS 100 #define MAX_SIDE_SIZE 100 #define MIN_SPAWNS 4 #define STATE_NONE 0 #define STATE_NORMAL 1 #define STATE_EXPLODED 2 #define TYPE_WALL '#' #define TYPE_NONE ' ' #define TYPE_SPAWN '*' #define TYPE_BLOCK '.' typedef struct Block { GLfloat pos[2]; int state; } Block; typedef struct Level { int state; char description[RAYDIUM_MAX_NAME_LEN]; int ground_model; // auto generated int soft_wall_model; int n_spawns; GLfloat block_size; GLfloat spawns[RAYDIUM_NETWORK_MAX_CLIENTS][2]; Block soft_walls[MAX_SOFT_WALLS]; char level[MAX_SIDE_SIZE][MAX_SIDE_SIZE]; int x_size; int y_size; } Level; typedef struct Player { int x_to; int y_to; } Player; Level level; Player player; int object_ground=-1; int object_blocks=-1; float offy=-1; float offz=3; // fin du vrac de déclaration char near_(int o1, int o2) { if(o1==object_ground && o2==object_blocks) return 0; if(o2==object_ground && o1==object_blocks) return 0; return 1; } void init_block(Block *block) { block->state=STATE_NONE; block->pos[0]=0; block->pos[1]=0; } void init_level(Level *level) { int i; level->state=STATE_NORMAL; level->soft_wall_model=-1; level->description[0]=0; level->n_spawns=0; level->block_size=0; for(i=0;isoft_walls[i]); } int find_free_soft_wall(Level *level) { int i; for(i=0;isoft_walls[i].state==STATE_NONE) break; if(i==MAX_SOFT_WALLS) return -1; return i; } void add_object_to_file(int obj, FILE *fp, GLfloat offx, GLfloat offy, GLfloat offz) { int i; // file v0 for(i=raydium_object_start[obj];i MAX_SIDE_SIZE || level.y_size > MAX_SIDE_SIZE) { raydium_log("error: level side limit exceeded : %ix%i, max is %ix%i",level.x_size,level.y_size,MAX_SIDE_SIZE,MAX_SIDE_SIZE); return 0; } // building ... for(j=0;j=RAYDIUM_NETWORK_MAX_CLIENTS) { raydium_log("error: too much spawn points (limit is %i)",RAYDIUM_NETWORK_MAX_CLIENTS); return 0; } level.spawns[level.n_spawns][0]=i; level.spawns[level.n_spawns][1]=j; level.n_spawns++; b=TYPE_NONE; } level.level[i][j]=b; } if(level.n_spawns < MIN_SPAWNS) { raydium_log("error: not enough spawn points (min is %i, %i found)",MIN_SPAWNS,level.n_spawns); return 0; } raydium_object_find_axes_max(level_wall_model,&tx,&ty,&tz); level.block_size=raydium_trigo_max(tx,ty); // print stats raydium_log("level: %s",level.description); raydium_log("size: %ix%i",level.x_size,level.y_size); raydium_log("block size: %f",level.block_size); raydium_log("%i spawn points",level.n_spawns); for(i=0,j=0;i