BASIC FEATURE LIST ============================== -Full screen -multiplayer over the internet -3D -ofers side-view, and chase cam. If side view mode, load only 1 side of a map. Making this fixed from level to level by the server would make dogfights fair. In chase cam, allow a nose-cam view as well? -2+ planes to choose from (sopwith and a german one? spads vs. fokkers?) -32-bit colour in order to do things like muzzleflashes? Or play with blending of .jpg's ? -fog in distance if in nose/chase cam mode. In side view mode, do fps -boost by only drawing the area where the plane is, plus a buffer on the side? This would require loading the map in segments. ie) have a displacement map, and parse map[map_segment_count] as 0-X,X-2X,2X-3X,etc., and then only draw the polys in each block. This would require some way to stitch points on the edges together. Maybe have the X at uniform intervals, so polys on the edges would be (left_segment_point_1,left_segment_point2, right_segment_point_1, right_segment_point_2). Would it make sense to write these to a .h, in the form of a function load_segement_1(), etc., and call these to draw the segments (might have problems with deforming terrain.. (see below). It might be better to store the points in a file, with X points in each segment, and N segments giving an array of size Y, and then modifying the values in memory and only drawing segments as needed. This would be a memory hog though, as a fairly high poly density would be wanted to deform stuff right.. -deformable terrain... how to do this? Make all trees in that radius gone, and sink height of corners of polys in a inverted cone shape (function of r, theta)? This would require a fairly high ground density to work right, and not just sink one corner. -animations for banking, firing, turning, bombing? -show # of bombs left on the plane? Or were sopwiths far enough back that they were dropped by hand? -add in trees randomly, or based on a P*(slope_ of_poly)*tree_proximity, or other formula? This would be calculated once only, on map loading, with tree locations stored in an array similar to map segments. -buildings need 3 animations: idle, death, dead. This would also be good to have a texture swap with. Maybe add an injured state as well, and make buildings have health vs. bullets (server option) ? -needs 3+ dialogs.. About, host server, and connect to server. -allows to connect to server running on local host. Therefore, needs either multiple instances of it, and/or some other mechanism (dedicated ports?) -bullet effects can be done with openGL blends for muzzleflash/tracers. This likely means coding in support for jpg/tga. That, or else rely on bitmaps :( -allow for players to use custom models? This would be a selection menu with small preview jpg in connect menu, or similar. Should be simple enough if no crazy file format stuff is done...(famous last words)(.md3?) -allow files to be in .zip for easy transfer, or just dump in a /models folder, and use a standard format to parse by? -needs some sort of sound queueing/overlayering to make gunfights/explosions/etc. all sound at the right times. -needs collision detection of plane vs. walls/planes/birds/etc., as well as bomb vs. plane/building/etc. -joystick/mouse support? -wxWindows to handle keypress messages, cross-platform =============================== BASIC CODE CLASSES/LAYOUT =============================== //sample values only. Check for exact amounts. #DEFINE MAX_BOMBS 5 #DEFINE MAX_BULLETS 500 #DEFINE MAX_GAS 1000 #DEFINE MAX_LIVES 3 /* This class is the basic location info everything will have. */ Class Location () { private string model_path; //path to the .md3 private int pos_x; //position along x-axis private int pos_y; // private int pos_z; // private int rot_x; //rotation along x-axis private int rot_y; // private int rot_z; // public int get_posX (); //get the X-axis position public int get_posY (); // public int get_posZ (); // public int get_rotX (); //get the x-axis rotation public int get_rotY (); // public int get_rotZ (); // public int set_posX (int X); //set the x-axis position public int set_posY (int Y); // public int set_posZ (int Z); // public int set_rotX (int X); //set the X-axis rotation public int set_rotY (int Y); // public int set_rotZ (int Z); // public string get_path (): //returns the model path public int set_path (string path); //sets the model path } /* This class will control the fighter planes. */ Class Plane (){ Location location; //plane location, rotation, etc. private string type; //identifier string for the plane private int is_alive; //is it shot down? private int team; //colour team parts red/blue? private int num_bombs ; //how many bombs it has left private int num_bullets; // private int num_gas; // private int fire_bomb(int num_bombs); //play fire animation, num_bombs--; private int fire_gun(int num_guns); // public int get_gas(); //return how much gas is left public int get_bombs(); // public int get_bullets(); // public int set_gas(int gas); //set how much gas it has public int set_bombs(int bombs); // public int set_bullets(int bullets); // public int get_health(); //return if it is shot down public int set_health(int health); //set if it is shot down public int get_team(); //find out team # public int set_team(int value); //set the team # public int set_type(string name); //name this plane type(eg. Spad) public string get_type(); //find out the plane's name } /* This class will do those nasty birds that kill you if you hit them. */ Class Bird (){ Location location; //Location, etc. of the birds. } /* This class will do tanks, factories, etc., as loaded by the path in the Location class instance. There will be at least 6 types: 1 cow, 1 tank, a hangar, gas tank, and 2 factories. Maybe more than that, if more variety is wanted, but I doubt it. */ Class Building (){ Location location; //Location of the building private int health; //health left before kaboom private int team; //paint team sections red/blue private int explosion_size; //gas tanks vs. cows public int get_explosion (); //get the explosion size public int set_explosion (int n); //set the explosion size public int get_team(); //find out team # public int set_team(int value); //set the team # public int get_health(); //find out health public int set_health(int value); //set the health }