update servicepoint and README
This commit is contained in:
parent
341d04e69d
commit
5ace6b5c8d
13 changed files with 16 additions and 65 deletions
55
README.md
55
README.md
|
@ -1,62 +1,12 @@
|
|||
# CCCB-Tanks
|
||||
# servicepoint-tanks
|
||||
|
||||
<!-- TODO: image -->
|
||||
|
||||
## Service point display
|
||||
|
||||
<!-- TODO: image -->
|
||||
|
||||
In CCCB, there is a big pixel matrix hanging on the wall. It is called "Airport Display" or "Service Point Display".
|
||||
|
||||
- Resolution: 352x160=56,320 pixels
|
||||
- Pixels are grouped into 44x20=880 tiles (8x8=64 pixels each)
|
||||
- Smallest addressable unit: row of pixels inside of a tile (8 pixels = 1 byte)
|
||||
- The brightness can only be set per tile
|
||||
- Screen content can be changed using a simple UDP protocol
|
||||
- Between each row of tiles, there is a gap of around 4 pixels size. This gap changes the aspect ratio of the display.
|
||||
|
||||
### Binary format
|
||||
|
||||
A UDP package sent to the display has a header size of 10 bytes.
|
||||
Each header value has a size of two bytes (unsigned 16 bit integer).
|
||||
Depending on the command, there can be a payload following the header.
|
||||
|
||||
The commands are implemented in DisplayCommands.
|
||||
|
||||
To change screen contents, these commands are the most relevant:
|
||||
1. Clear screen
|
||||
- command: `0x0002`
|
||||
- (rest does not matter)
|
||||
2. Send CP437 data: render specified text into rectangular region
|
||||
- command: `0x0003`
|
||||
- top left tile x
|
||||
- top left tile y
|
||||
- width in tiles
|
||||
- height in tiles
|
||||
- payload: (width in tiles * height in tiles) bytes
|
||||
- 1 byte = 1 character
|
||||
- each character is rendered into one tile (mono-spaced)
|
||||
- characters are encoded using code page 437
|
||||
3. Send bitmap window: set pixel states for a rectangular region
|
||||
- command: `0x0013`
|
||||
- top left tile x
|
||||
- top left _pixel_ y
|
||||
- width in tiles
|
||||
- height in _pixels_
|
||||
- payload: (width in tiles * height in pixels) bytes
|
||||
- network byte order
|
||||
- 1 bit = 1 pixel
|
||||
|
||||
There are other commands implemented as well, e.g. for changing the brightness.
|
||||
|
||||
## Tanks game
|
||||
|
||||
- By default, the backend also hosts the frontend
|
||||
|
||||
### Backend
|
||||
|
||||
<!-- TODO: image -->
|
||||
|
||||
- Uses the C# bindings from the [servicepoint library](https://github.com/cccb/servicepoint/) for communication with the display.
|
||||
- Stack: .NET / C# / ASP.NET / AOT-compiled
|
||||
- Both traditional JSON over HTTP APIs and real-time WebSocket communication
|
||||
- runs all game logic
|
||||
|
@ -66,6 +16,7 @@ There are other commands implemented as well, e.g. for changing the brightness.
|
|||
- One frame is ~7KB, not including the text and player specific data
|
||||
- maps can be loaded from png files containing black and white pixels or simple text files
|
||||
- some values (like tank speed) can be configured but are fixed at run time
|
||||
- By default, the backend also hosts the frontend
|
||||
|
||||
### Frontend
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue