Teewars Documentation


Table of Contents

Tasks
Bigger tasks
Medium tasks
Smaller tasks
Source Layout
data_src
src
scripts
File Formats
Map v2
Network Protocol
CLIENT_CONNECT
SERVER_ACCEPT
CLIENT_DONE
SERVER_SNAP

Tasks

Bigger tasks

  • Tilemap editor (Huge, non-R1).
  • Offline gui (Non-R1)
  • Fix everything so it builds under windows.
  • Sound or teetow will be mad! (portaudio + libvorbis).
  • Chat.
  • Master server (Non-R1)
  • zlib compression on the maps.

Medium tasks

  • Fix packetloss handling. (client.cpp/server.cpp)
  • Flipping of tiles in the tilemap should be fixed. (mapres_tilemap.cpp, tool.py)
  • Compression for snapshots. Not zlib as it's abit overkill for the small size. (client.cpp/server.cpp)
  • Splitting and combine snapshot over several packets. (server.cpp/client.cpp)
  • Some sort of settings format (think KISS) for the client. (client.cpp)
  • Take damage functions. (game/*)
  • Score board. (game/*)
  • The gfx implementation uses 1 quad in a VBO. It should be a whole bunch. (gfx.cpp)
  • Clients should timeout. (server.cpp)

Smaller tasks

  • The gfx API now uses BGRA for texture loading. It should be RGBA. (gfx.cpp, tool.py)
  • Commandline option for what server to connect to. ("-c host")

Source Layout

data_src

Data for the game is located under data_src and is unprocessed.

src

Engine source. It contains the network communication, graphics and sound.

src/game

The game source. This is the source that acctually is teewars. You can write a new game using the engine by removing these files and start from scratch.

scripts

Scripts.

File Formats

This sections describes the diffrent file format that Teewars uses.

Map v2

int ID
int version
int size
int swaplen
int num_item_types
int num_items
int num_raw_data
int item_size
int data_size
types {
        int typeid
        int start
        int num
} * (num_item_types)
item_offsets {
        int offset
} * (num_items)
raw_data_offsets {
        int offset
} * (num_raw_data)
item {
        int type_and_id
        int size
        datai {
                int data
        } * (size/4)
} * (num_items)
raw_data {
        byte d
} * X
Notes:
        swaplen tells how much of the data that should be swapped
        types.start is an index into offsets
        item.size must be a multiple of 4
        the types must be sorted by type id
        special typeid of 0xffff means raw data, and there fore should always come last
Could change:
        item.size could be removed

Map Items

0x8010 = image
0x8020 = tilemap
0x8030 = collision
collision {
        int width
        int height
        int raw_data_index
}
data {
        byte data
} * (width * height)
image {
        int width
        int height
        int raw_data_index
}
pixel {
        byte r
        byte g
        byte b
        byte a
} * (width * height)
tilemap {
        int image
        int width
        int height
        int x
        int y
        int scale
        int raw_data_index
}
data {
        byte data
} * (width * height)

Network Protocol

CLIENT_CONNECT

Sent by the client when it wants to connect. str32 name str32 clan str32 password str32 skin

SERVER_ACCEPT

Sent by the server as a respons to CLIENT_CONNECT, when it accepts a connection. str32 mapname

CLIENT_DONE

Sent when the client is done loading the map. nothing

SERVER_SNAP

Sent by the server at a steady interval to all players. Contains a snapshot of the current world. int num_parts int part int size

Snapshot

int num_items
offsets {
        int offset
} * num_items
item {
        int type_and_id
        int data[X]
} * num_items