MagicPunk Title
Download

16MB zip file. Requires Windows 7+, and a working IPv6 connection
Completely free, no registration required.

Quickstart

  • Bring a friend along (preferably willing)
  • Download MagicPunk, then unarchive the folder somewhere, such as on your Desktop.
  • Run MagicPunk, the game will start and place you in the "Channel" screen
  • Optionally change your randomly-assigned name using the
    /name
    command in the chat
  • Create a room, and get your friend to join it
  • Start the game!

Play guide

  • Both you and your opponent will start with an empty screen each, where colored balls will fall from the top.
  • Position these balls using arrow keys, so that 3 or more of the same colored balls can connect, and thus be removed from your screen.
  • Your spellbook shows the requirements of the actively selected spell, and the spell will be automatically cast when you clear enough balls.
  • You will win when you manage to fill up your opponent's screen!

About

MagicPunk is a multiplayer puzzle game by "The Creators". In 2004, it launched to a lukewarm reception, and was promptly shut down and abandoned in the same year.

As it was not popular and operated for a very short span, little was known about it. Even less documentation has survived after more than 20 years.

As luck would have it, the Internet Archive was able to capture a single game installer. From this installer, a working multiplayer backend was built after the game was unpacked and reverse-engineered.

Known Issues

  • When running from a non-IPv6 supported network, the game will not start. You may wish to use Cloudflare WARP to set up a IPv6 connection. WARP is free and no registration is required.
  • Windows Defender may complain about the game files as they are not signed. You may need to add an exclusion to allow the game to run.
  • After the first round, the original room creator's start button will be disabled, while the opponent will have the start button enabled instead. Please ask your opponent to start the game.
  • Occasionally, player communications may fail and the game does not start after the countdown. Please restart the game when this occurs.

Privacy and safety

  • The MagicPunk server is only able to see your originating IP address and port, as this is fundamental to how the network connection is made.
  • There is no registration and no personal information is ever requested from you.
  • No unique identifier is associated with you. The game client also does not fingerprint your hardware.
  • The server may log diagnostic network traffic through the system log, and as such, sensitive and personal details should not be shared through the in-game chat
  • The MagicPunk server does not have a persistent storage volume or database, and loses all data and unsaved logs when it is restarted.
  • The underlying "Xenesis" game engine has unresolved vulnerabilities which may lead up to remote code execution (also present in games using this engine e.g. GunBound). This client has some mitigations to panic and crash in a controlled manner instead of losing control of EIP.
  • The original client uses peer-to-peer communications. This has been disabled, and all P2P traffic is relayed through the server. Other players will never be able to see your real IP address
  • There is some code obfuscation in the MagicPunk application. If you are unsure about trusting an obfuscated application, you may wish to run the application in Windows Sandbox or a virtual machine.

Thanks

  • Internet Archive : without the archived installer, this project would not have been possible.
  • Ghotik : the client renders properly on modern Windows because of many fixes from DxWnd
  • fly.io : this server and website runs on Fly's free tier and will probably shutter when that is discontinued
  • crovaxof404 : authored a comprehensive spell guide that miraculously still exists in 2024.
  • ditman : starfield.js, seen on this page's header

Requirement for IPv6

This project was intended to run on fly.io from the get-go. Fly.io kindly provides a grandfathered free "hobby" tier which provides a dedicated IPv6 address, and a shared IPv4 address.
This shared IPv4 address works out surprisingly well for web applications; when establishing a secure TLS connection, the Server Name Indication field allows fly.io to dispatch the messages to the right instance, and things Just Work ™.
However, MagicPunk falls into the category of old school applications that sends a bag of structs over the wire, which wouldn't work on a shared address.

On the fly.io community forum, there was this post that piqued my interest: their gateway appeared to be able to unwrap the TLS stream, and pass an underlying plaintext stream to the application.
With a plan in mind, I patched and took over all of MagicPunk's networking code. I intended to wrap all communications over a single TLS stream with SNI, where fly.io should be able to receive, dispatch and unwrap the stream before passing it to the MagicPunk server.
When I was configuring my fly.toml to test if this could actually work, I then saw another post specifically mentioning that what I was attempting would not be supported :(

So anyway, the correct way to solve this would be to pay $2/month for a IPv4 address, though I don't think there will be enough folks discovering and trying MagicPunk to justify that.

While I hesitate to recommend anything from Cloudflare, their WARP application is currently the least painful way to access IPv6-only services.

Changelog

  • audio: reimplemented xes playback to fix jarring static when all 32 channels are saturated
  • authentication: implement anonymous logins, realtime name-change
  • commandprocessor: implement name change via chat
  • preferences: remove original registry dependency, fixup for running as portable client
  • network: reimplement client-server network stack, add IPv6 support
  • network: prevent client from announcing own ip:port
  • network: remove broker dependency
  • network: remove udp (p2p) port listener that causes firewall prompt
  • network: force all traffic to be relayed
  • network: disable login udp probe since udp is never used
  • filesystem: reimplement file-based fs, replacing xenesis fs, required since xes does not use dsound anymore
  • main: allow multiclienting

Spell guide

  • Bomb (Level 1): Opponent receives 4 stones
  • Stone (Level 1): Replaces 3 of your opponent's colored balls into stones
  • Cage (Level 1): Opponent controls are disabled for 5 turns
  • Curse (Level 1): Instant win after casting this skill 9 times
  • Plus Bomb (Level 2): Opponent receives 6 stones
  • Plus Stone (Level 2): Replaces 5 of your opponent's colored balls into stones
  • Bless (Level 2): Temporarily increases EXP gain by 15%
  • Poison (Level 2): Temporarily disables opponent spellbook progress
  • Super Bomb (Level 3): Opponent receives 8 stones
  • Super Stone (Level 3): Replaces 9 of your opponent's colored balls into stones
  • Dispel (Level 3): Temporarily protects you from one offensive spell
  • Virus (Level 3): Temporarily steals 20% of your opponent's gained EXP
  • Hyper Bomb (Level 4): Opponent receives 10 stones
  • Hyper Stone (Level 4): Replaces 18 of your opponent's colored balls into stones
  • Lightning (Level 4): Replaces an entire column of your opponent's colored balls into stones
  • Earthquake (Level 4): Clears your entire screen
  • Nuclear (Level 5): Converts almost all of your opponent's colored balls into stones
  • Meteor (Level 5): Converts almost all of your opponent's colored balls into stones