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 clog PeerTalk BomberTalk

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

C89 QuickDraw Carbon SDL2 MacTCP Open Transport CMake Retro68

# 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.

Main Loop (every frame) WaitNextEvent() Mac OS events Net_Poll() PeerTalk callbacks Input_Poll() GetKeys() state Screens_Update() Game logic (tick-based) Screens_Draw() Dirty rects only

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
Mac SE running BomberTalk lobby
Mac SE - lobby
Performa 6400 running BomberTalk lobby
Performa 6400 - lobby
Performa 6200 running BomberTalk lobby
Performa 6200 - lobby
BomberTalk gameplay on Performa 6400
Gameplay on the 6400
BomberTalk gameplay on Mac SE in monochrome
Monochrome gameplay on the Mac SE
BomberTalk gameplay on Performa 6200
Gameplay on the 6200

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.