Skip to content

Commit 8ea1054

Browse files
committed
Release the rounds and challenges played during Hackceler8 2024.
1 parent 718d98e commit 8ea1054

File tree

5,339 files changed

+347709
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

5,339 files changed

+347709
-0
lines changed

2024/hackceler8/rounds/README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Hackceler8 2024 game rounds
2+
3+
The game variations for the rounds of Hackceler8 2024, including
4+
5+
* The sanity check round (round_0_test)
6+
* Day 1 (round_1 - round_3)
7+
* Day 2 (last chance playoffs, (round_4, round_5)
8+
* Day 3 (semifinals and finals, round_6 - round_8)
9+
10+
For each round, the handout/ dir contains the files we handed out to players during the round. The server/ dir contains the code we ran on the server which had additional logic like the server-side boss code as well as debug tools we used (hitbox rendering, secret teleportation command, modded "cheat" client with frame-by-frame replays, challenge authors' solution scripts to the challs).
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Hackceler8 2024 Game
2+
3+
## Steps to run the game:
4+
5+
1. Install prerequisites
6+
```
7+
cd hackceler8-2024-game
8+
python3 -m venv my_venv
9+
source my_venv/bin/activate
10+
pip3 install -r requirements.txt
11+
```
12+
13+
2. Run server (optional but good for testing cheat detection/etc.)
14+
15+
```
16+
cd hackceler8-2024-game
17+
source my_venv/bin/activate
18+
python3 server.py
19+
```
20+
21+
3. Run client
22+
23+
```
24+
cd hackceler8-2024-game
25+
source my_venv/bin/activate
26+
python3 client.py
27+
```
28+
29+
If you want to run the client without a server, pass `--standalone` as an additional argument.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDjzCCAnegAwIBAgIUVx92s3F9s3TvTcTFzVMWbGb+cHIwDQYJKoZIhvcNAQEL
3+
BQAwVzELMAkGA1UEBhMCQ0gxEzARBgNVBAgMClNvbWUtU3RhdGUxDzANBgNVBAcM
4+
Blp1cmljaDEPMA0GA1UECgwGR29vZ2xlMREwDwYDVQQDDAhkZXYtdGVhbTAeFw0y
5+
NDA0MDQyMTQwMzlaFw00ODExMjUyMTQwMzlaMFcxCzAJBgNVBAYTAkNIMRMwEQYD
6+
VQQIDApTb21lLVN0YXRlMQ8wDQYDVQQHDAZadXJpY2gxDzANBgNVBAoMBkdvb2ds
7+
ZTERMA8GA1UEAwwIZGV2LXRlYW0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
8+
AoIBAQDUjGYxwdG8zPd79HMJ62DBOS2LaUrchVnVu02NXlnb8fYEEd22tDw7BoZ+
9+
PCJ0/RxgaOOZ8AQwbh+LbyqFloP34BhRDjeMgAjyEZE4i9y7woysWHh8j7iH2GER
10+
SNZwYefZ+YRGnDp1C2A7DqVqLlsnt72zMTYUIYEZqBLFd/H/1ysfgIiZiHP1++dW
11+
chlV1lEL/2q0uLt8Oi+Hp/dA/E89TZznkSs2XKByUlF7Q34rHNoitRigtFw4/hXg
12+
a8KwY7o0FjNcQUP67C0zNBDsOZ8fEt1/i4k/hQ+B+iHHPF/CA0azY4JjUcSF7522
13+
0GnGUjA7I+RWS0aii3hVtcy47sxxAgMBAAGjUzBRMB0GA1UdDgQWBBQ1HR6i0sQ4
14+
N/WNu3Pp8pPS0cFjIjAfBgNVHSMEGDAWgBQ1HR6i0sQ4N/WNu3Pp8pPS0cFjIjAP
15+
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBS4eEJXfF+JmpE0Qtr
16+
nH8Dvlsr6zTH6BZdhchdx4umZ28gnejTVFL3n6AFh9s8v4zyximIO40Zw2zzJwIo
17+
+EWvDDBWWAjLHDlzDrNtN7itNyDvKsskPVgBGYbCxiEJP+t+FI2YwRwboE8k3cPv
18+
rqnpkMXm9gYU0XGlZo/OysAbGZ0KrTReKUhVKmo8FocUCA2p9D1/bXYCv/jEM7ZW
19+
5uImP3w9v/bj+/Em2rXbHQMNBUY5ixQv++jpVIvkI4CqXhnWZKnG4efTeUgO2em5
20+
ilDJnEZV9RkLIuu8LG2s2aR5NNrGjb4n1ve0jmAkKBzvl9aqERtUOqhvYLgNPmsq
21+
A86a
22+
-----END CERTIFICATE-----
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDUjGYxwdG8zPd7
3+
9HMJ62DBOS2LaUrchVnVu02NXlnb8fYEEd22tDw7BoZ+PCJ0/RxgaOOZ8AQwbh+L
4+
byqFloP34BhRDjeMgAjyEZE4i9y7woysWHh8j7iH2GERSNZwYefZ+YRGnDp1C2A7
5+
DqVqLlsnt72zMTYUIYEZqBLFd/H/1ysfgIiZiHP1++dWchlV1lEL/2q0uLt8Oi+H
6+
p/dA/E89TZznkSs2XKByUlF7Q34rHNoitRigtFw4/hXga8KwY7o0FjNcQUP67C0z
7+
NBDsOZ8fEt1/i4k/hQ+B+iHHPF/CA0azY4JjUcSF75220GnGUjA7I+RWS0aii3hV
8+
tcy47sxxAgMBAAECggEAPZpFokU1Fz3mur/iOa1FOStrxlypjFl/7IDhXMhMTgGG
9+
Vq6g7mu1izv8bgjaycJ0X4L2+G5GoIzCSsTY86forsZ99bwjoG6ZaSNrThLHUon0
10+
AJ2RqjRzfLfbhklwkVjm/FejnV15WeQGq4c2rRwrYksQSafJLzN4uelrK110v7vj
11+
alXNFumtFIoskltgrLNR+YXaYjKp+DZANETk+E8N4pUIC+DNQwAhesK45+8uq9tx
12+
eS9DOzqgXrUNvL4bNmC4keZXggsgQ79kcu6pzXoTBDfgMFivxylAoP7ch1/yPvc3
13+
CHchzSGGd8j5eRnhpiXVq8iK0hU07WS7vGFPoHzF+wKBgQDvaAKNalVPZJz+Tx5o
14+
T7sraReqIIKSh2wt8O9nL1n35llUMNln8+eGQBbEqkXQAUxdbUnYIcIcpx27xJqi
15+
vwZEFdnE4XHO4t7JSlvN+9YJAe1fAwTfX0X5tZa0katgUCMvV1oieOyGlNaYAeJ8
16+
PjiREqNgfESqeCYpzf8zJ28ibwKBgQDjR9PQb/S8J3Jsn5PAAocezin2UDrf+Fbw
17+
ihIm3DA+enm8w4KVxMfH5ZU21YE2oU4dLz8UjWVrcQ2ArXG+mC2VPjMIPYTtzsJS
18+
/178q/cIAJNPin9KJ0lPi+eui58Bk1INDbBut5nNn0T0q4mY60FBR0ugqkEP6p/W
19+
kkP+PezvHwKBgQDQSVN/KXYTXtvfvYIdCtEy0XoPP72aMkwCJE6FHYNO1I//WYis
20+
kl1qRbQJYoLel2KTHhRS//vb5eFOjZxj34JaFhCi4+maL3PY+OKqcWIj8BNOyFei
21+
50cAG+aELwBFCTOzanI277II3NFe6rTbl16riOWvei5bibDaSiivnq1n7QKBgQCR
22+
9OOi3PL3DgIendA9o6Hwd4ddJiLZCFuUt6Z2jDrzNKYPQiMPWULPLbHIeA417hsD
23+
BP9mjHNQL1bzhu8f7gx/5mTRauh966TBtjvi2fCXk/8GOrQKA/bBfeA4KHPhiCFO
24+
PrdKMuAzu4+F7M89g/7xE/8OW6fSt+MT4fSGRnBtEwKBgDKEopk9I68JRETazeq9
25+
w/uhVkRO2UxmpAr26+2Gi/O0G6vBxo1wDUuc2sq4+gJuA8ZLvl4MukatzWC2/GrE
26+
qjOgu3k92oDXC9qx03CjpVsVBl7g3Ht/GImM5PrRqaOT7ksXTzL2clsN/jwE2GNN
27+
YgNbdzk96ahTsKG5wmUpHjjR
28+
-----END PRIVATE KEY-----
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIC8TCCAdkCFAiXEKC+siFb0JPetu30g8nhgQR2MA0GCSqGSIb3DQEBCwUAMFcx
3+
CzAJBgNVBAYTAkNIMRMwEQYDVQQIDApTb21lLVN0YXRlMQ8wDQYDVQQHDAZadXJp
4+
Y2gxDzANBgNVBAoMBkdvb2dsZTERMA8GA1UEAwwIZGV2LXRlYW0wHhcNMjQwNDA0
5+
MjE0MDQzWhcNMjUwNDA0MjE0MDQzWjATMREwDwYDVQQDDAhkZXYtdGVhbTCCASIw
6+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALKjl2+cnMXEC5RY69cv7+Dg4BK6
7+
xGAV2dMr7uRbwWKL+E9DJTlS1NEcDwPuDboYc+3ELX9b1xqjKuxCmoR8QdLUcnyG
8+
8Fdy+NXrsv2OHHLA456XY5FY/8E3gBCSwUrZsjKXFopUQ9wHaYTKQebM6yJYNWdt
9+
SXrzMSRgMvfmg56ND5r4T4nM+RqFL4fu2wZ43PctJH4rvRytNfchpdoREo1YtFwS
10+
C+zds9CI1JTEVb8pJqfaNSuLIgjiraaoBB9gmYNFB0TGQg4oj9YC70maQlmisgkC
11+
/TpQ+qcNP0RMQw4XVfS34YyptkaWmxRnYalq4BYuIeeCC1b8ClYfXVofpz8CAwEA
12+
ATANBgkqhkiG9w0BAQsFAAOCAQEAqXvEgDBomTpO9SmdAFqtXddKuD1L4KTo4pXr
13+
R5NyOsFXpRpjH2OVDNkk9a7yMuifztAJpFolyiyyzpyJXItBLfzggCBfmW7dONaR
14+
lx2ZUuF1Etl7VotOU4PKpmOwe3yZf9waddQ8TfI/mVim+ZsIliJxiYh4k76EFyYv
15+
Z+rAzn1RjGZ6OPwOMeeveQbzBx9Pw8z4cBx8facYexcKqFfaJdrmTJRLfsE1KILJ
16+
jku8d0cURtNLbMsM1W5egQfOQJ4RpC53TWwpFEPO5k+0tYUB4+Kd6rw0O2YlDAJB
17+
Aci6DaQSwWSfiynT/Chv7bNy+c1LVruq2mmaAUuCwrzUgmIgNA==
18+
-----END CERTIFICATE-----
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyo5dvnJzFxAuU
3+
WOvXL+/g4OASusRgFdnTK+7kW8Fii/hPQyU5UtTRHA8D7g26GHPtxC1/W9caoyrs
4+
QpqEfEHS1HJ8hvBXcvjV67L9jhxywOOel2ORWP/BN4AQksFK2bIylxaKVEPcB2mE
5+
ykHmzOsiWDVnbUl68zEkYDL35oOejQ+a+E+JzPkahS+H7tsGeNz3LSR+K70crTX3
6+
IaXaERKNWLRcEgvs3bPQiNSUxFW/KSan2jUriyII4q2mqAQfYJmDRQdExkIOKI/W
7+
Au9JmkJZorIJAv06UPqnDT9ETEMOF1X0t+GMqbZGlpsUZ2GpauAWLiHnggtW/ApW
8+
H11aH6c/AgMBAAECggEAKVXCOkC+Y+KHnWVv+ORuOJZAMwVFYEheFUdyqSN0HXXu
9+
2IRcbiW0+cfoz4t7YKa82HUO5Avfu5mq2m1U7LgF0R94eEkO/uUrH/DAg3wpKAJr
10+
COzVzLGPyGkruGoE0OmLmrosLIjwBM8wQto8IogjFljbzplSqeDw645Y7NTJetud
11+
GX5SqKKaLZe/3VLoH9WaHt6gQW3wd7wftCNvBm36ZkrKw5nwkyqTyAXNKfw4zawq
12+
tPZpcLsC7hBDAx6Hij4a2hHzlJ5dBtUxtVtyTDAe1bgLTMbW/2+ylbpfXG6LJbvA
13+
+i7Uap/Zgg91tcwK9mdOolsydkFyKDUysXCSIoqryQKBgQDY3U8dsLgnEmklazQD
14+
yPpan4bHWb18FnMlDLjoxVQz80+NDEDlO3qk6GKEjXK0Y+1IIIhMehizAAk1beHg
15+
+ESzaU60JWbifzX7+EaqA05Fw5998J1nP7gYPZXnuZ3oNEDAI1HlEFScWbRQt4oY
16+
J6s5+3OvQ8LjmNe523GoMEJaFwKBgQDS4Fhn089UrLBWBvkxj49XPor4sBRyLAXl
17+
DZIwPZ3I+vdeL9+qkdUx9audTrInbmlq6/Lia1STdrHDUj9cZLlgaeH4sggk2Xv3
18+
nkZvVSmSwiST9cmNvG17TQNY8jm+jplRjv1cfeGLgXvzN0gmu1XeV6xp9HNO2KGl
19+
ALJS0XndGQKBgQCKmV6ADjqTlhunM42pwZ/nnT8JV1xX2w06J5hiBAOdtCoqbiNn
20+
ngzzKiYUq0Yc7iRvTYNuxTXV6Pb5s8GCA4n81Bfd4G2R4lWBNRsMe1JiGfVsCwS+
21+
QSYKMAoHcETwa7zaT3h+mmJJDrfEQpk6eNfhFcjIwdjjlwKAoTRRlo5BfwKBgQDR
22+
6Tp3WBOZcTEy4UwrNoF0UjCaLwSbRhE0Gdc8qAkpqBCXNEaMDxDO44LKWyziLXlI
23+
Usj68+ZDyDJZgMTLnwQc4ilrmySaMdfB/E6WwopYqWMp2c+hhEDjLR047B3o/x/F
24+
XPX9nNzoNqOAzrXGwFJQuqtI6WniwafejRv1bsnE+QKBgA3DM+0bW+6BRRDSyafM
25+
RU4mb3/X6Qb5NmTMRROvTzlVRJ8JIHo0YM8oj4WnXD6vT5czQ0YHFAbj0UFjjsFS
26+
tTd3FnkVdvCxUOucWNcM0TV5LvT2gQsdsizFXoJS520sBCOyKl7wX+gVzIZHHPQM
27+
nfrSDx04W1yKE2+1rRm5WZc1
28+
-----END PRIVATE KEY-----
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#!/usr/bin/env python
2+
# Copyright 2024 Google LLC
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# https://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
import argparse
17+
import logging
18+
19+
# numpy's multithreading is too smart for its own good
20+
# do this _before_ it gets imported
21+
import os
22+
os.environ['OMP_NUM_THREADS'] = '1'
23+
24+
from game import log
25+
from game import venator_gui
26+
from game import network
27+
import moderngl_window as mglw
28+
29+
30+
# A silly monkeypatch to work around mglw not allowing to pass in a parent parser
31+
mglw._orig_create_parser = mglw.create_parser
32+
def _create_parser():
33+
root = mglw._orig_create_parser()
34+
return log.get_argument_parser(root)
35+
mglw.create_parser = _create_parser
36+
37+
class Hx8Client(venator_gui.Hackceler8):
38+
def __init__(self, **kwargs):
39+
log.setup_logging(self.argv, file_prefix='client')
40+
net = None
41+
if not self.argv.standalone:
42+
net = network.NetworkConnection.create_client(
43+
self.argv.hostname,
44+
self.argv.port,
45+
self.argv.cert,
46+
self.argv.key,
47+
ca=self.argv.ca,
48+
)
49+
50+
if net is None:
51+
logging.fatal(
52+
'Connecting to server failed, pass --standalone if you want to run'
53+
' the game without a server.'
54+
)
55+
raise SystemExit()
56+
57+
super().__init__(net=net, **kwargs)
58+
59+
@classmethod
60+
def add_arguments(cls, parser: argparse.ArgumentParser):
61+
parser.add_argument(
62+
'--hostname', nargs='?', default='localhost', help='Server address'
63+
)
64+
parser.add_argument(
65+
'--port', nargs='?', type=int, default=8888, help='Server port'
66+
)
67+
parser.add_argument(
68+
'--cert',
69+
nargs='?',
70+
default='ca/dev-team.crt',
71+
help='Path to client cert',
72+
)
73+
parser.add_argument(
74+
'--key',
75+
nargs='?',
76+
default='ca/dev-team.key',
77+
help='Path to client key',
78+
)
79+
parser.add_argument(
80+
'--ca', default='ca/CA-devel.crt', help='Path to CA .crt file'
81+
)
82+
parser.add_argument(
83+
'--standalone',
84+
action='store_true',
85+
default=False,
86+
help='Run locally (without connecting to a dedicated server)',
87+
)
88+
89+
90+
def main():
91+
logging.getLogger('PIL').setLevel(logging.WARNING)
92+
mglw.run_window_config(Hx8Client)
93+
94+
95+
if __name__ == '__main__':
96+
main()

2024/hackceler8/rounds/round_0_test/handout/flake.lock

Lines changed: 115 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
description = "Hackceler8";
3+
inputs = {
4+
nixpkgs.url = "nixpkgs/nixos-24.05";
5+
flake-utils.url = "github:numtide/flake-utils";
6+
nix-formatter-pack = {
7+
url = "github:Gerschtli/nix-formatter-pack";
8+
inputs.nixpkgs.follows = "nixpkgs";
9+
};
10+
};
11+
outputs = { nixpkgs, flake-utils, ... }@inputs:
12+
flake-utils.lib.eachDefaultSystem (system:
13+
let pkgs = import nixpkgs { inherit system; };
14+
in rec {
15+
packages.default = pkgs.callPackage ./game.nix { };
16+
devShells.default = pkgs.mkShell {
17+
buildInputs = with pkgs;
18+
[ tiled xorg.libX11 qt5.qtwayland ] ++ packages.default.buildInputs;
19+
};
20+
21+
# Formatting
22+
formatter = inputs.nix-formatter-pack.lib.mkFormatter {
23+
inherit nixpkgs system;
24+
config = {
25+
tools = {
26+
deadnix = {
27+
enable = true;
28+
noLambdaPatternNames = true;
29+
noLambdaArg = true;
30+
};
31+
statix.enable = true;
32+
nixfmt.enable = true;
33+
nixpkgs-fmt.enable = true;
34+
};
35+
};
36+
};
37+
});
38+
}
39+

0 commit comments

Comments
 (0)