Important: While the code and some art are on Apache 2.0 license, other art is not (i.e. some art cannot be redistributed with e.g. forks of this project without acquiring a license; good news is that you'll be supporting indie game artists on itch.io if you do choose to do that). See LICENSE file in game subdirectories for details.
Disclaimer: This isn't an official product. It's a highly experimental CTF-like idea implemented by a couple of engineers in a couple of proverbial evenings. Expect errors, bugs, and problems.
This directory contains all 6 versions of the competition platform (speed-hacking game) used at Google CTF 2020 Final Event aka Hackceler8, including the "pre-tournament" version shared with the competing teams a week before the tournament.
See Google CTF Hackceler8 website for more details.
To play the game you'll need docker and docker-compose (can be on a Linux VM), and a browser (tested mostly on Chrome). Just enter any match-*
subdirectory and type:
docker-compose up --build
After the game is running, connect with the browser to http://127.0.0.1:4567/
(or whatever IP the Linux VM you are using might have) and use player/asdf as credentials.
Important: This setup is usable for testing only. Don't use this to run competitions! Check out KCTF instead.
During the tournament setting players had access to the source code of both the client and the server side of the game, but did not have access to source code of the challenges (nor obviously to the flags). Any client-side game glitching / hacks / mods / http proxies / etc were allowed (and actually required to complete some challenges) - do note that there is an anti-cheat which will block some obvious stuff.
If you're wondering how does the game work - well, that's something the players had to figure out during the competition as well, so... good luck! :)
Hint: Use Tiled for viewing the map.
- See README.md file in
match-*
subdirectories. - Server-side saving of game state is disabled - if you want to re-enable it, check
game_service.js
and look for/tmp/state_
- there's a comment there explaining what to do. Afterwards you can run the game (main.js
) with the state file as an argument to recover the state.
In somewhat random order.
Gynvael Coldwind
Project Lead, Game Developer
jvoisin
Project Lead, Commentator, Challenges Writer
scrinzi
SRE
Nicolas De Sola
Design & Creative Direction
Hlynur
Music, Commentator, Challenges Writer
Calle Svensson
Video production, Commentator
ddmassey
Commentator
Ian Eldred Pudney
Game Developer, Challenge Writer
Ollie Green
Commentator
spq
Challenge Writer
Pei Si Tan
SRE
acskurucz
Avid Listener & Random Support, Tester
akrasuski
Challenge Writer, Tester
Paul Dev
Super Hackceler8 Maker user
Jan Keller
Enabler of Things
And others!