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)