Project Breakdown


The project breaks down into these 11 components. some of them could likely even be broken more but we will leave that to the individual teams working on that section. These names refer to both the code and the group of people responsible for that code.

Core Teams

the dependencies should represent 'one way dependency' information for each core team and each part of the game. for example, the network part of the game has no dependencies, and therefore requires no knowledge of anything outside the network core.

RESOURCE
dependencies: none
this is the only section of code that directly access data from the disk. it also handles saving of preferences and player data. sound and graphic resources can be loaded into separate 'bundle' containers. bundles will be loaded and destroyed as a group. should be able to 'incrementally' load resouce files so game can remain interactive while loading happens.

NETWORK
dependencies: none
responsible for handling network communication. there will be work on the client and server side of the fence. Data traffic will be fairly light, and tcp will be used unless latency becomes too large a factor. Networking code in the clients must be able to sense when things have gotten too far lagged and interrupt the game to allow for things to get resyncronized.

BROWSER
dependencies: network?
separate executable that lives on a fixed server. doesn't do much logic except show which users are connected. can pass simple chat text between connected clients. needs a separate client module that can simply connect and access the data. There is no need for it to depend on the network core built for the game, but it may want to.

MAPPING
dependencies: none?
this is the map and tile data. these are static datafiles that do not do anything. separate tools will be needed to precompute information into the map.

LOGIC
dependencies: resource
generally dealing with map navigation and interaction. determine line of sight calculations, unit damage, pathfinding, etc. this contains the tile and map classes. It is generally used by the server, but the client will require use of it to compute map and fog-of-war rendering.

SERVER
dependencies: network, logic
all game classes are a part of this core (aside from map and tiles). runs at a set framerate. runs as a separate process on one of the players machines. still speaks through network interface to both players. unit ai is here as well, belonging to the unit class.

ARTWORK
dependencies: none
this is a separate team for developing the graphics for the game. there will be many to do, and this is a large job to tackle. we will likely stick to low detail and low color to keep as many people as possible available to help this team. this will include designing the menus and setup screens.

GRAPHICS
dependencies: resource, artwork
this code will consist of the classes used by the render engine. these will mainly be one of still or animated images. it will enhance the standard resource bundles by offering graphics in different color sets or with alternate effects. classes will also be needed to handle ui elements like cursors and buttons.

RENDER
dependencies: graphics, logic
this will handle setting all graphic modes and drawing to the screen. it will be designed as if there could be multiple render backends, even though that is not being done for this game. it will handle optimizing all final images into a format for the render engine. simple renderers must be included to handle the setup screens.

SOUND
dependencies: resource
this is both the sound code and sound resources rolled together. the amount of code needed to manage sound effects should be minimal. sound bundles will build on regular resource bundles by offering sounds at different sample rates. the sound team will be responsible for 'recruiting' people to create the needed voice recordings.

CLIENT
dependencies: resource, network, browser, graphics, render, sound
this will handle all user input and client initialization. client classes for game objects will be simply shells of data that don't do anything on their own. unit data is received from the server and passed to rendering and input handling. logic for menu and setup screens are handled by separate game state classes. this part of the game has the most code inside that can be broken into separate parts.




Development/Debugging Extras
The split server/client architecture will make it tricky to track down bugs in the server. It is highly recommended to build some 'debug info' communication from the server to the client. this can easily be hooked into the 'chat' interface where special commands trigger responses from the server.

once we reach CORE2, a clean run through pychecker is a standard requirement for all code checkins. this should catch most breakage before it gets into the repository.

game resouces will likely be stored outside of cvs as separate 'sound' and 'graphic' archives. once CORE2 is reached these will contain all placeholder art needed and can freely be updated as needed.

we will need a 'dummy' client that can be played against during development and playtesting. the dummy client won't actually do anything but just allows the server to run with a single player. (although enemy troops should be on the map)