BomberTalk
Networked Bomberman for Classic Macintosh
BomberTalk is a networked Bomberman clone that runs on Classic Macintosh hardware. Two to four players on a LAN find each other automatically, connect in a peer-to-peer mesh, and play on a shared 15x13 grid, and players can now join a game already in progress. It runs on a Mac SE (68000, 8 MHz) through to a Performa 6400 (PPC 603e, 200 MHz), on old Mac OS X on both PowerPC and Intel via a Carbon build, and on a modern desktop through SDL2, all from a single C89 codebase.
The game sits at the top of a dependency chain built specifically for this:
Retro68 is Wolfgang Thaller's GCC cross-compiler that makes all of this possible. clog handles logging with a network sink for remote monitoring. PeerTalk handles all the networking: UDP discovery, TCP mesh connections, and both reliable and fast message transports. It also forms the full mesh itself now, so BomberTalk just registers its eight message types and gets on with the game. The Classic Mac Hardware MCP handles deploying builds to the real machines and running them remotely.
# Features
- 2-4 player networked Bomberman over LAN, with mid-game join: late players are seated in a free corner and sent the current board state
- Automatic peer discovery via UDP broadcast, with the full mesh formed automatically by PeerTalk (no lobby handshake to hand-roll)
- One codebase, five build targets: 68k and PowerPC classic Mac OS, a Carbon build for old Mac OS X (PowerPC and Intel), and an SDL2 build for modern desktops
- Portable game core: collision, blast range, win condition and map parsing are pure C89, unit-tested on the host with 1,275 checks
- Big-endian wire format so PowerPC and Intel machines agree on every byte
- Tick-based timing so gameplay speed is consistent across 8 MHz to 200 MHz machines
- GWorld double-buffering with dirty rectangle optimisation
- Zero allocation after startup - all memory pre-allocated
- Monochrome rendering path for the Mac SE (16x16 tiles) alongside colour (32x32 tiles)
- Deterministic player ID assignment via IP sort - no negotiation needed
# Tech Stack
# Architecture
BomberTalk uses a screen-based state machine: Loading, Menu, Lobby, Game. The main loop polls Mac OS events, PeerTalk callbacks, and keyboard input every frame. Game state updates are tick-based, not frame-based, so the Mac SE at 8-15 fps plays at the same speed as the 6400 at 24 fps.
Network messages split across two transports:
| Message | Transport | Purpose |
|---|---|---|
| Player position | UDP (fast) | 5 bytes, sent every frame |
| Bomb placed | TCP (reliable) | Grid coordinates |
| Bomb explode | TCP (reliable) | Forces sync on slow machines |
| Block destroyed | TCP (reliable) | Tile removed from grid |
| Player killed | TCP (reliable) | Death notification |
| Game start | TCP (reliable) | Includes protocol version check |
| Game over | TCP (reliable) | Winner ID |
| Map state | TCP (reliable) | Current board sent to a mid-game joiner |
# Portable core
The game's rules are now separated from its Mac code. Collision, bomb-blast range, the win condition, coordinate maths and map parsing live in a portable C89 core that knows nothing about the Macintosh, while each platform (the Classic Mac Toolbox, a Carbon build for old Mac OS X, and an SDL2 build for the desktop) provides only the drawing and input. The core is unit-tested on the host with 1,275 checks across eight small test files, so a logic bug no longer has to reach real hardware to be caught. The architecture write-up covers how this came about.
# Hardware
| Machine | CPU | RAM | OS | Display |
|---|---|---|---|---|
| Mac SE | 68000, 8 MHz | 4 MB | System 6.0.8 | 512x342, 1-bit mono |
| Performa 6200 | PPC 603, 75 MHz | 40 MB | System 7.5.3 | 640x480, 8-bit colour |
| Performa 6400 | PPC 603e, 200 MHz | 48 MB | System 7.6.1 | 640x480, 8-bit colour |
| Power Mac G5 | PPC 970 | N/A | Mac OS X 10.5.8 | Carbon (OS X) build |
| Intel Mac mini | Intel | N/A | Mac OS X 10.7.5 | Carbon (OS X) build |
Alpha gameplay across all three machines
# Status
The networking and game logic are stable across all three Classic machines, and the game now also runs on old Mac OS X through a Carbon build (PowerPC and Intel, as a single universal binary) and on modern desktops through SDL2. The rules were carved into a portable core with 1,275 host unit tests, PeerTalk now forms the mesh itself, and the network protocol moved to version 6 to carry the mid-game board state. The headline test was a four-player game played across a Performa 6400 (Open Transport), a Performa 6200 (MacTCP), a PowerPC G5 (Mac OS X) and an Intel Mac mini (Mac OS X) at once: the mesh formed on its own, the round ran clean for about two and a half minutes with no desync, and it was the first proof of the big-endian wire format working between PowerPC and Intel. PICT sprite graphics are in with a coloured-rectangle fallback for missing resources. Remote log monitoring works via PeerTalk's debug broadcast channel on port 7356.