要打败的Random agent 0
加入

Bring the game from shoal-games 82301f6c4521

浏览文件
@shoal shoal 2周前提交 1 个父提交 88f7375 提交 235fffffbdb61439b42cff57745589e44d080530

显示 28 个改动的文件,新增 29798 行,删除 0 行。

+8 −0 AGENTS.md 新增 查看文件
@@ -0,0 +1,8 @@
1+# Rules for agents
2+
3+- Your bot is an ARC-AGI-3-Agents agent: `routes/<your route>/agent.py` with a class `Agent` and `choose_action(frames, latest_frame)`. Start from `routes/agent.py`, the official random agent. It runs on Python 3.12 with arc-agi installed, and no network.
4+- Test before you push: `python3 referee/play.py check routes/<your route>` serves the season's games locally and prints your RHAE per game.
5+- Every push is checked the same way and the score is kept. You do not write `metrics.json` yourself, and your agent cannot: it only talks to the game server.
6+- Don't put a `.env` in your route; the toolkit would read it. The referee runs your agent from a clean directory anyway.
7+- For replays, submit a practice job: `sbatch referee/practice.sbatch`. The first two games show up under Matches.
8+- Write what you tried and what to try next in `routes/<your route>/README.md`, ending with `## Next`. Don't change `referee/` or `viewer/` on your route.
+0 −0 cover.png 新增 查看文件
二进制文件,不显示。
+19 −0 kit/bridge.js 新增 查看文件
@@ -0,0 +1,19 @@
1+// The page around a game's viewer hands it the replay (Shoal's public/app.js): the viewer runs in a frame with scripts
2+// only, says it is ready, and gets {shoal: 'replay', name, text}. Opened by itself, it reads ?replay=<file> instead,
3+// so a replay can be watched from a clone: python3 -m http.server, then viewer/index.html?replay=../replays/x.json
4+// A live room (docs/games.md §8.4) opens the viewer as index.html?live. shoalLive(fn) says {shoal: 'ready', live: true}
5+// and calls fn(batch) for each {shoal: 'live', room, you, messages}: you lists the seats this viewer controls, the first
6+// batch holds all the history it may see, and each message is the room's (§8.3) plus its sequence number n: {n, to,
7+// version, obs, legal} asks a seat to act, {n, to, obs} tells one seat, {n, event} is public, {n, end} ends the room.
8+// shoalAct(seat, version, action) plays for a seat in you, answering the request with that version.
9+window.shoalReplay = start => {
10+ addEventListener('message', e => { if (e.data && e.data.shoal === 'replay') start(e.data.text, e.data.name) })
11+ const local = new URLSearchParams(location.search).get('replay')
12+ if (local) fetch(local).then(r => r.text()).then(t => start(t, local))
13+ else if (parent !== window) parent.postMessage({ shoal: 'ready' }, '*')
14+}
15+window.shoalLive = fn => {
16+ addEventListener('message', e => { if (e.data && e.data.shoal === 'live') fn(e.data) })
17+ if (parent !== window) parent.postMessage({ shoal: 'ready', live: true }, '*')
18+}
19+window.shoalAct = (seat, version, action) => parent.postMessage({ shoal: 'act', seat, version, action }, '*')
+82 −0 kit/host.py 新增 查看文件
@@ -0,0 +1,82 @@
1+"""A bot in its own process, spoken to one JSON line at a time. Start it with python -s, not -I: -I would ignore the
2+fixed PYTHONHASHSEED that makes a bot that iterates over sets play the same game twice.
3+
4+The referee never imports a bot: it starts the bot's adapter (a small child program each game has, which loads the bot
5+in the game's own interface) and sends it one line per turn. A move that takes longer than the time limit, or a bot
6+that crashed, gets the game's default move; the referee counts those as errors. The child side is `serve(handle)`.
7+"""
8+import json, os, select, subprocess, sys, time
9+
10+
11+class Child:
12+ def __init__(self, argv, cwd=None, limit=1.0, start=10.0):
13+ self.limit, self.errors, self.dead = limit, 0, False
14+ env = {k: v for k, v in os.environ.items() if not k.startswith(('SS_', 'SLURM_'))} # a bot sees no job token
15+ env['PYTHONHASHSEED'] = '0' # the same bot plays the same moves: sets iterate in one order
16+ self.p = subprocess.Popen(argv, cwd=cwd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, env=env)
17+ self.buf, self.n = b'', 0
18+ self.ask({'hello': True}, limit=start)
19+
20+ def ask(self, msg, limit=None):
21+ """The child's answer to one message, or None when it is late, broken or gone."""
22+ if self.dead:
23+ return None
24+ try:
25+ self.n += 1 # numbered, so a late answer to an earlier turn is dropped rather than taken for this one
26+ self.p.stdin.write((json.dumps({**msg, 'n': self.n}) + '\n').encode())
27+ self.p.stdin.flush()
28+ deadline = time.monotonic() + (limit or self.limit)
29+ fd = self.p.stdout.fileno()
30+ while True: # read the pipe ourselves: a buffered readline after select can hide an answer already read
31+ while b'\n' not in self.buf:
32+ ready, _, _ = select.select([fd], [], [], max(0.0, deadline - time.monotonic()))
33+ chunk = os.read(fd, 1 << 16) if ready else b''
34+ if not chunk:
35+ raise TimeoutError
36+ self.buf += chunk
37+ line, self.buf = self.buf.split(b'\n', 1)
38+ try: # lines that are not an answer (a library printing as it loads) are skipped
39+ msg_in = json.loads(line)
40+ except ValueError:
41+ continue
42+ if isinstance(msg_in, dict) and 'answer' in msg_in and msg_in.get('n') == self.n:
43+ return msg_in['answer']
44+ except Exception:
45+ self.errors += 1
46+ if self.errors >= 20 or self.p.poll() is not None: # ponytail: a slow bot is stopped after 20 misses
47+ self.close()
48+ return None
49+
50+ def close(self):
51+ self.dead = True
52+ try:
53+ self.p.kill()
54+ except Exception:
55+ pass
56+
57+
58+def serve(handle):
59+ """The child's loop: each line from the referee in, handle(message) out; {'hello': True} answers at once."""
60+ out = sys.__stdout__
61+ sys.stdout = sys.stderr # a bot's prints must not corrupt the channel
62+ for line in sys.stdin:
63+ msg = json.loads(line)
64+ answer = True if msg.get('hello') else handle(msg)
65+ out.write(json.dumps({'answer': answer, 'n': msg.get('n')}) + '\n')
66+ out.flush()
67+
68+
69+def load(path, *names):
70+ """The first of names defined by the bot file at path, which may import its neighbours."""
71+ import importlib.util
72+ sys.path.insert(0, os.path.dirname(os.path.abspath(path)))
73+ spec = importlib.util.spec_from_file_location('bot', path)
74+ mod = importlib.util.module_from_spec(spec)
75+ spec.loader.exec_module(mod)
76+ for n in names:
77+ if hasattr(mod, n):
78+ return getattr(mod, n)
79+ fns = [v for v in vars(mod).values() if callable(v) and getattr(v, '__module__', '') == 'bot']
80+ if not fns:
81+ raise SystemExit(f'{path} defines none of {", ".join(names)}')
82+ return fns[-1] # Kaggle's rule: the last function in the file
+48 −0 kit/league.py 新增 查看文件
@@ -0,0 +1,48 @@
1+"""What every game's referee shares: where the bots are, how a match is seated, and the files a run leaves.
2+
3+check: the route's bot plays every bot of the season's field (field/<name>/), seats swapped; the score is the mean
4+ over the field and each opponent is a subtask. metrics.json is what the site keeps (scienceslack.json names it).
5+practice: a few matches against the field, each leaving a replay in replays/ and an entry in replays/matches.json.
6+"""
7+import json, os, sys
8+
9+
10+def bot_dir(arg):
11+ """The route's folder the check was given, absolute (bots run in their own folder); a missing bot is the route's
12+ mistake, said plainly."""
13+ if not os.path.isdir(arg):
14+ sys.exit(f'No route folder at {arg}')
15+ return os.path.abspath(arg)
16+
17+
18+def field(root='field'):
19+ return sorted(d for d in os.listdir(root) if os.path.isdir(os.path.join(root, d)) and not d.startswith('.'))
20+
21+
22+def route_name():
23+ d = os.environ.get('SS_ROUTE_DIR', 'routes').rstrip('/')
24+ return 'main' if d == 'routes' else d.split('/', 1)[-1]
25+
26+
27+def write_metrics(score, subtasks, cost=None, path='metrics.json'):
28+ out = {'score': round(score, 6), 'subtasks': {k: round(v, 6) for k, v in subtasks.items()}}
29+ if cost is not None:
30+ out['cost'] = round(cost, 3)
31+ with open(path, 'w') as f:
32+ json.dump(out, f, indent=2, sort_keys=True)
33+ print(f'score {out["score"]} over {len(subtasks)}: ' + ', '.join(f'{k} {v:.3g}' for k, v in out['subtasks'].items()))
34+
35+
36+class Replays:
37+ """replays/<file> per match, and replays/matches.json saying who sat where and how it ended."""
38+
39+ def __init__(self, root='replays'):
40+ self.root, self.index = root, []
41+ os.makedirs(root, exist_ok=True)
42+
43+ def add(self, file, data, title, seats, result):
44+ with open(os.path.join(self.root, file), 'w') as f:
45+ f.write(data if isinstance(data, str) else json.dumps(data, separators=(',', ':')))
46+ self.index.append({'file': file, 'title': title, 'seats': seats, 'result': result})
47+ with open(os.path.join(self.root, 'matches.json'), 'w') as f:
48+ json.dump(self.index, f, indent=2)
+143 −0 kit/room.py 新增 查看文件
@@ -0,0 +1,143 @@
1+"""A room's half of the room protocol (docs/games.md §8.3), for any game's referee. SS_ROOM says who holds each seat;
2+ask() gets a move from a bot child, from a person or agent over stdin, or from the game's own fallback (auto).
3+
4+ room = Room(start) start(folder) -> host.Child, the game's way to run a bot (a route's or field/<name>)
5+ move = room.ask(seat, obs, legal, auto=lambda: ..., bot=<the bot child's message, in the game's own interface>)
6+ move = room.ask(seat, obs, legal, auto, accept=lambda a: ...) # legal holds templates (free text): accept says
7+ # what an answer means, or None to keep waiting
8+ room.tell(seat, obs); room.event(data); room.end(result, scores); room.close()
9+
10+Lines to the platform start with '@shoal ' and are flushed one by one; the referee's own prints go to stderr, so a
11+library printing as it loads cannot break a line. A person or agent who does not answer within the limit (SS_ROOM
12+"limit", 30 s by default; ask(..., limit=s) sets one request's, e.g. a speech's) gets auto's move. {"control": ...}
13+re-asks the seat with a new version, so a late answer from the old controller is dropped; {"stop": true} makes ask()
14+raise Stop, and the referee writes what it has and ends.
15+"""
16+import json, os, queue, sys, threading, time
17+
18+
19+class Stop(Exception):
20+ pass
21+
22+
23+def log(*a):
24+ print('room:', *a, file=sys.stderr, flush=True)
25+
26+
27+class Room:
28+ def __init__(self, start, field='field'):
29+ conf = json.loads(os.environ.get('SS_ROOM') or '{}')
30+ self.seats = {str(k): v for k, v in conf.get('seats', {}).items()}
31+ self.limit = float(conf.get('limit', 30))
32+ self.start, self.field, self.bots = start, field, {}
33+ self.version, self.stopped = 0, False
34+ self.inbox, self.lock = queue.Queue(), threading.Lock()
35+ self.out, sys.stdout = sys.stdout, sys.stderr # prints, ours or a library's, must not look like protocol
36+ threading.Thread(target=self._read, daemon=True).start()
37+
38+ def say(self, msg):
39+ with self.lock: # the reader thread speaks too (control events)
40+ self.out.write('@shoal ' + json.dumps(msg, separators=(',', ':')) + '\n')
41+ self.out.flush()
42+
43+ def tell(self, seat, obs):
44+ self.say({'to': seat, 'obs': obs})
45+
46+ def event(self, data):
47+ self.say({'event': data})
48+
49+ def end(self, result, scores):
50+ self.say({'end': {'result': result, 'scores': scores}})
51+
52+ def label(self, seat):
53+ s = self.seats.get(seat) or {}
54+ return s.get('name') or s.get('route') or s.get('field') or os.path.basename((s.get('dir') or '').rstrip('/')) or s.get('kind') or 'auto'
55+
56+ def kind(self, seat):
57+ return (self.seats.get(seat) or {}).get('kind') or 'auto'
58+
59+ def ask(self, seat, obs, legal, auto, bot=None, accept=None, limit=None):
60+ ok = accept or (lambda a: a if a in legal else None)
61+ while True:
62+ if self.stopped:
63+ raise Stop
64+ spec = self.seats.get(seat) or {}
65+ kind = spec.get('kind')
66+ if kind == 'bot':
67+ child = self._bot(spec)
68+ move = child.ask(bot if bot is not None else {'obs': obs, 'legal': legal}) if child else None
69+ move = ok(move) if move is not None else None
70+ return auto() if move is None else move # a late, broken or illegal bot move: auto plays it
71+ if kind not in ('human', 'agent'):
72+ return auto()
73+ self._drain() # answers and notices from before this request are stale
74+ if self.stopped: # a stop drained with them still counts
75+ raise Stop
76+ self.version += 1
77+ v = self.version
78+ self.say({'to': seat, 'version': v, 'obs': obs, 'legal': legal})
79+ deadline = time.monotonic() + (limit or self.limit)
80+ while True:
81+ try:
82+ msg = self.inbox.get(timeout=max(0.0, deadline - time.monotonic()))
83+ except queue.Empty:
84+ log(f'seat {seat} out of time at version {v}: auto plays')
85+ return auto()
86+ if msg.get('stop'):
87+ raise Stop
88+ c = msg.get('control')
89+ if isinstance(c, dict) and str(c.get('seat')) == seat:
90+ break # a new controller: ask again, with a new version
91+ a = msg.get('act')
92+ if isinstance(a, dict) and str(a.get('seat')) == seat and a.get('version') == v:
93+ move = ok(a.get('action'))
94+ if move is not None:
95+ return move
96+ if a is not None:
97+ log(f'ignored act {json.dumps(a)[:120]}: asking seat {seat} at version {v}')
98+
99+ def close(self):
100+ for c in self.bots.values():
101+ if c:
102+ c.close()
103+
104+ def _read(self):
105+ for line in sys.stdin:
106+ try:
107+ msg = json.loads(line)
108+ except ValueError:
109+ log('not JSON:', line.strip()[:120])
110+ continue
111+ if not isinstance(msg, dict):
112+ continue
113+ if msg.get('stop'):
114+ self.stopped = True
115+ c = msg.get('control')
116+ if isinstance(c, dict) and 'seat' in c: # applied at once: the seat may not be the one being asked
117+ seat = str(c['seat'])
118+ self.seats[seat] = {k: v for k, v in c.items() if k != 'seat'}
119+ self.event({'type': 'control', 'seat': seat, 'kind': self.kind(seat), 'name': self.label(seat)})
120+ self.inbox.put(msg)
121+
122+ def _drain(self):
123+ while True:
124+ try:
125+ msg = self.inbox.get_nowait()
126+ except queue.Empty:
127+ return
128+ if msg.get('act') is not None:
129+ log(f'ignored act {json.dumps(msg["act"])[:120]}: stale')
130+
131+ def _bot(self, spec):
132+ """The child for a bot seat, one per folder (as the checks share one between seats); None if it cannot start."""
133+ if spec.get('field'):
134+ folder = os.path.join(self.field, spec['field'])
135+ else:
136+ folder = os.path.join(os.environ.get('SS_INPUT', '.'), spec.get('dir') or spec.get('route') or '')
137+ if folder not in self.bots:
138+ try:
139+ self.bots[folder] = self.start(folder)
140+ except (Exception, SystemExit) as e: # a missing bot is played by auto rather than ending the room
141+ log(f'no bot at {folder} ({e}): auto plays that seat')
142+ self.bots[folder] = None
143+ return self.bots[folder]
+88 −0 kit/roomcli.py 新增 查看文件
@@ -0,0 +1,88 @@
1+"""Play a room on a laptop, without the site: run a room command with SS_ROOM, print what it says (docs/games.md §8.3),
2+and answer its requests to human and agent seats, from the terminal or by rule.
3+
4+ python3 kit/roomcli.py --room '{"seats": {...}}' [--auto] [--seat 0 --pick random] [--control 0=auto@6] [--stop 12] -- <command>
5+
6+--auto answers every request with the first legal action; --seat S (repeatable) answers seat S by --pick (first or
7+random) and leaves the other seats to the terminal. --control S=KIND@N: at the first request to seat S after N public
8+events, hand the seat to KIND (auto, agent, human), then send the old controller's late answer to that request, which
9+the room must ignore (it re-asks with a new version, or auto plays). --stop N sends {"stop": true} after N events.
10+SS_INPUT (a route's dir is under it) defaults to the current folder; --full prints whole messages.
11+"""
12+import argparse, json, os, random, subprocess, sys
13+
14+
15+def main():
16+ ap = argparse.ArgumentParser(description=__doc__.split('\n')[0])
17+ ap.add_argument('--room', default=os.environ.get('SS_ROOM', '{"seats": {}}'), help='SS_ROOM for the room')
18+ ap.add_argument('--auto', action='store_true', help='answer every request with the first legal action')
19+ ap.add_argument('--seat', action='append', default=[], help='a seat answered by --pick')
20+ ap.add_argument('--pick', choices=['first', 'random'], default='first')
21+ ap.add_argument('--control', action='append', default=[], help='S=KIND@N: hand seat S to KIND after N events')
22+ ap.add_argument('--stop', type=int, help='send stop after N events')
23+ ap.add_argument('--seed', type=int, default=0, help='for --pick random')
24+ ap.add_argument('--full', action='store_true')
25+ ap.add_argument('cmd', nargs=argparse.REMAINDER)
26+ a = ap.parse_args()
27+ cmd = a.cmd[1:] if a.cmd[:1] == ['--'] else a.cmd
28+ if not cmd:
29+ ap.error('give the room command after --')
30+ controls = []
31+ for c in a.control:
32+ seat, rest = c.split('=', 1)
33+ kind, at = rest.split('@', 1)
34+ controls.append({'seat': seat, 'kind': kind, 'at': int(at)})
35+ rnd = random.Random(a.seed)
36+ env = {**os.environ, 'SS_ROOM': a.room, 'SS_INPUT': os.environ.get('SS_INPUT', os.getcwd())}
37+ p = subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True, bufsize=1)
38+ events = asked = answered = late = 0
39+ versions = []
40+
41+ def send(msg):
42+ p.stdin.write(json.dumps(msg) + '\n')
43+ p.stdin.flush()
44+ print(' >>', json.dumps(msg)[:200])
45+
46+ for line in p.stdout:
47+ if not line.startswith('@shoal '):
48+ print(' log', line.rstrip())
49+ continue
50+ msg = json.loads(line[7:])
51+ text = json.dumps(msg)
52+ print(f'@shoal {text if a.full or len(text) <= 200 else text[:197] + "..."}')
53+ if 'event' in msg:
54+ events += 1
55+ if a.stop is not None and events == a.stop:
56+ send({'stop': True})
57+ if 'end' in msg:
58+ break
59+ if 'version' not in msg:
60+ continue
61+ seat, v, legal = msg['to'], msg['version'], msg['legal']
62+ asked += 1
63+ assert not versions or v > versions[-1], 'versions must grow'
64+ versions.append(v)
65+ due = next((c for c in controls if c['seat'] == seat and events >= c['at']), None)
66+ if due: # the handover, then the old controller's answer arriving late
67+ controls.remove(due)
68+ send({'control': {'seat': seat, 'kind': due['kind'], 'name': f'{due["kind"]}-{seat}'}})
69+ send({'act': {'seat': seat, 'version': v, 'action': legal[-1]}})
70+ late += 1
71+ continue
72+ if a.auto or seat in a.seat:
73+ action = legal[0] if a.pick == 'first' or a.auto else rnd.choice(legal)
74+ else:
75+ print(f'seat {seat}, version {v}: obs {json.dumps(msg["obs"])[:300]}\nlegal: {" ".join(map(str, legal[:60]))}')
76+ got = input('your move, or its index (blank: the first)> ').strip()
77+ action = got if got in legal else legal[int(got)] if got.isdigit() and int(got) < len(legal) else got or legal[0]
78+ send({'act': {'seat': seat, 'version': v, 'action': action}})
79+ answered += 1
80+ p.stdin.close()
81+ code = p.wait()
82+ print(f'roomcli: {events} events, {asked} requests (versions {versions[:1]}..{versions[-1:]}), {answered} answered, '
83+ f'{late} late answers sent, exit {code}')
84+ sys.exit(code)
85+
86+
87+if __name__ == '__main__':
88+ main()
+57 −0 kit/test_room.py 新增 查看文件
@@ -0,0 +1,57 @@
1+"""A check of kit/room.py against the room protocol (docs/games.md §8.3), on a toy game with one human seat: a stale or
2+illegal answer is ignored, a handover re-asks with a new version and drops the old controller's late answer, a silent
3+seat gets auto's move, and stop ends the room. python3 kit/test_room.py (or pytest)
4+"""
5+import json, os, subprocess, sys
6+
7+KIT = os.path.dirname(os.path.abspath(__file__))
8+GAME = f'''
9+import sys; sys.path.insert(0, {KIT!r})
10+from room import Room, Stop
11+room = Room(None)
12+try:
13+ for i in range(4):
14+ room.event({{'seat': '0', 'move': room.ask('0', {{'i': i}}, ['a', 'b'], auto=lambda: 'auto')}})
15+except Stop:
16+ room.event({{'stopped': True}})
17+room.end('done', {{'0': 0}})
18+'''
19+
20+
21+def test_room():
22+ env = {**os.environ, 'SS_ROOM': json.dumps({'limit': 0.5, 'seats': {'0': {'kind': 'human'}}})}
23+ p = subprocess.Popen([sys.executable, '-c', GAME], env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True)
24+
25+ def said():
26+ line = p.stdout.readline()
27+ assert line.startswith('@shoal '), line
28+ return json.loads(line[7:])
29+
30+ def send(msg):
31+ p.stdin.write(json.dumps(msg) + '\n')
32+ p.stdin.flush()
33+
34+ assert said() == {'to': '0', 'version': 1, 'obs': {'i': 0}, 'legal': ['a', 'b']}
35+ send({'act': {'seat': '0', 'version': 0, 'action': 'a'}}) # stale
36+ send({'act': {'seat': '0', 'version': 1, 'action': 'z'}}) # illegal
37+ send({'act': {'seat': '0', 'version': 1, 'action': 'b'}})
38+ assert said() == {'event': {'seat': '0', 'move': 'b'}}
39+ assert said()['version'] == 2
40+ send({'control': {'seat': '0', 'kind': 'agent', 'name': 'ada-codex'}})
41+ send({'act': {'seat': '0', 'version': 2, 'action': 'b'}}) # the old controller, late
42+ assert said() == {'event': {'type': 'control', 'seat': '0', 'kind': 'agent', 'name': 'ada-codex'}}
43+ assert said()['version'] == 3
44+ send({'act': {'seat': '0', 'version': 3, 'action': 'a'}})
45+ assert said() == {'event': {'seat': '0', 'move': 'a'}}
46+ assert said()['version'] == 4 # left unanswered: auto plays after the limit
47+ assert said() == {'event': {'seat': '0', 'move': 'auto'}}
48+ assert said()['version'] == 5
49+ send({'stop': True})
50+ assert said() == {'event': {'stopped': True}}
51+ assert said() == {'end': {'result': 'done', 'scores': {'0': 0}}}
52+ assert p.wait(5) == 0
53+
54+
55+if __name__ == '__main__':
56+ test_room()
57+ print('room protocol: ok')
+36 −0 referee/agent_child.py 新增 查看文件
@@ -0,0 +1,36 @@
1+"""A bot's own process, in the ARC-AGI-3-Agents interface: agent.py defines a class Agent with
2+choose_action(frames, latest_frame) -> GameAction (or (GameAction, {"x": .., "y": ..}) for ACTION6) and, if it likes,
3+is_done(frames, latest_frame). It plays one game through the official toolkit, online mode, against the referee's
4+local server, and stops at the action limit.
5+ python3 referee/agent_child.py <agent.py> <server url> <game> <max actions>
6+"""
7+import os, sys
8+
9+sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'kit'))
10+import random # noqa: E402
11+from host import load # noqa: E402
12+from arc_agi import Arcade, OperationMode # noqa: E402
13+from arcengine import GameAction, GameState # noqa: E402
14+
15+random.seed(0)
16+bot, url, game, most = sys.argv[1], sys.argv[2], sys.argv[3], int(sys.argv[4])
17+agent = load(bot, 'Agent')()
18+arc = Arcade(arc_api_key='local', arc_base_url=url, operation_mode=OperationMode.ONLINE, environments_dir=os.path.join(os.getcwd(), 'none'))
19+env = arc.make(game)
20+fd = env.reset()
21+frames = [fd]
22+for _ in range(most):
23+ if hasattr(agent, 'is_done') and agent.is_done(frames, fd):
24+ break
25+ try:
26+ out = agent.choose_action(frames, fd)
27+ except Exception:
28+ out = GameAction.RESET
29+ action, data = out if isinstance(out, tuple) else (out, getattr(out, 'action_data', None))
30+ if not isinstance(action, GameAction):
31+ action = GameAction.RESET
32+ if fd.state is GameState.GAME_OVER:
33+ action = GameAction.RESET
34+ data = dict(data) if isinstance(data, dict) else {}
35+ fd = env.step(action, data={k: data[k] for k in ('x', 'y') if k in data} if action.is_complex() else {})
36+ frames.append(fd)
+6 −0 referee/check.sbatch 新增 查看文件
@@ -0,0 +1,6 @@
1+#!/bin/bash
2+#SBATCH --job-name=play
3+#SBATCH --time=30:00
4+# The route's agent on the season's games; writes metrics.json, which the site keeps as the route's score.
5+PY=$(command -v arc-agi-3-python || command -v python3)
6+PYTHONHASHSEED=0 "$PY" -s referee/play.py check "$SS_INPUT/$SS_ROUTE_DIR"
+2520 −0 referee/environment_files/ft09/0d8bbf25/ft09.py 新增 查看文件
@@ -0,0 +1,2520 @@
1+# MIT License
2+#
3+# Copyright (c) 2026 ARC Prize Foundation
4+#
5+# Permission is hereby granted, free of charge, to any person obtaining a copy
6+# of this software and associated documentation files (the "Software"), to deal
7+# in the Software without restriction, including without limitation the rights
8+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+# copies of the Software, and to permit persons to whom the Software is
10+# furnished to do so, subject to the following conditions:
11+#
12+# The above copyright notice and this permission notice shall be included in all
13+# copies or substantial portions of the Software.
14+#
15+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+# SOFTWARE.
22+
23+import numpy as np
24+from arcengine import (
25+ ActionInput,
26+ ARCBaseGame,
27+ Camera,
28+ GameAction,
29+ Level,
30+ RenderableUserDisplay,
31+ Sprite,
32+)
33+
34+sprites = {
35+ "AcT": Sprite(
36+ pixels=[
37+ [12, 12],
38+ [12, 12],
39+ ],
40+ name="AcT",
41+ visible=True,
42+ collidable=True,
43+ ),
44+ "aIV": Sprite(
45+ pixels=[
46+ [0, 14],
47+ [0, 0],
48+ ],
49+ name="aIV",
50+ visible=True,
51+ collidable=True,
52+ ),
53+ "ajm": Sprite(
54+ pixels=[
55+ [2, 2, 0],
56+ [2, 15, 2],
57+ [2, 2, 2],
58+ ],
59+ name="ajm",
60+ visible=True,
61+ collidable=True,
62+ tags=["bsT"],
63+ ),
64+ "aPM": Sprite(
65+ pixels=[
66+ [3, 3, 3],
67+ [3, 11, 0],
68+ [3, 0, 2],
69+ ],
70+ name="aPM",
71+ visible=True,
72+ collidable=True,
73+ tags=["bsT"],
74+ ),
75+ "APy": Sprite(
76+ pixels=[
77+ [2, 0, 0],
78+ [0, 8, 2],
79+ [2, 0, 2],
80+ ],
81+ name="APy",
82+ visible=True,
83+ collidable=True,
84+ tags=["bsT"],
85+ ),
86+ "AQG": Sprite(
87+ pixels=[
88+ [0, 3, 3],
89+ [2, 15, 3],
90+ [0, 2, 0],
91+ ],
92+ name="AQG",
93+ visible=True,
94+ collidable=True,
95+ tags=["bsT"],
96+ ),
97+ "aRa": Sprite(
98+ pixels=[
99+ [2, 0, 2],
100+ [2, 9, 2],
101+ [2, 2, 0],
102+ ],
103+ name="aRa",
104+ visible=True,
105+ collidable=True,
106+ tags=["bsT"],
107+ ),
108+ "ASc": Sprite(
109+ pixels=[
110+ [2, 0, 0],
111+ [3, 14, 2],
112+ [3, 3, 3],
113+ ],
114+ name="ASc",
115+ visible=True,
116+ collidable=False,
117+ tags=["bsT"],
118+ ),
119+ "AzN": Sprite(
120+ pixels=[
121+ [15, 15],
122+ [15, 15],
123+ ],
124+ name="AzN",
125+ visible=True,
126+ collidable=True,
127+ ),
128+ "Bbi": Sprite(
129+ pixels=[
130+ [3, 0, 3],
131+ [2, 11, 2],
132+ [3, 0, 3],
133+ ],
134+ name="Bbi",
135+ visible=True,
136+ collidable=False,
137+ tags=["bsT"],
138+ ),
139+ "bdj": Sprite(
140+ pixels=[
141+ [12, 12],
142+ [12, 12],
143+ ],
144+ name="bdj",
145+ visible=True,
146+ collidable=True,
147+ ),
148+ "bqV": Sprite(
149+ pixels=[
150+ [0, -1, 0, -1, 0],
151+ ],
152+ name="bqV",
153+ visible=True,
154+ collidable=True,
155+ ),
156+ "BvX": Sprite(
157+ pixels=[
158+ [2, 0, 2],
159+ [3, 14, 0],
160+ [3, 3, 3],
161+ ],
162+ name="BvX",
163+ visible=True,
164+ collidable=True,
165+ tags=["bsT"],
166+ ),
167+ "bzH": Sprite(
168+ pixels=[
169+ [-1, -1, 6, -1, -1],
170+ [-1, -1, -1, -1, -1],
171+ [6, -1, -1, -1, 6],
172+ [-1, -1, -1, -1, -1],
173+ [-1, -1, 6, -1, -1],
174+ [-1, -1, -1, -1, -1],
175+ [6, -1, -1, -1, 6],
176+ [-1, -1, -1, -1, -1],
177+ [-1, -1, 6, -1, -1],
178+ ],
179+ name="bzH",
180+ visible=True,
181+ collidable=True,
182+ ),
183+ "cgN": Sprite(
184+ pixels=[
185+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
186+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
187+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
188+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
189+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
190+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
191+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
192+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
193+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
194+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
195+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
196+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
197+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
198+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
199+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
200+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
201+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
202+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
203+ ],
204+ name="cgN",
205+ visible=True,
206+ collidable=False,
207+ layer=-2,
208+ ),
209+ "ciC": Sprite(
210+ pixels=[
211+ [6, 7, 6],
212+ [7, 10, 7],
213+ [6, 7, 6],
214+ ],
215+ name="ciC",
216+ visible=True,
217+ collidable=True,
218+ tags=["NTi"],
219+ ),
220+ "CKH": Sprite(
221+ pixels=[
222+ [3, 0, 2],
223+ [0, 8, 0],
224+ [0, 2, 2],
225+ ],
226+ name="CKH",
227+ visible=True,
228+ collidable=True,
229+ tags=["bsT"],
230+ ),
231+ "cWS": Sprite(
232+ pixels=[
233+ [2, 2, 2],
234+ [0, 9, 0],
235+ [0, 2, 0],
236+ ],
237+ name="cWS",
238+ visible=True,
239+ collidable=True,
240+ tags=["bsT"],
241+ ),
242+ "dhm": Sprite(
243+ pixels=[
244+ [6, 6, 6],
245+ [6, 7, 6],
246+ [6, 7, 6],
247+ ],
248+ name="dhm",
249+ visible=True,
250+ collidable=True,
251+ ),
252+ "dta": Sprite(
253+ pixels=[
254+ [2, 0, 2],
255+ [0, 12, 2],
256+ [0, 0, 0],
257+ ],
258+ name="dta",
259+ visible=True,
260+ collidable=True,
261+ tags=["bsT"],
262+ ),
263+ "dvQ": Sprite(
264+ pixels=[
265+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
266+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
267+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
268+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
269+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
270+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
271+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
272+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
273+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
274+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
275+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
276+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
277+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
278+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
279+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
280+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
281+ ],
282+ name="dvQ",
283+ visible=True,
284+ collidable=False,
285+ layer=-2,
286+ ),
287+ "dwp": Sprite(
288+ pixels=[
289+ [3, 3, 3],
290+ [0, 10, 3],
291+ [0, 0, 3],
292+ ],
293+ name="dwp",
294+ visible=True,
295+ collidable=True,
296+ tags=["bsT"],
297+ ),
298+ "DYr": Sprite(
299+ pixels=[
300+ [2],
301+ [2],
302+ ],
303+ name="DYr",
304+ visible=True,
305+ collidable=True,
306+ ),
307+ "EEB": Sprite(
308+ pixels=[
309+ [8, 8],
310+ [8, 8],
311+ [9, 9],
312+ [9, 9],
313+ ],
314+ name="EEB",
315+ visible=True,
316+ collidable=True,
317+ ),
318+ "Eev": Sprite(
319+ pixels=[
320+ [2, 2, 2],
321+ [2, 2, 2],
322+ [2, 2, 2],
323+ ],
324+ name="Eev",
325+ visible=True,
326+ collidable=True,
327+ tags=["bsT"],
328+ ),
329+ "ejV": Sprite(
330+ pixels=[
331+ [8, 8],
332+ [8, 8],
333+ ],
334+ name="ejV",
335+ visible=True,
336+ collidable=True,
337+ ),
338+ "EQX": Sprite(
339+ pixels=[
340+ [0, 2, 0],
341+ [2, 12, 2],
342+ [0, 0, 2],
343+ ],
344+ name="EQX",
345+ visible=True,
346+ collidable=True,
347+ tags=["bsT"],
348+ ),
349+ "ewB": Sprite(
350+ pixels=[
351+ [6, 6, 6],
352+ [6, 7, 6],
353+ [6, 6, 6],
354+ ],
355+ name="ewB",
356+ visible=True,
357+ collidable=True,
358+ ),
359+ "ewH": Sprite(
360+ pixels=[
361+ [6, 7, 6],
362+ [7, 7, 7],
363+ [6, 7, 6],
364+ ],
365+ name="ewH",
366+ visible=True,
367+ collidable=True,
368+ ),
369+ "Ewx": Sprite(
370+ pixels=[
371+ [2, 0, 2],
372+ [0, 8, 0],
373+ [2, 0, 2],
374+ ],
375+ name="Ewx",
376+ visible=True,
377+ collidable=True,
378+ tags=["bsT"],
379+ ),
380+ "fBi": Sprite(
381+ pixels=[
382+ [8, 8],
383+ [8, 8],
384+ [12, 12],
385+ [12, 12],
386+ ],
387+ name="fBi",
388+ visible=True,
389+ collidable=True,
390+ ),
391+ "FfJ": Sprite(
392+ pixels=[
393+ [3, 0, 0],
394+ [3, 12, 0],
395+ [3, 0, 2],
396+ ],
397+ name="FfJ",
398+ visible=True,
399+ collidable=True,
400+ tags=["bsT"],
401+ ),
402+ "fjN": Sprite(
403+ pixels=[
404+ [0, 0, 0],
405+ [2, 8, 2],
406+ [2, 2, 2],
407+ ],
408+ name="fjN",
409+ visible=True,
410+ collidable=True,
411+ tags=["bsT"],
412+ ),
413+ "FLH": Sprite(
414+ pixels=[
415+ [2, 2, 2],
416+ [0, 15, 3],
417+ [3, 3, 3],
418+ ],
419+ name="FLH",
420+ visible=True,
421+ collidable=True,
422+ tags=["bsT"],
423+ ),
424+ "fPj": Sprite(
425+ pixels=[
426+ [0, 2, 0],
427+ [2, 14, 2],
428+ [0, 3, 0],
429+ ],
430+ name="fPj",
431+ visible=True,
432+ collidable=True,
433+ tags=["bsT"],
434+ ),
435+ "Fpw": Sprite(
436+ pixels=[
437+ [6, 7, 6],
438+ [7, 7, 7],
439+ [6, 7, 6],
440+ ],
441+ name="Fpw",
442+ visible=True,
443+ collidable=True,
444+ ),
445+ "FRs": Sprite(
446+ pixels=[
447+ [3, 2, 2],
448+ [0, 11, 0],
449+ [3, 2, 3],
450+ ],
451+ name="FRs",
452+ visible=True,
453+ collidable=True,
454+ tags=["bsT"],
455+ ),
456+ "fsp": Sprite(
457+ pixels=[
458+ [7, 7, 6],
459+ [7, 10, 7],
460+ [6, 7, 7],
461+ ],
462+ name="fsp",
463+ visible=True,
464+ collidable=True,
465+ tags=["NTi", "gOi"],
466+ ),
467+ "fTG": Sprite(
468+ pixels=[
469+ [6, 6, 6],
470+ [7, 6, 7],
471+ [6, 6, 6],
472+ ],
473+ name="fTG",
474+ visible=True,
475+ collidable=True,
476+ ),
477+ "FvN": Sprite(
478+ pixels=[
479+ [3, 0, 0],
480+ [2, 9, 2],
481+ [3, 0, 0],
482+ ],
483+ name="FvN",
484+ visible=True,
485+ collidable=True,
486+ tags=["bsT"],
487+ ),
488+ "gdG": Sprite(
489+ pixels=[
490+ [0, 2, 2],
491+ [2, 8, 2],
492+ [2, 2, 2],
493+ ],
494+ name="gdG",
495+ visible=True,
496+ collidable=True,
497+ tags=["bsT"],
498+ ),
499+ "gFd": Sprite(
500+ pixels=[
501+ [14, 14],
502+ [14, 14],
503+ ],
504+ name="gFd",
505+ visible=True,
506+ collidable=True,
507+ ),
508+ "guB": Sprite(
509+ pixels=[
510+ [3, 2, 3],
511+ [0, 11, 0],
512+ [3, 2, 3],
513+ ],
514+ name="guB",
515+ visible=True,
516+ collidable=True,
517+ tags=["bsT"],
518+ ),
519+ "gYF": Sprite(
520+ pixels=[
521+ [12, 12],
522+ [12, 12],
523+ ],
524+ name="gYF",
525+ visible=True,
526+ collidable=True,
527+ ),
528+ "GYn": Sprite(
529+ pixels=[
530+ [0, 2, 2],
531+ [2, 9, 2],
532+ [0, 2, 2],
533+ ],
534+ name="GYn",
535+ visible=True,
536+ collidable=True,
537+ tags=["bsT"],
538+ ),
539+ "hGV": Sprite(
540+ pixels=[
541+ [3, 3, 2],
542+ [3, 12, 0],
543+ [2, 0, 2],
544+ ],
545+ name="hGV",
546+ visible=True,
547+ collidable=True,
548+ tags=["bsT"],
549+ ),
550+ "hIX": Sprite(
551+ pixels=[
552+ [0, 0, 0],
553+ [3, 14, 0],
554+ [3, 3, 3],
555+ ],
556+ name="hIX",
557+ visible=True,
558+ collidable=True,
559+ tags=["bsT"],
560+ ),
561+ "Hkx": Sprite(
562+ pixels=[
563+ [9, 9, 9],
564+ [9, 9, 9],
565+ [9, 9, 9],
566+ ],
567+ name="Hkx",
568+ visible=True,
569+ collidable=True,
570+ tags=["Hkx", "gOi"],
571+ ),
572+ "htK": Sprite(
573+ pixels=[
574+ [8, 8],
575+ [8, 8],
576+ ],
577+ name="htK",
578+ visible=True,
579+ collidable=True,
580+ ),
581+ "IFI": Sprite(
582+ pixels=[
583+ [3, 2, 0],
584+ [3, 15, 2],
585+ [3, 2, 0],
586+ ],
587+ name="IFI",
588+ visible=True,
589+ collidable=True,
590+ tags=["bsT"],
591+ ),
592+ "ImU": Sprite(
593+ pixels=[
594+ [6, 7, 7],
595+ [7, 10, 7],
596+ [7, 7, 7],
597+ ],
598+ name="ImU",
599+ visible=True,
600+ collidable=True,
601+ tags=["NTi", "gOi"],
602+ ),
603+ "iSM": Sprite(
604+ pixels=[
605+ [2, 2, 2],
606+ [2, 2, 2],
607+ [2, 2, 2],
608+ ],
609+ name="iSM",
610+ visible=True,
611+ collidable=True,
612+ tags=["bsT"],
613+ ),
614+ "iTO": Sprite(
615+ pixels=[
616+ [6, 6, 6],
617+ [6, 7, 6],
618+ [6, 6, 7],
619+ ],
620+ name="iTO",
621+ visible=True,
622+ collidable=True,
623+ ),
624+ "iVf": Sprite(
625+ pixels=[
626+ [3, 3, 3],
627+ [3, 9, 2],
628+ [3, 0, 2],
629+ ],
630+ name="iVf",
631+ visible=True,
632+ collidable=True,
633+ tags=["bsT"],
634+ ),
635+ "jGI": Sprite(
636+ pixels=[
637+ [0, 2, 2],
638+ [0, 12, 0],
639+ [0, 2, 0],
640+ ],
641+ name="jGI",
642+ visible=True,
643+ collidable=True,
644+ tags=["bsT"],
645+ ),
646+ "Jir": Sprite(
647+ pixels=[
648+ [9, 9],
649+ [9, 9],
650+ ],
651+ name="Jir",
652+ visible=True,
653+ collidable=True,
654+ ),
655+ "jqz": Sprite(
656+ pixels=[
657+ [2, 0, 0],
658+ [3, 12, 2],
659+ [3, 3, 3],
660+ ],
661+ name="jqz",
662+ visible=True,
663+ collidable=True,
664+ tags=["bsT"],
665+ ),
666+ "jRD": Sprite(
667+ pixels=[
668+ [3, 2, 3],
669+ [0, 11, 0],
670+ [3, 2, 3],
671+ ],
672+ name="jRD",
673+ visible=True,
674+ collidable=True,
675+ tags=["bsT"],
676+ ),
677+ "jsT": Sprite(
678+ pixels=[
679+ [14, 14],
680+ [14, 14],
681+ ],
682+ name="jsT",
683+ visible=True,
684+ collidable=True,
685+ ),
686+ "KBg": Sprite(
687+ pixels=[
688+ [2, 2, 3],
689+ [0, 8, 0],
690+ [2, 2, 3],
691+ ],
692+ name="KBg",
693+ visible=True,
694+ collidable=True,
695+ tags=["bsT"],
696+ ),
697+ "kEq": Sprite(
698+ pixels=[
699+ [0, 0, 2],
700+ [2, 9, 2],
701+ [2, 2, 2],
702+ ],
703+ name="kEq",
704+ visible=True,
705+ collidable=True,
706+ tags=["bsT"],
707+ ),
708+ "kJY": Sprite(
709+ pixels=[
710+ [9, 9],
711+ [9, 9],
712+ ],
713+ name="kJY",
714+ visible=True,
715+ collidable=True,
716+ ),
717+ "KOm": Sprite(
718+ pixels=[
719+ [2, 0, 3],
720+ [0, 9, 3],
721+ [2, 0, 3],
722+ ],
723+ name="KOm",
724+ visible=True,
725+ collidable=True,
726+ tags=["bsT"],
727+ ),
728+ "KpR": Sprite(
729+ pixels=[
730+ [3, 0, 3],
731+ [3, 11, 2],
732+ [3, 0, 3],
733+ ],
734+ name="KpR",
735+ visible=True,
736+ collidable=True,
737+ tags=["bsT"],
738+ ),
739+ "KrW": Sprite(
740+ pixels=[
741+ [2, 0, 2],
742+ [2, 12, 2],
743+ [2, 2, 2],
744+ ],
745+ name="KrW",
746+ visible=True,
747+ collidable=True,
748+ tags=["bsT"],
749+ ),
750+ "kUt": Sprite(
751+ pixels=[
752+ [9, 9],
753+ [9, 9],
754+ ],
755+ name="kUt",
756+ visible=True,
757+ collidable=True,
758+ ),
759+ "kvt": Sprite(
760+ pixels=[
761+ [2, 0, 0],
762+ [0, 14, 0],
763+ [2, 0, 2],
764+ ],
765+ name="kvt",
766+ visible=True,
767+ collidable=False,
768+ tags=["bsT"],
769+ ),
770+ "kyg": Sprite(
771+ pixels=[
772+ [3, 0, 3],
773+ [2, 11, 2],
774+ [3, 0, 3],
775+ ],
776+ name="kyg",
777+ visible=True,
778+ collidable=False,
779+ tags=["bsT"],
780+ ),
781+ "KYk": Sprite(
782+ pixels=[
783+ [0, 0, 0],
784+ [0, 12, 2],
785+ [2, 0, 2],
786+ ],
787+ name="KYk",
788+ visible=True,
789+ collidable=True,
790+ tags=["bsT"],
791+ ),
792+ "LDC": Sprite(
793+ pixels=[
794+ [2, 2, 2],
795+ [2, 12, 2],
796+ [2, 0, 2],
797+ ],
798+ name="LDC",
799+ visible=True,
800+ collidable=True,
801+ tags=["bsT"],
802+ ),
803+ "LfP": Sprite(
804+ pixels=[
805+ [2, 0, 2],
806+ [2, 8, 0],
807+ [2, 2, 2],
808+ ],
809+ name="LfP",
810+ visible=True,
811+ collidable=True,
812+ tags=["bsT"],
813+ ),
814+ "LgL": Sprite(
815+ pixels=[
816+ [12, 12],
817+ [12, 12],
818+ [9, 9],
819+ [9, 9],
820+ ],
821+ name="LgL",
822+ visible=True,
823+ collidable=True,
824+ ),
825+ "LIx": Sprite(
826+ pixels=[
827+ [3, 0, 3],
828+ [0, 11, 2],
829+ [3, 2, 3],
830+ ],
831+ name="LIx",
832+ visible=True,
833+ collidable=True,
834+ tags=["bsT"],
835+ ),
836+ "lMN": Sprite(
837+ pixels=[
838+ [2, 0, 2],
839+ [2, 12, 2],
840+ [2, 0, 2],
841+ ],
842+ name="lMN",
843+ visible=True,
844+ collidable=True,
845+ tags=["bsT"],
846+ ),
847+ "LRU": Sprite(
848+ pixels=[
849+ [15, 15],
850+ [15, 15],
851+ ],
852+ name="LRU",
853+ visible=True,
854+ collidable=True,
855+ ),
856+ "Lua": Sprite(
857+ pixels=[
858+ [0, 0, 3],
859+ [2, 14, 3],
860+ [0, 2, 3],
861+ ],
862+ name="Lua",
863+ visible=True,
864+ collidable=True,
865+ tags=["bsT"],
866+ ),
867+ "lVU": Sprite(
868+ pixels=[
869+ [0, -1, 0, -1, 0],
870+ ],
871+ name="lVU",
872+ visible=True,
873+ collidable=True,
874+ ),
875+ "Lzf": Sprite(
876+ pixels=[
877+ [2, 2, 0],
878+ [2, 9, 2],
879+ [2, 2, 2],
880+ ],
881+ name="Lzf",
882+ visible=True,
883+ collidable=True,
884+ tags=["bsT"],
885+ ),
886+ "MEF": Sprite(
887+ pixels=[
888+ [2, 0, 2],
889+ [0, 8, 0],
890+ [2, 0, 2],
891+ ],
892+ name="MEF",
893+ visible=True,
894+ collidable=True,
895+ ),
896+ "mnE": Sprite(
897+ pixels=[
898+ [3, 3, 3],
899+ [3, 12, 0],
900+ [2, 2, 3],
901+ ],
902+ name="mnE",
903+ visible=True,
904+ collidable=True,
905+ tags=["bsT"],
906+ ),
907+ "mrc": Sprite(
908+ pixels=[
909+ [2, 0, 2],
910+ [2, 9, 2],
911+ [2, 2, 2],
912+ ],
913+ name="mrc",
914+ visible=True,
915+ collidable=True,
916+ tags=["bsT"],
917+ ),
918+ "mTg": Sprite(
919+ pixels=[
920+ [2, 0, 0],
921+ [2, 9, 2],
922+ [2, 2, 2],
923+ ],
924+ name="mTg",
925+ visible=True,
926+ collidable=True,
927+ tags=["bsT"],
928+ ),
929+ "MTx": Sprite(
930+ pixels=[
931+ [8, 8],
932+ [8, 8],
933+ ],
934+ name="MTx",
935+ visible=True,
936+ collidable=True,
937+ ),
938+ "ndN": Sprite(
939+ pixels=[
940+ [2, 0, 2],
941+ [0, 8, 0],
942+ [2, 2, 2],
943+ ],
944+ name="ndN",
945+ visible=True,
946+ collidable=True,
947+ tags=["bsT"],
948+ ),
949+ "NGA": Sprite(
950+ pixels=[
951+ [3, 3, 3],
952+ [3, 15, 0],
953+ [2, 2, 0],
954+ ],
955+ name="NGA",
956+ visible=True,
957+ collidable=True,
958+ tags=["bsT"],
959+ ),
960+ "nGy": Sprite(
961+ pixels=[
962+ [12, 12],
963+ [12, 12],
964+ [8, 8],
965+ [8, 8],
966+ ],
967+ name="nGy",
968+ visible=True,
969+ collidable=True,
970+ ),
971+ "nkM": Sprite(
972+ pixels=[
973+ [3, 2, 3],
974+ [2, 11, 2],
975+ [3, 2, 3],
976+ ],
977+ name="nkM",
978+ visible=True,
979+ collidable=True,
980+ tags=["bsT"],
981+ ),
982+ "Nod": Sprite(
983+ pixels=[
984+ [2],
985+ ],
986+ name="Nod",
987+ visible=True,
988+ collidable=True,
989+ ),
990+ "NTi": Sprite(
991+ pixels=[
992+ [7, 6, 7],
993+ [6, 10, 6],
994+ [7, 6, 7],
995+ ],
996+ name="NTi",
997+ visible=True,
998+ collidable=True,
999+ tags=["NTi", "gOi"],
1000+ ),
1001+ "Nul": Sprite(
1002+ pixels=[
1003+ [3, 3, 3],
1004+ [3, 14, 0],
1005+ [3, 0, 2],
1006+ ],
1007+ name="Nul",
1008+ visible=True,
1009+ collidable=True,
1010+ tags=["bsT"],
1011+ ),
1012+ "OFC": Sprite(
1013+ pixels=[
1014+ [12, 12],
1015+ [12, 12],
1016+ ],
1017+ name="OFC",
1018+ visible=True,
1019+ collidable=True,
1020+ ),
1021+ "oif": Sprite(
1022+ pixels=[
1023+ [0, 0, 0],
1024+ [3, 10, 3],
1025+ [3, 3, 3],
1026+ ],
1027+ name="oif",
1028+ visible=True,
1029+ collidable=True,
1030+ tags=["bsT"],
1031+ ),
1032+ "OqR": Sprite(
1033+ pixels=[
1034+ [2, 0, 3],
1035+ [0, 8, 3],
1036+ [2, 0, 3],
1037+ ],
1038+ name="OqR",
1039+ visible=True,
1040+ collidable=True,
1041+ tags=["bsT"],
1042+ ),
1043+ "OZL": Sprite(
1044+ pixels=[
1045+ [0, 2, 0],
1046+ [2, 12, 2],
1047+ [0, 2, 0],
1048+ ],
1049+ name="OZL",
1050+ visible=True,
1051+ collidable=True,
1052+ tags=["bsT"],
1053+ ),
1054+ "PjS": Sprite(
1055+ pixels=[
1056+ [2, 0, 2],
1057+ [0, 14, 0],
1058+ [0, 0, 2],
1059+ ],
1060+ name="PjS",
1061+ visible=True,
1062+ collidable=False,
1063+ tags=["bsT"],
1064+ ),
1065+ "PmE": Sprite(
1066+ pixels=[
1067+ [2, 0, 3],
1068+ [0, 14, 3],
1069+ [3, 3, 3],
1070+ ],
1071+ name="PmE",
1072+ visible=True,
1073+ collidable=True,
1074+ tags=["bsT"],
1075+ ),
1076+ "PrU": Sprite(
1077+ pixels=[
1078+ [8, 8],
1079+ [8, 8],
1080+ ],
1081+ name="PrU",
1082+ visible=True,
1083+ collidable=True,
1084+ ),
1085+ "PRx": Sprite(
1086+ pixels=[
1087+ [0, 0, 0],
1088+ [0, -1, 0],
1089+ [0, 0, 0],
1090+ ],
1091+ name="PRx",
1092+ visible=True,
1093+ collidable=True,
1094+ tags=["bsT"],
1095+ ),
1096+ "pvc": Sprite(
1097+ pixels=[
1098+ [0, 0, 0],
1099+ [0, 8, 0],
1100+ [0, 0, 0],
1101+ ],
1102+ name="pvc",
1103+ visible=True,
1104+ collidable=True,
1105+ tags=["bsT"],
1106+ ),
1107+ "QBc": Sprite(
1108+ pixels=[
1109+ [0, 2, 2],
1110+ [2, 9, 2],
1111+ [0, 0, 2],
1112+ ],
1113+ name="QBc",
1114+ visible=True,
1115+ collidable=True,
1116+ tags=["bsT"],
1117+ ),
1118+ "QpB": Sprite(
1119+ pixels=[
1120+ [9, 9],
1121+ [9, 9],
1122+ ],
1123+ name="QpB",
1124+ visible=True,
1125+ collidable=True,
1126+ ),
1127+ "qpe": Sprite(
1128+ pixels=[
1129+ [9, 9],
1130+ [9, 9],
1131+ ],
1132+ name="qpe",
1133+ visible=True,
1134+ collidable=True,
1135+ ),
1136+ "qqM": Sprite(
1137+ pixels=[
1138+ [2, 3, 2],
1139+ [0, 14, 0],
1140+ [2, 0, 2],
1141+ ],
1142+ name="qqM",
1143+ visible=True,
1144+ collidable=True,
1145+ tags=["bsT"],
1146+ ),
1147+ "qqX": Sprite(
1148+ pixels=[
1149+ [0, 2, 2],
1150+ [0, 8, 0],
1151+ [2, 2, 0],
1152+ ],
1153+ name="qqX",
1154+ visible=True,
1155+ collidable=True,
1156+ ),
1157+ "RBv": Sprite(
1158+ pixels=[
1159+ [0, 0, 2],
1160+ [0, 14, 0],
1161+ [3, 3, 3],
1162+ ],
1163+ name="RBv",
1164+ visible=True,
1165+ collidable=True,
1166+ tags=["bsT"],
1167+ ),
1168+ "REY": Sprite(
1169+ pixels=[
1170+ [10, 10],
1171+ [10, 10],
1172+ ],
1173+ name="REY",
1174+ visible=True,
1175+ collidable=True,
1176+ ),
1177+ "RjR": Sprite(
1178+ pixels=[
1179+ [2, 0, 2],
1180+ [0, 9, 2],
1181+ [0, 2, 0],
1182+ ],
1183+ name="RjR",
1184+ visible=True,
1185+ collidable=True,
1186+ tags=["bsT"],
1187+ ),
1188+ "rKF": Sprite(
1189+ pixels=[
1190+ [2, 0, 2],
1191+ [2, 8, 2],
1192+ [2, 2, 2],
1193+ ],
1194+ name="rKF",
1195+ visible=True,
1196+ collidable=True,
1197+ tags=["bsT"],
1198+ ),
1199+ "rni": Sprite(
1200+ pixels=[
1201+ [-1, -1, -1, -1, 15, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1],
1202+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1203+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1204+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1205+ [10, -1, -1, -1, 14, -1, -1, -1, 15, -1, -1, -1, -1, -1, -1, -1, -1],
1206+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1207+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1208+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1209+ [15, -1, -1, -1, 10, -1, -1, -1, 14, -1, -1, -1, 15, -1, -1, -1, -1],
1210+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1211+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1212+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1213+ [-1, -1, -1, -1, 15, -1, -1, -1, 10, -1, -1, -1, 14, -1, -1, -1, -1],
1214+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1215+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1216+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1217+ [-1, -1, -1, -1, 14, -1, -1, -1, 15, -1, -1, -1, 10, -1, -1, -1, 14],
1218+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1219+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1220+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1221+ [-1, -1, -1, -1, -1, -1, -1, -1, 14, -1, -1, -1, 15, -1, -1, -1, 10],
1222+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1223+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1224+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1225+ [-1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, 14, -1, -1, -1, -1],
1226+ ],
1227+ name="rni",
1228+ visible=True,
1229+ collidable=True,
1230+ ),
1231+ "ROc": Sprite(
1232+ pixels=[
1233+ [3, 0, 2],
1234+ [3, 9, 0],
1235+ [3, 3, 3],
1236+ ],
1237+ name="ROc",
1238+ visible=True,
1239+ collidable=True,
1240+ tags=["bsT"],
1241+ ),
1242+ "RZR": Sprite(
1243+ pixels=[
1244+ [2],
1245+ ],
1246+ name="RZR",
1247+ visible=True,
1248+ collidable=True,
1249+ ),
1250+ "seE": Sprite(
1251+ pixels=[
1252+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1253+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1254+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1255+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1256+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1257+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1258+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1259+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1260+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1261+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1262+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1263+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1264+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1265+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1266+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5],
1267+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
1268+ ],
1269+ name="seE",
1270+ visible=True,
1271+ collidable=False,
1272+ ),
1273+ "SfD": Sprite(
1274+ pixels=[
1275+ [2, 0, 3],
1276+ [0, 14, 3],
1277+ [2, 0, 3],
1278+ ],
1279+ name="SfD",
1280+ visible=True,
1281+ collidable=True,
1282+ tags=["bsT"],
1283+ ),
1284+ "SJP": Sprite(
1285+ pixels=[
1286+ [0, 2, 0],
1287+ [0, 8, 2],
1288+ [2, 0, 2],
1289+ ],
1290+ name="SJP",
1291+ visible=True,
1292+ collidable=True,
1293+ tags=["bsT"],
1294+ ),
1295+ "sPz": Sprite(
1296+ pixels=[
1297+ [0, 0, 2],
1298+ [2, 8, 2],
1299+ [2, 2, 2],
1300+ ],
1301+ name="sPz",
1302+ visible=True,
1303+ collidable=True,
1304+ tags=["bsT"],
1305+ ),
1306+ "srH": Sprite(
1307+ pixels=[
1308+ [3, 0, 3],
1309+ [0, 11, 2],
1310+ [3, 2, 3],
1311+ ],
1312+ name="srH",
1313+ visible=True,
1314+ collidable=True,
1315+ tags=["bsT"],
1316+ ),
1317+ "ssK": Sprite(
1318+ pixels=[
1319+ [3, 3, 3],
1320+ [2, 14, 3],
1321+ [0, 0, 2],
1322+ ],
1323+ name="ssK",
1324+ visible=True,
1325+ collidable=False,
1326+ tags=["bsT"],
1327+ ),
1328+ "sTI": Sprite(
1329+ pixels=[
1330+ [2, 2, 2],
1331+ [2, 9, 0],
1332+ [2, 2, 2],
1333+ ],
1334+ name="sTI",
1335+ visible=True,
1336+ collidable=True,
1337+ ),
1338+ "sxj": Sprite(
1339+ pixels=[
1340+ [2, 0, 2],
1341+ [0, 8, 2],
1342+ [2, 0, 0],
1343+ ],
1344+ name="sxj",
1345+ visible=True,
1346+ collidable=True,
1347+ ),
1348+ "SXM": Sprite(
1349+ pixels=[
1350+ [2, 0, 2],
1351+ [2, 8, 0],
1352+ [0, 0, 2],
1353+ ],
1354+ name="SXM",
1355+ visible=True,
1356+ collidable=True,
1357+ tags=["bsT"],
1358+ ),
1359+ "tCT": Sprite(
1360+ pixels=[
1361+ [2, 0, 2],
1362+ [0, 9, 2],
1363+ [2, 2, 2],
1364+ ],
1365+ name="tCT",
1366+ visible=True,
1367+ collidable=True,
1368+ tags=["bsT"],
1369+ ),
1370+ "TOK": Sprite(
1371+ pixels=[
1372+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1373+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1374+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1375+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1376+ [8, 8, 8, -1, -1, -1, -1, -1, 8, 8, 8],
1377+ [8, 8, 8, -1, -1, -1, -1, -1, 8, 8, 8],
1378+ [8, 8, 8, -1, -1, -1, -1, -1, 8, 8, 8],
1379+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1380+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1381+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1382+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1383+ ],
1384+ name="TOK",
1385+ visible=True,
1386+ collidable=False,
1387+ ),
1388+ "TqS": Sprite(
1389+ pixels=[
1390+ [2, -1, 2],
1391+ ],
1392+ name="TqS",
1393+ visible=True,
1394+ collidable=True,
1395+ ),
1396+ "TqV": Sprite(
1397+ pixels=[
1398+ [0, 2, 2],
1399+ [0, 8, 2],
1400+ [2, 2, 2],
1401+ ],
1402+ name="TqV",
1403+ visible=True,
1404+ collidable=True,
1405+ tags=["bsT"],
1406+ ),
1407+ "TuS": Sprite(
1408+ pixels=[
1409+ [3, 3, 3],
1410+ [0, 14, 2],
1411+ [0, 0, 0],
1412+ ],
1413+ name="TuS",
1414+ visible=True,
1415+ collidable=True,
1416+ tags=["bsT"],
1417+ ),
1418+ "uaD": Sprite(
1419+ pixels=[
1420+ [3, 0, 3],
1421+ [0, 11, 2],
1422+ [3, 2, 3],
1423+ ],
1424+ name="uaD",
1425+ visible=True,
1426+ collidable=True,
1427+ tags=["bsT"],
1428+ ),
1429+ "UaS": Sprite(
1430+ pixels=[
1431+ [2, 2, 0],
1432+ [2, 9, 2],
1433+ [2, 0, 0],
1434+ ],
1435+ name="UaS",
1436+ visible=True,
1437+ collidable=True,
1438+ tags=["bsT"],
1439+ ),
1440+ "uCD": Sprite(
1441+ pixels=[
1442+ [6],
1443+ ],
1444+ name="uCD",
1445+ visible=True,
1446+ collidable=True,
1447+ ),
1448+ "uCe": Sprite(
1449+ pixels=[
1450+ [0, 2, 2],
1451+ [2, 12, 2],
1452+ [0, 0, 0],
1453+ ],
1454+ name="uCe",
1455+ visible=True,
1456+ collidable=True,
1457+ tags=["bsT"],
1458+ ),
1459+ "uDP": Sprite(
1460+ pixels=[
1461+ [2, 2, 2],
1462+ [2, 9, 2],
1463+ [0, 2, 2],
1464+ ],
1465+ name="uDP",
1466+ visible=True,
1467+ collidable=True,
1468+ tags=["bsT"],
1469+ ),
1470+ "uds": Sprite(
1471+ pixels=[
1472+ [2, 0, 2],
1473+ [2, 12, 0],
1474+ [2, 0, 2],
1475+ ],
1476+ name="uds",
1477+ visible=True,
1478+ collidable=True,
1479+ tags=["bsT"],
1480+ ),
1481+ "UdT": Sprite(
1482+ pixels=[
1483+ [2, 2, 0],
1484+ [2, 8, 2],
1485+ [0, 0, 2],
1486+ ],
1487+ name="UdT",
1488+ visible=True,
1489+ collidable=True,
1490+ tags=["bsT"],
1491+ ),
1492+ "UEq": Sprite(
1493+ pixels=[
1494+ [2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 2],
1495+ [2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2],
1496+ [2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2],
1497+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1498+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1499+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1500+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1501+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1502+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1503+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1504+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1505+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1506+ [2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2],
1507+ [2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2],
1508+ [2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 2],
1509+ ],
1510+ name="UEq",
1511+ visible=True,
1512+ collidable=False,
1513+ tags=["Ycb"],
1514+ ),
1515+ "UEt": Sprite(
1516+ pixels=[
1517+ [7, 7, 7],
1518+ [6, 7, 6],
1519+ [6, 6, 6],
1520+ ],
1521+ name="UEt",
1522+ visible=True,
1523+ collidable=True,
1524+ ),
1525+ "uJY": Sprite(
1526+ pixels=[
1527+ [5],
1528+ ],
1529+ name="uJY",
1530+ visible=True,
1531+ collidable=True,
1532+ ),
1533+ "ukF": Sprite(
1534+ pixels=[
1535+ [3, 0, 2],
1536+ [2, 12, 0],
1537+ [2, 2, 0],
1538+ ],
1539+ name="ukF",
1540+ visible=True,
1541+ collidable=True,
1542+ tags=["bsT"],
1543+ ),
1544+ "ukY": Sprite(
1545+ pixels=[
1546+ [3, 2, 3],
1547+ [0, 11, 0],
1548+ [3, 2, 3],
1549+ ],
1550+ name="ukY",
1551+ visible=True,
1552+ collidable=False,
1553+ tags=["bsT"],
1554+ ),
1555+ "UmB": Sprite(
1556+ pixels=[
1557+ [6, -1, 6],
1558+ ],
1559+ name="UmB",
1560+ visible=True,
1561+ collidable=True,
1562+ ),
1563+ "uPr": Sprite(
1564+ pixels=[
1565+ [11],
1566+ ],
1567+ name="uPr",
1568+ visible=True,
1569+ collidable=True,
1570+ ),
1571+ "UQj": Sprite(
1572+ pixels=[
1573+ [2, 2, 2],
1574+ [0, 8, 2],
1575+ [2, 0, 2],
1576+ ],
1577+ name="UQj",
1578+ visible=True,
1579+ collidable=True,
1580+ tags=["bsT"],
1581+ ),
1582+ "UsM": Sprite(
1583+ pixels=[
1584+ [0],
1585+ ],
1586+ name="UsM",
1587+ visible=True,
1588+ collidable=True,
1589+ ),
1590+ "UTh": Sprite(
1591+ pixels=[
1592+ [2, 2, 2],
1593+ [2, 8, 0],
1594+ [2, 2, 0],
1595+ ],
1596+ name="UTh",
1597+ visible=True,
1598+ collidable=True,
1599+ tags=["bsT"],
1600+ ),
1601+ "uvy": Sprite(
1602+ pixels=[
1603+ [2, 2, 2],
1604+ [2, 2, 2],
1605+ [2, 2, 2],
1606+ ],
1607+ name="uvy",
1608+ visible=True,
1609+ collidable=True,
1610+ tags=["bsT"],
1611+ ),
1612+ "Uxp": Sprite(
1613+ pixels=[
1614+ [2, 2, 2],
1615+ [2, 8, 2],
1616+ [0, 2, 2],
1617+ ],
1618+ name="Uxp",
1619+ visible=True,
1620+ collidable=True,
1621+ tags=["bsT"],
1622+ ),
1623+ "vAD": Sprite(
1624+ pixels=[
1625+ [-1, -1, 6, -1, -1],
1626+ [-1, -1, -1, -1, -1],
1627+ [6, -1, -1, -1, 6],
1628+ [-1, -1, -1, -1, -1],
1629+ [-1, -1, 6, -1, -1],
1630+ ],
1631+ name="vAD",
1632+ visible=True,
1633+ collidable=True,
1634+ ),
1635+ "van": Sprite(
1636+ pixels=[
1637+ [2, 2, 2],
1638+ [2, 2, 2],
1639+ [2, 2, 2],
1640+ ],
1641+ name="van",
1642+ visible=True,
1643+ collidable=True,
1644+ tags=["bsT"],
1645+ ),
1646+ "VdJ": Sprite(
1647+ pixels=[
1648+ [2, 2, 2],
1649+ [0, 9, 2],
1650+ [2, 2, 0],
1651+ ],
1652+ name="VdJ",
1653+ visible=True,
1654+ collidable=True,
1655+ ),
1656+ "vFj": Sprite(
1657+ pixels=[
1658+ [2, 0, 2],
1659+ [2, 8, 2],
1660+ [0, 2, 2],
1661+ ],
1662+ name="vFj",
1663+ visible=True,
1664+ collidable=True,
1665+ tags=["bsT"],
1666+ ),
1667+ "VHA": Sprite(
1668+ pixels=[
1669+ [11, 11],
1670+ [11, 11],
1671+ ],
1672+ name="VHA",
1673+ visible=True,
1674+ collidable=True,
1675+ ),
1676+ "viw": Sprite(
1677+ pixels=[
1678+ [12, 12],
1679+ [12, 12],
1680+ ],
1681+ name="viw",
1682+ visible=True,
1683+ collidable=True,
1684+ ),
1685+ "vSD": Sprite(
1686+ pixels=[
1687+ [2, 2, 2],
1688+ [2, 8, 0],
1689+ [0, 2, 0],
1690+ ],
1691+ name="vSD",
1692+ visible=True,
1693+ collidable=True,
1694+ tags=["bsT"],
1695+ ),
1696+ "Vuk": Sprite(
1697+ pixels=[
1698+ [7, 7, 6],
1699+ [7, 10, 7],
1700+ [7, 7, 7],
1701+ ],
1702+ name="Vuk",
1703+ visible=True,
1704+ collidable=True,
1705+ tags=["NTi", "gOi"],
1706+ ),
1707+ "vxk": Sprite(
1708+ pixels=[
1709+ [8, 8, 8, -1, 9, 9, 9, -1, 9, 9, 9],
1710+ [8, 8, 8, -1, 9, 9, 9, -1, 9, 9, 9],
1711+ [8, 8, 8, -1, 9, 9, 9, -1, 9, 9, 9],
1712+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1713+ [8, 8, 8, -1, -1, -1, -1, -1, 8, 8, 8],
1714+ [8, 8, 8, -1, -1, -1, -1, -1, 8, 8, 8],
1715+ [8, 8, 8, -1, -1, -1, -1, -1, 8, 8, 8],
1716+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1717+ [9, 9, 9, -1, 9, 9, 9, -1, 8, 8, 8],
1718+ [9, 9, 9, -1, 9, 9, 9, -1, 8, 8, 8],
1719+ [9, 9, 9, -1, 9, 9, 9, -1, 8, 8, 8],
1720+ ],
1721+ name="vxk",
1722+ visible=True,
1723+ collidable=False,
1724+ ),
1725+ "VxQ": Sprite(
1726+ pixels=[
1727+ [7, 7, 7],
1728+ [7, 10, 7],
1729+ [6, 7, 6],
1730+ ],
1731+ name="VxQ",
1732+ visible=True,
1733+ collidable=True,
1734+ tags=["NTi", "gOi"],
1735+ ),
1736+ "wai": Sprite(
1737+ pixels=[
1738+ [0, 2, 2],
1739+ [2, 8, 3],
1740+ [3, 3, 3],
1741+ ],
1742+ name="wai",
1743+ visible=True,
1744+ collidable=True,
1745+ tags=["bsT"],
1746+ ),
1747+ "WbH": Sprite(
1748+ pixels=[
1749+ [0, 2, 0],
1750+ [3, 12, 3],
1751+ [0, 3, 0],
1752+ ],
1753+ name="WbH",
1754+ visible=True,
1755+ collidable=True,
1756+ tags=["bsT"],
1757+ ),
1758+ "wCl": Sprite(
1759+ pixels=[
1760+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1761+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1762+ [9, 9, 9, -1, 8, 8, 8, -1, 9, 9, 9],
1763+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1764+ [8, 8, 8, -1, -1, -1, -1, -1, 9, 9, 9],
1765+ [8, 8, 8, -1, -1, -1, -1, -1, 9, 9, 9],
1766+ [8, 8, 8, -1, -1, -1, -1, -1, 9, 9, 9],
1767+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1768+ [9, 9, 9, -1, 8, 8, 8, -1, 8, 8, 8],
1769+ [9, 9, 9, -1, 8, 8, 8, -1, 8, 8, 8],
1770+ [9, 9, 9, -1, 8, 8, 8, -1, 8, 8, 8],
1771+ ],
1772+ name="wCl",
1773+ visible=True,
1774+ collidable=False,
1775+ ),
1776+ "WDx": Sprite(
1777+ pixels=[
1778+ [2, 2, 2],
1779+ [3, 8, 3],
1780+ [3, 3, 3],
1781+ ],
1782+ name="WDx",
1783+ visible=True,
1784+ collidable=True,
1785+ tags=["bsT"],
1786+ ),
1787+ "wmW": Sprite(
1788+ pixels=[
1789+ [0, 2, 2],
1790+ [0, 8, 0],
1791+ [0, 2, 2],
1792+ ],
1793+ name="wmW",
1794+ visible=True,
1795+ collidable=True,
1796+ tags=["bsT"],
1797+ ),
1798+ "wmz": Sprite(
1799+ pixels=[
1800+ [3, 0, 0],
1801+ [2, 11, 2],
1802+ [3, 3, 2],
1803+ ],
1804+ name="wmz",
1805+ visible=True,
1806+ collidable=True,
1807+ tags=["bsT"],
1808+ ),
1809+ "Wnw": Sprite(
1810+ pixels=[
1811+ [9, 9],
1812+ [9, 9],
1813+ [8, 8],
1814+ [8, 8],
1815+ ],
1816+ name="Wnw",
1817+ visible=True,
1818+ collidable=True,
1819+ ),
1820+ "Wpv": Sprite(
1821+ pixels=[
1822+ [3, 2, 2],
1823+ [0, 11, 0],
1824+ [3, 2, 3],
1825+ ],
1826+ name="Wpv",
1827+ visible=True,
1828+ collidable=True,
1829+ tags=["bsT"],
1830+ ),
1831+ "WQe": Sprite(
1832+ pixels=[
1833+ [2, 2, 0],
1834+ [2, 9, 2],
1835+ [0, 0, 0],
1836+ ],
1837+ name="WQe",
1838+ visible=True,
1839+ collidable=True,
1840+ tags=["bsT"],
1841+ ),
1842+ "xas": Sprite(
1843+ pixels=[
1844+ [2, 2, 2],
1845+ [2, 12, 2],
1846+ [0, 2, 0],
1847+ ],
1848+ name="xas",
1849+ visible=True,
1850+ collidable=True,
1851+ tags=["bsT"],
1852+ ),
1853+ "xeV": Sprite(
1854+ pixels=[
1855+ [6, 6, 6],
1856+ [6, 7, 6],
1857+ [6, 6, 6],
1858+ ],
1859+ name="xeV",
1860+ visible=True,
1861+ collidable=True,
1862+ ),
1863+ "xga": Sprite(
1864+ pixels=[
1865+ [3, 2, 3],
1866+ [0, 11, 0],
1867+ [3, 2, 3],
1868+ ],
1869+ name="xga",
1870+ visible=True,
1871+ collidable=False,
1872+ tags=["bsT"],
1873+ ),
1874+ "XND": Sprite(
1875+ pixels=[
1876+ [6, 7, 6],
1877+ [7, 10, 7],
1878+ [7, 7, 7],
1879+ ],
1880+ name="XND",
1881+ visible=True,
1882+ collidable=True,
1883+ tags=["NTi"],
1884+ ),
1885+ "XWQ": Sprite(
1886+ pixels=[
1887+ [2, 2, 2],
1888+ [2, 12, 2],
1889+ [2, 0, 2],
1890+ ],
1891+ name="XWQ",
1892+ visible=True,
1893+ collidable=True,
1894+ tags=["bsT"],
1895+ ),
1896+ "Yid": Sprite(
1897+ pixels=[
1898+ [6, 6, 6],
1899+ [7, 7, 7],
1900+ [6, 6, 6],
1901+ ],
1902+ name="Yid",
1903+ visible=True,
1904+ collidable=True,
1905+ ),
1906+ "yKt": Sprite(
1907+ pixels=[
1908+ [3, 0, 3],
1909+ [2, 11, 3],
1910+ [3, 0, 3],
1911+ ],
1912+ name="yKt",
1913+ visible=True,
1914+ collidable=True,
1915+ tags=["bsT"],
1916+ ),
1917+ "yUG": Sprite(
1918+ pixels=[
1919+ [3, 2, 3],
1920+ [0, 14, 0],
1921+ [3, 2, 3],
1922+ ],
1923+ name="yUG",
1924+ visible=True,
1925+ collidable=True,
1926+ tags=["bsT"],
1927+ ),
1928+ "Ywn": Sprite(
1929+ pixels=[
1930+ [14, 14],
1931+ [14, 14],
1932+ [15, 15],
1933+ [15, 15],
1934+ ],
1935+ name="Ywn",
1936+ visible=True,
1937+ collidable=True,
1938+ ),
1939+ "ywQ": Sprite(
1940+ pixels=[
1941+ [2, 2, 2],
1942+ [2, 9, 2],
1943+ [2, 2, 2],
1944+ ],
1945+ name="ywQ",
1946+ visible=True,
1947+ collidable=True,
1948+ tags=["bsT"],
1949+ ),
1950+ "yZg": Sprite(
1951+ pixels=[
1952+ [2, 0, 2],
1953+ [0, 14, 0],
1954+ [2, 0, 2],
1955+ ],
1956+ name="yZg",
1957+ visible=True,
1958+ collidable=True,
1959+ tags=["bsT"],
1960+ ),
1961+ "Zgh": Sprite(
1962+ pixels=[
1963+ [11, 11],
1964+ [11, 11],
1965+ ],
1966+ name="Zgh",
1967+ visible=True,
1968+ collidable=True,
1969+ ),
1970+ "zhI": Sprite(
1971+ pixels=[
1972+ [2, 2, 2],
1973+ [2, 9, 2],
1974+ [2, 2, 2],
1975+ ],
1976+ name="zhI",
1977+ visible=True,
1978+ collidable=True,
1979+ tags=["bsT"],
1980+ ),
1981+ "zIu": Sprite(
1982+ pixels=[
1983+ [3, 2, 3],
1984+ [0, 11, 0],
1985+ [3, 2, 3],
1986+ ],
1987+ name="zIu",
1988+ visible=True,
1989+ collidable=False,
1990+ tags=["bsT"],
1991+ ),
1992+ "ZkU": Sprite(
1993+ pixels=[
1994+ [7, 6, 7],
1995+ [7, 10, 7],
1996+ [7, 7, 7],
1997+ ],
1998+ name="ZkU",
1999+ visible=True,
2000+ collidable=True,
2001+ tags=["NTi", "gOi"],
2002+ ),
2003+ "zmT": Sprite(
2004+ pixels=[
2005+ [0, 2, 3],
2006+ [2, 12, 3],
2007+ [3, 3, 3],
2008+ ],
2009+ name="zmT",
2010+ visible=True,
2011+ collidable=True,
2012+ tags=["bsT"],
2013+ ),
2014+ "zoT": Sprite(
2015+ pixels=[
2016+ [6, 7, 7],
2017+ [7, 10, 7],
2018+ [7, 7, 6],
2019+ ],
2020+ name="zoT",
2021+ visible=True,
2022+ collidable=True,
2023+ tags=["NTi", "gOi"],
2024+ ),
2025+ "zvj": Sprite(
2026+ pixels=[
2027+ [2, 0, 0],
2028+ [2, 8, 2],
2029+ [2, 2, 2],
2030+ ],
2031+ name="zvj",
2032+ visible=True,
2033+ collidable=True,
2034+ tags=["bsT"],
2035+ ),
2036+}
2037+
2038+levels = [
2039+ # THR
2040+ Level(
2041+ sprites=[
2042+ sprites["cgN"].clone().set_position(0, 14),
2043+ sprites["dvQ"].clone(),
2044+ sprites["Hkx"].clone().set_position(18, 18),
2045+ sprites["Hkx"].clone().set_position(22, 18),
2046+ sprites["Hkx"].clone().set_position(26, 18),
2047+ sprites["Hkx"].clone().set_position(18, 22),
2048+ sprites["Hkx"].clone().set_position(26, 22),
2049+ sprites["Hkx"].clone().set_position(18, 26),
2050+ sprites["Hkx"].clone().set_position(22, 26),
2051+ sprites["Hkx"].clone().set_position(26, 26),
2052+ sprites["MEF"].clone().set_position(23, 5),
2053+ sprites["qqX"].clone().set_position(6, 22),
2054+ sprites["seE"].clone().set_position(16, 16),
2055+ sprites["sxj"].clone().set_position(6, 5),
2056+ sprites["TOK"].clone().set_position(19, 1),
2057+ sprites["UEq"].clone().set_position(16, 16),
2058+ sprites["vxk"].clone().set_position(2, 18),
2059+ sprites["wCl"].clone().set_position(2, 1),
2060+ sprites["wmW"].clone().set_position(22, 22),
2061+ ],
2062+ grid_size=(32, 32),
2063+ data={
2064+ "kCv": 32,
2065+ "cwU": [9, 8],
2066+ "elp": [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
2067+ },
2068+ name="THR",
2069+ ),
2070+ # hxv
2071+ Level(
2072+ sprites=[
2073+ sprites["EQX"].clone().set_position(14, 19),
2074+ sprites["Hkx"].clone().set_position(10, 7),
2075+ sprites["Hkx"].clone().set_position(14, 7),
2076+ sprites["Hkx"].clone().set_position(18, 7),
2077+ sprites["Hkx"].clone().set_position(10, 11),
2078+ sprites["Hkx"].clone().set_position(18, 11),
2079+ sprites["Hkx"].clone().set_position(10, 15),
2080+ sprites["Hkx"].clone().set_position(14, 15),
2081+ sprites["Hkx"].clone().set_position(18, 15),
2082+ sprites["Hkx"].clone().set_position(18, 19),
2083+ sprites["Hkx"].clone().set_position(14, 23),
2084+ sprites["Hkx"].clone().set_position(10, 23),
2085+ sprites["Hkx"].clone().set_position(10, 19),
2086+ sprites["Hkx"].clone().set_position(18, 23),
2087+ sprites["jGI"].clone().set_position(14, 11),
2088+ sprites["qpe"].clone().set_position(30, 0),
2089+ sprites["viw"].clone().set_position(30, 2),
2090+ ],
2091+ grid_size=(32, 32),
2092+ data={
2093+ "kCv": 32,
2094+ "cwU": [9, 12],
2095+ "elp": [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
2096+ },
2097+ name="hxv",
2098+ ),
2099+ # Fmh
2100+ Level(
2101+ sprites=[
2102+ sprites["APy"].clone().set_position(18, 14),
2103+ sprites["dta"].clone().set_position(14, 22),
2104+ sprites["fBi"].clone().set_position(30, 0),
2105+ sprites["Hkx"].clone().set_position(10, 2),
2106+ sprites["Hkx"].clone().set_position(10, 6),
2107+ sprites["Hkx"].clone().set_position(10, 10),
2108+ sprites["Hkx"].clone().set_position(14, 10),
2109+ sprites["Hkx"].clone().set_position(14, 14),
2110+ sprites["Hkx"].clone().set_position(18, 10),
2111+ sprites["Hkx"].clone().set_position(18, 6),
2112+ sprites["Hkx"].clone().set_position(22, 10),
2113+ sprites["Hkx"].clone().set_position(18, 2),
2114+ sprites["Hkx"].clone().set_position(14, 2),
2115+ sprites["Hkx"].clone().set_position(6, 14),
2116+ sprites["Hkx"].clone().set_position(6, 10),
2117+ sprites["Hkx"].clone().set_position(10, 18),
2118+ sprites["Hkx"].clone().set_position(6, 18),
2119+ sprites["Hkx"].clone().set_position(14, 18),
2120+ sprites["Hkx"].clone().set_position(18, 18),
2121+ sprites["Hkx"].clone().set_position(22, 18),
2122+ sprites["Hkx"].clone().set_position(22, 14),
2123+ sprites["Hkx"].clone().set_position(10, 22),
2124+ sprites["Hkx"].clone().set_position(18, 22),
2125+ sprites["Hkx"].clone().set_position(14, 26),
2126+ sprites["Hkx"].clone().set_position(10, 26),
2127+ sprites["Hkx"].clone().set_position(18, 26),
2128+ sprites["KYk"].clone().set_position(14, 6),
2129+ sprites["SXM"].clone().set_position(10, 14),
2130+ ],
2131+ grid_size=(32, 32),
2132+ data={
2133+ "kCv": 96,
2134+ "cwU": [8, 12],
2135+ "elp": [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
2136+ },
2137+ name="Fmh",
2138+ ),
2139+ # oea
2140+ Level(
2141+ sprites=[
2142+ sprites["aRa"].clone().set_position(18, 11),
2143+ sprites["gYF"].clone().set_position(30, 4),
2144+ sprites["Hkx"].clone().set_position(10, 7),
2145+ sprites["Hkx"].clone().set_position(14, 11),
2146+ sprites["Hkx"].clone().set_position(14, 15),
2147+ sprites["Hkx"].clone().set_position(22, 11),
2148+ sprites["Hkx"].clone().set_position(22, 15),
2149+ sprites["Hkx"].clone().set_position(18, 7),
2150+ sprites["Hkx"].clone().set_position(14, 7),
2151+ sprites["Hkx"].clone().set_position(6, 11),
2152+ sprites["Hkx"].clone().set_position(10, 15),
2153+ sprites["Hkx"].clone().set_position(18, 15),
2154+ sprites["Hkx"].clone().set_position(6, 15),
2155+ sprites["Hkx"].clone().set_position(6, 7),
2156+ sprites["Hkx"].clone().set_position(22, 7),
2157+ sprites["Hkx"].clone().set_position(10, 19),
2158+ sprites["Hkx"].clone().set_position(18, 19),
2159+ sprites["Hkx"].clone().set_position(10, 23),
2160+ sprites["Hkx"].clone().set_position(14, 23),
2161+ sprites["Hkx"].clone().set_position(18, 23),
2162+ sprites["lMN"].clone().set_position(10, 11),
2163+ sprites["PrU"].clone().set_position(30, 2),
2164+ sprites["QpB"].clone().set_position(30, 0),
2165+ sprites["uCe"].clone().set_position(14, 19),
2166+ ],
2167+ grid_size=(32, 32),
2168+ data={
2169+ "kCv": 96,
2170+ "cwU": [9, 8, 12],
2171+ "elp": [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
2172+ },
2173+ name="oea",
2174+ ),
2175+ # INW
2176+ Level(
2177+ sprites=[
2178+ sprites["AQG"].clone().set_position(19, 6),
2179+ sprites["fPj"].clone().set_position(11, 18),
2180+ sprites["Hkx"].clone().set_position(7, 6),
2181+ sprites["Hkx"].clone().set_position(15, 18),
2182+ sprites["Hkx"].clone().set_position(15, 6),
2183+ sprites["Hkx"].clone().set_position(11, 10),
2184+ sprites["Hkx"].clone().set_position(11, 2),
2185+ sprites["Hkx"].clone().set_position(23, 14),
2186+ sprites["Hkx"].clone().set_position(15, 10),
2187+ sprites["Hkx"].clone().set_position(19, 18),
2188+ sprites["Hkx"].clone().set_position(23, 22),
2189+ sprites["Hkx"].clone().set_position(15, 22),
2190+ sprites["Hkx"].clone().set_position(19, 26),
2191+ sprites["Hkx"].clone().set_position(15, 26),
2192+ sprites["Hkx"].clone().set_position(23, 18),
2193+ sprites["Hkx"].clone().set_position(19, 10),
2194+ sprites["Hkx"].clone().set_position(7, 10),
2195+ sprites["Hkx"].clone().set_position(15, 2),
2196+ sprites["Hkx"].clone().set_position(7, 18),
2197+ sprites["Hkx"].clone().set_position(7, 22),
2198+ sprites["Hkx"].clone().set_position(7, 26),
2199+ sprites["Hkx"].clone().set_position(11, 26),
2200+ sprites["Hkx"].clone().set_position(7, 14),
2201+ sprites["Hkx"].clone().set_position(3, 10),
2202+ sprites["Hkx"].clone().set_position(3, 18),
2203+ sprites["Hkx"].clone().set_position(15, 14),
2204+ sprites["Hkx"].clone().set_position(23, 10),
2205+ sprites["Hkx"].clone().set_position(27, 18),
2206+ sprites["Hkx"].clone().set_position(27, 10),
2207+ sprites["IFI"].clone().set_position(3, 14),
2208+ sprites["NTi"].clone().set_position(11, 6),
2209+ sprites["NTi"].clone().set_position(19, 22),
2210+ sprites["NTi"].clone().set_position(11, 14),
2211+ sprites["Nul"].clone().set_position(7, 2),
2212+ sprites["PmE"].clone().set_position(23, 26),
2213+ sprites["qqM"].clone().set_position(11, 22),
2214+ sprites["SfD"].clone().set_position(27, 14),
2215+ sprites["Ywn"].clone().set_position(27, 0),
2216+ sprites["yZg"].clone().set_position(19, 14),
2217+ ],
2218+ grid_size=(32, 32),
2219+ data={
2220+ "kCv": 128,
2221+ "cwU": [14, 15],
2222+ "elp": [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
2223+ },
2224+ name="INW",
2225+ ),
2226+ # DFx
2227+ Level(
2228+ sprites=[
2229+ sprites["ASc"].clone().set_position(22, 23),
2230+ sprites["gFd"].clone().set_position(30, 2),
2231+ sprites["kvt"].clone().set_position(10, 15),
2232+ sprites["PjS"].clone().set_position(18, 11),
2233+ sprites["ssK"].clone().set_position(6, 3),
2234+ sprites["Zgh"].clone().set_position(30, 0),
2235+ sprites["ZkU"].clone().set_position(6, 7),
2236+ sprites["ZkU"].clone().set_position(10, 7),
2237+ sprites["ZkU"].clone().set_position(14, 7),
2238+ sprites["ZkU"].clone().set_position(18, 7),
2239+ sprites["ZkU"].clone().set_position(22, 7),
2240+ sprites["ZkU"].clone().set_position(6, 11),
2241+ sprites["ZkU"].clone().set_position(22, 11),
2242+ sprites["ZkU"].clone().set_position(10, 11),
2243+ sprites["ZkU"].clone().set_position(14, 11),
2244+ sprites["ZkU"].clone().set_position(18, 15),
2245+ sprites["ZkU"].clone().set_position(6, 15),
2246+ sprites["ZkU"].clone().set_position(22, 15),
2247+ sprites["ZkU"].clone().set_position(14, 15),
2248+ sprites["ZkU"].clone().set_position(18, 19),
2249+ sprites["ZkU"].clone().set_position(6, 19),
2250+ sprites["ZkU"].clone().set_position(22, 19),
2251+ sprites["ZkU"].clone().set_position(10, 19),
2252+ sprites["ZkU"].clone().set_position(14, 19),
2253+ sprites["ZkU"].clone().set_position(26, 19),
2254+ sprites["ZkU"].clone().set_position(2, 7),
2255+ sprites["ZkU"].clone().set_position(2, 3),
2256+ sprites["ZkU"].clone().set_position(26, 23),
2257+ ],
2258+ grid_size=(32, 32),
2259+ data={
2260+ "kCv": 128,
2261+ "cwU": [11, 14],
2262+ "elp": [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
2263+ },
2264+ name="DFx",
2265+ ),
2266+]
2267+
2268+BACKGROUND_COLOR = 4
2269+PADDING_COLOR = 4
2270+
2271+
2272+class sve(RenderableUserDisplay):
2273+ def __init__(self, sbb: int, vrr: "Ft09"):
2274+ self.oro = sbb
2275+ self.dzy = sbb
2276+ self.vai = vrr
2277+
2278+ def cab(self, shl: int) -> None:
2279+ self.dzy = max(0, min(shl, self.oro))
2280+
2281+ def lph(self) -> bool:
2282+ if self.dzy > 0:
2283+ self.dzy -= 1
2284+ return self.dzy > 0
2285+
2286+ def dsl(self) -> None:
2287+ self.dzy = self.oro
2288+
2289+ def render_interface(self, frame: np.ndarray) -> np.ndarray:
2290+ if self.oro == 0:
2291+ return frame
2292+
2293+ slC = self.dzy / self.oro
2294+ GoJ = round(64 * slC)
2295+ for x in range(64):
2296+ frame[63, x] = 12 if x < GoJ else 11
2297+
2298+ return frame
2299+
2300+
2301+class Ft09(ARCBaseGame):
2302+ def __init__(self) -> None:
2303+ ZnK = levels[0].get_data("kCv") if levels else 0
2304+ bUg = ZnK if ZnK else 0
2305+ self.lpw = sve(bUg, self)
2306+ super().__init__("ft09", levels, Camera(0, 0, 16, 16, 4, 4, [self.lpw]), available_actions=[6])
2307+
2308+ def olv(self) -> None:
2309+ yTL = self.current_level.get_data("kCv")
2310+ if yTL:
2311+ self.lpw.oro = yTL
2312+ self.lpw.dsl()
2313+
2314+ def on_set_level(self, level: Level) -> None:
2315+ self.olv()
2316+
2317+ self.zth = None
2318+ self.our = 0
2319+ if self.level_index == 0:
2320+ Uev = self.current_level.get_sprites_by_tag("Ycb")
2321+ if Uev:
2322+ self.zth = Uev[0]
2323+
2324+ rKu = self.current_level.grid_size
2325+ self.pdw = rKu[0] # type: ignore
2326+ self.zbh = rKu[1] # type: ignore
2327+
2328+ self.gig = self.current_level.get_sprites_by_tag("bsT")
2329+ self.fhc = self.current_level.get_sprites_by_tag("Hkx")
2330+ self.mou = self.current_level.get_sprites_by_tag("NTi")
2331+
2332+ self.gqb = self.current_level.get_data("cwU")
2333+ if self.gqb is None:
2334+ self.gqb = [9, 8]
2335+
2336+ self.irw = self.current_level.get_data("elp")
2337+
2338+ if self.irw is None:
2339+ self.irw = [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
2340+
2341+ for rmy, zge in enumerate(self.fhc):
2342+ zge.color_remap(zge.pixels[0][0], self.gqb[0])
2343+
2344+ for rmy, zge in enumerate(self.mou):
2345+ for jon in range(3):
2346+ for vlo in range(3):
2347+ if zge.pixels[jon][vlo] != 6:
2348+ zge.pixels[jon][vlo] = self.gqb[0]
2349+
2350+ def step(self) -> None:
2351+ if self.action.id.value == 0:
2352+ self.complete_action()
2353+ return
2354+
2355+ if self.our > 0 and self.zth:
2356+ self.our -= 1
2357+
2358+ aIT = 0 if self.our % 2 == 1 else 2
2359+ Ytt = self.zth.pixels > -1
2360+ self.zth.pixels[Ytt] = aIT
2361+ if self.our == 0:
2362+ self.complete_action()
2363+ return
2364+
2365+ kMO = None
2366+ ATn = False
2367+ Hzf = None
2368+
2369+ if self.action.id.value == 6:
2370+ AfP = self.action.data.get("x", 0)
2371+ Ywt = self.action.data.get("y", 0)
2372+
2373+ Hzf = self.camera.display_to_grid(AfP, Ywt)
2374+ if Hzf:
2375+ ppb, tut = Hzf
2376+
2377+ Wmr = self.current_level.get_sprite_at(ppb, tut, "Hkx")
2378+ if not Wmr:
2379+ Wmr = self.current_level.get_sprite_at(ppb, tut, "NTi")
2380+ if Wmr:
2381+ ATn = True
2382+ if Wmr:
2383+ self.blr = Wmr
2384+ kMO = 5
2385+
2386+ if kMO is None and Hzf is not None:
2387+ uTB = Hzf and self.current_level.get_sprite_at(Hzf[0], Hzf[1], "bsT")
2388+ if self.level_index == 0 and self.zth and not uTB:
2389+ self.our = 4
2390+ return
2391+ self.complete_action()
2392+ return
2393+
2394+ GBS = [
2395+ [(-1, -1), (0, -1), (1, -1)],
2396+ [(-1, 0), (0, 0), (1, 0)],
2397+ [(-1, 1), (0, 1), (1, 1)],
2398+ ]
2399+
2400+ if ATn:
2401+ eHl = [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
2402+ bBi = self.blr.pixels
2403+ for j in range(3):
2404+ for i in range(3):
2405+ if bBi[j][i] == 6:
2406+ eHl[j][i] = 1
2407+ else:
2408+ eHl = self.irw
2409+
2410+ if kMO == 5:
2411+ for i in range(3):
2412+ for j in range(3):
2413+ if eHl[j][i] == 1:
2414+ ybc, lga = GBS[j][i]
2415+ cAw = (self.blr.x + (ybc * 4), self.blr.y + (lga * 4))
2416+
2417+ RfH = self.current_level.get_sprite_at(cAw[0], cAw[1], "Hkx")
2418+
2419+ if not RfH:
2420+ RfH = self.current_level.get_sprite_at(cAw[0], cAw[1], "NTi")
2421+ if RfH:
2422+ kNa = self.gqb.index(RfH.pixels[1][1])
2423+ kNa = (kNa + 1) % len(self.gqb)
2424+ RfH.color_remap(RfH.pixels[1][1], self.gqb[kNa])
2425+
2426+ if self.cgj():
2427+ self.next_level()
2428+ self.complete_action()
2429+ return
2430+
2431+ if not self.lpw.lph():
2432+ self.lose()
2433+
2434+ self.complete_action()
2435+
2436+ def cgj(self) -> bool:
2437+ for etf in self.gig:
2438+ nRq = etf.pixels[1][1]
2439+
2440+ HJd = etf.pixels[0][0] == 0
2441+ tx, ty = etf.x - 4, etf.y - 4
2442+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2443+ if not PML:
2444+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2445+
2446+ if PML:
2447+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2448+ if not pbA:
2449+ return False
2450+
2451+ HJd = etf.pixels[0][1] == 0
2452+ tx, ty = etf.x, etf.y - 4
2453+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2454+ if not PML:
2455+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2456+ if PML:
2457+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2458+ if not pbA:
2459+ return False
2460+
2461+ HJd = etf.pixels[0][2] == 0
2462+ tx, ty = etf.x + 4, etf.y - 4
2463+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2464+ if not PML:
2465+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2466+ if PML:
2467+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2468+ if not pbA:
2469+ return False
2470+
2471+ HJd = etf.pixels[1][0] == 0
2472+ tx, ty = etf.x - 4, etf.y
2473+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2474+ if not PML:
2475+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2476+ if PML:
2477+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2478+ if not pbA:
2479+ return False
2480+
2481+ HJd = etf.pixels[1][2] == 0
2482+ tx, ty = etf.x + 4, etf.y
2483+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2484+ if not PML:
2485+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2486+ if PML:
2487+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2488+ if not pbA:
2489+ return False
2490+
2491+ HJd = etf.pixels[2][0] == 0
2492+ tx, ty = etf.x - 4, etf.y + 4
2493+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2494+ if not PML:
2495+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2496+ if PML:
2497+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2498+ if not pbA:
2499+ return False
2500+
2501+ HJd = etf.pixels[2][1] == 0
2502+ tx, ty = etf.x, etf.y + 4
2503+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2504+ if not PML:
2505+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2506+ if PML:
2507+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2508+ if not pbA:
2509+ return False
2510+
2511+ HJd = etf.pixels[2][2] == 0
2512+ tx, ty = etf.x + 4, etf.y + 4
2513+ PML = self.current_level.get_sprite_at(tx, ty, "Hkx")
2514+ if not PML:
2515+ PML = self.current_level.get_sprite_at(tx, ty, "NTi")
2516+ if PML:
2517+ pbA = (PML.pixels[1][1] == nRq) if HJd else (PML.pixels[1][1] != nRq)
2518+ if not pbA:
2519+ return False
2520+ return True
+14 −0 referee/environment_files/ft09/0d8bbf25/metadata.json 新增 查看文件
@@ -0,0 +1,14 @@
1+{
2+ "game_id": "ft09-0d8bbf25",
3+ "title": "FT09",
4+ "default_fps": 8,
5+ "baseline_actions": [
6+ 43,
7+ 12,
8+ 23,
9+ 28,
10+ 65,
11+ 37
12+ ],
13+ "date_downloaded": "2026-10-21T17:12:01.294915+00:00"
14+}
+21451 −0 referee/environment_files/lp85/305b61c3/lp85.py 新增 查看文件
@@ -0,0 +1,21451 @@
1+# MIT License
2+#
3+# Copyright (c) 2026 ARC Prize Foundation
4+#
5+# Permission is hereby granted, free of charge, to any person obtaining a copy
6+# of this software and associated documentation files (the "Software"), to deal
7+# in the Software without restriction, including without limitation the rights
8+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+# copies of the Software, and to permit persons to whom the Software is
10+# furnished to do so, subject to the following conditions:
11+#
12+# The above copyright notice and this permission notice shall be included in all
13+# copies or substantial portions of the Software.
14+#
15+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+# SOFTWARE.
22+
23+from typing import Dict, List, NamedTuple, Tuple, TypedDict
24+
25+import numpy as np
26+from arcengine import (
27+ ARCBaseGame,
28+ Camera,
29+ GameAction,
30+ Level,
31+ RenderableUserDisplay,
32+ Sprite,
33+)
34+
35+sprites = {
36+ "ahdesifykt": Sprite(
37+ pixels=[
38+ [-1, 8, 8],
39+ [8, 8, 8],
40+ [8, 8, 8],
41+ [-1, 8, 8],
42+ ],
43+ name="ahdesifykt",
44+ visible=True,
45+ collidable=True,
46+ tags=["button_A_L", "sys_click"],
47+ ),
48+ "aoibinevrm": Sprite(
49+ pixels=[
50+ [14, 14, -1],
51+ [14, 14, 14],
52+ [14, 14, 14],
53+ [14, 14, -1],
54+ ],
55+ name="aoibinevrm",
56+ visible=True,
57+ collidable=True,
58+ tags=["button_13_R", "sys_click"],
59+ ),
60+ "aqwhbtzcfg": Sprite(
61+ pixels=[
62+ [14, 14, -1],
63+ [14, 14, 14],
64+ [14, 14, 14],
65+ [14, 14, -1],
66+ ],
67+ name="aqwhbtzcfg",
68+ visible=True,
69+ collidable=True,
70+ tags=["button_27_R", "sys_click"],
71+ ),
72+ "auxglvwwep": Sprite(
73+ pixels=[
74+ [14, 14, -1],
75+ [14, 14, 14],
76+ [14, 14, 14],
77+ [14, 14, -1],
78+ ],
79+ name="auxglvwwep",
80+ visible=True,
81+ collidable=True,
82+ tags=["button_23_R", "sys_click"],
83+ ),
84+ "avazowxmej": Sprite(
85+ pixels=[
86+ [14, 14, -1],
87+ [14, 14, 14],
88+ [14, 14, 14],
89+ [14, 14, -1],
90+ ],
91+ name="avazowxmej",
92+ visible=True,
93+ collidable=True,
94+ tags=["button_18_R", "sys_click"],
95+ ),
96+ "aydooxtcli": Sprite(
97+ pixels=[
98+ [9, 9],
99+ [9, 9],
100+ ],
101+ name="aydooxtcli",
102+ visible=True,
103+ collidable=True,
104+ tags=["tile"],
105+ ),
106+ "azkpmswird": Sprite(
107+ pixels=[
108+ [14, 14, -1],
109+ [14, 14, 14],
110+ [14, 14, 14],
111+ [14, 14, -1],
112+ ],
113+ name="azkpmswird",
114+ visible=True,
115+ collidable=True,
116+ tags=["button_8_R", "sys_click"],
117+ ),
118+ "bbxrzomunc": Sprite(
119+ pixels=[
120+ [14, 14, -1],
121+ [14, 14, 14],
122+ [14, 14, 14],
123+ [14, 14, -1],
124+ ],
125+ name="bbxrzomunc",
126+ visible=True,
127+ collidable=True,
128+ tags=["button_11_R", "sys_click"],
129+ ),
130+ "bghvgbtwcb": Sprite(
131+ pixels=[
132+ [11, -1, -1, 11],
133+ [-1, -1, -1, -1],
134+ [-1, -1, -1, -1],
135+ [11, -1, -1, 11],
136+ ],
137+ name="bghvgbtwcb",
138+ visible=True,
139+ collidable=True,
140+ tags=["bghvgbtwcb"],
141+ ),
142+ "cfhhkdewbs": Sprite(
143+ pixels=[
144+ [14, 14, -1],
145+ [14, 14, 14],
146+ [14, 14, 14],
147+ [14, 14, -1],
148+ ],
149+ name="cfhhkdewbs",
150+ visible=True,
151+ collidable=True,
152+ tags=["button_3_R", "sys_click"],
153+ ),
154+ "cgkbezvpdp": Sprite(
155+ pixels=[
156+ [14, 14, -1],
157+ [14, 14, 14],
158+ [14, 14, 14],
159+ [14, 14, -1],
160+ ],
161+ name="cgkbezvpdp",
162+ visible=True,
163+ collidable=True,
164+ tags=["button_9_R", "sys_click"],
165+ ),
166+ "chwujwypuk": Sprite(
167+ pixels=[
168+ [-1, 8, 8],
169+ [8, 8, 8],
170+ [8, 8, 8],
171+ [-1, 8, 8],
172+ ],
173+ name="chwujwypuk",
174+ visible=True,
175+ collidable=True,
176+ tags=["button_2_L", "sys_click"],
177+ ),
178+ "cjcssvobei": Sprite(
179+ pixels=[
180+ [14, 14, -1],
181+ [14, 14, 14],
182+ [14, 14, 14],
183+ [14, 14, -1],
184+ ],
185+ name="cjcssvobei",
186+ visible=True,
187+ collidable=True,
188+ tags=["button_I_R", "sys_click"],
189+ ),
190+ "ckkvkowlfm": Sprite(
191+ pixels=[
192+ [-1, 8, 8],
193+ [8, 8, 8],
194+ [8, 8, 8],
195+ [-1, 8, 8],
196+ ],
197+ name="ckkvkowlfm",
198+ visible=True,
199+ collidable=True,
200+ tags=["button_26_L", "sys_click"],
201+ ),
202+ "cyqncaekpb": Sprite(
203+ pixels=[
204+ [14, 14, -1],
205+ [14, 14, 14],
206+ [14, 14, 14],
207+ [14, 14, -1],
208+ ],
209+ name="cyqncaekpb",
210+ visible=True,
211+ collidable=True,
212+ tags=["button_1_R", "sys_click"],
213+ ),
214+ "djepopdkpm": Sprite(
215+ pixels=[
216+ [14, 14, -1],
217+ [14, 14, 14],
218+ [14, 14, 14],
219+ [14, 14, -1],
220+ ],
221+ name="djepopdkpm",
222+ visible=True,
223+ collidable=True,
224+ tags=["button_4_R", "sys_click"],
225+ ),
226+ "djqnpusomv": Sprite(
227+ pixels=[
228+ [-1, 8, 8],
229+ [8, 8, 8],
230+ [8, 8, 8],
231+ [-1, 8, 8],
232+ ],
233+ name="djqnpusomv",
234+ visible=True,
235+ collidable=True,
236+ tags=["button_23_L", "sys_click"],
237+ ),
238+ "dvvacwfchj": Sprite(
239+ pixels=[
240+ [14, 14, -1],
241+ [14, 14, 14],
242+ [14, 14, 14],
243+ [14, 14, -1],
244+ ],
245+ name="dvvacwfchj",
246+ visible=True,
247+ collidable=True,
248+ tags=["button_B_R", "sys_click"],
249+ ),
250+ "ekpijbeoel": Sprite(
251+ pixels=[
252+ [1, 1],
253+ [1, 1],
254+ ],
255+ name="ekpijbeoel",
256+ visible=True,
257+ collidable=True,
258+ tags=["tile"],
259+ ),
260+ "fdgmtkfrxl": Sprite(
261+ pixels=[
262+ [12, -1, -1, 12],
263+ [-1, -1, -1, -1],
264+ [-1, -1, -1, -1],
265+ [12, -1, -1, 12],
266+ ],
267+ name="fdgmtkfrxl",
268+ visible=True,
269+ collidable=True,
270+ tags=["fdgmtkfrxl"],
271+ ),
272+ "fxtadqcoja": Sprite(
273+ pixels=[
274+ [-1, 8, 8],
275+ [8, 8, 8],
276+ [8, 8, 8],
277+ [-1, 8, 8],
278+ ],
279+ name="fxtadqcoja",
280+ visible=True,
281+ collidable=True,
282+ tags=["button_14_L", "sys_click"],
283+ ),
284+ "gknuimaglj": Sprite(
285+ pixels=[
286+ [14, 14, -1],
287+ [14, 14, 14],
288+ [14, 14, 14],
289+ [14, 14, -1],
290+ ],
291+ name="gknuimaglj",
292+ visible=True,
293+ collidable=True,
294+ tags=["button_24_R", "sys_click"],
295+ ),
296+ "gzfuxxfhxh": Sprite(
297+ pixels=[
298+ [14, 14, -1],
299+ [14, 14, 14],
300+ [14, 14, 14],
301+ [14, 14, -1],
302+ ],
303+ name="gzfuxxfhxh",
304+ visible=True,
305+ collidable=True,
306+ tags=["button_L_R", "sys_click"],
307+ ),
308+ "hfikqtizdo": Sprite(
309+ pixels=[
310+ [12, 12],
311+ [12, 12],
312+ ],
313+ name="hfikqtizdo",
314+ visible=True,
315+ collidable=True,
316+ tags=["goal-o"],
317+ ),
318+ "hiictjojxg": Sprite(
319+ pixels=[
320+ [14, 14, -1],
321+ [14, 14, 14],
322+ [14, 14, 14],
323+ [14, 14, -1],
324+ ],
325+ name="hiictjojxg",
326+ visible=True,
327+ collidable=True,
328+ tags=["button_5_R", "sys_click"],
329+ ),
330+ "hlpgfhkhui": Sprite(
331+ pixels=[
332+ [-1, 8, 8],
333+ [8, 8, 8],
334+ [8, 8, 8],
335+ [-1, 8, 8],
336+ ],
337+ name="hlpgfhkhui",
338+ visible=True,
339+ collidable=True,
340+ tags=["button_16_L", "sys_click"],
341+ ),
342+ "hvgvgpuasf": Sprite(
343+ pixels=[
344+ [14, 14, -1],
345+ [14, 14, 14],
346+ [14, 14, 14],
347+ [14, 14, -1],
348+ ],
349+ name="hvgvgpuasf",
350+ visible=True,
351+ collidable=True,
352+ tags=["button_D_R", "sys_click"],
353+ ),
354+ "hyifvqmswy": Sprite(
355+ pixels=[
356+ [14, 14, -1],
357+ [14, 14, 14],
358+ [14, 14, 14],
359+ [14, 14, -1],
360+ ],
361+ name="hyifvqmswy",
362+ visible=True,
363+ collidable=True,
364+ tags=["button_K_R", "sys_click"],
365+ ),
366+ "icgyrqkqpc": Sprite(
367+ pixels=[
368+ [14, 14, -1],
369+ [14, 14, 14],
370+ [14, 14, 14],
371+ [14, 14, -1],
372+ ],
373+ name="icgyrqkqpc",
374+ visible=True,
375+ collidable=True,
376+ tags=["button_16_R", "sys_click"],
377+ ),
378+ "ikexwlluqt": Sprite(
379+ pixels=[
380+ [14, 14, -1],
381+ [14, 14, 14],
382+ [14, 14, 14],
383+ [14, 14, -1],
384+ ],
385+ name="ikexwlluqt",
386+ visible=True,
387+ collidable=True,
388+ tags=["button_J_R", "sys_click"],
389+ ),
390+ "ikgydmjteo": Sprite(
391+ pixels=[
392+ [14, 14, -1],
393+ [14, 14, 14],
394+ [14, 14, 14],
395+ [14, 14, -1],
396+ ],
397+ name="ikgydmjteo",
398+ visible=True,
399+ collidable=True,
400+ tags=["button_10_R", "sys_click"],
401+ ),
402+ "iozrrxaimm": Sprite(
403+ pixels=[
404+ [-1, 8, 8],
405+ [8, 8, 8],
406+ [8, 8, 8],
407+ [-1, 8, 8],
408+ ],
409+ name="iozrrxaimm",
410+ visible=True,
411+ collidable=True,
412+ tags=["button_27_L", "sys_click"],
413+ ),
414+ "isjrkszgff": Sprite(
415+ pixels=[
416+ [14, 14, -1],
417+ [14, 14, 14],
418+ [14, 14, 14],
419+ [14, 14, -1],
420+ ],
421+ name="isjrkszgff",
422+ visible=True,
423+ collidable=True,
424+ tags=["button_22_R", "sys_click"],
425+ ),
426+ "jxibbjkyqn": Sprite(
427+ pixels=[
428+ [14, 14, -1],
429+ [14, 14, 14],
430+ [14, 14, 14],
431+ [14, 14, -1],
432+ ],
433+ name="jxibbjkyqn",
434+ visible=True,
435+ collidable=True,
436+ tags=["button_12_R", "sys_click"],
437+ ),
438+ "kcuuamovad": Sprite(
439+ pixels=[
440+ [14, 14, -1],
441+ [14, 14, 14],
442+ [14, 14, 14],
443+ [14, 14, -1],
444+ ],
445+ name="kcuuamovad",
446+ visible=True,
447+ collidable=True,
448+ tags=["button_17_R", "sys_click"],
449+ ),
450+ "kisflvfvsy": Sprite(
451+ pixels=[
452+ [10, 10],
453+ [10, 10],
454+ ],
455+ name="kisflvfvsy",
456+ visible=True,
457+ collidable=True,
458+ tags=["tile"],
459+ ),
460+ "ksnvdjtrfm": Sprite(
461+ pixels=[
462+ [-1, 8, 8],
463+ [8, 8, 8],
464+ [8, 8, 8],
465+ [-1, 8, 8],
466+ ],
467+ name="ksnvdjtrfm",
468+ visible=True,
469+ collidable=True,
470+ tags=["button_7_L", "sys_click"],
471+ ),
472+ "kzjtnfvqjg": Sprite(
473+ pixels=[
474+ [-1, 8, 8],
475+ [8, 8, 8],
476+ [8, 8, 8],
477+ [-1, 8, 8],
478+ ],
479+ name="kzjtnfvqjg",
480+ visible=True,
481+ collidable=True,
482+ tags=["button_4_L", "sys_click"],
483+ ),
484+ "lfcynjbowf": Sprite(
485+ pixels=[
486+ [14, 14, -1],
487+ [14, 14, 14],
488+ [14, 14, 14],
489+ [14, 14, -1],
490+ ],
491+ name="lfcynjbowf",
492+ visible=True,
493+ collidable=True,
494+ tags=["button_2_R", "sys_click"],
495+ ),
496+ "lfimxyubtw": Sprite(
497+ pixels=[
498+ [-1, 8, 8],
499+ [8, 8, 8],
500+ [8, 8, 8],
501+ [-1, 8, 8],
502+ ],
503+ name="lfimxyubtw",
504+ visible=True,
505+ collidable=True,
506+ tags=["button_E_L", "sys_click"],
507+ ),
508+ "lnnponqnto": Sprite(
509+ pixels=[
510+ [14, 14, -1],
511+ [14, 14, 14],
512+ [14, 14, 14],
513+ [14, 14, -1],
514+ ],
515+ name="lnnponqnto",
516+ visible=True,
517+ collidable=True,
518+ tags=["button_6_R", "sys_click"],
519+ ),
520+ "lqtjzsqwtz": Sprite(
521+ pixels=[
522+ [14, 14, -1],
523+ [14, 14, 14],
524+ [14, 14, 14],
525+ [14, 14, -1],
526+ ],
527+ name="lqtjzsqwtz",
528+ visible=True,
529+ collidable=True,
530+ tags=["button_20_R", "sys_click"],
531+ ),
532+ "mchtsgjpjm": Sprite(
533+ pixels=[
534+ [-1, 8, 8],
535+ [8, 8, 8],
536+ [8, 8, 8],
537+ [-1, 8, 8],
538+ ],
539+ name="mchtsgjpjm",
540+ visible=True,
541+ collidable=True,
542+ tags=["button_12_L", "sys_click"],
543+ ),
544+ "msmalfqpgt": Sprite(
545+ pixels=[
546+ [-1, 8, 8],
547+ [8, 8, 8],
548+ [8, 8, 8],
549+ [-1, 8, 8],
550+ ],
551+ name="msmalfqpgt",
552+ visible=True,
553+ collidable=True,
554+ tags=["button_10_L", "sys_click"],
555+ ),
556+ "nidhkbeymj": Sprite(
557+ pixels=[
558+ [-1, 8, 8],
559+ [8, 8, 8],
560+ [8, 8, 8],
561+ [-1, 8, 8],
562+ ],
563+ name="nidhkbeymj",
564+ visible=True,
565+ collidable=True,
566+ tags=["button_5_L", "sys_click"],
567+ ),
568+ "npiudvzxms": Sprite(
569+ pixels=[
570+ [-1, 8, 8],
571+ [8, 8, 8],
572+ [8, 8, 8],
573+ [-1, 8, 8],
574+ ],
575+ name="npiudvzxms",
576+ visible=True,
577+ collidable=True,
578+ tags=["button_3_L", "sys_click"],
579+ ),
580+ "odkpvwbihk": Sprite(
581+ pixels=[
582+ [11, 11],
583+ [11, 11],
584+ ],
585+ name="odkpvwbihk",
586+ visible=True,
587+ collidable=True,
588+ tags=["goal"],
589+ ),
590+ "olznmtqgqf": Sprite(
591+ pixels=[
592+ [-1, 8, 8],
593+ [8, 8, 8],
594+ [8, 8, 8],
595+ [-1, 8, 8],
596+ ],
597+ name="olznmtqgqf",
598+ visible=True,
599+ collidable=True,
600+ tags=["button_20_L", "sys_click"],
601+ ),
602+ "oqsumsdlyg": Sprite(
603+ pixels=[
604+ [-1, 8, 8],
605+ [8, 8, 8],
606+ [8, 8, 8],
607+ [-1, 8, 8],
608+ ],
609+ name="oqsumsdlyg",
610+ visible=True,
611+ collidable=True,
612+ tags=["button_D_L", "sys_click"],
613+ ),
614+ "peuddygayw": Sprite(
615+ pixels=[
616+ [-1, 8, 8],
617+ [8, 8, 8],
618+ [8, 8, 8],
619+ [-1, 8, 8],
620+ ],
621+ name="peuddygayw",
622+ visible=True,
623+ collidable=True,
624+ tags=["button_B_L", "sys_click"],
625+ ),
626+ "pispbshofi": Sprite(
627+ pixels=[
628+ [-1, 8, 8],
629+ [8, 8, 8],
630+ [8, 8, 8],
631+ [-1, 8, 8],
632+ ],
633+ name="pispbshofi",
634+ visible=True,
635+ collidable=True,
636+ tags=["button_G_L", "sys_click"],
637+ ),
638+ "qfmlfsmppb": Sprite(
639+ pixels=[
640+ [14, 14, -1],
641+ [14, 14, 14],
642+ [14, 14, 14],
643+ [14, 14, -1],
644+ ],
645+ name="qfmlfsmppb",
646+ visible=True,
647+ collidable=True,
648+ tags=["button_14_R", "sys_click"],
649+ ),
650+ "qiezkvylfa": Sprite(
651+ pixels=[
652+ [-1, 8, 8],
653+ [8, 8, 8],
654+ [8, 8, 8],
655+ [-1, 8, 8],
656+ ],
657+ name="qiezkvylfa",
658+ visible=True,
659+ collidable=True,
660+ tags=["button_13_L", "sys_click"],
661+ ),
662+ "qwjjziosdl": Sprite(
663+ pixels=[
664+ [-1, 8, 8],
665+ [8, 8, 8],
666+ [8, 8, 8],
667+ [-1, 8, 8],
668+ ],
669+ name="qwjjziosdl",
670+ visible=True,
671+ collidable=True,
672+ tags=["button_21_L", "sys_click"],
673+ ),
674+ "reafrgzfwk": Sprite(
675+ pixels=[
676+ [14, 14, -1],
677+ [14, 14, 14],
678+ [14, 14, 14],
679+ [14, 14, -1],
680+ ],
681+ name="reafrgzfwk",
682+ visible=True,
683+ collidable=True,
684+ tags=["button_C_R", "sys_click"],
685+ ),
686+ "rhyksubvjk": Sprite(
687+ pixels=[
688+ [14, 14, -1],
689+ [14, 14, 14],
690+ [14, 14, 14],
691+ [14, 14, -1],
692+ ],
693+ name="rhyksubvjk",
694+ visible=True,
695+ collidable=True,
696+ tags=["button_19_R", "sys_click"],
697+ ),
698+ "rltccsmmjh": Sprite(
699+ pixels=[
700+ [-1, 8, 8],
701+ [8, 8, 8],
702+ [8, 8, 8],
703+ [-1, 8, 8],
704+ ],
705+ name="rltccsmmjh",
706+ visible=True,
707+ collidable=True,
708+ tags=["button_I_L", "sys_click"],
709+ ),
710+ "rslwkirzds": Sprite(
711+ pixels=[
712+ [-1, 8, 8],
713+ [8, 8, 8],
714+ [8, 8, 8],
715+ [-1, 8, 8],
716+ ],
717+ name="rslwkirzds",
718+ visible=True,
719+ collidable=True,
720+ tags=["button_19_L", "sys_click"],
721+ ),
722+ "sbogwsxcvo": Sprite(
723+ pixels=[
724+ [14, 14, -1],
725+ [14, 14, 14],
726+ [14, 14, 14],
727+ [14, 14, -1],
728+ ],
729+ name="sbogwsxcvo",
730+ visible=True,
731+ collidable=True,
732+ tags=["button_E_R", "sys_click"],
733+ ),
734+ "sjummcsymu": Sprite(
735+ pixels=[
736+ [-1, 8, 8],
737+ [8, 8, 8],
738+ [8, 8, 8],
739+ [-1, 8, 8],
740+ ],
741+ name="sjummcsymu",
742+ visible=True,
743+ collidable=True,
744+ tags=["button_F_L", "sys_click"],
745+ ),
746+ "sklqiglcbh": Sprite(
747+ pixels=[
748+ [-1, 8, 8],
749+ [8, 8, 8],
750+ [8, 8, 8],
751+ [-1, 8, 8],
752+ ],
753+ name="sklqiglcbh",
754+ visible=True,
755+ collidable=True,
756+ tags=["button_18_L", "sys_click"],
757+ ),
758+ "slefrnjymo": Sprite(
759+ pixels=[
760+ [2, 2],
761+ [2, 2],
762+ ],
763+ name="slefrnjymo",
764+ visible=True,
765+ collidable=True,
766+ tags=["tile"],
767+ ),
768+ "squvkghyif": Sprite(
769+ pixels=[
770+ [-1, 8, 8],
771+ [8, 8, 8],
772+ [8, 8, 8],
773+ [-1, 8, 8],
774+ ],
775+ name="squvkghyif",
776+ visible=True,
777+ collidable=True,
778+ tags=["button_H_L", "sys_click"],
779+ ),
780+ "tcweaqkrko": Sprite(
781+ pixels=[
782+ [14, 14, -1],
783+ [14, 14, 14],
784+ [14, 14, 14],
785+ [14, 14, -1],
786+ ],
787+ name="tcweaqkrko",
788+ visible=True,
789+ collidable=True,
790+ tags=["button_15_R", "sys_click"],
791+ ),
792+ "tddzizwhzf": Sprite(
793+ pixels=[
794+ [15, 15],
795+ [15, 15],
796+ ],
797+ name="tddzizwhzf",
798+ visible=True,
799+ collidable=True,
800+ tags=["tile"],
801+ ),
802+ "tohldkeyto": Sprite(
803+ pixels=[
804+ [-1, 8, 8],
805+ [8, 8, 8],
806+ [8, 8, 8],
807+ [-1, 8, 8],
808+ ],
809+ name="tohldkeyto",
810+ visible=True,
811+ collidable=True,
812+ tags=["button_1_L", "sys_click"],
813+ ),
814+ "uqipjzobpp": Sprite(
815+ pixels=[
816+ [14, 14, -1],
817+ [14, 14, 14],
818+ [14, 14, 14],
819+ [14, 14, -1],
820+ ],
821+ name="uqipjzobpp",
822+ visible=True,
823+ collidable=True,
824+ tags=["button_F_R", "sys_click"],
825+ ),
826+ "uyqbibneuw": Sprite(
827+ pixels=[
828+ [-1, 8, 8],
829+ [8, 8, 8],
830+ [8, 8, 8],
831+ [-1, 8, 8],
832+ ],
833+ name="uyqbibneuw",
834+ visible=True,
835+ collidable=True,
836+ tags=["button_15_L", "sys_click"],
837+ ),
838+ "vdeasuthve": Sprite(
839+ pixels=[
840+ [-1, 8, 8],
841+ [8, 8, 8],
842+ [8, 8, 8],
843+ [-1, 8, 8],
844+ ],
845+ name="vdeasuthve",
846+ visible=True,
847+ collidable=True,
848+ tags=["button_6_L", "sys_click"],
849+ ),
850+ "vdjpajqpny": Sprite(
851+ pixels=[
852+ [14, 14, -1],
853+ [14, 14, 14],
854+ [14, 14, 14],
855+ [14, 14, -1],
856+ ],
857+ name="vdjpajqpny",
858+ visible=True,
859+ collidable=True,
860+ tags=["button_21_R", "sys_click"],
861+ ),
862+ "viyoficcma": Sprite(
863+ pixels=[
864+ [-1, 8, 8],
865+ [8, 8, 8],
866+ [8, 8, 8],
867+ [-1, 8, 8],
868+ ],
869+ name="viyoficcma",
870+ visible=True,
871+ collidable=True,
872+ tags=["button_11_L", "sys_click"],
873+ ),
874+ "vwassicppq": Sprite(
875+ pixels=[
876+ [-1, 8, 8],
877+ [8, 8, 8],
878+ [8, 8, 8],
879+ [-1, 8, 8],
880+ ],
881+ name="vwassicppq",
882+ visible=True,
883+ collidable=True,
884+ tags=["button_L_L", "sys_click"],
885+ ),
886+ "vwwnrphkjt": Sprite(
887+ pixels=[
888+ [14, 14, -1],
889+ [14, 14, 14],
890+ [14, 14, 14],
891+ [14, 14, -1],
892+ ],
893+ name="vwwnrphkjt",
894+ visible=True,
895+ collidable=True,
896+ tags=["button_M_R", "sys_click"],
897+ ),
898+ "wnmnhngnez": Sprite(
899+ pixels=[
900+ [-1, 8, 8],
901+ [8, 8, 8],
902+ [8, 8, 8],
903+ [-1, 8, 8],
904+ ],
905+ name="wnmnhngnez",
906+ visible=True,
907+ collidable=True,
908+ tags=["button_K_L", "sys_click"],
909+ ),
910+ "wonxgysgjx": Sprite(
911+ pixels=[
912+ [-1, 8, 8],
913+ [8, 8, 8],
914+ [8, 8, 8],
915+ [-1, 8, 8],
916+ ],
917+ name="wonxgysgjx",
918+ visible=True,
919+ collidable=True,
920+ tags=["button_M_L", "sys_click"],
921+ ),
922+ "wvgpslgvch": Sprite(
923+ pixels=[
924+ [-1, 8, 8],
925+ [8, 8, 8],
926+ [8, 8, 8],
927+ [-1, 8, 8],
928+ ],
929+ name="wvgpslgvch",
930+ visible=True,
931+ collidable=True,
932+ tags=["button_22_L", "sys_click"],
933+ ),
934+ "wxlzrpcmji": Sprite(
935+ pixels=[
936+ [-1, 8, 8],
937+ [8, 8, 8],
938+ [8, 8, 8],
939+ [-1, 8, 8],
940+ ],
941+ name="wxlzrpcmji",
942+ visible=True,
943+ collidable=True,
944+ tags=["button_9_L", "sys_click"],
945+ ),
946+ "xtxayxwyfn": Sprite(
947+ pixels=[
948+ [14, 14, -1],
949+ [14, 14, 14],
950+ [14, 14, 14],
951+ [14, 14, -1],
952+ ],
953+ name="xtxayxwyfn",
954+ visible=True,
955+ collidable=True,
956+ tags=["button_G_R", "sys_click"],
957+ ),
958+ "ycdtvcgsiu": Sprite(
959+ pixels=[
960+ [-1, 8, 8],
961+ [8, 8, 8],
962+ [8, 8, 8],
963+ [-1, 8, 8],
964+ ],
965+ name="ycdtvcgsiu",
966+ visible=True,
967+ collidable=True,
968+ tags=["button_25_L", "sys_click"],
969+ ),
970+ "yjdrfgspyl": Sprite(
971+ pixels=[
972+ [-1, 8, 8],
973+ [8, 8, 8],
974+ [8, 8, 8],
975+ [-1, 8, 8],
976+ ],
977+ name="yjdrfgspyl",
978+ visible=True,
979+ collidable=True,
980+ tags=["button_8_L", "sys_click"],
981+ ),
982+ "ymwkwkfxct": Sprite(
983+ pixels=[
984+ [-1, 8, 8],
985+ [8, 8, 8],
986+ [8, 8, 8],
987+ [-1, 8, 8],
988+ ],
989+ name="ymwkwkfxct",
990+ visible=True,
991+ collidable=True,
992+ tags=["button_C_L", "sys_click"],
993+ ),
994+ "ypbsjakojf": Sprite(
995+ pixels=[
996+ [14, 14, -1],
997+ [14, 14, 14],
998+ [14, 14, 14],
999+ [14, 14, -1],
1000+ ],
1001+ name="ypbsjakojf",
1002+ visible=True,
1003+ collidable=True,
1004+ tags=["button_7_R", "sys_click"],
1005+ ),
1006+ "yqgkbwbeag": Sprite(
1007+ pixels=[
1008+ [-1, 8, 8],
1009+ [8, 8, 8],
1010+ [8, 8, 8],
1011+ [-1, 8, 8],
1012+ ],
1013+ name="yqgkbwbeag",
1014+ visible=True,
1015+ collidable=True,
1016+ tags=["button_24_L", "sys_click"],
1017+ ),
1018+ "yyxhanzsay": Sprite(
1019+ pixels=[
1020+ [-1, 8, 8],
1021+ [8, 8, 8],
1022+ [8, 8, 8],
1023+ [-1, 8, 8],
1024+ ],
1025+ name="yyxhanzsay",
1026+ visible=True,
1027+ collidable=True,
1028+ tags=["button_17_L", "sys_click"],
1029+ ),
1030+ "zapbjqjgij": Sprite(
1031+ pixels=[
1032+ [-1, 8, 8],
1033+ [8, 8, 8],
1034+ [8, 8, 8],
1035+ [-1, 8, 8],
1036+ ],
1037+ name="zapbjqjgij",
1038+ visible=True,
1039+ collidable=True,
1040+ tags=["button_J_L", "sys_click"],
1041+ ),
1042+ "zdlwfpeyyd": Sprite(
1043+ pixels=[
1044+ [14, 14, -1],
1045+ [14, 14, 14],
1046+ [14, 14, 14],
1047+ [14, 14, -1],
1048+ ],
1049+ name="zdlwfpeyyd",
1050+ visible=True,
1051+ collidable=True,
1052+ tags=["button_H_R", "sys_click"],
1053+ ),
1054+ "zpxgvxwdex": Sprite(
1055+ pixels=[
1056+ [14, 14, -1],
1057+ [14, 14, 14],
1058+ [14, 14, 14],
1059+ [14, 14, -1],
1060+ ],
1061+ name="zpxgvxwdex",
1062+ visible=True,
1063+ collidable=True,
1064+ tags=["button_A_R", "sys_click"],
1065+ ),
1066+ "zrzovwqbcx": Sprite(
1067+ pixels=[
1068+ [14, 14, -1],
1069+ [14, 14, 14],
1070+ [14, 14, 14],
1071+ [14, 14, -1],
1072+ ],
1073+ name="zrzovwqbcx",
1074+ visible=True,
1075+ collidable=True,
1076+ tags=["button_25_R", "sys_click"],
1077+ ),
1078+ "zseotqksli": Sprite(
1079+ pixels=[
1080+ [14, 14, -1],
1081+ [14, 14, 14],
1082+ [14, 14, 14],
1083+ [14, 14, -1],
1084+ ],
1085+ name="zseotqksli",
1086+ visible=True,
1087+ collidable=True,
1088+ tags=["button_26_R", "sys_click"],
1089+ ),
1090+}
1091+levels = [
1092+ # Level 1
1093+ Level(
1094+ sprites=[
1095+ sprites["ahdesifykt"].clone().set_position(1, 8),
1096+ sprites["aydooxtcli"].clone().set_position(15, 3),
1097+ sprites["aydooxtcli"].clone().set_position(24, 9),
1098+ sprites["aydooxtcli"].clone().set_position(12, 15),
1099+ sprites["aydooxtcli"].clone().set_position(15, 15),
1100+ sprites["bghvgbtwcb"].clone().set_position(5, 2),
1101+ sprites["ekpijbeoel"].clone().set_position(6, 3),
1102+ sprites["ekpijbeoel"].clone().set_position(9, 15),
1103+ sprites["ekpijbeoel"].clone().set_position(6, 15),
1104+ sprites["kisflvfvsy"].clone().set_position(12, 3),
1105+ sprites["kisflvfvsy"].clone().set_position(24, 12),
1106+ sprites["kisflvfvsy"].clone().set_position(18, 15),
1107+ sprites["kisflvfvsy"].clone().set_position(6, 6),
1108+ sprites["odkpvwbihk"].clone().set_position(21, 3),
1109+ sprites["slefrnjymo"].clone().set_position(9, 3),
1110+ sprites["slefrnjymo"].clone().set_position(24, 3),
1111+ sprites["slefrnjymo"].clone().set_position(24, 15),
1112+ sprites["slefrnjymo"].clone().set_position(6, 12),
1113+ sprites["tddzizwhzf"].clone().set_position(18, 3),
1114+ sprites["tddzizwhzf"].clone().set_position(24, 6),
1115+ sprites["tddzizwhzf"].clone().set_position(21, 15),
1116+ sprites["tddzizwhzf"].clone().set_position(6, 9),
1117+ sprites["zpxgvxwdex"].clone().set_position(28, 8),
1118+ ],
1119+ grid_size=(32, 19),
1120+ data={
1121+ "StepCounter": 13,
1122+ "level_name": "kdrsqrvpwb",
1123+ },
1124+ ),
1125+ # Level 2
1126+ Level(
1127+ sprites=[
1128+ sprites["ahdesifykt"].clone().set_position(8, 5),
1129+ sprites["aydooxtcli"].clone().set_position(15, 6),
1130+ sprites["aydooxtcli"].clone().set_position(24, 9),
1131+ sprites["aydooxtcli"].clone().set_position(9, 15),
1132+ sprites["aydooxtcli"].clone().set_position(12, 15),
1133+ sprites["aydooxtcli"].clone().set_position(12, 24),
1134+ sprites["aydooxtcli"].clone().set_position(27, 24),
1135+ sprites["aydooxtcli"].clone().set_position(24, 30),
1136+ sprites["aydooxtcli"].clone().set_position(18, 24),
1137+ sprites["bghvgbtwcb"].clone().set_position(23, 14),
1138+ sprites["bghvgbtwcb"].clone().set_position(23, 23),
1139+ sprites["dvvacwfchj"].clone().set_position(36, 14),
1140+ sprites["ekpijbeoel"].clone().set_position(12, 18),
1141+ sprites["ekpijbeoel"].clone().set_position(6, 15),
1142+ sprites["ekpijbeoel"].clone().set_position(15, 15),
1143+ sprites["ekpijbeoel"].clone().set_position(24, 18),
1144+ sprites["ekpijbeoel"].clone().set_position(24, 27),
1145+ sprites["ekpijbeoel"].clone().set_position(15, 24),
1146+ sprites["ekpijbeoel"].clone().set_position(12, 21),
1147+ sprites["ekpijbeoel"].clone().set_position(6, 24),
1148+ sprites["kisflvfvsy"].clone().set_position(12, 6),
1149+ sprites["kisflvfvsy"].clone().set_position(24, 12),
1150+ sprites["kisflvfvsy"].clone().set_position(18, 15),
1151+ sprites["kisflvfvsy"].clone().set_position(12, 33),
1152+ sprites["kisflvfvsy"].clone().set_position(33, 24),
1153+ sprites["kisflvfvsy"].clone().set_position(27, 15),
1154+ sprites["kisflvfvsy"].clone().set_position(21, 24),
1155+ sprites["kisflvfvsy"].clone().set_position(15, 33),
1156+ sprites["kisflvfvsy"].clone().set_position(9, 24),
1157+ sprites["odkpvwbihk"].clone().set_position(21, 6),
1158+ sprites["odkpvwbihk"].clone().set_position(12, 27),
1159+ sprites["peuddygayw"].clone().set_position(2, 14),
1160+ sprites["reafrgzfwk"].clone().set_position(36, 23),
1161+ sprites["slefrnjymo"].clone().set_position(30, 15),
1162+ sprites["slefrnjymo"].clone().set_position(33, 15),
1163+ sprites["slefrnjymo"].clone().set_position(24, 15),
1164+ sprites["slefrnjymo"].clone().set_position(12, 12),
1165+ sprites["slefrnjymo"].clone().set_position(24, 21),
1166+ sprites["slefrnjymo"].clone().set_position(12, 30),
1167+ sprites["slefrnjymo"].clone().set_position(30, 24),
1168+ sprites["slefrnjymo"].clone().set_position(24, 33),
1169+ sprites["tddzizwhzf"].clone().set_position(18, 6),
1170+ sprites["tddzizwhzf"].clone().set_position(24, 6),
1171+ sprites["tddzizwhzf"].clone().set_position(21, 15),
1172+ sprites["tddzizwhzf"].clone().set_position(12, 9),
1173+ sprites["tddzizwhzf"].clone().set_position(21, 33),
1174+ sprites["tddzizwhzf"].clone().set_position(24, 24),
1175+ sprites["tddzizwhzf"].clone().set_position(18, 33),
1176+ sprites["ymwkwkfxct"].clone().set_position(2, 23),
1177+ sprites["zpxgvxwdex"].clone().set_position(27, 5),
1178+ ],
1179+ grid_size=(41, 41),
1180+ data={
1181+ "StepCounter": 60,
1182+ "level_name": "cecdsipmha",
1183+ },
1184+ ),
1185+ # Level 3
1186+ Level(
1187+ sprites=[
1188+ sprites["ahdesifykt"].clone().set_position(22, 24),
1189+ sprites["aydooxtcli"].clone().set_position(9, 3),
1190+ sprites["aydooxtcli"].clone().set_position(18, 6),
1191+ sprites["aydooxtcli"].clone().set_position(3, 12),
1192+ sprites["aydooxtcli"].clone().set_position(6, 6),
1193+ sprites["aydooxtcli"].clone().set_position(27, 3),
1194+ sprites["aydooxtcli"].clone().set_position(12, 21),
1195+ sprites["aydooxtcli"].clone().set_position(21, 15),
1196+ sprites["aydooxtcli"].clone().set_position(33, 12),
1197+ sprites["bghvgbtwcb"].clone().set_position(2, 11),
1198+ sprites["dvvacwfchj"].clone().set_position(13, 24),
1199+ sprites["ekpijbeoel"].clone().set_position(9, 21),
1200+ sprites["ekpijbeoel"].clone().set_position(21, 21),
1201+ sprites["ekpijbeoel"].clone().set_position(15, 12),
1202+ sprites["ekpijbeoel"].clone().set_position(30, 18),
1203+ sprites["ekpijbeoel"].clone().set_position(3, 9),
1204+ sprites["ekpijbeoel"].clone().set_position(21, 9),
1205+ sprites["fdgmtkfrxl"].clone().set_position(32, 11),
1206+ sprites["hfikqtizdo"].clone().set_position(6, 18),
1207+ sprites["kisflvfvsy"].clone().set_position(15, 21),
1208+ sprites["kisflvfvsy"].clone().set_position(21, 3),
1209+ sprites["kisflvfvsy"].clone().set_position(3, 15),
1210+ sprites["kisflvfvsy"].clone().set_position(27, 21),
1211+ sprites["odkpvwbihk"].clone().set_position(30, 6),
1212+ sprites["peuddygayw"].clone().set_position(10, 24),
1213+ sprites["slefrnjymo"].clone().set_position(15, 15),
1214+ sprites["slefrnjymo"].clone().set_position(15, 3),
1215+ sprites["slefrnjymo"].clone().set_position(33, 9),
1216+ sprites["slefrnjymo"].clone().set_position(24, 21),
1217+ sprites["slefrnjymo"].clone().set_position(18, 18),
1218+ sprites["tddzizwhzf"].clone().set_position(15, 9),
1219+ sprites["tddzizwhzf"].clone().set_position(24, 3),
1220+ sprites["tddzizwhzf"].clone().set_position(12, 3),
1221+ sprites["tddzizwhzf"].clone().set_position(33, 15),
1222+ sprites["tddzizwhzf"].clone().set_position(21, 12),
1223+ sprites["zpxgvxwdex"].clone().set_position(25, 24),
1224+ ],
1225+ grid_size=(39, 31),
1226+ data={
1227+ "StepCounter": 80,
1228+ "level_name": "vvnbesozdj",
1229+ },
1230+ ),
1231+ # Level 4
1232+ Level(
1233+ sprites=[
1234+ sprites["ahdesifykt"].clone().set_position(2, 11),
1235+ sprites["ahdesifykt"].clone().set_position(32, 11),
1236+ sprites["ahdesifykt"].clone().set_position(32, 41),
1237+ sprites["ahdesifykt"].clone().set_position(2, 41),
1238+ sprites["aydooxtcli"].clone().set_position(12, 9),
1239+ sprites["aydooxtcli"].clone().set_position(9, 42),
1240+ sprites["aydooxtcli"].clone().set_position(39, 42),
1241+ sprites["aydooxtcli"].clone().set_position(39, 12),
1242+ sprites["aydooxtcli"].clone().set_position(42, 6),
1243+ sprites["aydooxtcli"].clone().set_position(36, 42),
1244+ sprites["bghvgbtwcb"].clone().set_position(41, 41),
1245+ sprites["dvvacwfchj"].clone().set_position(11, 2).set_rotation(270),
1246+ sprites["dvvacwfchj"].clone().set_position(41, 2).set_rotation(270),
1247+ sprites["dvvacwfchj"].clone().set_position(11, 32).set_rotation(270),
1248+ sprites["dvvacwfchj"].clone().set_position(41, 32).set_rotation(270),
1249+ sprites["ekpijbeoel"].clone().set_position(6, 42),
1250+ sprites["ekpijbeoel"].clone().set_position(12, 12),
1251+ sprites["ekpijbeoel"].clone().set_position(48, 42),
1252+ sprites["ekpijbeoel"].clone().set_position(42, 12),
1253+ sprites["ekpijbeoel"].clone().set_position(6, 12),
1254+ sprites["ekpijbeoel"].clone().set_position(18, 42),
1255+ sprites["ekpijbeoel"].clone().set_position(42, 15),
1256+ sprites["fdgmtkfrxl"].clone().set_position(47, 41),
1257+ sprites["hfikqtizdo"].clone().set_position(12, 45),
1258+ sprites["kisflvfvsy"].clone().set_position(12, 6),
1259+ sprites["kisflvfvsy"].clone().set_position(15, 42),
1260+ sprites["kisflvfvsy"].clone().set_position(42, 45),
1261+ sprites["kisflvfvsy"].clone().set_position(18, 12),
1262+ sprites["kisflvfvsy"].clone().set_position(12, 48),
1263+ sprites["kisflvfvsy"].clone().set_position(42, 18),
1264+ sprites["kisflvfvsy"].clone().set_position(45, 42),
1265+ sprites["odkpvwbihk"].clone().set_position(36, 12),
1266+ sprites["peuddygayw"].clone().set_position(11, 21).set_rotation(270),
1267+ sprites["peuddygayw"].clone().set_position(41, 51).set_rotation(270),
1268+ sprites["peuddygayw"].clone().set_position(41, 21).set_rotation(270),
1269+ sprites["peuddygayw"].clone().set_position(11, 51).set_rotation(270),
1270+ sprites["slefrnjymo"].clone().set_position(12, 15),
1271+ sprites["slefrnjymo"].clone().set_position(42, 9),
1272+ sprites["slefrnjymo"].clone().set_position(42, 39),
1273+ sprites["slefrnjymo"].clone().set_position(12, 36),
1274+ sprites["slefrnjymo"].clone().set_position(9, 12),
1275+ sprites["slefrnjymo"].clone().set_position(12, 42),
1276+ sprites["slefrnjymo"].clone().set_position(45, 12),
1277+ sprites["slefrnjymo"].clone().set_position(42, 48),
1278+ sprites["tddzizwhzf"].clone().set_position(42, 36),
1279+ sprites["tddzizwhzf"].clone().set_position(15, 12),
1280+ sprites["tddzizwhzf"].clone().set_position(48, 12),
1281+ sprites["tddzizwhzf"].clone().set_position(12, 18),
1282+ sprites["tddzizwhzf"].clone().set_position(12, 39),
1283+ sprites["tddzizwhzf"].clone().set_position(42, 42),
1284+ sprites["zpxgvxwdex"].clone().set_position(21, 11),
1285+ sprites["zpxgvxwdex"].clone().set_position(51, 41),
1286+ sprites["zpxgvxwdex"].clone().set_position(21, 41),
1287+ sprites["zpxgvxwdex"].clone().set_position(51, 11),
1288+ ],
1289+ grid_size=(57, 57),
1290+ data={
1291+ "StepCounter": 150,
1292+ "level_name": "ihpokmcrjm",
1293+ },
1294+ ),
1295+ # Level 5
1296+ Level(
1297+ sprites=[
1298+ sprites["ahdesifykt"].clone().set_position(2, 17),
1299+ sprites["aydooxtcli"].clone().set_position(9, 3),
1300+ sprites["aydooxtcli"].clone().set_position(12, 15),
1301+ sprites["aydooxtcli"].clone().set_position(12, 9),
1302+ sprites["aydooxtcli"].clone().set_position(12, 24),
1303+ sprites["bghvgbtwcb"].clone().set_position(5, 2),
1304+ sprites["bghvgbtwcb"].clone().set_position(17, 2),
1305+ sprites["dvvacwfchj"].clone().set_position(22, 2),
1306+ sprites["ekpijbeoel"].clone().set_position(9, 15),
1307+ sprites["ekpijbeoel"].clone().set_position(6, 15),
1308+ sprites["ekpijbeoel"].clone().set_position(12, 12),
1309+ sprites["ekpijbeoel"].clone().set_position(6, 27),
1310+ sprites["ekpijbeoel"].clone().set_position(9, 21),
1311+ sprites["ekpijbeoel"].clone().set_position(9, 27),
1312+ sprites["ekpijbeoel"].clone().set_position(18, 3),
1313+ sprites["kisflvfvsy"].clone().set_position(6, 3),
1314+ sprites["kisflvfvsy"].clone().set_position(6, 18),
1315+ sprites["kisflvfvsy"].clone().set_position(12, 21),
1316+ sprites["odkpvwbihk"].clone().set_position(6, 9),
1317+ sprites["odkpvwbihk"].clone().set_position(12, 27),
1318+ sprites["peuddygayw"].clone().set_position(1, 2),
1319+ sprites["slefrnjymo"].clone().set_position(9, 9),
1320+ sprites["slefrnjymo"].clone().set_position(12, 3),
1321+ sprites["tddzizwhzf"].clone().set_position(15, 3),
1322+ sprites["tddzizwhzf"].clone().set_position(6, 21),
1323+ sprites["tddzizwhzf"].clone().set_position(6, 6),
1324+ sprites["zpxgvxwdex"].clone().set_position(15, 17),
1325+ ],
1326+ grid_size=(27, 32),
1327+ data={
1328+ "StepCounter": 80,
1329+ "level_name": "qibynbipmw",
1330+ },
1331+ ),
1332+ # Level 6
1333+ Level(
1334+ sprites=[
1335+ sprites["aoibinevrm"].clone().set_position(54, 14),
1336+ sprites["aqwhbtzcfg"].clone().set_position(50, 54).set_rotation(270),
1337+ sprites["auxglvwwep"].clone().set_position(39, 44),
1338+ sprites["avazowxmej"].clone().set_position(39, 44),
1339+ sprites["aydooxtcli"].clone().set_position(48, 9),
1340+ sprites["aydooxtcli"].clone().set_position(9, 15),
1341+ sprites["aydooxtcli"].clone().set_position(45, 15),
1342+ sprites["aydooxtcli"].clone().set_position(51, 24),
1343+ sprites["aydooxtcli"].clone().set_position(27, 39),
1344+ sprites["aydooxtcli"].clone().set_position(21, 45),
1345+ sprites["aydooxtcli"].clone().set_position(18, 54),
1346+ sprites["aydooxtcli"].clone().set_position(15, 18),
1347+ sprites["aydooxtcli"].clone().set_position(15, 15),
1348+ sprites["aydooxtcli"].clone().set_position(12, 12),
1349+ sprites["aydooxtcli"].clone().set_position(12, 24),
1350+ sprites["azkpmswird"].clone().set_position(24, 14),
1351+ sprites["bbxrzomunc"].clone().set_position(54, 14),
1352+ sprites["bghvgbtwcb"].clone().set_position(23, 26),
1353+ sprites["bghvgbtwcb"].clone().set_position(29, 26),
1354+ sprites["bghvgbtwcb"].clone().set_position(26, 32),
1355+ sprites["cfhhkdewbs"].clone().set_position(24, 14),
1356+ sprites["cgkbezvpdp"].clone().set_position(54, 14),
1357+ sprites["cjcssvobei"].clone().set_position(27, 57),
1358+ sprites["cyqncaekpb"].clone().set_position(24, 14),
1359+ sprites["djepopdkpm"].clone().set_position(24, 14),
1360+ sprites["dvvacwfchj"].clone().set_position(12, 27),
1361+ sprites["ekpijbeoel"].clone().set_position(51, 6),
1362+ sprites["ekpijbeoel"].clone().set_position(45, 18),
1363+ sprites["ekpijbeoel"].clone().set_position(18, 36),
1364+ sprites["ekpijbeoel"].clone().set_position(36, 36),
1365+ sprites["ekpijbeoel"].clone().set_position(30, 42),
1366+ sprites["ekpijbeoel"].clone().set_position(18, 45),
1367+ sprites["ekpijbeoel"].clone().set_position(33, 45),
1368+ sprites["ekpijbeoel"].clone().set_position(33, 51),
1369+ sprites["ekpijbeoel"].clone().set_position(36, 54),
1370+ sprites["ekpijbeoel"].clone().set_position(15, 12),
1371+ sprites["ekpijbeoel"].clone().set_position(9, 12),
1372+ sprites["ekpijbeoel"].clone().set_position(12, 18),
1373+ sprites["ekpijbeoel"].clone().set_position(3, 6),
1374+ sprites["gknuimaglj"].clone().set_position(39, 44),
1375+ sprites["hiictjojxg"].clone().set_position(24, 14),
1376+ sprites["hvgvgpuasf"].clone().set_position(42, 27),
1377+ sprites["icgyrqkqpc"].clone().set_position(54, 14),
1378+ sprites["ikgydmjteo"].clone().set_position(54, 14),
1379+ sprites["isjrkszgff"].clone().set_position(39, 44),
1380+ sprites["jxibbjkyqn"].clone().set_position(54, 14),
1381+ sprites["kcuuamovad"].clone().set_position(39, 44),
1382+ sprites["kisflvfvsy"].clone().set_position(33, 6),
1383+ sprites["kisflvfvsy"].clone().set_position(6, 9),
1384+ sprites["kisflvfvsy"].clone().set_position(39, 12),
1385+ sprites["kisflvfvsy"].clone().set_position(33, 15),
1386+ sprites["kisflvfvsy"].clone().set_position(39, 18),
1387+ sprites["kisflvfvsy"].clone().set_position(48, 21),
1388+ sprites["kisflvfvsy"].clone().set_position(30, 27),
1389+ sprites["kisflvfvsy"].clone().set_position(27, 36),
1390+ sprites["kisflvfvsy"].clone().set_position(33, 39),
1391+ sprites["kisflvfvsy"].clone().set_position(27, 42),
1392+ sprites["kisflvfvsy"].clone().set_position(36, 45),
1393+ sprites["kisflvfvsy"].clone().set_position(24, 48),
1394+ sprites["kisflvfvsy"].clone().set_position(27, 48),
1395+ sprites["kisflvfvsy"].clone().set_position(21, 51),
1396+ sprites["kisflvfvsy"].clone().set_position(6, 15),
1397+ sprites["kisflvfvsy"].clone().set_position(6, 21),
1398+ sprites["kisflvfvsy"].clone().set_position(18, 21),
1399+ sprites["kisflvfvsy"].clone().set_position(18, 15),
1400+ sprites["kisflvfvsy"].clone().set_position(12, 21),
1401+ sprites["lfcynjbowf"].clone().set_position(24, 14),
1402+ sprites["lnnponqnto"].clone().set_position(24, 14),
1403+ sprites["lqtjzsqwtz"].clone().set_position(39, 44),
1404+ sprites["odkpvwbihk"].clone().set_position(9, 18),
1405+ sprites["odkpvwbihk"].clone().set_position(45, 12),
1406+ sprites["odkpvwbihk"].clone().set_position(24, 45),
1407+ sprites["qfmlfsmppb"].clone().set_position(54, 14),
1408+ sprites["reafrgzfwk"].clone().set_position(12, 27),
1409+ sprites["rhyksubvjk"].clone().set_position(39, 44),
1410+ sprites["sbogwsxcvo"].clone().set_position(42, 27),
1411+ sprites["slefrnjymo"].clone().set_position(36, 9),
1412+ sprites["slefrnjymo"].clone().set_position(42, 12),
1413+ sprites["slefrnjymo"].clone().set_position(36, 15),
1414+ sprites["slefrnjymo"].clone().set_position(39, 15),
1415+ sprites["slefrnjymo"].clone().set_position(48, 15),
1416+ sprites["slefrnjymo"].clone().set_position(51, 15),
1417+ sprites["slefrnjymo"].clone().set_position(42, 24),
1418+ sprites["slefrnjymo"].clone().set_position(24, 27),
1419+ sprites["slefrnjymo"].clone().set_position(21, 39),
1420+ sprites["slefrnjymo"].clone().set_position(24, 42),
1421+ sprites["slefrnjymo"].clone().set_position(30, 45),
1422+ sprites["slefrnjymo"].clone().set_position(30, 48),
1423+ sprites["slefrnjymo"].clone().set_position(27, 51),
1424+ sprites["slefrnjymo"].clone().set_position(12, 9),
1425+ sprites["slefrnjymo"].clone().set_position(18, 9),
1426+ sprites["tcweaqkrko"].clone().set_position(54, 14),
1427+ sprites["tddzizwhzf"].clone().set_position(42, 6),
1428+ sprites["tddzizwhzf"].clone().set_position(42, 9),
1429+ sprites["tddzizwhzf"].clone().set_position(3, 15),
1430+ sprites["tddzizwhzf"].clone().set_position(42, 18),
1431+ sprites["tddzizwhzf"].clone().set_position(36, 21),
1432+ sprites["tddzizwhzf"].clone().set_position(42, 21),
1433+ sprites["tddzizwhzf"].clone().set_position(33, 24),
1434+ sprites["tddzizwhzf"].clone().set_position(27, 33),
1435+ sprites["tddzizwhzf"].clone().set_position(27, 54),
1436+ sprites["tddzizwhzf"].clone().set_position(3, 24),
1437+ sprites["tddzizwhzf"].clone().set_position(21, 24),
1438+ sprites["tddzizwhzf"].clone().set_position(21, 15),
1439+ sprites["tddzizwhzf"].clone().set_position(21, 6),
1440+ sprites["tddzizwhzf"].clone().set_position(12, 6),
1441+ sprites["uqipjzobpp"].clone().set_position(42, 27),
1442+ sprites["vdjpajqpny"].clone().set_position(39, 44),
1443+ sprites["xtxayxwyfn"].clone().set_position(27, 57),
1444+ sprites["ypbsjakojf"].clone().set_position(24, 14),
1445+ sprites["zdlwfpeyyd"].clone().set_position(27, 57),
1446+ sprites["zpxgvxwdex"].clone().set_position(12, 27),
1447+ sprites["zrzovwqbcx"].clone().set_position(50, 54).set_rotation(270),
1448+ sprites["zseotqksli"].clone().set_position(50, 54).set_rotation(270),
1449+ ],
1450+ grid_size=(60, 64),
1451+ data={
1452+ "StepCounter": 80,
1453+ "level_name": "ksgcbuhgwz",
1454+ },
1455+ ),
1456+ # Level 7
1457+ Level(
1458+ sprites=[
1459+ sprites["ahdesifykt"].clone().set_position(20, 27),
1460+ sprites["aydooxtcli"].clone().set_position(30, 9),
1461+ sprites["aydooxtcli"].clone().set_position(21, 24),
1462+ sprites["bghvgbtwcb"].clone().set_position(23, 20),
1463+ sprites["bghvgbtwcb"].clone().set_position(32, 8),
1464+ sprites["dvvacwfchj"].clone().set_position(11, 5).set_rotation(270),
1465+ sprites["ekpijbeoel"].clone().set_position(18, 9),
1466+ sprites["ekpijbeoel"].clone().set_position(27, 9),
1467+ sprites["ekpijbeoel"].clone().set_position(21, 21),
1468+ sprites["hvgvgpuasf"].clone().set_position(24, 27),
1469+ sprites["kisflvfvsy"].clone().set_position(15, 9),
1470+ sprites["odkpvwbihk"].clone().set_position(33, 9),
1471+ sprites["odkpvwbihk"].clone().set_position(24, 24),
1472+ sprites["oqsumsdlyg"].clone().set_position(20, 27),
1473+ sprites["peuddygayw"].clone().set_position(11, 18).set_rotation(270),
1474+ sprites["slefrnjymo"].clone().set_position(24, 9),
1475+ sprites["slefrnjymo"].clone().set_position(12, 12),
1476+ sprites["tddzizwhzf"].clone().set_position(12, 9),
1477+ sprites["tddzizwhzf"].clone().set_position(21, 9),
1478+ sprites["tddzizwhzf"].clone().set_position(12, 15),
1479+ sprites["tddzizwhzf"].clone().set_position(24, 21),
1480+ sprites["zpxgvxwdex"].clone().set_position(24, 27),
1481+ ],
1482+ grid_size=(48, 36),
1483+ data={
1484+ "StepCounter": 80,
1485+ "level_name": "yzzznxxvju",
1486+ },
1487+ ),
1488+ # Level 8
1489+ Level(
1490+ sprites=[
1491+ sprites["ahdesifykt"].clone().set_position(48, 23),
1492+ sprites["aydooxtcli"].clone().set_position(6, 6),
1493+ sprites["aydooxtcli"].clone().set_position(24, 6),
1494+ sprites["aydooxtcli"].clone().set_position(24, 9),
1495+ sprites["aydooxtcli"].clone().set_position(12, 12),
1496+ sprites["aydooxtcli"].clone().set_position(36, 12),
1497+ sprites["aydooxtcli"].clone().set_position(42, 15),
1498+ sprites["aydooxtcli"].clone().set_position(9, 18),
1499+ sprites["aydooxtcli"].clone().set_position(42, 21),
1500+ sprites["aydooxtcli"].clone().set_position(15, 24),
1501+ sprites["aydooxtcli"].clone().set_position(30, 30),
1502+ sprites["aydooxtcli"].clone().set_position(24, 33),
1503+ sprites["aydooxtcli"].clone().set_position(42, 36),
1504+ sprites["aydooxtcli"].clone().set_position(30, 45),
1505+ sprites["aydooxtcli"].clone().set_position(42, 45),
1506+ sprites["aydooxtcli"].clone().set_position(36, 48),
1507+ sprites["aydooxtcli"].clone().set_position(30, 51),
1508+ sprites["aydooxtcli"].clone().set_position(42, 51),
1509+ sprites["bghvgbtwcb"].clone().set_position(23, 50),
1510+ sprites["bghvgbtwcb"].clone().set_position(29, 50),
1511+ sprites["bghvgbtwcb"].clone().set_position(35, 50),
1512+ sprites["dvvacwfchj"].clone().set_position(52, 28),
1513+ sprites["ekpijbeoel"].clone().set_position(9, 9),
1514+ sprites["ekpijbeoel"].clone().set_position(30, 12),
1515+ sprites["ekpijbeoel"].clone().set_position(15, 15),
1516+ sprites["ekpijbeoel"].clone().set_position(42, 18),
1517+ sprites["ekpijbeoel"].clone().set_position(21, 21),
1518+ sprites["ekpijbeoel"].clone().set_position(24, 39),
1519+ sprites["hvgvgpuasf"].clone().set_position(35, 56),
1520+ sprites["kisflvfvsy"].clone().set_position(36, 15),
1521+ sprites["kisflvfvsy"].clone().set_position(36, 18),
1522+ sprites["kisflvfvsy"].clone().set_position(27, 27),
1523+ sprites["kisflvfvsy"].clone().set_position(36, 27),
1524+ sprites["kisflvfvsy"].clone().set_position(42, 27),
1525+ sprites["kisflvfvsy"].clone().set_position(36, 30),
1526+ sprites["kisflvfvsy"].clone().set_position(42, 33),
1527+ sprites["kisflvfvsy"].clone().set_position(24, 36),
1528+ sprites["kisflvfvsy"].clone().set_position(30, 36),
1529+ sprites["kisflvfvsy"].clone().set_position(30, 39),
1530+ sprites["kisflvfvsy"].clone().set_position(36, 39),
1531+ sprites["kisflvfvsy"].clone().set_position(24, 42),
1532+ sprites["kisflvfvsy"].clone().set_position(42, 42),
1533+ sprites["kisflvfvsy"].clone().set_position(24, 45),
1534+ sprites["kisflvfvsy"].clone().set_position(3, 12),
1535+ sprites["kisflvfvsy"].clone().set_position(36, 9),
1536+ sprites["lfimxyubtw"].clone().set_position(30, 56),
1537+ sprites["odkpvwbihk"].clone().set_position(18, 9),
1538+ sprites["odkpvwbihk"].clone().set_position(18, 27),
1539+ sprites["odkpvwbihk"].clone().set_position(18, 18),
1540+ sprites["oqsumsdlyg"].clone().set_position(30, 56),
1541+ sprites["peuddygayw"].clone().set_position(48, 28),
1542+ sprites["reafrgzfwk"].clone().set_position(52, 33),
1543+ sprites["sbogwsxcvo"].clone().set_position(35, 56),
1544+ sprites["sjummcsymu"].clone().set_position(30, 56),
1545+ sprites["slefrnjymo"].clone().set_position(6, 15),
1546+ sprites["slefrnjymo"].clone().set_position(24, 15),
1547+ sprites["slefrnjymo"].clone().set_position(27, 18),
1548+ sprites["slefrnjymo"].clone().set_position(30, 21),
1549+ sprites["slefrnjymo"].clone().set_position(36, 21),
1550+ sprites["slefrnjymo"].clone().set_position(33, 24),
1551+ sprites["slefrnjymo"].clone().set_position(42, 24),
1552+ sprites["slefrnjymo"].clone().set_position(21, 30),
1553+ sprites["slefrnjymo"].clone().set_position(30, 42),
1554+ sprites["slefrnjymo"].clone().set_position(24, 48),
1555+ sprites["slefrnjymo"].clone().set_position(30, 48),
1556+ sprites["slefrnjymo"].clone().set_position(39, 48),
1557+ sprites["slefrnjymo"].clone().set_position(24, 51),
1558+ sprites["tddzizwhzf"].clone().set_position(21, 12),
1559+ sprites["tddzizwhzf"].clone().set_position(42, 12),
1560+ sprites["tddzizwhzf"].clone().set_position(30, 15),
1561+ sprites["tddzizwhzf"].clone().set_position(12, 21),
1562+ sprites["tddzizwhzf"].clone().set_position(24, 24),
1563+ sprites["tddzizwhzf"].clone().set_position(42, 30),
1564+ sprites["tddzizwhzf"].clone().set_position(30, 33),
1565+ sprites["tddzizwhzf"].clone().set_position(36, 33),
1566+ sprites["tddzizwhzf"].clone().set_position(36, 36),
1567+ sprites["tddzizwhzf"].clone().set_position(42, 39),
1568+ sprites["tddzizwhzf"].clone().set_position(36, 42),
1569+ sprites["tddzizwhzf"].clone().set_position(36, 45),
1570+ sprites["tddzizwhzf"].clone().set_position(42, 48),
1571+ sprites["tddzizwhzf"].clone().set_position(36, 51),
1572+ sprites["uqipjzobpp"].clone().set_position(35, 56),
1573+ sprites["ymwkwkfxct"].clone().set_position(48, 33),
1574+ sprites["zpxgvxwdex"].clone().set_position(52, 23),
1575+ ],
1576+ grid_size=(63, 63),
1577+ data={
1578+ "StepCounter": 80,
1579+ "level_name": "hmzsasouat",
1580+ },
1581+ ),
1582+]
1583+izutyjcpih = {
1584+ "kdrsqrvpwb": {
1585+ "A": [
1586+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1587+ [-1, -1, 1, 2, 3, 4, 5, 6, 7, -1, -1],
1588+ [-1, -1, 20, -1, -1, -1, -1, -1, 8, -1, -1],
1589+ [-1, -1, 19, -1, -1, -1, -1, -1, 9, -1, -1],
1590+ [-1, -1, 18, -1, -1, -1, -1, -1, 10, -1, -1],
1591+ [-1, -1, 17, 16, 15, 14, 13, 12, 11, -1, -1],
1592+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1593+ ]
1594+ },
1595+ "cecdsipmha": {
1596+ "A": [
1597+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1598+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1599+ [-1, -1, -1, -1, 1, 2, 3, 4, 5, -1, -1, -1, -1, -1],
1600+ [-1, -1, -1, -1, 26, -1, -1, -1, 6, -1, -1, -1, -1, -1],
1601+ [-1, -1, -1, -1, 25, -1, -1, -1, 7, -1, -1, -1, -1, -1],
1602+ [-1, -1, -1, -1, 24, -1, -1, -1, 8, -1, -1, -1, -1, -1],
1603+ [-1, -1, -1, -1, 23, -1, -1, -1, 9, -1, -1, -1, -1, -1],
1604+ [-1, -1, -1, -1, 22, -1, -1, -1, 10, -1, -1, -1, -1, -1],
1605+ [-1, -1, -1, -1, 21, -1, -1, -1, 11, -1, -1, -1, -1, -1],
1606+ [-1, -1, -1, -1, 20, -1, -1, -1, 12, -1, -1, -1, -1, -1],
1607+ [-1, -1, -1, -1, 19, -1, -1, -1, 13, -1, -1, -1, -1, -1],
1608+ [-1, -1, -1, -1, 18, 17, 16, 15, 14, -1, -1, -1, -1, -1],
1609+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1610+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1611+ ],
1612+ "B": [
1613+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1614+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1615+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1616+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1617+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1618+ [-1, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1],
1619+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1620+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1621+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1622+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1623+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1624+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1625+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1626+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1627+ ],
1628+ "C": [
1629+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1630+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1631+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1632+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1633+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1634+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1635+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1636+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1637+ [-1, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1],
1638+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1639+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1640+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1641+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1642+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1643+ ],
1644+ },
1645+ "qibynbipmw": {
1646+ "A": [
1647+ [-1, -1, -1, -1, -1, -1, -1],
1648+ [-1, -1, 17, 18, 19, 20, 21],
1649+ [-1, -1, 16, -1, -1, -1, -1],
1650+ [-1, -1, 15, 14, 13, -1, -1],
1651+ [-1, -1, -1, -1, 12, -1, -1],
1652+ [-1, -1, 9, 10, 11, -1, -1],
1653+ [-1, -1, 8, -1, -1, -1, -1],
1654+ [-1, -1, 7, 6, 5, -1, -1],
1655+ [-1, -1, -1, -1, 4, -1, -1],
1656+ [-1, -1, 1, 2, 3, -1, -1],
1657+ ],
1658+ "B": [
1659+ [-1, -1, -1, -1, -1, -1, -1],
1660+ [-1, -1, 1, 2, 3, 4, 5],
1661+ [-1, -1, -1, -1, -1, -1, -1],
1662+ [-1, -1, -1, -1, -1, -1, -1],
1663+ [-1, -1, -1, -1, -1, -1, -1],
1664+ [-1, -1, -1, -1, -1, -1, -1],
1665+ [-1, -1, -1, -1, -1, -1, -1],
1666+ [-1, -1, -1, -1, -1, -1, -1],
1667+ [-1, -1, -1, -1, -1, -1, -1],
1668+ [-1, -1, -1, -1, -1, -1, -1],
1669+ ],
1670+ },
1671+ "asymmetry": {
1672+ "A": [
1673+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1674+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1675+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1676+ [-1, -1, -1, -1, 8, -1, -1, -1, -1, -1],
1677+ [-1, -1, -1, -1, 7, -1, -1, -1, -1, -1],
1678+ [-1, -1, -1, -1, 6, -1, -1, -1, -1, -1],
1679+ [-1, -1, -1, -1, 5, -1, -1, -1, -1, -1],
1680+ [-1, -1, -1, -1, 4, -1, -1, -1, -1, -1],
1681+ [-1, -1, -1, -1, 3, -1, -1, -1, -1, -1],
1682+ [-1, -1, -1, -1, 2, -1, -1, -1, -1, -1],
1683+ [-1, -1, -1, -1, 1, -1, -1, -1, -1, -1],
1684+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1685+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1686+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1687+ ],
1688+ "B": [
1689+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1690+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1691+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1692+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1693+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1694+ [-1, -1, 1, 2, 3, 4, 5, 6, -1, -1],
1695+ [-1, -1, 16, -1, -1, -1, -1, 7, -1, -1],
1696+ [-1, -1, 15, -1, -1, -1, -1, 8, -1, -1],
1697+ [-1, -1, 14, 13, 12, 11, 10, 9, -1, -1],
1698+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1699+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1700+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1701+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1702+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1703+ ],
1704+ },
1705+ "vvnbesozdj": {
1706+ "A": [
1707+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1708+ [-1, -1, -1, -1, -1, -1, -1, 1, 2, 3, -1, -1, -1],
1709+ [-1, -1, -1, -1, -1, -1, 16, -1, -1, -1, 4, -1, -1],
1710+ [-1, -1, -1, -1, -1, 15, -1, -1, -1, -1, -1, 5, -1],
1711+ [-1, -1, -1, -1, -1, 14, -1, -1, -1, -1, -1, 6, -1],
1712+ [-1, -1, -1, -1, -1, 13, -1, -1, -1, -1, -1, 7, -1],
1713+ [-1, -1, -1, -1, -1, -1, 12, -1, -1, -1, 8, -1, -1],
1714+ [-1, -1, -1, -1, -1, -1, -1, 11, 10, 9, -1, -1, -1],
1715+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1716+ ],
1717+ "B": [
1718+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1719+ [-1, -1, -1, 1, 2, 3, -1, -1, -1, -1, -1, -1, -1],
1720+ [-1, -1, 16, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1],
1721+ [-1, 15, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1],
1722+ [-1, 14, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1],
1723+ [-1, 13, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1],
1724+ [-1, -1, 12, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1],
1725+ [-1, -1, -1, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1],
1726+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1727+ ],
1728+ },
1729+ "ihpokmcrjm": {
1730+ "A": [
1731+ [
1732+ -1,
1733+ -1,
1734+ -1,
1735+ -1,
1736+ -1,
1737+ -1,
1738+ -1,
1739+ -1,
1740+ -1,
1741+ -1,
1742+ -1,
1743+ -1,
1744+ -1,
1745+ -1,
1746+ -1,
1747+ -1,
1748+ -1,
1749+ -1,
1750+ -1,
1751+ ],
1752+ [
1753+ -1,
1754+ -1,
1755+ -1,
1756+ -1,
1757+ -1,
1758+ -1,
1759+ -1,
1760+ -1,
1761+ -1,
1762+ -1,
1763+ -1,
1764+ -1,
1765+ -1,
1766+ -1,
1767+ -1,
1768+ -1,
1769+ -1,
1770+ -1,
1771+ -1,
1772+ ],
1773+ [
1774+ -1,
1775+ -1,
1776+ -1,
1777+ -1,
1778+ -1,
1779+ -1,
1780+ -1,
1781+ -1,
1782+ -1,
1783+ -1,
1784+ -1,
1785+ -1,
1786+ -1,
1787+ -1,
1788+ -1,
1789+ -1,
1790+ -1,
1791+ -1,
1792+ -1,
1793+ ],
1794+ [
1795+ -1,
1796+ -1,
1797+ -1,
1798+ -1,
1799+ -1,
1800+ -1,
1801+ -1,
1802+ -1,
1803+ -1,
1804+ -1,
1805+ -1,
1806+ -1,
1807+ -1,
1808+ -1,
1809+ -1,
1810+ -1,
1811+ -1,
1812+ -1,
1813+ -1,
1814+ ],
1815+ [-1, -1, 1, 2, 3, 4, 5, -1, -1, -1, -1, -1, 6, 7, 8, 9, 10, -1, -1],
1816+ [
1817+ -1,
1818+ -1,
1819+ -1,
1820+ -1,
1821+ -1,
1822+ -1,
1823+ -1,
1824+ -1,
1825+ -1,
1826+ -1,
1827+ -1,
1828+ -1,
1829+ -1,
1830+ -1,
1831+ -1,
1832+ -1,
1833+ -1,
1834+ -1,
1835+ -1,
1836+ ],
1837+ [
1838+ -1,
1839+ -1,
1840+ -1,
1841+ -1,
1842+ -1,
1843+ -1,
1844+ -1,
1845+ -1,
1846+ -1,
1847+ -1,
1848+ -1,
1849+ -1,
1850+ -1,
1851+ -1,
1852+ -1,
1853+ -1,
1854+ -1,
1855+ -1,
1856+ -1,
1857+ ],
1858+ [
1859+ -1,
1860+ -1,
1861+ -1,
1862+ -1,
1863+ -1,
1864+ -1,
1865+ -1,
1866+ -1,
1867+ -1,
1868+ -1,
1869+ -1,
1870+ -1,
1871+ -1,
1872+ -1,
1873+ -1,
1874+ -1,
1875+ -1,
1876+ -1,
1877+ -1,
1878+ ],
1879+ [
1880+ -1,
1881+ -1,
1882+ -1,
1883+ -1,
1884+ -1,
1885+ -1,
1886+ -1,
1887+ -1,
1888+ -1,
1889+ -1,
1890+ -1,
1891+ -1,
1892+ -1,
1893+ -1,
1894+ -1,
1895+ -1,
1896+ -1,
1897+ -1,
1898+ -1,
1899+ ],
1900+ [
1901+ -1,
1902+ -1,
1903+ -1,
1904+ -1,
1905+ -1,
1906+ -1,
1907+ -1,
1908+ -1,
1909+ -1,
1910+ -1,
1911+ -1,
1912+ -1,
1913+ -1,
1914+ -1,
1915+ -1,
1916+ -1,
1917+ -1,
1918+ -1,
1919+ -1,
1920+ ],
1921+ [
1922+ -1,
1923+ -1,
1924+ -1,
1925+ -1,
1926+ -1,
1927+ -1,
1928+ -1,
1929+ -1,
1930+ -1,
1931+ -1,
1932+ -1,
1933+ -1,
1934+ -1,
1935+ -1,
1936+ -1,
1937+ -1,
1938+ -1,
1939+ -1,
1940+ -1,
1941+ ],
1942+ [
1943+ -1,
1944+ -1,
1945+ -1,
1946+ -1,
1947+ -1,
1948+ -1,
1949+ -1,
1950+ -1,
1951+ -1,
1952+ -1,
1953+ -1,
1954+ -1,
1955+ -1,
1956+ -1,
1957+ -1,
1958+ -1,
1959+ -1,
1960+ -1,
1961+ -1,
1962+ ],
1963+ [
1964+ -1,
1965+ -1,
1966+ -1,
1967+ -1,
1968+ -1,
1969+ -1,
1970+ -1,
1971+ -1,
1972+ -1,
1973+ -1,
1974+ -1,
1975+ -1,
1976+ -1,
1977+ -1,
1978+ -1,
1979+ -1,
1980+ -1,
1981+ -1,
1982+ -1,
1983+ ],
1984+ [
1985+ -1,
1986+ -1,
1987+ -1,
1988+ -1,
1989+ -1,
1990+ -1,
1991+ -1,
1992+ -1,
1993+ -1,
1994+ -1,
1995+ -1,
1996+ -1,
1997+ -1,
1998+ -1,
1999+ -1,
2000+ -1,
2001+ -1,
2002+ -1,
2003+ -1,
2004+ ],
2005+ [
2006+ -1,
2007+ -1,
2008+ 11,
2009+ 12,
2010+ 13,
2011+ 14,
2012+ 15,
2013+ -1,
2014+ -1,
2015+ -1,
2016+ -1,
2017+ -1,
2018+ 16,
2019+ 17,
2020+ 18,
2021+ 19,
2022+ 20,
2023+ -1,
2024+ -1,
2025+ ],
2026+ [
2027+ -1,
2028+ -1,
2029+ -1,
2030+ -1,
2031+ -1,
2032+ -1,
2033+ -1,
2034+ -1,
2035+ -1,
2036+ -1,
2037+ -1,
2038+ -1,
2039+ -1,
2040+ -1,
2041+ -1,
2042+ -1,
2043+ -1,
2044+ -1,
2045+ -1,
2046+ ],
2047+ [
2048+ -1,
2049+ -1,
2050+ -1,
2051+ -1,
2052+ -1,
2053+ -1,
2054+ -1,
2055+ -1,
2056+ -1,
2057+ -1,
2058+ -1,
2059+ -1,
2060+ -1,
2061+ -1,
2062+ -1,
2063+ -1,
2064+ -1,
2065+ -1,
2066+ -1,
2067+ ],
2068+ [
2069+ -1,
2070+ -1,
2071+ -1,
2072+ -1,
2073+ -1,
2074+ -1,
2075+ -1,
2076+ -1,
2077+ -1,
2078+ -1,
2079+ -1,
2080+ -1,
2081+ -1,
2082+ -1,
2083+ -1,
2084+ -1,
2085+ -1,
2086+ -1,
2087+ -1,
2088+ ],
2089+ [
2090+ -1,
2091+ -1,
2092+ -1,
2093+ -1,
2094+ -1,
2095+ -1,
2096+ -1,
2097+ -1,
2098+ -1,
2099+ -1,
2100+ -1,
2101+ -1,
2102+ -1,
2103+ -1,
2104+ -1,
2105+ -1,
2106+ -1,
2107+ -1,
2108+ -1,
2109+ ],
2110+ ],
2111+ "B": [
2112+ [
2113+ -1,
2114+ -1,
2115+ -1,
2116+ -1,
2117+ -1,
2118+ -1,
2119+ -1,
2120+ -1,
2121+ -1,
2122+ -1,
2123+ -1,
2124+ -1,
2125+ -1,
2126+ -1,
2127+ -1,
2128+ -1,
2129+ -1,
2130+ -1,
2131+ -1,
2132+ ],
2133+ [
2134+ -1,
2135+ -1,
2136+ -1,
2137+ -1,
2138+ -1,
2139+ -1,
2140+ -1,
2141+ -1,
2142+ -1,
2143+ -1,
2144+ -1,
2145+ -1,
2146+ -1,
2147+ -1,
2148+ -1,
2149+ -1,
2150+ -1,
2151+ -1,
2152+ -1,
2153+ ],
2154+ [
2155+ -1,
2156+ -1,
2157+ -1,
2158+ -1,
2159+ 20,
2160+ -1,
2161+ -1,
2162+ -1,
2163+ -1,
2164+ -1,
2165+ -1,
2166+ -1,
2167+ -1,
2168+ -1,
2169+ 10,
2170+ -1,
2171+ -1,
2172+ -1,
2173+ -1,
2174+ ],
2175+ [-1, -1, -1, -1, 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1],
2176+ [-1, -1, -1, -1, 18, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, -1, -1, -1],
2177+ [-1, -1, -1, -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1],
2178+ [-1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1],
2179+ [
2180+ -1,
2181+ -1,
2182+ -1,
2183+ -1,
2184+ -1,
2185+ -1,
2186+ -1,
2187+ -1,
2188+ -1,
2189+ -1,
2190+ -1,
2191+ -1,
2192+ -1,
2193+ -1,
2194+ -1,
2195+ -1,
2196+ -1,
2197+ -1,
2198+ -1,
2199+ ],
2200+ [
2201+ -1,
2202+ -1,
2203+ -1,
2204+ -1,
2205+ -1,
2206+ -1,
2207+ -1,
2208+ -1,
2209+ -1,
2210+ -1,
2211+ -1,
2212+ -1,
2213+ -1,
2214+ -1,
2215+ -1,
2216+ -1,
2217+ -1,
2218+ -1,
2219+ -1,
2220+ ],
2221+ [
2222+ -1,
2223+ -1,
2224+ -1,
2225+ -1,
2226+ -1,
2227+ -1,
2228+ -1,
2229+ -1,
2230+ -1,
2231+ -1,
2232+ -1,
2233+ -1,
2234+ -1,
2235+ -1,
2236+ -1,
2237+ -1,
2238+ -1,
2239+ -1,
2240+ -1,
2241+ ],
2242+ [
2243+ -1,
2244+ -1,
2245+ -1,
2246+ -1,
2247+ -1,
2248+ -1,
2249+ -1,
2250+ -1,
2251+ -1,
2252+ -1,
2253+ -1,
2254+ -1,
2255+ -1,
2256+ -1,
2257+ -1,
2258+ -1,
2259+ -1,
2260+ -1,
2261+ -1,
2262+ ],
2263+ [
2264+ -1,
2265+ -1,
2266+ -1,
2267+ -1,
2268+ -1,
2269+ -1,
2270+ -1,
2271+ -1,
2272+ -1,
2273+ -1,
2274+ -1,
2275+ -1,
2276+ -1,
2277+ -1,
2278+ -1,
2279+ -1,
2280+ -1,
2281+ -1,
2282+ -1,
2283+ ],
2284+ [-1, -1, -1, -1, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1],
2285+ [-1, -1, -1, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1],
2286+ [-1, -1, -1, -1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, -1, -1],
2287+ [-1, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1],
2288+ [-1, -1, -1, -1, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1],
2289+ [
2290+ -1,
2291+ -1,
2292+ -1,
2293+ -1,
2294+ -1,
2295+ -1,
2296+ -1,
2297+ -1,
2298+ -1,
2299+ -1,
2300+ -1,
2301+ -1,
2302+ -1,
2303+ -1,
2304+ -1,
2305+ -1,
2306+ -1,
2307+ -1,
2308+ -1,
2309+ ],
2310+ [
2311+ -1,
2312+ -1,
2313+ -1,
2314+ -1,
2315+ -1,
2316+ -1,
2317+ -1,
2318+ -1,
2319+ -1,
2320+ -1,
2321+ -1,
2322+ -1,
2323+ -1,
2324+ -1,
2325+ -1,
2326+ -1,
2327+ -1,
2328+ -1,
2329+ -1,
2330+ ],
2331+ ],
2332+ },
2333+ "concentric": {
2334+ "A": [
2335+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2336+ [-1, -1, -1, -1, -1, 1, 2, 3, 4, 5, -1, -1, -1, -1, -1, -1],
2337+ [-1, -1, -1, -1, 28, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1],
2338+ [-1, -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1],
2339+ [-1, -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, -1, -1],
2340+ [-1, -1, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1],
2341+ [-1, -1, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1],
2342+ [-1, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, -1, -1, -1],
2343+ [-1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1],
2344+ [-1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, 13, -1, -1, -1, -1],
2345+ [-1, -1, -1, -1, 20, -1, -1, -1, -1, -1, 14, -1, -1, -1, -1, -1],
2346+ [-1, -1, -1, -1, -1, 19, 18, 17, 16, 15, -1, -1, -1, -1, -1, -1],
2347+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2348+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2349+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2350+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2351+ ],
2352+ "B": [
2353+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2354+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2355+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2356+ [-1, -1, -1, -1, -1, -1, 1, 2, 3, -1, -1, -1, -1, -1, -1, -1],
2357+ [-1, -1, -1, -1, -1, 16, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1],
2358+ [-1, -1, -1, -1, 15, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1],
2359+ [-1, -1, -1, -1, 14, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1],
2360+ [-1, -1, -1, -1, 13, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1],
2361+ [-1, -1, -1, -1, -1, 12, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1],
2362+ [-1, -1, -1, -1, -1, -1, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1],
2363+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2364+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2365+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2366+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2367+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2368+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2369+ ],
2370+ "C": [
2371+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2372+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2373+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2374+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2375+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2376+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2377+ [-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1, -1],
2378+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2379+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2380+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2381+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2382+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2383+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2384+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2385+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2386+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2387+ ],
2388+ },
2389+ "metronome": {
2390+ "A": [
2391+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2392+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2393+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2394+ [-1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1],
2395+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2396+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2397+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2398+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2399+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2400+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2401+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2402+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2403+ ],
2404+ "B": [
2405+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2406+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2407+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2408+ [-1, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2409+ [-1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2410+ [-1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2411+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2412+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2413+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2414+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2415+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2416+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2417+ ],
2418+ "C": [
2419+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2420+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2421+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2422+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2423+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2424+ [-1, -1, -1, -1, 1, 2, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1],
2425+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2426+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2427+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2428+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2429+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2430+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2431+ ],
2432+ "D": [
2433+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2434+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2435+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2436+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2437+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2438+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2439+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2440+ [-1, -1, -1, -1, -1, -1, -1, 1, 2, -1, -1, -1, -1, -1, -1, -1],
2441+ [-1, -1, -1, -1, -1, -1, -1, 4, 3, -1, -1, -1, -1, -1, -1, -1],
2442+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2443+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2444+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2445+ ],
2446+ },
2447+ "yzzznxxvju": {
2448+ "A": [
2449+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2450+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2451+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2452+ [-1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1],
2453+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2454+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2455+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2456+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2457+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2458+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2459+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2460+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2461+ ],
2462+ "B": [
2463+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2464+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2465+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2466+ [-1, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2467+ [-1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2468+ [-1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2469+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2470+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2471+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2472+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2473+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2474+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2475+ ],
2476+ "C": [
2477+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2478+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2479+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2480+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2481+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2482+ [-1, -1, -1, -1, 1, 2, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1],
2483+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2484+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2485+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2486+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2487+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2488+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2489+ ],
2490+ "D": [
2491+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2492+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2493+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2494+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2495+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2496+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2497+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2498+ [-1, -1, -1, -1, -1, -1, -1, 1, 2, -1, -1, -1, -1, -1, -1, -1],
2499+ [-1, -1, -1, -1, -1, -1, -1, 4, 3, -1, -1, -1, -1, -1, -1, -1],
2500+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2501+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2502+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2503+ ],
2504+ },
2505+ "hmzsasouat": {
2506+ "A": [
2507+ [
2508+ -1,
2509+ -1,
2510+ -1,
2511+ -1,
2512+ -1,
2513+ -1,
2514+ -1,
2515+ -1,
2516+ -1,
2517+ -1,
2518+ -1,
2519+ -1,
2520+ -1,
2521+ -1,
2522+ -1,
2523+ -1,
2524+ -1,
2525+ -1,
2526+ -1,
2527+ -1,
2528+ ],
2529+ [
2530+ -1,
2531+ -1,
2532+ -1,
2533+ -1,
2534+ -1,
2535+ -1,
2536+ -1,
2537+ -1,
2538+ -1,
2539+ -1,
2540+ -1,
2541+ -1,
2542+ -1,
2543+ -1,
2544+ -1,
2545+ -1,
2546+ -1,
2547+ -1,
2548+ -1,
2549+ -1,
2550+ ],
2551+ [
2552+ -1,
2553+ -1,
2554+ -1,
2555+ -1,
2556+ -1,
2557+ -1,
2558+ -1,
2559+ -1,
2560+ -1,
2561+ -1,
2562+ -1,
2563+ -1,
2564+ -1,
2565+ -1,
2566+ -1,
2567+ -1,
2568+ -1,
2569+ -1,
2570+ -1,
2571+ -1,
2572+ ],
2573+ [
2574+ -1,
2575+ -1,
2576+ -1,
2577+ -1,
2578+ -1,
2579+ -1,
2580+ 1,
2581+ -1,
2582+ -1,
2583+ -1,
2584+ -1,
2585+ -1,
2586+ -1,
2587+ -1,
2588+ -1,
2589+ -1,
2590+ -1,
2591+ -1,
2592+ -1,
2593+ -1,
2594+ ],
2595+ [
2596+ -1,
2597+ -1,
2598+ -1,
2599+ -1,
2600+ -1,
2601+ -1,
2602+ -1,
2603+ 2,
2604+ -1,
2605+ -1,
2606+ -1,
2607+ -1,
2608+ -1,
2609+ -1,
2610+ -1,
2611+ -1,
2612+ -1,
2613+ -1,
2614+ -1,
2615+ -1,
2616+ ],
2617+ [
2618+ -1,
2619+ -1,
2620+ -1,
2621+ -1,
2622+ -1,
2623+ -1,
2624+ -1,
2625+ -1,
2626+ -1,
2627+ -1,
2628+ -1,
2629+ -1,
2630+ -1,
2631+ -1,
2632+ -1,
2633+ -1,
2634+ -1,
2635+ -1,
2636+ -1,
2637+ -1,
2638+ ],
2639+ [
2640+ -1,
2641+ -1,
2642+ -1,
2643+ -1,
2644+ -1,
2645+ -1,
2646+ -1,
2647+ -1,
2648+ -1,
2649+ -1,
2650+ -1,
2651+ -1,
2652+ -1,
2653+ -1,
2654+ -1,
2655+ -1,
2656+ -1,
2657+ -1,
2658+ -1,
2659+ -1,
2660+ ],
2661+ [
2662+ -1,
2663+ -1,
2664+ -1,
2665+ -1,
2666+ -1,
2667+ -1,
2668+ -1,
2669+ -1,
2670+ -1,
2671+ -1,
2672+ -1,
2673+ -1,
2674+ -1,
2675+ -1,
2676+ -1,
2677+ -1,
2678+ -1,
2679+ -1,
2680+ -1,
2681+ -1,
2682+ ],
2683+ [
2684+ -1,
2685+ -1,
2686+ -1,
2687+ -1,
2688+ -1,
2689+ -1,
2690+ -1,
2691+ -1,
2692+ -1,
2693+ -1,
2694+ -1,
2695+ -1,
2696+ -1,
2697+ -1,
2698+ -1,
2699+ -1,
2700+ -1,
2701+ -1,
2702+ -1,
2703+ -1,
2704+ ],
2705+ [
2706+ -1,
2707+ -1,
2708+ -1,
2709+ -1,
2710+ -1,
2711+ -1,
2712+ -1,
2713+ -1,
2714+ -1,
2715+ -1,
2716+ -1,
2717+ -1,
2718+ -1,
2719+ -1,
2720+ -1,
2721+ -1,
2722+ -1,
2723+ -1,
2724+ -1,
2725+ -1,
2726+ ],
2727+ [
2728+ -1,
2729+ -1,
2730+ -1,
2731+ -1,
2732+ -1,
2733+ -1,
2734+ -1,
2735+ -1,
2736+ -1,
2737+ -1,
2738+ -1,
2739+ -1,
2740+ -1,
2741+ -1,
2742+ -1,
2743+ -1,
2744+ -1,
2745+ -1,
2746+ -1,
2747+ -1,
2748+ ],
2749+ [
2750+ -1,
2751+ -1,
2752+ -1,
2753+ -1,
2754+ -1,
2755+ -1,
2756+ -1,
2757+ -1,
2758+ -1,
2759+ -1,
2760+ -1,
2761+ -1,
2762+ -1,
2763+ -1,
2764+ -1,
2765+ -1,
2766+ -1,
2767+ -1,
2768+ -1,
2769+ -1,
2770+ ],
2771+ [
2772+ -1,
2773+ -1,
2774+ -1,
2775+ -1,
2776+ -1,
2777+ -1,
2778+ -1,
2779+ -1,
2780+ -1,
2781+ -1,
2782+ -1,
2783+ -1,
2784+ -1,
2785+ -1,
2786+ -1,
2787+ -1,
2788+ -1,
2789+ -1,
2790+ -1,
2791+ -1,
2792+ ],
2793+ [
2794+ -1,
2795+ -1,
2796+ -1,
2797+ -1,
2798+ -1,
2799+ -1,
2800+ -1,
2801+ -1,
2802+ -1,
2803+ -1,
2804+ -1,
2805+ -1,
2806+ -1,
2807+ -1,
2808+ -1,
2809+ -1,
2810+ -1,
2811+ -1,
2812+ -1,
2813+ -1,
2814+ ],
2815+ [
2816+ -1,
2817+ -1,
2818+ -1,
2819+ -1,
2820+ -1,
2821+ -1,
2822+ -1,
2823+ -1,
2824+ -1,
2825+ -1,
2826+ -1,
2827+ -1,
2828+ -1,
2829+ -1,
2830+ -1,
2831+ -1,
2832+ -1,
2833+ -1,
2834+ -1,
2835+ -1,
2836+ ],
2837+ [
2838+ -1,
2839+ -1,
2840+ -1,
2841+ -1,
2842+ -1,
2843+ -1,
2844+ -1,
2845+ -1,
2846+ -1,
2847+ -1,
2848+ -1,
2849+ -1,
2850+ -1,
2851+ -1,
2852+ -1,
2853+ -1,
2854+ -1,
2855+ -1,
2856+ -1,
2857+ -1,
2858+ ],
2859+ [
2860+ -1,
2861+ -1,
2862+ -1,
2863+ -1,
2864+ -1,
2865+ -1,
2866+ -1,
2867+ -1,
2868+ -1,
2869+ -1,
2870+ -1,
2871+ -1,
2872+ -1,
2873+ -1,
2874+ -1,
2875+ -1,
2876+ -1,
2877+ -1,
2878+ -1,
2879+ -1,
2880+ ],
2881+ [
2882+ -1,
2883+ -1,
2884+ -1,
2885+ -1,
2886+ -1,
2887+ -1,
2888+ -1,
2889+ -1,
2890+ -1,
2891+ -1,
2892+ -1,
2893+ -1,
2894+ -1,
2895+ -1,
2896+ -1,
2897+ -1,
2898+ -1,
2899+ -1,
2900+ -1,
2901+ -1,
2902+ ],
2903+ [
2904+ -1,
2905+ -1,
2906+ -1,
2907+ -1,
2908+ -1,
2909+ -1,
2910+ -1,
2911+ -1,
2912+ -1,
2913+ -1,
2914+ -1,
2915+ -1,
2916+ -1,
2917+ -1,
2918+ -1,
2919+ -1,
2920+ -1,
2921+ -1,
2922+ -1,
2923+ -1,
2924+ ],
2925+ [
2926+ -1,
2927+ -1,
2928+ -1,
2929+ -1,
2930+ -1,
2931+ -1,
2932+ -1,
2933+ -1,
2934+ -1,
2935+ -1,
2936+ -1,
2937+ -1,
2938+ -1,
2939+ -1,
2940+ -1,
2941+ -1,
2942+ -1,
2943+ -1,
2944+ -1,
2945+ -1,
2946+ ],
2947+ [
2948+ -1,
2949+ -1,
2950+ -1,
2951+ -1,
2952+ -1,
2953+ -1,
2954+ -1,
2955+ -1,
2956+ -1,
2957+ -1,
2958+ -1,
2959+ -1,
2960+ -1,
2961+ -1,
2962+ -1,
2963+ -1,
2964+ -1,
2965+ -1,
2966+ -1,
2967+ -1,
2968+ ],
2969+ ],
2970+ "B": [
2971+ [
2972+ -1,
2973+ -1,
2974+ -1,
2975+ -1,
2976+ -1,
2977+ -1,
2978+ -1,
2979+ -1,
2980+ -1,
2981+ -1,
2982+ -1,
2983+ -1,
2984+ -1,
2985+ -1,
2986+ -1,
2987+ -1,
2988+ -1,
2989+ -1,
2990+ -1,
2991+ -1,
2992+ ],
2993+ [
2994+ -1,
2995+ -1,
2996+ -1,
2997+ -1,
2998+ -1,
2999+ -1,
Diff 已截断,其余部分请查看文件。
+19 −0 referee/environment_files/lp85/305b61c3/metadata.json 新增 查看文件
@@ -0,0 +1,19 @@
1+{
2+ "game_id": "lp85-305b61c3",
3+ "title": "LP85",
4+ "default_fps": 20,
5+ "tags": [
6+ "click"
7+ ],
8+ "baseline_actions": [
9+ 17,
10+ 38,
11+ 31,
12+ 16,
13+ 41,
14+ 60,
15+ 26,
16+ 159
17+ ],
18+ "date_downloaded": "2026-10-21T17:11:14.832253+00:00"
19+}
+2060 −0 referee/environment_files/ls20/9607627b/ls20.py 新增 查看文件
@@ -0,0 +1,2060 @@
1+# MIT License
2+#
3+# Copyright (c) 2026 ARC Prize Foundation
4+#
5+# Permission is hereby granted, free of charge, to any person obtaining a copy
6+# of this software and associated documentation files (the "Software"), to deal
7+# in the Software without restriction, including without limitation the rights
8+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+# copies of the Software, and to permit persons to whom the Software is
10+# furnished to do so, subject to the following conditions:
11+#
12+# The above copyright notice and this permission notice shall be included in all
13+# copies or substantial portions of the Software.
14+#
15+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+# SOFTWARE.
22+
23+import math
24+from typing import List, Optional, Set, Tuple
25+
26+import numpy as np
27+from arcengine import (
28+ ARCBaseGame,
29+ BlockingMode,
30+ Camera,
31+ GameAction,
32+ Level,
33+ RenderableUserDisplay,
34+ Sprite,
35+)
36+
37+"."
38+sprites = {
39+ "ajdspzphhd": Sprite(
40+ pixels=[
41+ [14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14],
42+ ],
43+ name="ajdspzphhd",
44+ visible=False,
45+ collidable=True,
46+ tags=["xfmluydglp"],
47+ ),
48+ "eqatonpohu": Sprite(
49+ pixels=[
50+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
51+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
52+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
53+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
54+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
55+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
56+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
57+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
58+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
59+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
60+ ],
61+ name="eqatonpohu",
62+ visible=True,
63+ collidable=True,
64+ tags=["eqatonpohu"],
65+ layer=1,
66+ ),
67+ "fesygzfqui": Sprite(
68+ pixels=[
69+ [4, 4, 4, 4, -2],
70+ [4, 4, 4, 4, -2],
71+ [4, 4, 4, 4, -2],
72+ [4, 4, 4, 4, -2],
73+ [4, 4, 4, 4, -2],
74+ ],
75+ name="fesygzfqui",
76+ visible=True,
77+ collidable=True,
78+ tags=["ihdgageizm"],
79+ layer=-5,
80+ ),
81+ "fywfjzkxlm": Sprite(
82+ pixels=[
83+ [-1, 0, -1],
84+ [-1, 0, -1],
85+ [0, 0, 0],
86+ ],
87+ name="fywfjzkxlm",
88+ visible=True,
89+ collidable=True,
90+ ),
91+ "ghizzeqtoh": Sprite(
92+ pixels=[
93+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
94+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
95+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
96+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
97+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
98+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
99+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
100+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
101+ [0, -1, -1, -1, -1, -1, -1, -1, -1, 0],
102+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
103+ ],
104+ name="ghizzeqtoh",
105+ visible=False,
106+ collidable=True,
107+ tags=["ghizzeqtoh"],
108+ layer=5,
109+ ),
110+ "gngifvjddu": Sprite(
111+ pixels=[
112+ [0, 0, -1],
113+ [-1, 0, 0],
114+ [0, -1, 0],
115+ ],
116+ name="gngifvjddu",
117+ visible=True,
118+ collidable=True,
119+ ),
120+ "grcpfuizfp": Sprite(
121+ pixels=[
122+ [-1, 0, -1],
123+ [0, 0, -1],
124+ [-1, 0, 0],
125+ ],
126+ name="grcpfuizfp",
127+ visible=True,
128+ collidable=True,
129+ layer=1,
130+ ),
131+ "hahdypcdru": Sprite(
132+ pixels=[
133+ [14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14],
134+ ],
135+ name="hahdypcdru",
136+ visible=False,
137+ collidable=True,
138+ tags=["xfmluydglp"],
139+ ),
140+ "hoswmpiqkw": Sprite(
141+ pixels=[
142+ [0, 0, 0, 0, 0, 0, 0],
143+ [0, -1, -1, -1, -1, -1, 0],
144+ [0, -1, -1, -1, -1, -1, 0],
145+ [0, -1, -1, -1, -1, -1, 0],
146+ [0, -1, -1, -1, -1, -1, 0],
147+ [0, -1, -1, -1, -1, -1, 0],
148+ [0, 0, 0, 0, 0, 0, 0],
149+ ],
150+ name="hoswmpiqkw",
151+ visible=False,
152+ collidable=True,
153+ tags=["hoswmpiqkw"],
154+ layer=-1,
155+ ),
156+ "ihdgageizm": Sprite(
157+ pixels=[
158+ [4, 4, 4, 4, 4],
159+ [4, 4, 4, 4, 4],
160+ [4, 4, 4, 4, 4],
161+ [4, 4, 4, 4, 4],
162+ [4, 4, 4, 4, 4],
163+ ],
164+ name="ihdgageizm",
165+ visible=True,
166+ collidable=True,
167+ tags=["ihdgageizm"],
168+ layer=-5,
169+ ),
170+ "irgjxweouz": Sprite(
171+ pixels=[
172+ [14],
173+ [14],
174+ [14],
175+ [14],
176+ [14],
177+ [14],
178+ [14],
179+ [14],
180+ [14],
181+ [14],
182+ [14],
183+ [14],
184+ [14],
185+ [14],
186+ [14],
187+ [14],
188+ [14],
189+ [14],
190+ [14],
191+ [14],
192+ [14],
193+ [14],
194+ [14],
195+ [14],
196+ [14],
197+ [14],
198+ [14],
199+ [14],
200+ [14],
201+ ],
202+ name="irgjxweouz",
203+ visible=False,
204+ collidable=True,
205+ tags=["xfmluydglp"],
206+ ),
207+ "kapcaakvb_b": Sprite(
208+ pixels=[
209+ [1, 1, 1, 1, 1],
210+ [-2, -2, -2, -2, -2],
211+ [-2, -2, -2, -2, -2],
212+ [-2, -2, -2, -2, -2],
213+ [-2, -2, -2, -2, -2],
214+ ],
215+ name="kapcaakvb_b",
216+ visible=True,
217+ collidable=True,
218+ tags=["gbvqrjtaqo"],
219+ ),
220+ "krdypjjivz": Sprite(
221+ pixels=[
222+ [-2, -2, -2, -2, -2],
223+ [4, 4, 4, 4, 4],
224+ [4, 4, 4, 4, 4],
225+ [4, 4, 4, 4, 4],
226+ [4, 4, 4, 4, 4],
227+ ],
228+ name="krdypjjivz",
229+ visible=True,
230+ collidable=True,
231+ tags=["ihdgageizm"],
232+ layer=-5,
233+ ),
234+ "kvynsvxbpi": Sprite(
235+ pixels=[
236+ [0, -1, -1],
237+ [-1, 0, -1],
238+ [-1, -1, 0],
239+ ],
240+ name="kvynsvxbpi",
241+ visible=True,
242+ collidable=True,
243+ tags=["kvynsvxbpi"],
244+ ),
245+ "lujfinsby_t": Sprite(
246+ pixels=[
247+ [-2, -2, -2, -2, -2],
248+ [-2, -2, -2, -2, -2],
249+ [-2, -2, -2, -2, -2],
250+ [-2, -2, -2, -2, -2],
251+ [1, 1, 1, 1, 1],
252+ ],
253+ name="lujfinsby_t",
254+ visible=True,
255+ collidable=True,
256+ tags=["gbvqrjtaqo"],
257+ ),
258+ "mkfbgalsbe": Sprite(
259+ pixels=[
260+ [0, -1, 0],
261+ [0, -1, 0],
262+ [0, 0, 0],
263+ ],
264+ name="mkfbgalsbe",
265+ visible=True,
266+ collidable=True,
267+ ),
268+ "mkjdaccuuf": Sprite(
269+ pixels=[
270+ [-2, -2, -2, -2, -2],
271+ [-2, 0, -2, -2, -2],
272+ [-2, -2, 0, 0, -2],
273+ [-2, -2, 0, -2, -2],
274+ [-2, -2, -2, -2, -2],
275+ ],
276+ name="mkjdaccuuf",
277+ visible=True,
278+ collidable=False,
279+ tags=["ttfwljgohq"],
280+ layer=-1,
281+ ),
282+ "mxfhnkdzvf": Sprite(
283+ pixels=[
284+ [4, 4, 4, 4, 4],
285+ [4, 4, 4, 4, 4],
286+ [4, 4, 4, 4, 4],
287+ [4, 4, 4, 4, 4],
288+ [-2, -2, -2, -2, -2],
289+ ],
290+ name="mxfhnkdzvf",
291+ visible=True,
292+ collidable=True,
293+ tags=["ihdgageizm"],
294+ layer=-5,
295+ ),
296+ "neltxxziap": Sprite(
297+ pixels=[
298+ [14],
299+ [14],
300+ [14],
301+ [14],
302+ [14],
303+ [14],
304+ [14],
305+ [14],
306+ [14],
307+ [14],
308+ [14],
309+ ],
310+ name="neltxxziap",
311+ visible=False,
312+ collidable=True,
313+ tags=["xfmluydglp"],
314+ ),
315+ "njpewhmtfd": Sprite(
316+ pixels=[
317+ [5, 5, 5, 5, 5, 5, 5],
318+ [5, -1, -1, -1, -1, -1, 5],
319+ [5, -1, -1, -1, -1, -1, 5],
320+ [5, -1, -1, -1, -1, -1, 5],
321+ [5, -1, -1, -1, -1, -1, 5],
322+ [5, -1, -1, -1, -1, -1, 5],
323+ [5, 5, 5, 5, 5, 5, 5],
324+ ],
325+ name="njpewhmtfd",
326+ visible=True,
327+ collidable=True,
328+ tags=["vjotnebuqo", "vfkkzdgxzx"],
329+ layer=-3,
330+ ),
331+ "nnjhdcanjk": Sprite(
332+ pixels=[
333+ [-1, 0, 0],
334+ [0, -1, 0],
335+ [-1, 0, -1],
336+ ],
337+ name="nnjhdcanjk",
338+ visible=True,
339+ collidable=True,
340+ ),
341+ "npxgalaybz": Sprite(
342+ pixels=[
343+ [11, 11, 11],
344+ [11, -1, 11],
345+ [11, 11, 11],
346+ ],
347+ name="npxgalaybz",
348+ visible=True,
349+ collidable=False,
350+ tags=["npxgalaybz"],
351+ layer=-1,
352+ ),
353+ "nszegiawib": Sprite(
354+ pixels=[
355+ [3, 3, -1, -1, -1, -1, -1, 3, 3],
356+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
357+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
358+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
359+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
360+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
361+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
362+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
363+ [3, 3, 3, 3, 3, 3, 3, 3, 3],
364+ ],
365+ name="nszegiawib",
366+ visible=True,
367+ collidable=True,
368+ layer=-4,
369+ ),
370+ "rhsxkxzdjz": Sprite(
371+ pixels=[
372+ [-2, -2, -2, -2, -2],
373+ [-2, -2, 0, -2, -2],
374+ [-2, 1, 0, 0, -2],
375+ [-2, -2, 1, -2, -2],
376+ [-2, -2, -2, -2, -2],
377+ ],
378+ name="rhsxkxzdjz",
379+ visible=True,
380+ collidable=True,
381+ tags=["rhsxkxzdjz"],
382+ layer=-1,
383+ ),
384+ "rjlbuycveu": Sprite(
385+ pixels=[
386+ [5, 5, 5, 5, 5],
387+ [5, 5, 5, 5, 5],
388+ [5, 5, 5, 5, 5],
389+ [5, 5, 5, 5, 5],
390+ [5, 5, 5, 5, 5],
391+ ],
392+ name="rjlbuycveu",
393+ visible=True,
394+ collidable=False,
395+ tags=["rjlbuycveu"],
396+ layer=-3,
397+ ),
398+ "sfqyzhzkij": Sprite(
399+ pixels=[
400+ [12, 12, 12, 12, 12],
401+ [12, 12, 12, 12, 12],
402+ [9, 9, 9, 9, 9],
403+ [9, 9, 9, 9, 9],
404+ [9, 9, 9, 9, 9],
405+ ],
406+ name="sfqyzhzkij",
407+ visible=True,
408+ collidable=True,
409+ tags=["sfqyzhzkij"],
410+ ),
411+ "soyhouuebz": Sprite(
412+ pixels=[
413+ [-2, -2, -2, -2, -2],
414+ [-2, 9, 14, 14, -2],
415+ [-2, 9, 0, 8, -2],
416+ [-2, 12, 12, 8, -2],
417+ [-2, -2, -2, -2, -2],
418+ ],
419+ name="soyhouuebz",
420+ visible=True,
421+ collidable=False,
422+ tags=["soyhouuebz"],
423+ layer=-1,
424+ ),
425+ "sqpmiygfvh": Sprite(
426+ pixels=[
427+ [11],
428+ ],
429+ name="sqpmiygfvh",
430+ visible=True,
431+ collidable=True,
432+ layer=3,
433+ ),
434+ "tihiodtoj_l": Sprite(
435+ pixels=[
436+ [-2, -2, -2, -2, 1],
437+ [-2, -2, -2, -2, 1],
438+ [-2, -2, -2, -2, 1],
439+ [-2, -2, -2, -2, 1],
440+ [-2, -2, -2, -2, 1],
441+ ],
442+ name="tihiodtoj_l",
443+ visible=True,
444+ collidable=True,
445+ tags=["gbvqrjtaqo"],
446+ ),
447+ "ubspnhafvq": Sprite(
448+ pixels=[
449+ [0, 0, 0],
450+ [-1, -1, 0],
451+ [0, -1, 0],
452+ ],
453+ name="ubspnhafvq",
454+ visible=True,
455+ collidable=False,
456+ layer=-2,
457+ ),
458+ "ubyunwkbpx": Sprite(
459+ pixels=[
460+ [-2, 4, 4, 4, 4],
461+ [-2, 4, 4, 4, 4],
462+ [-2, 4, 4, 4, 4],
463+ [-2, 4, 4, 4, 4],
464+ [-2, 4, 4, 4, 4],
465+ ],
466+ name="ubyunwkbpx",
467+ visible=True,
468+ collidable=True,
469+ tags=["ihdgageizm"],
470+ layer=-5,
471+ ),
472+ "vjotnebuqo": Sprite(
473+ pixels=[
474+ [5, 5, 5, 5, 5, 5, 5],
475+ [5, -1, -1, -1, -1, -1, 5],
476+ [5, -1, -1, -1, -1, -1, 5],
477+ [5, -1, -1, -1, -1, -1, 5],
478+ [5, -1, -1, -1, -1, -1, 5],
479+ [5, -1, -1, -1, -1, -1, 5],
480+ [5, 5, 5, 5, 5, 5, 5],
481+ ],
482+ name="vjotnebuqo",
483+ visible=True,
484+ collidable=True,
485+ tags=["vjotnebuqo"],
486+ layer=-3,
487+ ),
488+ "wgmbtyhvbc": Sprite(
489+ pixels=[
490+ [0, -1, 0],
491+ [-1, 0, -1],
492+ [0, -1, 0],
493+ ],
494+ name="wgmbtyhvbc",
495+ visible=True,
496+ collidable=True,
497+ tags=["wgmbtyhvbc"],
498+ layer=10,
499+ ),
500+ "xfmluydglp": Sprite(
501+ pixels=[
502+ [14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14],
503+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
504+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
505+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
506+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
507+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
508+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
509+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
510+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
511+ [14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14],
512+ [14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14],
513+ ],
514+ name="xfmluydglp",
515+ visible=False,
516+ collidable=True,
517+ tags=["xfmluydglp"],
518+ ),
519+ "xvrpzkggig": Sprite(
520+ pixels=[
521+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
522+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
523+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
524+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
525+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
526+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
527+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
528+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
529+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
530+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
531+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
532+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
533+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
534+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
535+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
536+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
537+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
538+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
539+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
540+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
541+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
542+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
543+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
544+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
545+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
546+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
547+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
548+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
549+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
550+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
551+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
552+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
553+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
554+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
555+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
556+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
557+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
558+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
559+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
560+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
561+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
562+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
563+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
564+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
565+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
566+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
567+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
568+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
569+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
570+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
571+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
572+ [5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
573+ [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
574+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
575+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
576+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
577+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
578+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
579+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
580+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
581+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
582+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
583+ [4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
584+ [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
585+ ],
586+ name="xvrpzkggig",
587+ visible=True,
588+ collidable=True,
589+ ),
590+ "yjgargdic_r": Sprite(
591+ pixels=[
592+ [1, -2, -2, -2, -2],
593+ [1, -2, -2, -2, -2],
594+ [1, -2, -2, -2, -2],
595+ [1, -2, -2, -2, -2],
596+ [1, -2, -2, -2, -2],
597+ ],
598+ name="yjgargdic_r",
599+ visible=True,
600+ collidable=True,
601+ tags=["gbvqrjtaqo"],
602+ ),
603+}
604+levels = [
605+ # Level 1
606+ Level(
607+ sprites=[
608+ sprites["eqatonpohu"].clone().set_position(1, 53),
609+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
610+ sprites["hoswmpiqkw"].clone().set_position(33, 9),
611+ sprites["ihdgageizm"].clone().set_position(4, 0),
612+ sprites["ihdgageizm"].clone().set_position(9, 0),
613+ sprites["ihdgageizm"].clone().set_position(4, 5),
614+ sprites["ihdgageizm"].clone().set_position(14, 0),
615+ sprites["ihdgageizm"].clone().set_position(19, 0),
616+ sprites["ihdgageizm"].clone().set_position(24, 0),
617+ sprites["ihdgageizm"].clone().set_position(29, 0),
618+ sprites["ihdgageizm"].clone().set_position(39, 0),
619+ sprites["ihdgageizm"].clone().set_position(44, 0),
620+ sprites["ihdgageizm"].clone().set_position(49, 0),
621+ sprites["ihdgageizm"].clone().set_position(54, 0),
622+ sprites["ihdgageizm"].clone().set_position(59, 0),
623+ sprites["ihdgageizm"].clone().set_position(4, 10),
624+ sprites["ihdgageizm"].clone().set_position(4, 15),
625+ sprites["ihdgageizm"].clone().set_position(4, 20),
626+ sprites["ihdgageizm"].clone().set_position(4, 25),
627+ sprites["ihdgageizm"].clone().set_position(59, 15),
628+ sprites["ihdgageizm"].clone().set_position(59, 20),
629+ sprites["ihdgageizm"].clone().set_position(59, 25),
630+ sprites["ihdgageizm"].clone().set_position(59, 30),
631+ sprites["ihdgageizm"].clone().set_position(59, 20),
632+ sprites["ihdgageizm"].clone().set_position(59, 25),
633+ sprites["ihdgageizm"].clone().set_position(59, 30),
634+ sprites["ihdgageizm"].clone().set_position(59, 35),
635+ sprites["ihdgageizm"].clone().set_position(59, 40),
636+ sprites["ihdgageizm"].clone().set_position(59, 45),
637+ sprites["ihdgageizm"].clone().set_position(59, 35),
638+ sprites["ihdgageizm"].clone().set_position(59, 40),
639+ sprites["ihdgageizm"].clone().set_position(59, 45),
640+ sprites["ihdgageizm"].clone().set_position(59, 50),
641+ sprites["ihdgageizm"].clone().set_position(59, 55),
642+ sprites["ihdgageizm"].clone().set_position(59, 50),
643+ sprites["ihdgageizm"].clone().set_position(59, 55),
644+ sprites["ihdgageizm"].clone().set_position(54, 55),
645+ sprites["ihdgageizm"].clone().set_position(49, 55),
646+ sprites["ihdgageizm"].clone().set_position(44, 55),
647+ sprites["ihdgageizm"].clone().set_position(39, 55),
648+ sprites["ihdgageizm"].clone().set_position(34, 55),
649+ sprites["ihdgageizm"].clone().set_position(29, 55),
650+ sprites["ihdgageizm"].clone().set_position(24, 55),
651+ sprites["ihdgageizm"].clone().set_position(19, 55),
652+ sprites["ihdgageizm"].clone().set_position(4, 40),
653+ sprites["ihdgageizm"].clone().set_position(4, 45),
654+ sprites["ihdgageizm"].clone().set_position(4, 50),
655+ sprites["ihdgageizm"].clone().set_position(9, 50),
656+ sprites["ihdgageizm"].clone().set_position(4, 55),
657+ sprites["ihdgageizm"].clone().set_position(9, 55),
658+ sprites["ihdgageizm"].clone().set_position(14, 55),
659+ sprites["ihdgageizm"].clone().set_position(4, 45),
660+ sprites["ihdgageizm"].clone().set_position(54, 25),
661+ sprites["ihdgageizm"].clone().set_position(54, 20),
662+ sprites["ihdgageizm"].clone().set_position(34, 0),
663+ sprites["ihdgageizm"].clone().set_position(59, 10),
664+ sprites["ihdgageizm"].clone().set_position(59, 5),
665+ sprites["ihdgageizm"].clone().set_position(54, 15),
666+ sprites["ihdgageizm"].clone().set_position(54, 10),
667+ sprites["ihdgageizm"].clone().set_position(44, 5),
668+ sprites["ihdgageizm"].clone().set_position(39, 5),
669+ sprites["ihdgageizm"].clone().set_position(34, 5),
670+ sprites["ihdgageizm"].clone().set_position(29, 5),
671+ sprites["ihdgageizm"].clone().set_position(54, 50),
672+ sprites["ihdgageizm"].clone().set_position(54, 45),
673+ sprites["ihdgageizm"].clone().set_position(24, 5),
674+ sprites["ihdgageizm"].clone().set_position(19, 5),
675+ sprites["ihdgageizm"].clone().set_position(9, 35),
676+ sprites["ihdgageizm"].clone().set_position(9, 45),
677+ sprites["ihdgageizm"].clone().set_position(19, 50),
678+ sprites["ihdgageizm"].clone().set_position(9, 40),
679+ sprites["ihdgageizm"].clone().set_position(49, 5),
680+ sprites["ihdgageizm"].clone().set_position(54, 5),
681+ sprites["ihdgageizm"].clone().set_position(49, 50),
682+ sprites["ihdgageizm"].clone().set_position(14, 50),
683+ sprites["ihdgageizm"].clone().set_position(14, 5),
684+ sprites["ihdgageizm"].clone().set_position(9, 5),
685+ sprites["ihdgageizm"].clone().set_position(9, 30),
686+ sprites["ihdgageizm"].clone().set_position(9, 25),
687+ sprites["ihdgageizm"].clone().set_position(9, 20),
688+ sprites["ihdgageizm"].clone().set_position(9, 15),
689+ sprites["ihdgageizm"].clone().set_position(9, 10),
690+ sprites["ihdgageizm"].clone().set_position(49, 10),
691+ sprites["ihdgageizm"].clone().set_position(44, 20),
692+ sprites["ihdgageizm"].clone().set_position(39, 10),
693+ sprites["ihdgageizm"].clone().set_position(44, 10),
694+ sprites["ihdgageizm"].clone().set_position(49, 15),
695+ sprites["ihdgageizm"].clone().set_position(29, 10),
696+ sprites["ihdgageizm"].clone().set_position(29, 15),
697+ sprites["ihdgageizm"].clone().set_position(39, 15),
698+ sprites["ihdgageizm"].clone().set_position(44, 15),
699+ sprites["ihdgageizm"].clone().set_position(49, 20),
700+ sprites["ihdgageizm"].clone().set_position(14, 15),
701+ sprites["ihdgageizm"].clone().set_position(19, 15),
702+ sprites["ihdgageizm"].clone().set_position(24, 15),
703+ sprites["ihdgageizm"].clone().set_position(24, 10),
704+ sprites["ihdgageizm"].clone().set_position(19, 10),
705+ sprites["ihdgageizm"].clone().set_position(14, 10),
706+ sprites["ihdgageizm"].clone().set_position(29, 20),
707+ sprites["ihdgageizm"].clone().set_position(39, 20),
708+ sprites["ihdgageizm"].clone().set_position(24, 20),
709+ sprites["ihdgageizm"].clone().set_position(29, 40),
710+ sprites["ihdgageizm"].clone().set_position(19, 20),
711+ sprites["ihdgageizm"].clone().set_position(14, 20),
712+ sprites["ihdgageizm"].clone().set_position(54, 30),
713+ sprites["ihdgageizm"].clone().set_position(24, 40),
714+ sprites["ihdgageizm"].clone().set_position(14, 45),
715+ sprites["ihdgageizm"].clone().set_position(29, 35),
716+ sprites["ihdgageizm"].clone().set_position(4, 30).color_remap(None, 4),
717+ sprites["ihdgageizm"].clone().set_position(4, 35),
718+ sprites["ihdgageizm"].clone().set_position(54, 35),
719+ sprites["ihdgageizm"].clone().set_position(54, 40),
720+ sprites["ihdgageizm"].clone().set_position(14, 40),
721+ sprites["ihdgageizm"].clone().set_position(24, 50),
722+ sprites["ihdgageizm"].clone().set_position(29, 50),
723+ sprites["ihdgageizm"].clone().set_position(39, 50),
724+ sprites["ihdgageizm"].clone().set_position(44, 50),
725+ sprites["ihdgageizm"].clone().set_position(34, 50),
726+ sprites["ihdgageizm"].clone().set_position(29, 30),
727+ sprites["kvynsvxbpi"].clone().set_position(35, 11),
728+ sprites["nszegiawib"].clone().set_position(32, 8).set_rotation(180),
729+ sprites["rhsxkxzdjz"].clone().set_position(19, 30),
730+ sprites["rjlbuycveu"].clone().set_position(34, 10),
731+ sprites["sfqyzhzkij"].clone().set_position(34, 45),
732+ sprites["vjotnebuqo"].clone().set_position(33, 9),
733+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
734+ sprites["xvrpzkggig"].clone(),
735+ ],
736+ grid_size=(64, 64),
737+ data={
738+ "StepCounter": 42,
739+ "kvynsvxbpi": 5,
740+ "GoalColor": 9,
741+ "GoalRotation": 0,
742+ "StartShape": 5,
743+ "StartColor": 9,
744+ "StartRotation": 270,
745+ "Fog": False,
746+ "StepsDecrement": 1,
747+ },
748+ ),
749+ # Level 2
750+ Level(
751+ sprites=[
752+ sprites["eqatonpohu"].clone().set_position(1, 53),
753+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
754+ sprites["hoswmpiqkw"].clone().set_position(13, 39),
755+ sprites["ihdgageizm"].clone().set_position(4, 0),
756+ sprites["ihdgageizm"].clone().set_position(9, 0),
757+ sprites["ihdgageizm"].clone().set_position(4, 5),
758+ sprites["ihdgageizm"].clone().set_position(14, 0),
759+ sprites["ihdgageizm"].clone().set_position(19, 0),
760+ sprites["ihdgageizm"].clone().set_position(24, 0),
761+ sprites["ihdgageizm"].clone().set_position(29, 0),
762+ sprites["ihdgageizm"].clone().set_position(39, 0),
763+ sprites["ihdgageizm"].clone().set_position(44, 0),
764+ sprites["ihdgageizm"].clone().set_position(49, 0),
765+ sprites["ihdgageizm"].clone().set_position(54, 0),
766+ sprites["ihdgageizm"].clone().set_position(59, 0),
767+ sprites["ihdgageizm"].clone().set_position(4, 10),
768+ sprites["ihdgageizm"].clone().set_position(4, 15),
769+ sprites["ihdgageizm"].clone().set_position(4, 20),
770+ sprites["ihdgageizm"].clone().set_position(4, 25),
771+ sprites["ihdgageizm"].clone().set_position(4, 30),
772+ sprites["ihdgageizm"].clone().set_position(4, 35),
773+ sprites["ihdgageizm"].clone().set_position(59, 15),
774+ sprites["ihdgageizm"].clone().set_position(59, 20),
775+ sprites["ihdgageizm"].clone().set_position(59, 25),
776+ sprites["ihdgageizm"].clone().set_position(59, 30),
777+ sprites["ihdgageizm"].clone().set_position(59, 20),
778+ sprites["ihdgageizm"].clone().set_position(59, 25),
779+ sprites["ihdgageizm"].clone().set_position(59, 30),
780+ sprites["ihdgageizm"].clone().set_position(59, 35),
781+ sprites["ihdgageizm"].clone().set_position(59, 40),
782+ sprites["ihdgageizm"].clone().set_position(59, 45),
783+ sprites["ihdgageizm"].clone().set_position(59, 35),
784+ sprites["ihdgageizm"].clone().set_position(59, 40),
785+ sprites["ihdgageizm"].clone().set_position(59, 45),
786+ sprites["ihdgageizm"].clone().set_position(59, 50),
787+ sprites["ihdgageizm"].clone().set_position(59, 55),
788+ sprites["ihdgageizm"].clone().set_position(59, 50),
789+ sprites["ihdgageizm"].clone().set_position(59, 55),
790+ sprites["ihdgageizm"].clone().set_position(54, 55),
791+ sprites["ihdgageizm"].clone().set_position(49, 55),
792+ sprites["ihdgageizm"].clone().set_position(44, 55),
793+ sprites["ihdgageizm"].clone().set_position(39, 55),
794+ sprites["ihdgageizm"].clone().set_position(34, 55),
795+ sprites["ihdgageizm"].clone().set_position(29, 55),
796+ sprites["ihdgageizm"].clone().set_position(24, 55),
797+ sprites["ihdgageizm"].clone().set_position(19, 55),
798+ sprites["ihdgageizm"].clone().set_position(4, 40),
799+ sprites["ihdgageizm"].clone().set_position(4, 45),
800+ sprites["ihdgageizm"].clone().set_position(4, 50),
801+ sprites["ihdgageizm"].clone().set_position(9, 50),
802+ sprites["ihdgageizm"].clone().set_position(4, 55),
803+ sprites["ihdgageizm"].clone().set_position(9, 55),
804+ sprites["ihdgageizm"].clone().set_position(14, 55),
805+ sprites["ihdgageizm"].clone().set_position(4, 45),
806+ sprites["ihdgageizm"].clone().set_position(54, 30),
807+ sprites["ihdgageizm"].clone().set_position(34, 0),
808+ sprites["ihdgageizm"].clone().set_position(59, 10),
809+ sprites["ihdgageizm"].clone().set_position(59, 5),
810+ sprites["ihdgageizm"].clone().set_position(54, 15),
811+ sprites["ihdgageizm"].clone().set_position(54, 10),
812+ sprites["ihdgageizm"].clone().set_position(9, 35),
813+ sprites["ihdgageizm"].clone().set_position(9, 45),
814+ sprites["ihdgageizm"].clone().set_position(19, 50),
815+ sprites["ihdgageizm"].clone().set_position(9, 40),
816+ sprites["ihdgageizm"].clone().set_position(54, 5),
817+ sprites["ihdgageizm"].clone().set_position(14, 45),
818+ sprites["ihdgageizm"].clone().set_position(14, 50),
819+ sprites["ihdgageizm"].clone().set_position(9, 5),
820+ sprites["ihdgageizm"].clone().set_position(9, 30),
821+ sprites["ihdgageizm"].clone().set_position(9, 25),
822+ sprites["ihdgageizm"].clone().set_position(19, 30),
823+ sprites["ihdgageizm"].clone().set_position(24, 30),
824+ sprites["ihdgageizm"].clone().set_position(19, 40),
825+ sprites["ihdgageizm"].clone().set_position(19, 45),
826+ sprites["ihdgageizm"].clone().set_position(19, 35),
827+ sprites["ihdgageizm"].clone().set_position(39, 15),
828+ sprites["ihdgageizm"].clone().set_position(39, 35),
829+ sprites["ihdgageizm"].clone().set_position(44, 30),
830+ sprites["ihdgageizm"].clone().set_position(34, 45),
831+ sprites["ihdgageizm"].clone().set_position(14, 5),
832+ sprites["ihdgageizm"].clone().set_position(39, 20),
833+ sprites["ihdgageizm"].clone().set_position(44, 20),
834+ sprites["ihdgageizm"].clone().set_position(24, 20),
835+ sprites["ihdgageizm"].clone().set_position(44, 25),
836+ sprites["ihdgageizm"].clone().set_position(39, 40),
837+ sprites["ihdgageizm"].clone().set_position(39, 45),
838+ sprites["ihdgageizm"].clone().set_position(24, 35),
839+ sprites["ihdgageizm"].clone().set_position(24, 25),
840+ sprites["ihdgageizm"].clone().set_position(24, 50),
841+ sprites["ihdgageizm"].clone().set_position(19, 25),
842+ sprites["ihdgageizm"].clone().set_position(24, 40),
843+ sprites["ihdgageizm"].clone().set_position(24, 45),
844+ sprites["ihdgageizm"].clone().set_position(29, 45),
845+ sprites["ihdgageizm"].clone().set_position(29, 30),
846+ sprites["ihdgageizm"].clone().set_position(29, 25),
847+ sprites["ihdgageizm"].clone().set_position(24, 15),
848+ sprites["ihdgageizm"].clone().set_position(44, 35),
849+ sprites["ihdgageizm"].clone().set_position(54, 34),
850+ sprites["ihdgageizm"].clone().set_position(29, 50),
851+ sprites["ihdgageizm"].clone().set_position(34, 50),
852+ sprites["kvynsvxbpi"].clone().set_position(15, 41),
853+ sprites["npxgalaybz"].clone().set_position(15, 16),
854+ sprites["npxgalaybz"].clone().set_position(40, 51),
855+ sprites["nszegiawib"].clone().set_position(12, 38),
856+ sprites["rhsxkxzdjz"].clone().set_position(49, 45),
857+ sprites["rjlbuycveu"].clone().set_position(14, 40),
858+ sprites["sfqyzhzkij"].clone().set_position(29, 40),
859+ sprites["vjotnebuqo"].clone().set_position(13, 39),
860+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
861+ sprites["xvrpzkggig"].clone(),
862+ ],
863+ grid_size=(64, 64),
864+ data={
865+ "StepCounter": 42,
866+ "kvynsvxbpi": 5,
867+ "GoalColor": 9,
868+ "GoalRotation": 270,
869+ "StartShape": 5,
870+ "StartColor": 9,
871+ "StartRotation": 0,
872+ "Fog": False,
873+ },
874+ ),
875+ # Level 3
876+ Level(
877+ sprites=[
878+ sprites["eqatonpohu"].clone().set_position(1, 53),
879+ sprites["fesygzfqui"].clone().set_position(4, 5),
880+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
881+ sprites["hoswmpiqkw"].clone().set_position(53, 49),
882+ sprites["ihdgageizm"].clone().set_position(4, 0),
883+ sprites["ihdgageizm"].clone().set_position(9, 0),
884+ sprites["ihdgageizm"].clone().set_position(14, 0),
885+ sprites["ihdgageizm"].clone().set_position(19, 0),
886+ sprites["ihdgageizm"].clone().set_position(24, 0),
887+ sprites["ihdgageizm"].clone().set_position(29, 0),
888+ sprites["ihdgageizm"].clone().set_position(39, 0),
889+ sprites["ihdgageizm"].clone().set_position(44, 0),
890+ sprites["ihdgageizm"].clone().set_position(49, 0),
891+ sprites["ihdgageizm"].clone().set_position(59, 0),
892+ sprites["ihdgageizm"].clone().set_position(4, 10),
893+ sprites["ihdgageizm"].clone().set_position(4, 15),
894+ sprites["ihdgageizm"].clone().set_position(4, 20),
895+ sprites["ihdgageizm"].clone().set_position(4, 25),
896+ sprites["ihdgageizm"].clone().set_position(4, 30),
897+ sprites["ihdgageizm"].clone().set_position(4, 35),
898+ sprites["ihdgageizm"].clone().set_position(59, 20),
899+ sprites["ihdgageizm"].clone().set_position(59, 25),
900+ sprites["ihdgageizm"].clone().set_position(59, 30),
901+ sprites["ihdgageizm"].clone().set_position(59, 35),
902+ sprites["ihdgageizm"].clone().set_position(59, 40),
903+ sprites["ihdgageizm"].clone().set_position(59, 45),
904+ sprites["ihdgageizm"].clone().set_position(59, 50),
905+ sprites["ihdgageizm"].clone().set_position(59, 55),
906+ sprites["ihdgageizm"].clone().set_position(49, 55),
907+ sprites["ihdgageizm"].clone().set_position(44, 55),
908+ sprites["ihdgageizm"].clone().set_position(39, 55),
909+ sprites["ihdgageizm"].clone().set_position(34, 55),
910+ sprites["ihdgageizm"].clone().set_position(29, 55),
911+ sprites["ihdgageizm"].clone().set_position(24, 55),
912+ sprites["ihdgageizm"].clone().set_position(19, 55),
913+ sprites["ihdgageizm"].clone().set_position(4, 40),
914+ sprites["ihdgageizm"].clone().set_position(4, 45),
915+ sprites["ihdgageizm"].clone().set_position(4, 50),
916+ sprites["ihdgageizm"].clone().set_position(9, 50),
917+ sprites["ihdgageizm"].clone().set_position(4, 55),
918+ sprites["ihdgageizm"].clone().set_position(9, 55),
919+ sprites["ihdgageizm"].clone().set_position(14, 55),
920+ sprites["ihdgageizm"].clone().set_position(4, 45),
921+ sprites["ihdgageizm"].clone().set_position(34, 0),
922+ sprites["ihdgageizm"].clone().set_position(59, 10),
923+ sprites["ihdgageizm"].clone().set_position(59, 5),
924+ sprites["ihdgageizm"].clone().set_position(39, 10),
925+ sprites["ihdgageizm"].clone().set_position(14, 25),
926+ sprites["ihdgageizm"].clone().set_position(19, 40),
927+ sprites["ihdgageizm"].clone().set_position(19, 45),
928+ sprites["ihdgageizm"].clone().set_position(19, 35),
929+ sprites["ihdgageizm"].clone().set_position(49, 50),
930+ sprites["ihdgageizm"].clone().set_position(39, 35),
931+ sprites["ihdgageizm"].clone().set_position(14, 30),
932+ sprites["ihdgageizm"].clone().set_position(49, 45),
933+ sprites["ihdgageizm"].clone().set_position(49, 40),
934+ sprites["ihdgageizm"].clone().set_position(14, 20),
935+ sprites["ihdgageizm"].clone().set_position(14, 50),
936+ sprites["ihdgageizm"].clone().set_position(39, 5),
937+ sprites["ihdgageizm"].clone().set_position(44, 45),
938+ sprites["ihdgageizm"].clone().set_position(19, 50),
939+ sprites["ihdgageizm"].clone().set_position(44, 40),
940+ sprites["ihdgageizm"].clone().set_position(39, 50),
941+ sprites["ihdgageizm"].clone().set_position(44, 20),
942+ sprites["ihdgageizm"].clone().set_position(49, 20),
943+ sprites["ihdgageizm"].clone().set_position(39, 20),
944+ sprites["ihdgageizm"].clone().set_position(19, 10),
945+ sprites["ihdgageizm"].clone().set_position(14, 35),
946+ sprites["ihdgageizm"].clone().set_position(39, 15),
947+ sprites["ihdgageizm"].clone().set_position(34, 35),
948+ sprites["ihdgageizm"].clone().set_position(14, 10),
949+ sprites["ihdgageizm"].clone().set_position(14, 15),
950+ sprites["ihdgageizm"].clone().set_position(49, 35),
951+ sprites["ihdgageizm"].clone().set_position(24, 35),
952+ sprites["ihdgageizm"].clone().set_position(34, 10),
953+ sprites["ihdgageizm"].clone().set_position(24, 10),
954+ sprites["ihdgageizm"].clone().set_position(59, 15),
955+ sprites["ihdgageizm"].clone().set_position(54, 55),
956+ sprites["ihdgageizm"].clone().set_position(44, 35),
957+ sprites["ihdgageizm"].clone().set_position(39, 40),
958+ sprites["ihdgageizm"].clone().set_position(39, 45),
959+ sprites["ihdgageizm"].clone().set_position(44, 50),
960+ sprites["kapcaakvb_b"].clone().set_position(54, 4),
961+ sprites["kvynsvxbpi"].clone().set_position(55, 51),
962+ sprites["mxfhnkdzvf"].clone().set_position(54, 0),
963+ sprites["npxgalaybz"].clone().set_position(35, 16),
964+ sprites["npxgalaybz"].clone().set_position(20, 31),
965+ sprites["nszegiawib"].clone().set_position(52, 48),
966+ sprites["rhsxkxzdjz"].clone().set_position(49, 10),
967+ sprites["rjlbuycveu"].clone().set_position(54, 50),
968+ sprites["sfqyzhzkij"].clone().set_position(9, 45),
969+ sprites["soyhouuebz"].clone().set_position(29, 45),
970+ sprites["vjotnebuqo"].clone().set_position(53, 49),
971+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
972+ sprites["xvrpzkggig"].clone(),
973+ sprites["yjgargdic_r"].clone().set_position(8, 5),
974+ ],
975+ grid_size=(64, 64),
976+ data={
977+ "StepCounter": 42,
978+ "kvynsvxbpi": 5,
979+ "GoalColor": 9,
980+ "GoalRotation": 180,
981+ "StartShape": 5,
982+ "StartColor": 12,
983+ "StartRotation": 0,
984+ "Fog": False,
985+ },
986+ ),
987+ # Level 4
988+ Level(
989+ sprites=[
990+ sprites["eqatonpohu"].clone().set_position(1, 53),
991+ sprites["fesygzfqui"].clone().set_position(29, 20),
992+ sprites["fesygzfqui"].clone().set_position(4, 35),
993+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
994+ sprites["hoswmpiqkw"].clone().set_position(8, 4),
995+ sprites["ihdgageizm"].clone().set_position(4, 0),
996+ sprites["ihdgageizm"].clone().set_position(9, 0),
997+ sprites["ihdgageizm"].clone().set_position(4, 5),
998+ sprites["ihdgageizm"].clone().set_position(14, 0),
999+ sprites["ihdgageizm"].clone().set_position(19, 0),
1000+ sprites["ihdgageizm"].clone().set_position(24, 0),
1001+ sprites["ihdgageizm"].clone().set_position(29, 0),
1002+ sprites["ihdgageizm"].clone().set_position(39, 0),
1003+ sprites["ihdgageizm"].clone().set_position(44, 0),
1004+ sprites["ihdgageizm"].clone().set_position(49, 0),
1005+ sprites["ihdgageizm"].clone().set_position(54, 0),
1006+ sprites["ihdgageizm"].clone().set_position(59, 0),
1007+ sprites["ihdgageizm"].clone().set_position(4, 10),
1008+ sprites["ihdgageizm"].clone().set_position(4, 15),
1009+ sprites["ihdgageizm"].clone().set_position(4, 20),
1010+ sprites["ihdgageizm"].clone().set_position(4, 25),
1011+ sprites["ihdgageizm"].clone().set_position(4, 30),
1012+ sprites["ihdgageizm"].clone().set_position(59, 15),
1013+ sprites["ihdgageizm"].clone().set_position(59, 20),
1014+ sprites["ihdgageizm"].clone().set_position(59, 25),
1015+ sprites["ihdgageizm"].clone().set_position(59, 30),
1016+ sprites["ihdgageizm"].clone().set_position(59, 20),
1017+ sprites["ihdgageizm"].clone().set_position(59, 25),
1018+ sprites["ihdgageizm"].clone().set_position(59, 30),
1019+ sprites["ihdgageizm"].clone().set_position(59, 35),
1020+ sprites["ihdgageizm"].clone().set_position(59, 40),
1021+ sprites["ihdgageizm"].clone().set_position(59, 45),
1022+ sprites["ihdgageizm"].clone().set_position(59, 35),
1023+ sprites["ihdgageizm"].clone().set_position(59, 40),
1024+ sprites["ihdgageizm"].clone().set_position(59, 45),
1025+ sprites["ihdgageizm"].clone().set_position(59, 50),
1026+ sprites["ihdgageizm"].clone().set_position(59, 55),
1027+ sprites["ihdgageizm"].clone().set_position(59, 50),
1028+ sprites["ihdgageizm"].clone().set_position(59, 55),
1029+ sprites["ihdgageizm"].clone().set_position(54, 55),
1030+ sprites["ihdgageizm"].clone().set_position(49, 55),
1031+ sprites["ihdgageizm"].clone().set_position(44, 55),
1032+ sprites["ihdgageizm"].clone().set_position(39, 55),
1033+ sprites["ihdgageizm"].clone().set_position(34, 55),
1034+ sprites["ihdgageizm"].clone().set_position(29, 55),
1035+ sprites["ihdgageizm"].clone().set_position(24, 55),
1036+ sprites["ihdgageizm"].clone().set_position(19, 55),
1037+ sprites["ihdgageizm"].clone().set_position(4, 40),
1038+ sprites["ihdgageizm"].clone().set_position(4, 45),
1039+ sprites["ihdgageizm"].clone().set_position(4, 50),
1040+ sprites["ihdgageizm"].clone().set_position(9, 50),
1041+ sprites["ihdgageizm"].clone().set_position(4, 55),
1042+ sprites["ihdgageizm"].clone().set_position(9, 55),
1043+ sprites["ihdgageizm"].clone().set_position(14, 55),
1044+ sprites["ihdgageizm"].clone().set_position(4, 45),
1045+ sprites["ihdgageizm"].clone().set_position(59, 10),
1046+ sprites["ihdgageizm"].clone().set_position(59, 5),
1047+ sprites["ihdgageizm"].clone().set_position(14, 10),
1048+ sprites["ihdgageizm"].clone().set_position(9, 10),
1049+ sprites["ihdgageizm"].clone().set_position(24, 25),
1050+ sprites["ihdgageizm"].clone().set_position(29, 30),
1051+ sprites["ihdgageizm"].clone().set_position(19, 10),
1052+ sprites["ihdgageizm"].clone().set_position(9, 20),
1053+ sprites["ihdgageizm"].clone().set_position(29, 25),
1054+ sprites["ihdgageizm"].clone().set_position(29, 35),
1055+ sprites["ihdgageizm"].clone().set_position(34, 35),
1056+ sprites["ihdgageizm"].clone().set_position(19, 50),
1057+ sprites["ihdgageizm"].clone().set_position(39, 50),
1058+ sprites["ihdgageizm"].clone().set_position(9, 15),
1059+ sprites["ihdgageizm"].clone().set_position(49, 10),
1060+ sprites["ihdgageizm"].clone().set_position(44, 10),
1061+ sprites["ihdgageizm"].clone().set_position(39, 45),
1062+ sprites["ihdgageizm"].clone().set_position(39, 50),
1063+ sprites["ihdgageizm"].clone().set_position(44, 50),
1064+ sprites["ihdgageizm"].clone().set_position(19, 25),
1065+ sprites["ihdgageizm"].clone().set_position(39, 35),
1066+ sprites["ihdgageizm"].clone().set_position(14, 50),
1067+ sprites["ihdgageizm"].clone().set_position(9, 45),
1068+ sprites["ihdgageizm"].clone().set_position(29, 5),
1069+ sprites["ihdgageizm"].clone().set_position(14, 15),
1070+ sprites["ihdgageizm"].clone().set_position(34, 0),
1071+ sprites["ihdgageizm"].clone().set_position(29, 10),
1072+ sprites["ihdgageizm"].clone().set_position(34, 5),
1073+ sprites["ihdgageizm"].clone().set_position(54, 10),
1074+ sprites["kapcaakvb_b"].clone().set_position(19, 34),
1075+ sprites["kapcaakvb_b"].clone().set_position(44, 19),
1076+ sprites["krdypjjivz"].clone().set_position(39, 30),
1077+ sprites["kvynsvxbpi"].clone().set_position(10, 6),
1078+ sprites["lujfinsby_t"].clone().set_position(39, 26),
1079+ sprites["mkjdaccuuf"].clone().set_position(24, 30),
1080+ sprites["mxfhnkdzvf"].clone().set_position(19, 30),
1081+ sprites["mxfhnkdzvf"].clone().set_position(44, 15),
1082+ sprites["npxgalaybz"].clone().set_position(35, 51),
1083+ sprites["npxgalaybz"].clone().set_position(20, 16),
1084+ sprites["nszegiawib"].clone().set_position(7, 3).set_rotation(90),
1085+ sprites["rjlbuycveu"].clone().set_position(9, 5),
1086+ sprites["sfqyzhzkij"].clone().set_position(54, 5),
1087+ sprites["soyhouuebz"].clone().set_position(34, 30),
1088+ sprites["tihiodtoj_l"].clone().set_position(45, 25),
1089+ sprites["tihiodtoj_l"].clone().set_position(25, 40),
1090+ sprites["tihiodtoj_l"].clone().set_position(45, 40),
1091+ sprites["ubyunwkbpx"].clone().set_position(49, 25),
1092+ sprites["ubyunwkbpx"].clone().set_position(29, 40),
1093+ sprites["ubyunwkbpx"].clone().set_position(49, 40),
1094+ sprites["vjotnebuqo"].clone().set_position(8, 4),
1095+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
1096+ sprites["xvrpzkggig"].clone(),
1097+ sprites["yjgargdic_r"].clone().set_position(33, 20),
1098+ sprites["yjgargdic_r"].clone().set_position(8, 35),
1099+ ],
1100+ grid_size=(64, 64),
1101+ data={
1102+ "StepCounter": 42,
1103+ "kvynsvxbpi": 5,
1104+ "GoalColor": 9,
1105+ "GoalRotation": 0,
1106+ "StartShape": 4,
1107+ "StartColor": 14,
1108+ "StartRotation": 0,
1109+ "Fog": False,
1110+ "StepsDecrement": 1,
1111+ },
1112+ ),
1113+ # Level 5
1114+ Level(
1115+ sprites=[
1116+ sprites["ajdspzphhd"].clone().set_position(14, 35),
1117+ sprites["eqatonpohu"].clone().set_position(1, 53),
1118+ sprites["fesygzfqui"].clone().set_position(29, 20),
1119+ sprites["fesygzfqui"].clone().set_position(39, 40),
1120+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
1121+ sprites["hoswmpiqkw"].clone().set_position(53, 4),
1122+ sprites["ihdgageizm"].clone().set_position(4, 0),
1123+ sprites["ihdgageizm"].clone().set_position(9, 0),
1124+ sprites["ihdgageizm"].clone().set_position(4, 5),
1125+ sprites["ihdgageizm"].clone().set_position(19, 0),
1126+ sprites["ihdgageizm"].clone().set_position(24, 0),
1127+ sprites["ihdgageizm"].clone().set_position(29, 0),
1128+ sprites["ihdgageizm"].clone().set_position(39, 0),
1129+ sprites["ihdgageizm"].clone().set_position(44, 0),
1130+ sprites["ihdgageizm"].clone().set_position(49, 0),
1131+ sprites["ihdgageizm"].clone().set_position(54, 0),
1132+ sprites["ihdgageizm"].clone().set_position(59, 0),
1133+ sprites["ihdgageizm"].clone().set_position(4, 10),
1134+ sprites["ihdgageizm"].clone().set_position(4, 15),
1135+ sprites["ihdgageizm"].clone().set_position(4, 20),
1136+ sprites["ihdgageizm"].clone().set_position(4, 25),
1137+ sprites["ihdgageizm"].clone().set_position(4, 30),
1138+ sprites["ihdgageizm"].clone().set_position(4, 35),
1139+ sprites["ihdgageizm"].clone().set_position(59, 50),
1140+ sprites["ihdgageizm"].clone().set_position(59, 55),
1141+ sprites["ihdgageizm"].clone().set_position(39, 55),
1142+ sprites["ihdgageizm"].clone().set_position(34, 55),
1143+ sprites["ihdgageizm"].clone().set_position(29, 55),
1144+ sprites["ihdgageizm"].clone().set_position(24, 55),
1145+ sprites["ihdgageizm"].clone().set_position(19, 55),
1146+ sprites["ihdgageizm"].clone().set_position(4, 40),
1147+ sprites["ihdgageizm"].clone().set_position(4, 45),
1148+ sprites["ihdgageizm"].clone().set_position(4, 50),
1149+ sprites["ihdgageizm"].clone().set_position(9, 50),
1150+ sprites["ihdgageizm"].clone().set_position(4, 55),
1151+ sprites["ihdgageizm"].clone().set_position(9, 55),
1152+ sprites["ihdgageizm"].clone().set_position(14, 55),
1153+ sprites["ihdgageizm"].clone().set_position(4, 45),
1154+ sprites["ihdgageizm"].clone().set_position(59, 5),
1155+ sprites["ihdgageizm"].clone().set_position(49, 10),
1156+ sprites["ihdgageizm"].clone().set_position(49, 5),
1157+ sprites["ihdgageizm"].clone().set_position(29, 30),
1158+ sprites["ihdgageizm"].clone().set_position(9, 20),
1159+ sprites["ihdgageizm"].clone().set_position(24, 30),
1160+ sprites["ihdgageizm"].clone().set_position(24, 20),
1161+ sprites["ihdgageizm"].clone().set_position(34, 30),
1162+ sprites["ihdgageizm"].clone().set_position(49, 45),
1163+ sprites["ihdgageizm"].clone().set_position(49, 20),
1164+ sprites["ihdgageizm"].clone().set_position(44, 55),
1165+ sprites["ihdgageizm"].clone().set_position(49, 55),
1166+ sprites["ihdgageizm"].clone().set_position(59, 10),
1167+ sprites["ihdgageizm"].clone().set_position(59, 20),
1168+ sprites["ihdgageizm"].clone().set_position(59, 25),
1169+ sprites["ihdgageizm"].clone().set_position(59, 35),
1170+ sprites["ihdgageizm"].clone().set_position(59, 40),
1171+ sprites["ihdgageizm"].clone().set_position(59, 45),
1172+ sprites["ihdgageizm"].clone().set_position(39, 45),
1173+ sprites["ihdgageizm"].clone().set_position(44, 45),
1174+ sprites["ihdgageizm"].clone().set_position(29, 35),
1175+ sprites["ihdgageizm"].clone().set_position(9, 5),
1176+ sprites["ihdgageizm"].clone().set_position(34, 45),
1177+ sprites["ihdgageizm"].clone().set_position(29, 5),
1178+ sprites["ihdgageizm"].clone().set_position(29, 10),
1179+ sprites["ihdgageizm"].clone().set_position(14, 20),
1180+ sprites["ihdgageizm"].clone().set_position(14, 0),
1181+ sprites["ihdgageizm"].clone().set_position(19, 30),
1182+ sprites["ihdgageizm"].clone().set_position(14, 30),
1183+ sprites["ihdgageizm"].clone().set_position(9, 15),
1184+ sprites["ihdgageizm"].clone().set_position(29, 45),
1185+ sprites["ihdgageizm"].clone().set_position(14, 50),
1186+ sprites["ihdgageizm"].clone().set_position(9, 45),
1187+ sprites["ihdgageizm"].clone().set_position(49, 15),
1188+ sprites["ihdgageizm"].clone().set_position(59, 15),
1189+ sprites["ihdgageizm"].clone().set_position(44, 10),
1190+ sprites["kapcaakvb_b"].clone().set_position(34, 4),
1191+ sprites["kapcaakvb_b"].clone().set_position(49, 29),
1192+ sprites["krdypjjivz"].clone().set_position(54, 55),
1193+ sprites["krdypjjivz"].clone().set_position(39, 30),
1194+ sprites["kvynsvxbpi"].clone().set_position(55, 6),
1195+ sprites["lujfinsby_t"].clone().set_position(54, 51),
1196+ sprites["lujfinsby_t"].clone().set_position(39, 26),
1197+ sprites["mkjdaccuuf"].clone().set_position(19, 10),
1198+ sprites["mxfhnkdzvf"].clone().set_position(34, 0),
1199+ sprites["mxfhnkdzvf"].clone().set_position(49, 25),
1200+ sprites["npxgalaybz"].clone().set_position(15, 46),
1201+ sprites["npxgalaybz"].clone().set_position(45, 6),
1202+ sprites["npxgalaybz"].clone().set_position(10, 11),
1203+ sprites["nszegiawib"].clone().set_position(52, 3).set_rotation(180),
1204+ sprites["rhsxkxzdjz"].clone().set_position(14, 35),
1205+ sprites["rjlbuycveu"].clone().set_position(54, 5),
1206+ sprites["sfqyzhzkij"].clone().set_position(49, 40),
1207+ sprites["soyhouuebz"].clone().set_position(29, 25),
1208+ sprites["tihiodtoj_l"].clone().set_position(55, 30),
1209+ sprites["tihiodtoj_l"].clone().set_position(20, 25),
1210+ sprites["ubyunwkbpx"].clone().set_position(59, 30),
1211+ sprites["ubyunwkbpx"].clone().set_position(24, 25),
1212+ sprites["vjotnebuqo"].clone().set_position(53, 4),
1213+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
1214+ sprites["xvrpzkggig"].clone(),
1215+ sprites["yjgargdic_r"].clone().set_position(33, 20),
1216+ sprites["yjgargdic_r"].clone().set_position(43, 40),
1217+ ],
1218+ grid_size=(64, 64),
1219+ data={
1220+ "StepCounter": 42,
1221+ "kvynsvxbpi": 0,
1222+ "GoalColor": 8,
1223+ "GoalRotation": 180,
1224+ "StartShape": 4,
1225+ "StartColor": 12,
1226+ "StartRotation": 0,
1227+ "Fog": False,
1228+ },
1229+ ),
1230+ # Level 6
1231+ Level(
1232+ sprites=[
1233+ sprites["eqatonpohu"].clone().set_position(1, 53),
1234+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
1235+ sprites["hahdypcdru"].clone().set_position(14, 40),
1236+ sprites["hahdypcdru"].clone().set_position(14, 10),
1237+ sprites["hoswmpiqkw"].clone().set_position(53, 34),
1238+ sprites["hoswmpiqkw"].clone().set_position(53, 49),
1239+ sprites["ihdgageizm"].clone().set_position(4, 0),
1240+ sprites["ihdgageizm"].clone().set_position(9, 0),
1241+ sprites["ihdgageizm"].clone().set_position(4, 5),
1242+ sprites["ihdgageizm"].clone().set_position(14, 0),
1243+ sprites["ihdgageizm"].clone().set_position(19, 0),
1244+ sprites["ihdgageizm"].clone().set_position(24, 0),
1245+ sprites["ihdgageizm"].clone().set_position(29, 0),
1246+ sprites["ihdgageizm"].clone().set_position(39, 0),
1247+ sprites["ihdgageizm"].clone().set_position(59, 0),
1248+ sprites["ihdgageizm"].clone().set_position(4, 10),
1249+ sprites["ihdgageizm"].clone().set_position(4, 15),
1250+ sprites["ihdgageizm"].clone().set_position(4, 20),
1251+ sprites["ihdgageizm"].clone().set_position(4, 25),
1252+ sprites["ihdgageizm"].clone().set_position(4, 30),
1253+ sprites["ihdgageizm"].clone().set_position(4, 35),
1254+ sprites["ihdgageizm"].clone().set_position(59, 25),
1255+ sprites["ihdgageizm"].clone().set_position(59, 30),
1256+ sprites["ihdgageizm"].clone().set_position(59, 35),
1257+ sprites["ihdgageizm"].clone().set_position(59, 40),
1258+ sprites["ihdgageizm"].clone().set_position(59, 45),
1259+ sprites["ihdgageizm"].clone().set_position(59, 50),
1260+ sprites["ihdgageizm"].clone().set_position(59, 55),
1261+ sprites["ihdgageizm"].clone().set_position(49, 55),
1262+ sprites["ihdgageizm"].clone().set_position(44, 55),
1263+ sprites["ihdgageizm"].clone().set_position(39, 55),
1264+ sprites["ihdgageizm"].clone().set_position(34, 55),
1265+ sprites["ihdgageizm"].clone().set_position(29, 55),
1266+ sprites["ihdgageizm"].clone().set_position(24, 55),
1267+ sprites["ihdgageizm"].clone().set_position(19, 55),
1268+ sprites["ihdgageizm"].clone().set_position(4, 40),
1269+ sprites["ihdgageizm"].clone().set_position(4, 45),
1270+ sprites["ihdgageizm"].clone().set_position(4, 50),
1271+ sprites["ihdgageizm"].clone().set_position(9, 50),
1272+ sprites["ihdgageizm"].clone().set_position(4, 55),
1273+ sprites["ihdgageizm"].clone().set_position(9, 55),
1274+ sprites["ihdgageizm"].clone().set_position(14, 55),
1275+ sprites["ihdgageizm"].clone().set_position(4, 45),
1276+ sprites["ihdgageizm"].clone().set_position(34, 0),
1277+ sprites["ihdgageizm"].clone().set_position(59, 10),
1278+ sprites["ihdgageizm"].clone().set_position(59, 5),
1279+ sprites["ihdgageizm"].clone().set_position(29, 35),
1280+ sprites["ihdgageizm"].clone().set_position(24, 35),
1281+ sprites["ihdgageizm"].clone().set_position(34, 35),
1282+ sprites["ihdgageizm"].clone().set_position(49, 35),
1283+ sprites["ihdgageizm"].clone().set_position(49, 40),
1284+ sprites["ihdgageizm"].clone().set_position(49, 45),
1285+ sprites["ihdgageizm"].clone().set_position(49, 50),
1286+ sprites["ihdgageizm"].clone().set_position(49, 30),
1287+ sprites["ihdgageizm"].clone().set_position(44, 30),
1288+ sprites["ihdgageizm"].clone().set_position(19, 15),
1289+ sprites["ihdgageizm"].clone().set_position(14, 35),
1290+ sprites["ihdgageizm"].clone().set_position(24, 15),
1291+ sprites["ihdgageizm"].clone().set_position(34, 30),
1292+ sprites["ihdgageizm"].clone().set_position(19, 35),
1293+ sprites["ihdgageizm"].clone().set_position(29, 15),
1294+ sprites["ihdgageizm"].clone().set_position(14, 30),
1295+ sprites["ihdgageizm"].clone().set_position(34, 15),
1296+ sprites["ihdgageizm"].clone().set_position(14, 15),
1297+ sprites["ihdgageizm"].clone().set_position(34, 20),
1298+ sprites["ihdgageizm"].clone().set_position(14, 20),
1299+ sprites["ihdgageizm"].clone().set_position(54, 55),
1300+ sprites["ihdgageizm"].clone().set_position(44, 0),
1301+ sprites["ihdgageizm"].clone().set_position(54, 0),
1302+ sprites["ihdgageizm"].clone().set_position(59, 15),
1303+ sprites["ihdgageizm"].clone().set_position(44, 25),
1304+ sprites["ihdgageizm"].clone().set_position(59, 20),
1305+ sprites["ihdgageizm"].clone().set_position(44, 35),
1306+ sprites["ihdgageizm"].clone().set_position(44, 50),
1307+ sprites["ihdgageizm"].clone().set_position(39, 50),
1308+ sprites["ihdgageizm"].clone().set_position(44, 45),
1309+ sprites["ihdgageizm"].clone().set_position(44, 40),
1310+ sprites["ihdgageizm"].clone().set_position(44, 5),
1311+ sprites["ihdgageizm"].clone().set_position(44, 10),
1312+ sprites["ihdgageizm"].clone().set_position(54, 15),
1313+ sprites["kapcaakvb_b"].clone().set_position(49, 4),
1314+ sprites["kvynsvxbpi"].clone().set_position(55, 51),
1315+ sprites["kvynsvxbpi"].clone().set_position(55, 36),
1316+ sprites["mkjdaccuuf"].clone().set_position(14, 10),
1317+ sprites["mxfhnkdzvf"].clone().set_position(49, 0),
1318+ sprites["njpewhmtfd"].clone().set_position(53, 34),
1319+ sprites["npxgalaybz"].clone().set_position(40, 6),
1320+ sprites["npxgalaybz"].clone().set_position(10, 46),
1321+ sprites["npxgalaybz"].clone().set_position(10, 6),
1322+ sprites["nszegiawib"].clone().set_position(52, 48),
1323+ sprites["nszegiawib"].clone().set_position(52, 33),
1324+ sprites["rhsxkxzdjz"].clone().set_position(34, 40),
1325+ sprites["rjlbuycveu"].clone().set_position(54, 50),
1326+ sprites["rjlbuycveu"].clone().set_position(54, 35),
1327+ sprites["sfqyzhzkij"].clone().set_position(24, 50),
1328+ sprites["soyhouuebz"].clone().set_position(24, 30),
1329+ sprites["tihiodtoj_l"].clone().set_position(50, 20),
1330+ sprites["ubyunwkbpx"].clone().set_position(54, 20),
1331+ sprites["vjotnebuqo"].clone().set_position(53, 49),
1332+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
1333+ sprites["xfmluydglp"].clone().set_position(19, 20),
1334+ sprites["xvrpzkggig"].clone(),
1335+ ],
1336+ grid_size=(64, 64),
1337+ data={
1338+ "StepCounter": 42,
1339+ "kvynsvxbpi": [5, 0],
1340+ "GoalColor": [9, 8],
1341+ "GoalRotation": [90, 180],
1342+ "StartShape": 0,
1343+ "StartColor": 14,
1344+ "StartRotation": 0,
1345+ "Fog": False,
1346+ "StepsDecrement": 1,
1347+ },
1348+ ),
1349+ # Level 7
1350+ Level(
1351+ sprites=[
1352+ sprites["eqatonpohu"].clone().set_position(1, 53),
1353+ sprites["ghizzeqtoh"].clone().set_position(1, 53),
1354+ sprites["hoswmpiqkw"].clone().set_position(28, 49),
1355+ sprites["ihdgageizm"].clone().set_position(4, 0),
1356+ sprites["ihdgageizm"].clone().set_position(9, 0),
1357+ sprites["ihdgageizm"].clone().set_position(4, 5),
1358+ sprites["ihdgageizm"].clone().set_position(14, 0),
1359+ sprites["ihdgageizm"].clone().set_position(19, 0),
1360+ sprites["ihdgageizm"].clone().set_position(24, 0),
1361+ sprites["ihdgageizm"].clone().set_position(29, 0),
1362+ sprites["ihdgageizm"].clone().set_position(39, 0),
1363+ sprites["ihdgageizm"].clone().set_position(44, 0),
1364+ sprites["ihdgageizm"].clone().set_position(49, 0),
1365+ sprites["ihdgageizm"].clone().set_position(54, 0),
1366+ sprites["ihdgageizm"].clone().set_position(59, 0),
1367+ sprites["ihdgageizm"].clone().set_position(4, 10),
1368+ sprites["ihdgageizm"].clone().set_position(4, 15),
1369+ sprites["ihdgageizm"].clone().set_position(4, 20),
1370+ sprites["ihdgageizm"].clone().set_position(4, 25),
1371+ sprites["ihdgageizm"].clone().set_position(4, 30),
1372+ sprites["ihdgageizm"].clone().set_position(4, 35),
1373+ sprites["ihdgageizm"].clone().set_position(59, 20),
1374+ sprites["ihdgageizm"].clone().set_position(59, 30),
1375+ sprites["ihdgageizm"].clone().set_position(59, 45),
1376+ sprites["ihdgageizm"].clone().set_position(59, 50),
1377+ sprites["ihdgageizm"].clone().set_position(59, 55),
1378+ sprites["ihdgageizm"].clone().set_position(59, 55),
1379+ sprites["ihdgageizm"].clone().set_position(54, 55),
1380+ sprites["ihdgageizm"].clone().set_position(49, 55),
1381+ sprites["ihdgageizm"].clone().set_position(44, 55),
1382+ sprites["ihdgageizm"].clone().set_position(39, 55),
1383+ sprites["ihdgageizm"].clone().set_position(34, 55),
1384+ sprites["ihdgageizm"].clone().set_position(29, 55),
1385+ sprites["ihdgageizm"].clone().set_position(24, 55),
1386+ sprites["ihdgageizm"].clone().set_position(19, 55),
1387+ sprites["ihdgageizm"].clone().set_position(4, 40),
1388+ sprites["ihdgageizm"].clone().set_position(4, 45),
1389+ sprites["ihdgageizm"].clone().set_position(4, 50),
1390+ sprites["ihdgageizm"].clone().set_position(9, 50),
1391+ sprites["ihdgageizm"].clone().set_position(4, 55),
1392+ sprites["ihdgageizm"].clone().set_position(9, 55),
1393+ sprites["ihdgageizm"].clone().set_position(14, 55),
1394+ sprites["ihdgageizm"].clone().set_position(4, 45),
1395+ sprites["ihdgageizm"].clone().set_position(34, 0),
1396+ sprites["ihdgageizm"].clone().set_position(59, 10),
1397+ sprites["ihdgageizm"].clone().set_position(59, 5),
1398+ sprites["ihdgageizm"].clone().set_position(24, 40),
1399+ sprites["ihdgageizm"].clone().set_position(44, 10),
1400+ sprites["ihdgageizm"].clone().set_position(44, 5),
1401+ sprites["ihdgageizm"].clone().set_position(44, 15),
1402+ sprites["ihdgageizm"].clone().set_position(39, 45),
1403+ sprites["ihdgageizm"].clone().set_position(24, 45),
1404+ sprites["ihdgageizm"].clone().set_position(34, 45),
1405+ sprites["ihdgageizm"].clone().set_position(24, 50),
1406+ sprites["ihdgageizm"].clone().set_position(34, 50),
1407+ sprites["ihdgageizm"].clone().set_position(44, 20),
1408+ sprites["ihdgageizm"].clone().set_position(44, 25),
1409+ sprites["ihdgageizm"].clone().set_position(19, 50),
1410+ sprites["ihdgageizm"].clone().set_position(24, 35),
1411+ sprites["ihdgageizm"].clone().set_position(39, 50),
1412+ sprites["ihdgageizm"].clone().set_position(9, 45),
1413+ sprites["ihdgageizm"].clone().set_position(14, 50),
1414+ sprites["ihdgageizm"].clone().set_position(19, 45),
1415+ sprites["ihdgageizm"].clone().set_position(29, 15),
1416+ sprites["ihdgageizm"].clone().set_position(59, 15),
1417+ sprites["ihdgageizm"].clone().set_position(59, 25),
1418+ sprites["ihdgageizm"].clone().set_position(59, 35),
1419+ sprites["ihdgageizm"].clone().set_position(59, 40),
1420+ sprites["ihdgageizm"].clone().set_position(44, 45),
1421+ sprites["ihdgageizm"].clone().set_position(24, 15),
1422+ sprites["ihdgageizm"].clone().set_position(24, 20),
1423+ sprites["ihdgageizm"].clone().set_position(19, 20),
1424+ sprites["ihdgageizm"].clone().set_position(54, 45),
1425+ sprites["ihdgageizm"].clone().set_position(34, 40),
1426+ sprites["ihdgageizm"].clone().set_position(34, 5),
1427+ sprites["ihdgageizm"].clone().set_position(24, 10),
1428+ sprites["ihdgageizm"].clone().set_position(24, 30),
1429+ sprites["ihdgageizm"].clone().set_position(19, 30),
1430+ sprites["ihdgageizm"].clone().set_position(14, 20),
1431+ sprites["ihdgageizm"].clone().set_position(14, 30),
1432+ sprites["irgjxweouz"].clone().set_position(54, 5),
1433+ sprites["kapcaakvb_b"].clone().set_position(39, 19),
1434+ sprites["krdypjjivz"].clone().set_position(34, 35),
1435+ sprites["kvynsvxbpi"].clone().set_position(30, 51),
1436+ sprites["lujfinsby_t"].clone().set_position(34, 31),
1437+ sprites["mkjdaccuuf"].clone().set_position(19, 40),
1438+ sprites["mxfhnkdzvf"].clone().set_position(39, 15),
1439+ sprites["npxgalaybz"].clone().set_position(30, 21),
1440+ sprites["npxgalaybz"].clone().set_position(50, 6),
1441+ sprites["npxgalaybz"].clone().set_position(15, 46),
1442+ sprites["npxgalaybz"].clone().set_position(40, 6),
1443+ sprites["npxgalaybz"].clone().set_position(55, 51),
1444+ sprites["npxgalaybz"].clone().set_position(10, 6),
1445+ sprites["nszegiawib"].clone().set_position(27, 48),
1446+ sprites["rhsxkxzdjz"].clone().set_position(54, 10),
1447+ sprites["rjlbuycveu"].clone().set_position(29, 50),
1448+ sprites["sfqyzhzkij"].clone().set_position(19, 15),
1449+ sprites["soyhouuebz"].clone().set_position(9, 40),
1450+ sprites["tihiodtoj_l"].clone().set_position(40, 30),
1451+ sprites["ubyunwkbpx"].clone().set_position(44, 30),
1452+ sprites["vjotnebuqo"].clone().set_position(28, 49),
1453+ sprites["wgmbtyhvbc"].clone().set_position(3, 55).set_scale(2),
1454+ sprites["xvrpzkggig"].clone(),
1455+ ],
1456+ grid_size=(64, 64),
1457+ data={
1458+ "StepCounter": 42,
1459+ "kvynsvxbpi": 0,
1460+ "GoalColor": 8,
1461+ "GoalRotation": 180,
1462+ "StartShape": 1,
1463+ "StartColor": 12,
1464+ "StartRotation": 0,
1465+ "Fog": True,
1466+ },
1467+ ),
1468+]
1469+BACKGROUND_COLOR = 3
1470+PADDING_COLOR = 3
1471+ubupgomgin = -1
1472+epeqflmtfc = 0
1473+dqifgqaxrg = 1
1474+oazrnhzatr = 2
1475+iisukudgvu = 3
1476+kacnekcwsp = 4
1477+avbdwkmqcy = 5
1478+ijbilzmvdl = 6
1479+yffnqoouus = 7
1480+tqogkgimes = 8
1481+jninpsotet = 9
1482+vgcsccvckt = 10
1483+dhxmtlewyv = 11
1484+epqvqkpffo = 12
1485+qqkmepheqb = 13
1486+bejggpjowv = 14
1487+eqvdisyxbr = 15
1488+zoghkczvvt = 5
1489+xvzyzqolqz = 5
1490+
1491+
1492+class hbuhvkxlhc(RenderableUserDisplay):
1493+ """."""
1494+
1495+ bfdcztirdu: List[Tuple[int, int]]
1496+
1497+ def __init__(self, vjhajnbdzr: "Ls20", osgviligwp: int):
1498+ self.vjhajnbdzr = vjhajnbdzr
1499+ self.osgviligwp = osgviligwp
1500+ self.current_steps = osgviligwp
1501+ self.efipnixsvl = 1
1502+
1503+ def kbkdzqocik(self, kapizhweba: int) -> None:
1504+ self.current_steps = max(0, min(kapizhweba, self.osgviligwp))
1505+
1506+ def vytykscvhe(self, efipnixsvl: int) -> None:
1507+ self.efipnixsvl = efipnixsvl
1508+
1509+ def mfyzdfvxsm(self) -> bool:
1510+ if self.current_steps >= 0:
1511+ self.current_steps -= self.efipnixsvl
1512+ return self.current_steps >= 0
1513+
1514+ def nzukewekzr(self) -> None:
1515+ self.current_steps = self.osgviligwp
1516+
1517+ def render_interface(self, frame: np.ndarray) -> np.ndarray:
1518+ if self.osgviligwp == 0 or self.vjhajnbdzr.ebfuxzbvn:
1519+ return frame
1520+ yydgfgfvvh = 1.5
1521+ if self.vjhajnbdzr.oeuabekjf:
1522+ for i in range(64):
1523+ for fbklvtfnjh in range(64):
1524+ if (
1525+ math.dist(
1526+ (i, fbklvtfnjh),
1527+ (
1528+ self.vjhajnbdzr.gudziatsk.y + yydgfgfvvh,
1529+ self.vjhajnbdzr.gudziatsk.x + yydgfgfvvh,
1530+ ),
1531+ )
1532+ > 20.0
1533+ ):
1534+ frame[i, fbklvtfnjh] = avbdwkmqcy
1535+ if self.vjhajnbdzr.htkmubhry and self.vjhajnbdzr.htkmubhry.is_visible:
1536+ sprite = self.vjhajnbdzr.htkmubhry.render()
1537+ wmdkkxqkw = 3
1538+ toxqhfsju = 55
1539+ for i in range(self.vjhajnbdzr.htkmubhry.height):
1540+ for rejdvlfhdv in range(self.vjhajnbdzr.htkmubhry.width):
1541+ if sprite[i][rejdvlfhdv] != -1:
1542+ frame[toxqhfsju + i, wmdkkxqkw + rejdvlfhdv] = sprite[i][rejdvlfhdv]
1543+ for i in range(self.osgviligwp):
1544+ wmdkkxqkw = 13 + i
1545+ toxqhfsju = 61
1546+ frame[toxqhfsju : toxqhfsju + 2, wmdkkxqkw] = dhxmtlewyv if self.osgviligwp - i - 1 < self.current_steps else iisukudgvu
1547+ for bsyrmrqsrq in range(3):
1548+ wmdkkxqkw = 56 + 3 * bsyrmrqsrq
1549+ toxqhfsju = 61
1550+ for x in range(2):
1551+ frame[toxqhfsju : toxqhfsju + 2, wmdkkxqkw + x] = tqogkgimes if self.vjhajnbdzr.aqygnziho > bsyrmrqsrq else iisukudgvu
1552+ return frame
1553+
1554+
1555+class xajlyftlyn:
1556+ def wgxrzqzazj(self) -> bool:
1557+ return False
1558+
1559+
1560+class twkzhcfelv(xajlyftlyn):
1561+ qeekhxkoad = 8
1562+ boafatmkhi = 6
1563+
1564+ def __init__(self, sprite: Sprite, fjzuynaokm: Set[Tuple[int, int]]) -> None:
1565+ self.fjzuynaokm = fjzuynaokm
1566+ self.sprite = sprite
1567+ self.sprite.set_blocking(BlockingMode.BOUNDING_BOX)
1568+ self.width = self.sprite.width
1569+ self.height = self.sprite.height
1570+ self.start_x = self.sprite.x
1571+ self.start_y = self.sprite.y
1572+ self.dx = 0
1573+ self.dy = 0
1574+ if sprite.name.endswith("t"):
1575+ self.dy = -1
1576+ elif sprite.name.endswith("b"):
1577+ self.dy = 1
1578+ elif sprite.name.endswith("r"):
1579+ self.dx = 1
1580+ elif sprite.name.endswith("l"):
1581+ self.dx = -1
1582+ self.target_x = self.sprite.x
1583+ self.target_y = self.sprite.y
1584+ self.is_pushing = False
1585+ self.aqxtoxeino: Optional[Sprite] = None
1586+ self._anim_elapsed = 0
1587+ self._anim_duration = 1
1588+ self._anim_from_x = float(self.sprite.x)
1589+ self._anim_from_y = float(self.sprite.y)
1590+ self._anim_to_x = float(self.sprite.x)
1591+ self._anim_to_y = float(self.sprite.y)
1592+ self._carry_x = 0.0
1593+ self._carry_y = 0.0
1594+
1595+ def ullzqnksoj(self, aqxtoxeino: Sprite) -> int:
1596+ wall_cx, wall_cy = (self.sprite.x + 1 * self.dx, self.sprite.y + 1 * self.dy)
1597+ xwjnqmqiaz = None
1598+ for acdeadlbzx in range(1, 12):
1599+ nskortmtde = wall_cx + self.dx * self.width * acdeadlbzx
1600+ wsotwbexvh = wall_cy + self.dy * self.height * acdeadlbzx
1601+ if (nskortmtde, wsotwbexvh) in self.fjzuynaokm:
1602+ xwjnqmqiaz = acdeadlbzx
1603+ break
1604+ if xwjnqmqiaz is None:
1605+ return 0
1606+ return max(0, xwjnqmqiaz - 1)
1607+
1608+ def mfnyvivrar(self, dxegqdlzda: float) -> float:
1609+ if dxegqdlzda < 0.5:
1610+ return 4 * dxegqdlzda * dxegqdlzda * dxegqdlzda
1611+ return 1 - (-2 * dxegqdlzda + 2) ** 3 / 2
1612+
1613+ def monctmxmpp(self, dutvzjyvok: int, xxnitqxuds: int, ilzothrych: int) -> None:
1614+ self._anim_elapsed = 0
1615+ self._anim_duration = max(1, int(ilzothrych))
1616+ self._anim_from_x = float(self.sprite.x)
1617+ self._anim_from_y = float(self.sprite.y)
1618+ self._anim_to_x = float(dutvzjyvok)
1619+ self._anim_to_y = float(xxnitqxuds)
1620+ self._carry_x = 0.0
1621+ self._carry_y = 0.0
1622+
1623+ def qeoitwygzm(self, srkcilioyp: bool) -> bool:
1624+ if self._anim_elapsed >= self._anim_duration:
1625+ dx = int(round(self._anim_to_x - self.sprite.x))
1626+ dy = int(round(self._anim_to_y - self.sprite.y))
1627+ if dx or dy:
1628+ self.sprite.move(dx, dy)
1629+ if srkcilioyp and self.aqxtoxeino is not None:
1630+ self.aqxtoxeino.move(dx, dy)
1631+ return False
1632+ self._anim_elapsed += 1
1633+ dxegqdlzda = self._anim_elapsed / self._anim_duration
1634+ hpaysqkbgh = self.mfnyvivrar(dxegqdlzda)
1635+ enzdcdjnzt = self._anim_from_x + (self._anim_to_x - self._anim_from_x) * hpaysqkbgh
1636+ kyaecjvpph = self._anim_from_y + (self._anim_to_y - self._anim_from_y) * hpaysqkbgh
1637+ kdsuujxuag = enzdcdjnzt - float(self.sprite.x) + self._carry_x
1638+ sihdbliheu = kyaecjvpph - float(self.sprite.y) + self._carry_y
1639+ vzkxmdfnba = int(kdsuujxuag)
1640+ acjrijfisx = int(sihdbliheu)
1641+ self._carry_x = kdsuujxuag - vzkxmdfnba
1642+ self._carry_y = sihdbliheu - acjrijfisx
1643+ if vzkxmdfnba or acjrijfisx:
1644+ self.sprite.move(vzkxmdfnba, acjrijfisx)
1645+ if srkcilioyp and self.aqxtoxeino is not None:
1646+ self.aqxtoxeino.move(vzkxmdfnba, acjrijfisx)
1647+ return True
1648+
1649+ def prpxgfxlcm(self, aqxtoxeino: Sprite) -> bool:
1650+ if not self.sprite.collides_with(aqxtoxeino):
1651+ return False
1652+ gguyvrkohc = self.ullzqnksoj(aqxtoxeino)
1653+ if gguyvrkohc <= 0:
1654+ return False
1655+ self.aqxtoxeino = aqxtoxeino
1656+ self.is_pushing = True
1657+ self.target_x = self.start_x + self.dx * self.width * gguyvrkohc
1658+ self.target_y = self.start_y + self.dy * self.height * gguyvrkohc
1659+ self.monctmxmpp(self.target_x, self.target_y, self.qeekhxkoad)
1660+ return True
1661+
1662+ def wgxrzqzazj(self) -> bool:
1663+ if self.is_pushing:
1664+ if self.qeoitwygzm(srkcilioyp=True):
1665+ return True
1666+ self.target_x = self.start_x
1667+ self.target_y = self.start_y
1668+ self.is_pushing = False
1669+ self.monctmxmpp(self.target_x, self.target_y, self.boafatmkhi)
1670+ return True
1671+ return self.qeoitwygzm(srkcilioyp=False)
1672+
1673+
1674+class dboxixicic:
1675+ def __init__(self, oypxsalqjo: Sprite, sprite: Sprite, pawjyrnadt: int = 5) -> None:
1676+ self.bfdcztirdu = oypxsalqjo
1677+ self._sprite = sprite
1678+ self._cell = pawjyrnadt
1679+ self._start_x = sprite.x
1680+ self._start_y = sprite.y
1681+ self._dir = 0
1682+ self._undo_x: Optional[int] = None
1683+ self._undo_y: Optional[int] = None
1684+ self._undo_dir: Optional[int] = None
1685+
1686+ def bkuguqrpvq(self) -> None:
1687+ self._dir = 0
1688+ self._sprite.set_position(self._start_x, self._start_y)
1689+ self._undo_x = None
1690+ self._undo_y = None
1691+ self._undo_dir = None
1692+
1693+ def qrttfzbifu(self) -> None:
1694+ self._dir = (self._dir + 2) % 4
1695+
1696+ def npdjlrkhsg(self) -> Tuple[int, int]:
1697+ if not self.bfdcztirdu:
1698+ return (0, 0)
1699+ msmljuaejl = (
1700+ self._dir,
1701+ (self._dir - 1) % 4,
1702+ (self._dir + 1) % 4,
1703+ (self._dir + 2) % 4,
1704+ )
1705+ for acdeadlbzx in msmljuaejl:
1706+ dx, dy = self.nakogfhyus(acdeadlbzx)
1707+ rbaqncskoi = self._sprite.x + dx * self._cell
1708+ uodlwwyprt = self._sprite.y + dy * self._cell
1709+ if self.iiosonyanc(rbaqncskoi, uodlwwyprt):
1710+ self._dir = acdeadlbzx
1711+ return (dx, dy)
1712+ return (0, 0)
1713+
1714+ def step(self) -> bool:
1715+ folqexnjmf = self._sprite.x
1716+ yxlpsejtoh = self._sprite.y
1717+ wsdeleuewc = self._dir
1718+ dx, dy = self.npdjlrkhsg()
1719+ if dx == 0 and dy == 0:
1720+ self._undo_x = None
1721+ self._undo_y = None
1722+ self._undo_dir = None
1723+ return False
1724+ self._undo_x = folqexnjmf
1725+ self._undo_y = yxlpsejtoh
1726+ self._undo_dir = wsdeleuewc
1727+ self._sprite.set_position(folqexnjmf + dx * self._cell, yxlpsejtoh + dy * self._cell)
1728+ return True
1729+
1730+ def fwtnsrvkrz(self) -> bool:
1731+ if self._undo_x is None or self._undo_y is None or self._undo_dir is None:
1732+ return False
1733+ self._sprite.set_position(self._undo_x, self._undo_y)
1734+ self._dir = self._undo_dir
1735+ self._undo_x = None
1736+ self._undo_y = None
1737+ self._undo_dir = None
1738+ return True
1739+
1740+ def iiosonyanc(self, x: int, y: int) -> bool:
1741+ if not self.bfdcztirdu:
1742+ return False
1743+ return self.vtfcqjvbeo(x, y) and self.uczkzlpcwg(x, y) >= 0
1744+
1745+ def vtfcqjvbeo(self, x: int, y: int) -> bool:
1746+ return x >= self.bfdcztirdu.x and y >= self.bfdcztirdu.y and (x < self.bfdcztirdu.x + self.bfdcztirdu.width) and (y < self.bfdcztirdu.y + self.bfdcztirdu.height)
1747+
1748+ def uczkzlpcwg(self, x: int, y: int) -> int:
1749+ akcoyirktv = x - self.bfdcztirdu.x
1750+ cgpwxobidt = y - self.bfdcztirdu.y
1751+ if akcoyirktv < 0 or akcoyirktv >= self.bfdcztirdu.width or cgpwxobidt < 0 or (cgpwxobidt >= self.bfdcztirdu.height):
1752+ return -1
1753+ return int(self.bfdcztirdu.pixels[cgpwxobidt, akcoyirktv])
1754+
1755+ def nakogfhyus(self, acdeadlbzx: int) -> Tuple[int, int]:
1756+ if acdeadlbzx == 0:
1757+ return (0, 1)
1758+ if acdeadlbzx == 1:
1759+ return (1, 0)
1760+ if acdeadlbzx == 2:
1761+ return (0, -1)
1762+ return (-1, 0)
1763+
1764+
1765+class Ls20(ARCBaseGame):
1766+ def __init__(self) -> None:
1767+ shumwqpzsq = levels[0].get_data("StepCounter") if levels else 0
1768+ osgviligwp = shumwqpzsq if shumwqpzsq else 0
1769+ self._step_counter_ui = hbuhvkxlhc(self, osgviligwp)
1770+ self.ijessuuig = []
1771+ self.tnkekoeuk = [epqvqkpffo, jninpsotet, bejggpjowv, tqogkgimes]
1772+ self.dhksvilbb = [0, 90, 180, 270]
1773+ self.ijessuuig.append(sprites["gngifvjddu"])
1774+ self.ijessuuig.append(sprites["fywfjzkxlm"])
1775+ self.ijessuuig.append(sprites["mkfbgalsbe"])
1776+ self.ijessuuig.append(sprites["nnjhdcanjk"])
1777+ self.ijessuuig.append(sprites["grcpfuizfp"])
1778+ self.ijessuuig.append(sprites["ubspnhafvq"])
1779+ self.oeuabekjf = False
1780+ xngzmcbxu = Camera(
1781+ width=16,
1782+ height=16,
1783+ background=BACKGROUND_COLOR,
1784+ letter_box=PADDING_COLOR,
1785+ interfaces=[self._step_counter_ui],
1786+ )
1787+ super().__init__(game_id="ls20", levels=levels, camera=xngzmcbxu, available_actions=[1, 2, 3, 4])
1788+ self.wbcenorpju()
1789+
1790+ def wbcenorpju(self) -> None:
1791+ """."""
1792+ hgkhqetaxy = self.current_level.get_data("StepsDecrement")
1793+ efipnixsvl = 2 if hgkhqetaxy is None else hgkhqetaxy
1794+ self._step_counter_ui.vytykscvhe(efipnixsvl)
1795+ rnaomksehd = self.current_level.get_data("StepCounter")
1796+ if rnaomksehd:
1797+ self._step_counter_ui.osgviligwp = rnaomksehd
1798+ self._step_counter_ui.nzukewekzr()
1799+
1800+ def on_set_level(self, level: Level) -> None:
1801+ """."""
1802+ self._levels[self._current_level_index] = self._clean_levels[self._current_level_index].clone()
1803+ self.gudziatsk = self.current_level.get_sprites_by_tag("sfqyzhzkij")[0]
1804+ self.gudziatsk.set_blocking(BlockingMode.BOUNDING_BOX)
1805+ self.gisrhqpee = self.gudziatsk.width
1806+ self.tbwnoxqgc = self.gudziatsk.height
1807+ self.htkmubhry = self.current_level.get_sprites_by_tag("wgmbtyhvbc")[0]
1808+ self.htkmubhry_2 = self.current_level.get_sprites_by_tag("eqatonpohu")[0]
1809+ self.tsynhckng = self.current_level.get_sprites_by_tag("ghizzeqtoh")[0]
1810+ self.srgbthxut = self.current_level.get_sprites_by_tag("kvynsvxbpi")
1811+ self.plrpelhym = self.current_level.get_sprites_by_tag("rjlbuycveu")
1812+ self.lvrnuajbl = [False] * len(self.srgbthxut)
1813+ self.fwckfzsyc = 0
1814+ self.hiaauhahz = 0
1815+ self.cklxociuu = 0
1816+ self.wbcenorpju()
1817+ ezhluetmc = self.current_level.grid_size
1818+ if ezhluetmc is not None:
1819+ self.drtdqwdbc = ezhluetmc[0]
1820+ self.qlgmdayuo = ezhluetmc[1]
1821+ self.ehwheiwsk = []
1822+ self.yjdexjsoa = []
1823+ self.oeuabekjf = self.current_level.get_data("Fog")
1824+ self.ldxlnycps = self.current_level.get_data("kvynsvxbpi")
1825+ if isinstance(self.ldxlnycps, int):
1826+ self.ldxlnycps = [self.ldxlnycps]
1827+ ldgzgjdsrf = self.current_level.get_data("GoalRotation")
1828+ if isinstance(ldgzgjdsrf, int):
1829+ ldgzgjdsrf = [ldgzgjdsrf]
1830+ lbgtuaplev = self.current_level.get_data("GoalColor")
1831+ if isinstance(lbgtuaplev, int):
1832+ lbgtuaplev = [lbgtuaplev]
1833+ for dinyecvyq in range(len(self.plrpelhym)):
1834+ self.ehwheiwsk.append(self.dhksvilbb.index(ldgzgjdsrf[dinyecvyq]))
1835+ self.yjdexjsoa.append(self.tnkekoeuk.index(lbgtuaplev[dinyecvyq]))
1836+ self.srgbthxut[dinyecvyq].pixels = self.ijessuuig[self.ldxlnycps[dinyecvyq]].pixels.copy()
1837+ self.srgbthxut[dinyecvyq].color_remap(epeqflmtfc, self.tnkekoeuk[self.yjdexjsoa[dinyecvyq]])
1838+ self.srgbthxut[dinyecvyq].set_rotation(self.dhksvilbb[self.ehwheiwsk[dinyecvyq]])
1839+ self.qetwzqzzik()
1840+ self.aqdxgoyvu = sprites["sqpmiygfvh"].clone()
1841+ self.current_level.add_sprite(self.aqdxgoyvu)
1842+ self.aqdxgoyvu.set_visible(False)
1843+ self.aqygnziho = 3
1844+ self.ofoahudlo: List[Sprite] = []
1845+ self.byotxmvkt: List[Sprite] = []
1846+ self.alsxlhizr: List[Sprite] = []
1847+ self.ebfuxzbvn = 0
1848+ self.akoadfsur = 0
1849+ self.ltwrkifkx = self.gudziatsk.x
1850+ self.zyoimjaei = self.gudziatsk.y
1851+ self.wsoslqeku: List[dboxixicic] = []
1852+ for uedjpektbg in self.current_level.get_sprites_by_tag("xfmluydglp"):
1853+ for ocajwvfus in ("ttfwljgohq", "soyhouuebz", "rhsxkxzdjz"):
1854+ for hasivfwip in self.current_level.get_sprites_by_tag(ocajwvfus):
1855+ if uedjpektbg.collides_with(hasivfwip, ignoreMode=True):
1856+ self.wsoslqeku.append(dboxixicic(uedjpektbg, hasivfwip))
1857+ fjzuynaokm: Set[Tuple[int, int]] = set()
1858+ for qoceexndvw in self.current_level.get_sprites_by_tag("ihdgageizm"):
1859+ fjzuynaokm.add((qoceexndvw.x, qoceexndvw.y))
1860+ for grbudvkafa in self.current_level.get_sprites_by_tag("rjlbuycveu"):
1861+ fjzuynaokm.add((grbudvkafa.x, grbudvkafa.y))
1862+ self.hasivfwip: List[twkzhcfelv] = []
1863+ for ojwauijaoq in self.current_level.get_sprites_by_tag("gbvqrjtaqo"):
1864+ self.hasivfwip.append(twkzhcfelv(ojwauijaoq, fjzuynaokm))
1865+ self.euemavvxz: List[xajlyftlyn] = []
1866+
1867+ def mrznumynfe(self, zccgflmau: int, qoxqcbqfp: int, xzejejszi: int, eutrvdkbx: int) -> List[Sprite]:
1868+ """."""
1869+ ehiovmywu = self.current_level._sprites
1870+ return [xfemxgpuj for xfemxgpuj in ehiovmywu if xfemxgpuj.x >= zccgflmau and xfemxgpuj.x < zccgflmau + xzejejszi and (xfemxgpuj.y >= qoxqcbqfp) and (xfemxgpuj.y < qoxqcbqfp + eutrvdkbx)]
1871+
1872+ def txnfzvzetn(self, juldcpkjse: int, ullicjtklz: int) -> Tuple[bool, bool]:
1873+ ttiyzlpkgh = self.mrznumynfe(juldcpkjse, ullicjtklz, self.gisrhqpee, self.tbwnoxqgc)
1874+ bwdzgjttjp = False
1875+ yubyobdoss = False
1876+ for mvcsnkcqz in ttiyzlpkgh:
1877+ if mvcsnkcqz.tags is None:
1878+ break
1879+ elif "ihdgageizm" in mvcsnkcqz.tags:
1880+ bwdzgjttjp = True
1881+ break
1882+ elif "rjlbuycveu" in mvcsnkcqz.tags:
1883+ wyhfvzxukh = self.plrpelhym.index(mvcsnkcqz)
1884+ if not self.bejndxqqzf(wyhfvzxukh):
1885+ self.htkmubhry_2.color_remap(None, epeqflmtfc)
1886+ self.akoadfsur = zoghkczvvt
1887+ bwdzgjttjp = True
1888+ elif "npxgalaybz" in mvcsnkcqz.tags:
1889+ yubyobdoss = True
1890+ self._step_counter_ui.kbkdzqocik(self._step_counter_ui.osgviligwp)
1891+ self.ofoahudlo.append(mvcsnkcqz)
1892+ self.current_level.remove_sprite(mvcsnkcqz)
1893+ elif "ttfwljgohq" in mvcsnkcqz.tags:
1894+ self.fwckfzsyc = (self.fwckfzsyc + 1) % len(self.ijessuuig)
1895+ self.htkmubhry.pixels = self.ijessuuig[self.fwckfzsyc].pixels.copy()
1896+ self.htkmubhry.color_remap(epeqflmtfc, self.tnkekoeuk[self.hiaauhahz])
1897+ if self.vqfjzzkhid():
1898+ self.akoadfsur = zoghkczvvt
1899+ elif "soyhouuebz" in mvcsnkcqz.tags:
1900+ lwphyolnjb = (self.hiaauhahz + 1) % len(self.tnkekoeuk)
1901+ self.htkmubhry.color_remap(self.tnkekoeuk[self.hiaauhahz], self.tnkekoeuk[lwphyolnjb])
1902+ self.hiaauhahz = lwphyolnjb
1903+ if self.vqfjzzkhid():
1904+ self.akoadfsur = zoghkczvvt
1905+ elif "rhsxkxzdjz" in mvcsnkcqz.tags:
1906+ self.cklxociuu = (self.cklxociuu + 1) % 4
1907+ self.htkmubhry.set_rotation(self.dhksvilbb[self.cklxociuu])
1908+ if self.vqfjzzkhid():
1909+ self.akoadfsur = zoghkczvvt
1910+ return (bwdzgjttjp, yubyobdoss)
1911+
1912+ def step(self) -> None:
1913+ if self.euemavvxz:
1914+ for i in range(len(self.euemavvxz) - 1, -1, -1):
1915+ kgppvertad = self.euemavvxz[i]
1916+ if not kgppvertad.wgxrzqzazj():
1917+ del self.euemavvxz[i]
1918+ if not self.euemavvxz:
1919+ self.txnfzvzetn(self.gudziatsk.x, self.gudziatsk.y)
1920+ self.complete_action()
1921+ return
1922+ if self.ebfuxzbvn > 0:
1923+ self.ebfuxzbvn -= 1
1924+ if self.ebfuxzbvn > 0:
1925+ return
1926+ self.aqdxgoyvu.set_visible(False)
1927+ self.htkmubhry.set_visible(True)
1928+ self.complete_action()
1929+ return
1930+ if self.akoadfsur > 0:
1931+ self.akoadfsur -= 1
1932+ if self.akoadfsur > 0:
1933+ return
1934+ self.htkmubhry_2.color_remap(None, avbdwkmqcy)
1935+ self.tsynhckng.set_visible(False)
1936+ for pidqulszaw in self.current_level.get_sprites_by_tag("hoswmpiqkw"):
1937+ pidqulszaw.set_visible(False)
1938+ self.complete_action()
1939+ return
1940+ hnrvmfooc = 0
1941+ feyjbrwyb = 0
1942+ etvjlacrau = False
1943+ if self.action.id == GameAction.ACTION1:
1944+ feyjbrwyb = -1
1945+ etvjlacrau = True
1946+ elif self.action.id == GameAction.ACTION2:
1947+ feyjbrwyb = 1
1948+ etvjlacrau = True
1949+ elif self.action.id == GameAction.ACTION3:
1950+ hnrvmfooc = -1
1951+ etvjlacrau = True
1952+ elif self.action.id == GameAction.ACTION4:
1953+ hnrvmfooc = 1
1954+ etvjlacrau = True
1955+ if not etvjlacrau:
1956+ self.complete_action()
1957+ return
1958+ for arilbvrrme in self.wsoslqeku:
1959+ arilbvrrme.step()
1960+ juldcpkjse, ullicjtklz = (
1961+ self.gudziatsk.x + hnrvmfooc * self.gisrhqpee,
1962+ self.gudziatsk.y + feyjbrwyb * self.tbwnoxqgc,
1963+ )
1964+ bwdzgjttjp, yubyobdoss = self.txnfzvzetn(juldcpkjse, ullicjtklz)
1965+ if not bwdzgjttjp:
1966+ self.gudziatsk.set_position(juldcpkjse, ullicjtklz)
1967+ else:
1968+ for arilbvrrme in self.wsoslqeku:
1969+ arilbvrrme.fwtnsrvkrz()
1970+ if self.akoadfsur:
1971+ return
1972+ bkuguqrpvq = not yubyobdoss and (not self._step_counter_ui.mfyzdfvxsm())
1973+ if not bkuguqrpvq:
1974+ for shdkimnqse in self.hasivfwip:
1975+ if shdkimnqse.prpxgfxlcm(self.gudziatsk):
1976+ self.euemavvxz.append(shdkimnqse)
1977+ return
1978+ if self.pbznecvnfr():
1979+ self.next_level()
1980+ self.complete_action()
1981+ return
1982+ if bkuguqrpvq:
1983+ self.aqygnziho -= 1
1984+ if self.aqygnziho == 0:
1985+ self.lose()
1986+ self.complete_action()
1987+ return
1988+ self.aqdxgoyvu.set_visible(True)
1989+ self.aqdxgoyvu.set_scale(64)
1990+ self.aqdxgoyvu.set_position(0, 0)
1991+ self.htkmubhry.set_visible(False)
1992+ self.ebfuxzbvn = xvzyzqolqz
1993+ self.lvrnuajbl = [False] * len(self.plrpelhym)
1994+ self.gudziatsk.set_position(self.ltwrkifkx, self.zyoimjaei)
1995+ self.qetwzqzzik()
1996+ for iybkldaxol in self.ofoahudlo:
1997+ self.current_level.add_sprite(iybkldaxol)
1998+ for spssohsnbq in self.byotxmvkt:
1999+ self.current_level.add_sprite(spssohsnbq)
2000+ for lztoedneuu in self.alsxlhizr:
2001+ self.current_level.add_sprite(lztoedneuu)
2002+ self.ofoahudlo = []
2003+ self.byotxmvkt = []
2004+ self.alsxlhizr = []
2005+ self._step_counter_ui.kbkdzqocik(self._step_counter_ui.osgviligwp)
2006+ self.tsynhckng.set_visible(False)
2007+ for pidqulszaw in self.current_level.get_sprites_by_tag("hoswmpiqkw"):
2008+ pidqulszaw.set_visible(False)
2009+ for opdsmckaqo in self.current_level.get_sprites_by_tag("vjotnebuqo"):
2010+ opdsmckaqo.set_visible(True)
2011+ for arilbvrrme in self.wsoslqeku:
2012+ arilbvrrme.bkuguqrpvq()
2013+ return
2014+ self.complete_action()
2015+
2016+ def qetwzqzzik(self) -> None:
2017+ self.cklxociuu = self.dhksvilbb.index(self.current_level.get_data("StartRotation"))
2018+ self.hiaauhahz = self.tnkekoeuk.index(self.current_level.get_data("StartColor"))
2019+ self.fwckfzsyc = self.current_level.get_data("StartShape")
2020+ self.htkmubhry.pixels = self.ijessuuig[self.fwckfzsyc].pixels.copy()
2021+ self.htkmubhry.color_remap(epeqflmtfc, self.tnkekoeuk[self.hiaauhahz])
2022+ self.htkmubhry.set_rotation(self.dhksvilbb[self.cklxociuu])
2023+
2024+ def vqfjzzkhid(self) -> bool:
2025+ if self.level_index > 0:
2026+ return False
2027+ uhftkonsvn = False
2028+ for wyhfvzxukh, spssohsnbq in enumerate(self.plrpelhym):
2029+ pidqulszaw = self.current_level.get_sprite_at(spssohsnbq.x - 1, spssohsnbq.y - 1, "hoswmpiqkw")
2030+ if self.bejndxqqzf(wyhfvzxukh) and (not self.lvrnuajbl[wyhfvzxukh]):
2031+ uhftkonsvn = True
2032+ if pidqulszaw:
2033+ pidqulszaw.set_visible(True)
2034+ elif pidqulszaw:
2035+ pidqulszaw.set_visible(False)
2036+ self.tsynhckng.set_visible(uhftkonsvn)
2037+ return uhftkonsvn
2038+
2039+ def bejndxqqzf(self, wyhfvzxukh: int) -> bool:
2040+ return self.fwckfzsyc == self.ldxlnycps[wyhfvzxukh] and self.hiaauhahz == self.yjdexjsoa[wyhfvzxukh] and (self.cklxociuu == self.ehwheiwsk[wyhfvzxukh])
2041+
2042+ def pbznecvnfr(self) -> bool:
2043+ for i, spssohsnbq in enumerate(self.plrpelhym):
2044+ if not self.lvrnuajbl[i] and self.gudziatsk.x == spssohsnbq.x and (self.gudziatsk.y == spssohsnbq.y) and self.bejndxqqzf(i):
2045+ self.lvrnuajbl[i] = True
2046+ self.byotxmvkt.append(self.plrpelhym[i])
2047+ self.alsxlhizr.append(self.srgbthxut[i])
2048+ self.current_level.remove_sprite(self.plrpelhym[i])
2049+ self.current_level.remove_sprite(self.srgbthxut[i])
2050+ opdsmckaqo = self.current_level.get_sprite_at(spssohsnbq.x - 1, spssohsnbq.y - 1, "vjotnebuqo")
2051+ if opdsmckaqo and "vfkkzdgxzx" in opdsmckaqo.tags:
2052+ opdsmckaqo.set_visible(False)
2053+ pidqulszaw = self.current_level.get_sprite_at(spssohsnbq.x - 1, spssohsnbq.y - 1, "hoswmpiqkw")
2054+ if pidqulszaw:
2055+ pidqulszaw.set_visible(False)
2056+ self.tsynhckng.set_visible(False)
2057+ for i in range(len(self.lvrnuajbl)):
2058+ if not self.lvrnuajbl[i]:
2059+ return False
2060+ return True
+18 −0 referee/environment_files/ls20/9607627b/metadata.json 新增 查看文件
@@ -0,0 +1,18 @@
1+{
2+ "game_id": "ls20-9607627b",
3+ "title": "LS20",
4+ "default_fps": 30,
5+ "tags": [
6+ "keyboard"
7+ ],
8+ "baseline_actions": [
9+ 22,
10+ 123,
11+ 73,
12+ 84,
13+ 96,
14+ 192,
15+ 186
16+ ],
17+ "date_downloaded": "2026-10-21T17:11:38.276032+00:00"
18+}
+17 −0 referee/environment_files/sp80/589a99af/metadata.json 新增 查看文件
@@ -0,0 +1,17 @@
1+{
2+ "game_id": "sp80-589a99af",
3+ "title": "SP80",
4+ "default_fps": 10,
5+ "tags": [
6+ "keyboard_click"
7+ ],
8+ "baseline_actions": [
9+ 39,
10+ 58,
11+ 25,
12+ 148,
13+ 96,
14+ 152
15+ ],
16+ "date_downloaded": "2026-10-21T17:11:12.426613+00:00"
17+}
+868 −0 referee/environment_files/sp80/589a99af/sp80.py 新增 查看文件
@@ -0,0 +1,868 @@
1+# MIT License
2+#
3+# Copyright (c) 2026 ARC Prize Foundation
4+#
5+# Permission is hereby granted, free of charge, to any person obtaining a copy
6+# of this software and associated documentation files (the "Software"), to deal
7+# in the Software without restriction, including without limitation the rights
8+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+# copies of the Software, and to permit persons to whom the Software is
10+# furnished to do so, subject to the following conditions:
11+#
12+# The above copyright notice and this permission notice shall be included in all
13+# copies or substantial portions of the Software.
14+#
15+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+# SOFTWARE.
22+
23+from typing import Any, Dict, List, Optional, Set, Tuple
24+
25+import numpy as np
26+from arcengine import (
27+ ActionInput,
28+ ARCBaseGame,
29+ Camera,
30+ GameAction,
31+ Level,
32+ RenderableUserDisplay,
33+ Sprite,
34+)
35+
36+sprites = {
37+ "bodekplurlf16": Sprite(
38+ pixels=[
39+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
40+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
41+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
42+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
43+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
44+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
45+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
46+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
47+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
48+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
49+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
50+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
51+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
52+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
53+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
54+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
55+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
56+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
57+ ],
58+ name="bodekplurlf16",
59+ visible=True,
60+ collidable=True,
61+ ),
62+ "bodekplurlf20": Sprite(
63+ pixels=[
64+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
65+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
66+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
67+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
68+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
69+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
70+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
71+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
72+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
73+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
74+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
75+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
76+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
77+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
78+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
79+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
80+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
81+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
82+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
83+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
84+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
85+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
86+ ],
87+ name="bodekplurlf20",
88+ visible=True,
89+ collidable=True,
90+ ),
91+ "bodekplurlf32": Sprite(
92+ pixels=[
93+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
94+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
95+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
96+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
97+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
98+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
99+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
100+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
101+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
102+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
103+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
104+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
105+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
106+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
107+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
108+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
109+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
110+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
111+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
112+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
113+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
114+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
115+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
116+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
117+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
118+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
119+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
120+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
121+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
122+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
123+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
124+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
125+ [1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1],
126+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
127+ ],
128+ name="bodekplurlf32",
129+ visible=True,
130+ collidable=True,
131+ ),
132+ "liolfvkveqg": Sprite(
133+ pixels=[
134+ [6],
135+ ],
136+ name="liolfvkveqg",
137+ visible=True,
138+ collidable=True,
139+ tags=["liolfvkveqg"],
140+ ),
141+ "plzwjbfyfli-3": Sprite(
142+ pixels=[
143+ [8, 8, 8],
144+ ],
145+ name="plzwjbfyfli-3",
146+ visible=True,
147+ collidable=True,
148+ tags=["plzwjbfyfli", "sys_click"],
149+ ),
150+ "plzwjbfyfli-4": Sprite(
151+ pixels=[
152+ [8, 8, 8, 8],
153+ ],
154+ name="plzwjbfyfli-4",
155+ visible=True,
156+ collidable=True,
157+ tags=["plzwjbfyfli", "sys_click"],
158+ ),
159+ "plzwjbfyfli-4h": Sprite(
160+ pixels=[
161+ [8],
162+ [8],
163+ [8],
164+ [8],
165+ ],
166+ name="plzwjbfyfli-4h",
167+ visible=True,
168+ collidable=True,
169+ tags=["plzwjbfyfli", "sys_click"],
170+ ),
171+ "plzwjbfyfli-5": Sprite(
172+ pixels=[
173+ [8, 8, 8, 8, 8],
174+ ],
175+ name="plzwjbfyfli-5",
176+ visible=True,
177+ collidable=True,
178+ tags=["plzwjbfyfli", "sys_click"],
179+ ),
180+ "plzwjbfyfli-5-sowlljgtjvn": Sprite(
181+ pixels=[
182+ [8, 8, 4, 8, 8],
183+ ],
184+ name="plzwjbfyfli-5-sowlljgtjvn",
185+ visible=True,
186+ collidable=True,
187+ tags=["plzwjbfyfli", "sowlljgtjvn", "sys_click"],
188+ ),
189+ "plzwjbfyfli-6": Sprite(
190+ pixels=[
191+ [8, 8, 8, 8, 8, 8],
192+ ],
193+ name="plzwjbfyfli-6",
194+ visible=True,
195+ collidable=True,
196+ tags=["plzwjbfyfli", "sys_click"],
197+ ),
198+ "plzwjbfyfli-7": Sprite(
199+ pixels=[
200+ [8, 8, 8, 8, 8, 8, 8],
201+ ],
202+ name="plzwjbfyfli-7",
203+ visible=True,
204+ collidable=True,
205+ tags=["plzwjbfyfli"],
206+ ),
207+ "plzwjbfyfli-7-sowlljgtjvn": Sprite(
208+ pixels=[
209+ [8, 8, 8, 4, 8, 8, 8],
210+ ],
211+ name="plzwjbfyfli-7-sowlljgtjvn",
212+ visible=True,
213+ collidable=True,
214+ tags=["plzwjbfyfli", "sowlljgtjvn"],
215+ ),
216+ "plzwjbfyfli-8": Sprite(
217+ pixels=[
218+ [8, 8, 8, 8, 8, 8, 8, 8],
219+ ],
220+ name="plzwjbfyfli-8",
221+ visible=True,
222+ collidable=True,
223+ tags=["plzwjbfyfli", "sys_click"],
224+ ),
225+ "repwkzbkhxl": Sprite(
226+ pixels=[
227+ [11, -1, 11],
228+ [11, 11, 11],
229+ ],
230+ name="repwkzbkhxl",
231+ visible=True,
232+ collidable=True,
233+ tags=["repwkzbkhxl"],
234+ ),
235+ "sowlljgtjvn": Sprite(
236+ pixels=[
237+ [4],
238+ ],
239+ name="sowlljgtjvn",
240+ visible=True,
241+ collidable=True,
242+ tags=["sowlljgtjvn"],
243+ ),
244+ "tuvkdkhdokr-lexuhyxqrsm": Sprite(
245+ pixels=[
246+ [-1, 15],
247+ [15, 15],
248+ ],
249+ name="tuvkdkhdokr-lexuhyxqrsm",
250+ visible=True,
251+ collidable=True,
252+ tags=["tuvkdkhdokr", "sys_click"],
253+ ),
254+ "tuvkdkhdokr-riwynidseun": Sprite(
255+ pixels=[
256+ [15, -1],
257+ [15, 15],
258+ ],
259+ name="tuvkdkhdokr-riwynidseun",
260+ visible=True,
261+ collidable=True,
262+ tags=["tuvkdkhdokr", "sys_click"],
263+ ),
264+ "waoewejnqzc": Sprite(
265+ pixels=[
266+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
267+ ],
268+ name="waoewejnqzc",
269+ visible=True,
270+ collidable=True,
271+ tags=["waoewejnqzc"],
272+ ),
273+}
274+levels = [
275+ # Level 1
276+ Level(
277+ sprites=[
278+ sprites["bodekplurlf16"].clone().set_position(-1, -1),
279+ sprites["liolfvkveqg"].clone().set_position(9, 1),
280+ sprites["plzwjbfyfli-5"].clone().set_position(3, 4),
281+ sprites["repwkzbkhxl"].clone().set_position(4, 13),
282+ sprites["repwkzbkhxl"].clone().set_position(10, 13),
283+ sprites["sowlljgtjvn"].clone().set_position(9, 0),
284+ sprites["waoewejnqzc"].clone().set_position(0, 15),
285+ ],
286+ grid_size=(16, 16),
287+ data={
288+ "steps": 30,
289+ "dojfslwbg": 0,
290+ },
291+ ),
292+ # Level 2
293+ Level(
294+ sprites=[
295+ sprites["bodekplurlf16"].clone().set_position(-1, -1),
296+ sprites["liolfvkveqg"].clone().set_position(5, 1),
297+ sprites["plzwjbfyfli-3"].clone().set_position(6, 9),
298+ sprites["plzwjbfyfli-3"].clone().set_position(11, 11),
299+ sprites["plzwjbfyfli-5"].clone().set_position(6, 6),
300+ sprites["repwkzbkhxl"].clone().set_position(2, 13),
301+ sprites["repwkzbkhxl"].clone().set_position(6, 13),
302+ sprites["repwkzbkhxl"].clone().set_position(10, 13),
303+ sprites["sowlljgtjvn"].clone().set_position(5, 0),
304+ sprites["waoewejnqzc"].clone().set_position(0, 15),
305+ ],
306+ grid_size=(16, 16),
307+ data={
308+ "steps": 45,
309+ "dojfslwbg": 180,
310+ },
311+ ),
312+ # Level 3
313+ Level(
314+ sprites=[
315+ sprites["bodekplurlf16"].clone().set_position(-1, -1),
316+ sprites["liolfvkveqg"].clone().set_position(1, 1),
317+ sprites["liolfvkveqg"].clone().set_position(14, 1),
318+ sprites["liolfvkveqg"].clone().set_position(6, 1),
319+ sprites["plzwjbfyfli-4"].clone().set_position(10, 10),
320+ sprites["plzwjbfyfli-5"].clone().set_position(1, 8),
321+ sprites["plzwjbfyfli-6"].clone().set_position(8, 7),
322+ sprites["plzwjbfyfli-6"].clone().set_position(1, 5),
323+ sprites["repwkzbkhxl"].clone().set_position(1, 13),
324+ sprites["repwkzbkhxl"].clone().set_position(12, 13),
325+ sprites["repwkzbkhxl"].clone().set_position(7, 13),
326+ sprites["sowlljgtjvn"].clone().set_position(1, 0),
327+ sprites["sowlljgtjvn"].clone().set_position(14, 0),
328+ sprites["sowlljgtjvn"].clone().set_position(6, 0),
329+ sprites["waoewejnqzc"].clone().set_position(0, 15),
330+ ],
331+ grid_size=(16, 16),
332+ data={
333+ "steps": 100,
334+ "dojfslwbg": 180,
335+ },
336+ ),
337+ # Level 4
338+ Level(
339+ sprites=[
340+ sprites["bodekplurlf20"].clone().set_position(-1, -1),
341+ sprites["liolfvkveqg"].clone().set_position(7, 1),
342+ sprites["plzwjbfyfli-4"].clone().set_position(12, 13),
343+ sprites["plzwjbfyfli-4"].clone().set_position(14, 10),
344+ sprites["plzwjbfyfli-5"].clone().set_position(12, 5),
345+ sprites["plzwjbfyfli-5"].clone().set_position(5, 5),
346+ sprites["plzwjbfyfli-7-sowlljgtjvn"].clone().set_position(2, 9),
347+ sprites["repwkzbkhxl"].clone().set_position(2, 17),
348+ sprites["repwkzbkhxl"].clone().set_position(16, 17),
349+ sprites["repwkzbkhxl"].clone().set_position(8, 17),
350+ sprites["repwkzbkhxl"].clone().set_position(12, 17),
351+ sprites["sowlljgtjvn"].clone().set_position(7, 0),
352+ sprites["waoewejnqzc"].clone().set_position(0, 19),
353+ ],
354+ grid_size=(20, 20),
355+ data={
356+ "steps": 120,
357+ "dojfslwbg": 0,
358+ },
359+ ),
360+ # Level 5
361+ Level(
362+ sprites=[
363+ sprites["bodekplurlf20"].clone().set_position(-1, -1),
364+ sprites["liolfvkveqg"].clone().set_position(5, 1),
365+ sprites["liolfvkveqg"].clone().set_position(13, 1),
366+ sprites["plzwjbfyfli-3"].clone().set_position(11, 9),
367+ sprites["plzwjbfyfli-4"].clone().set_position(7, 13),
368+ sprites["plzwjbfyfli-5"].clone().set_position(2, 9),
369+ sprites["repwkzbkhxl"].clone().set_position(17, 6).set_rotation(270),
370+ sprites["repwkzbkhxl"].clone().set_position(2, 17),
371+ sprites["repwkzbkhxl"].clone().set_position(6, 17),
372+ sprites["repwkzbkhxl"].clone().set_position(12, 17),
373+ sprites["sowlljgtjvn"].clone().set_position(5, 0),
374+ sprites["sowlljgtjvn"].clone().set_position(13, 0),
375+ sprites["tuvkdkhdokr-riwynidseun"].clone().set_position(8, 5),
376+ sprites["waoewejnqzc"].clone().set_position(0, 19),
377+ sprites["waoewejnqzc"].clone().set_position(19, 0).set_rotation(90),
378+ sprites["waoewejnqzc"].clone().set_position(-1, 0).set_rotation(90),
379+ ],
380+ grid_size=(20, 20),
381+ data={
382+ "steps": 100,
383+ "dojfslwbg": 180,
384+ },
385+ ),
386+ # Level 6
387+ Level(
388+ sprites=[
389+ sprites["bodekplurlf20"].clone().set_position(-1, -1),
390+ sprites["liolfvkveqg"].clone().set_position(9, 1),
391+ sprites["plzwjbfyfli-4h"].clone().set_position(14, 4),
392+ sprites["plzwjbfyfli-5-sowlljgtjvn"].clone().set_position(7, 10),
393+ sprites["repwkzbkhxl"].clone().set_position(17, 9).set_rotation(270),
394+ sprites["repwkzbkhxl"].clone().set_position(8, 17),
395+ sprites["repwkzbkhxl"].clone().set_position(1, 11).set_rotation(90),
396+ sprites["repwkzbkhxl"].clone().set_position(1, 6).set_rotation(90),
397+ sprites["sowlljgtjvn"].clone().set_position(9, 0),
398+ sprites["tuvkdkhdokr-lexuhyxqrsm"].clone().set_position(9, 14),
399+ sprites["tuvkdkhdokr-riwynidseun"].clone().set_position(9, 5),
400+ sprites["waoewejnqzc"].clone().set_position(0, 19),
401+ sprites["waoewejnqzc"].clone().set_position(19, 0).set_rotation(90),
402+ sprites["waoewejnqzc"].clone().set_rotation(90),
403+ ],
404+ grid_size=(20, 20),
405+ data={
406+ "steps": 120,
407+ "dojfslwbg": 0,
408+ },
409+ ),
410+]
411+BACKGROUND_COLOR = 12
412+PADDING_COLOR = 1
413+
414+
415+class sklgkadoxw(RenderableUserDisplay):
416+ """."""
417+
418+ def __init__(self, vwbodnowge: int = 0):
419+ self.vwbodnowge = vwbodnowge
420+ self.current_steps = vwbodnowge
421+ super().__init__()
422+
423+ def fymfsbgqso(self, pfhpxrnpci: int) -> None:
424+ self.current_steps = max(0, min(pfhpxrnpci, self.vwbodnowge))
425+
426+ def render_interface(self, frame: np.ndarray) -> np.ndarray:
427+ if self.vwbodnowge == 0:
428+ return frame
429+ ouoessvdbk = self.current_steps / self.vwbodnowge
430+ zzmgpljlhw = round(64 * ouoessvdbk)
431+ for x in range(64):
432+ if x < zzmgpljlhw:
433+ frame[0, x] = 14
434+ else:
435+ frame[0, x] = 0
436+ return frame
437+
438+
439+class ntashmkaxf(RenderableUserDisplay):
440+ """."""
441+
442+ def __init__(self, dojfslwbg: int = 0):
443+ self._k = dojfslwbg // 90 % 4
444+
445+ def set_rotation(self, dojfslwbg: int) -> None:
446+ self._k = dojfslwbg // 90 % 4
447+
448+ def render_interface(self, frame: np.ndarray) -> np.ndarray:
449+ if self._k == 0:
450+ return frame
451+ return np.rot90(frame, k=self._k).copy()
452+
453+
454+class Sp80(ARCBaseGame):
455+ """."""
456+
457+ mfkgvxzkbj = {
458+ 1: {
459+ GameAction.ACTION1: GameAction.ACTION4,
460+ GameAction.ACTION2: GameAction.ACTION3,
461+ GameAction.ACTION3: GameAction.ACTION1,
462+ GameAction.ACTION4: GameAction.ACTION2,
463+ },
464+ 2: {
465+ GameAction.ACTION1: GameAction.ACTION2,
466+ GameAction.ACTION2: GameAction.ACTION1,
467+ GameAction.ACTION3: GameAction.ACTION4,
468+ GameAction.ACTION4: GameAction.ACTION3,
469+ },
470+ 3: {
471+ GameAction.ACTION1: GameAction.ACTION3,
472+ GameAction.ACTION2: GameAction.ACTION4,
473+ GameAction.ACTION3: GameAction.ACTION2,
474+ GameAction.ACTION4: GameAction.ACTION1,
475+ },
476+ }
477+ othselxnik = {
478+ 1: {
479+ GameAction.ACTION1: GameAction.ACTION3,
480+ GameAction.ACTION2: GameAction.ACTION4,
481+ GameAction.ACTION3: GameAction.ACTION2,
482+ GameAction.ACTION4: GameAction.ACTION1,
483+ },
484+ 2: {
485+ GameAction.ACTION1: GameAction.ACTION2,
486+ GameAction.ACTION2: GameAction.ACTION1,
487+ GameAction.ACTION3: GameAction.ACTION4,
488+ GameAction.ACTION4: GameAction.ACTION3,
489+ },
490+ 3: {
491+ GameAction.ACTION1: GameAction.ACTION4,
492+ GameAction.ACTION2: GameAction.ACTION3,
493+ GameAction.ACTION3: GameAction.ACTION1,
494+ GameAction.ACTION4: GameAction.ACTION2,
495+ },
496+ }
497+ dkvpswzsjg: str
498+ vsoxmtrhqt: Optional[Sprite]
499+ hmxltcipkc: List[Tuple[Sprite, int, int]]
500+ xpcxocsmmq: List[Sprite]
501+ kfdcqkodyy: bool
502+ lybfalkrdl: bool
503+ cevwbinfgl: Set[Sprite]
504+ onoqwewztl: Set[Sprite]
505+ trhynadhiz: int
506+ lijmqzmgnw: sklgkadoxw
507+ avangppqui: bool
508+
509+ def __init__(self) -> None:
510+ self.dkvpswzsjg = "change"
511+ self.vsoxmtrhqt = None
512+ self.hmxltcipkc = []
513+ self.xpcxocsmmq = []
514+ self.kfdcqkodyy = False
515+ self.lybfalkrdl = False
516+ self.cevwbinfgl = set()
517+ self.onoqwewztl = set()
518+ self.trhynadhiz = 0
519+ self.lijmqzmgnw = sklgkadoxw(vwbodnowge=0)
520+ self.avangppqui = False
521+ self.yqejjfwwh = False
522+ self.zlhbnhpcq = 0
523+ self.lyremoheq = 0
524+ self.fahhoimkk = 0
525+ self.jinpztikz = ntashmkaxf(0)
526+ zgzbkvrwm = Camera(
527+ background=BACKGROUND_COLOR,
528+ letter_box=PADDING_COLOR,
529+ interfaces=[self.lijmqzmgnw, self.jinpztikz],
530+ )
531+ super().__init__(
532+ game_id="sp80",
533+ levels=levels,
534+ camera=zgzbkvrwm,
535+ available_actions=[1, 2, 3, 4, 5, 6],
536+ )
537+
538+ def on_set_level(self, level: Level) -> None:
539+ self.dkvpswzsjg = "change"
540+ self.vsoxmtrhqt = None
541+ self.hmxltcipkc = []
542+ self.xpcxocsmmq = []
543+ self.kfdcqkodyy = False
544+ self.lybfalkrdl = False
545+ self.cevwbinfgl = set()
546+ self.onoqwewztl = set()
547+ self.avangppqui = False
548+ self.yqejjfwwh = False
549+ self.lyremoheq = 0
550+ for s in level.get_sprites_by_tag("plzwjbfyfli"):
551+ s.pixels[(s.pixels >= 0) & (s.pixels != 4)] = 8
552+ for s in level.get_sprites():
553+ if s.name == "repwkzbkhxl":
554+ s.pixels[s.pixels >= 0] = 11
555+ for s in level.get_sprites_by_tag("waoewejnqzc"):
556+ s.pixels[s.pixels >= 0] = 1
557+ pfhpxrnpci = level.get_data("steps") or 50
558+ self.zlhbnhpcq = pfhpxrnpci
559+ self.lijmqzmgnw.vwbodnowge = pfhpxrnpci
560+ self.lijmqzmgnw.fymfsbgqso(pfhpxrnpci)
561+ uhbgnthefe = self.gsvsxaspkc()
562+ if uhbgnthefe:
563+ self.mmzrajuxwp(uhbgnthefe)
564+ dojfslwbg = level.get_data("dojfslwbg") or 0
565+ self.fahhoimkk = dojfslwbg // 90 % 4
566+ self.jinpztikz.set_rotation(dojfslwbg)
567+
568+ def fbrwmvzsym(self) -> List[Sprite]:
569+ return [s for s in self.current_level.get_sprites_by_tag("plzwjbfyfli")] + [s for s in self.current_level.get_sprites_by_tag("tuvkdkhdokr")]
570+
571+ def qbsoyazkhk(self) -> List[Sprite]:
572+ return [s for s in self.current_level.get_sprites_by_tag("liolfvkveqg")]
573+
574+ def mxdlffpzkc(self) -> List[Sprite]:
575+ return [s for s in self.current_level.get_sprites_by_tag("repwkzbkhxl")]
576+
577+ def vgpoqzieha(self) -> List[Sprite]:
578+ return [s for s in self.current_level.get_sprites_by_tag("waoewejnqzc")]
579+
580+ def gsvsxaspkc(self) -> Optional[Sprite]:
581+ bewcnjlccv = self.fbrwmvzsym()
582+ if not bewcnjlccv:
583+ return None
584+ return min(bewcnjlccv, key=lambda vcnqlwquvy: vcnqlwquvy.x**2 + vcnqlwquvy.y**2)
585+
586+ def husluhmboo(self, hualjkqrro: Sprite, x: int, y: int) -> bool:
587+ """."""
588+ ozlpegmuiw = hualjkqrro.width
589+ thjmlectxc = hualjkqrro.height
590+ if y < 3:
591+ return False
592+ for ifavaamret in self.mxdlffpzkc():
593+ rx, ry = (ifavaamret.x, ifavaamret.y)
594+ fykwwtgsjv = ifavaamret.width
595+ zgqksrdiou = ifavaamret.height
596+ if x < rx + fykwwtgsjv + 1 and x + ozlpegmuiw > rx - 1 and (y < ry + zgqksrdiou + 1) and (y + thjmlectxc > ry - 1):
597+ return False
598+ return True
599+
600+ def oioatzlrlu(self, ukutpdlsfq: Sprite, tkwwsinjpi: Sprite) -> bool:
601+ ax1, ay1, ax2, ay2 = (
602+ ukutpdlsfq.x,
603+ ukutpdlsfq.y,
604+ ukutpdlsfq.x + ukutpdlsfq.width,
605+ ukutpdlsfq.y + ukutpdlsfq.height,
606+ )
607+ bx1, by1, bx2, by2 = (
608+ tkwwsinjpi.x,
609+ tkwwsinjpi.y,
610+ tkwwsinjpi.x + tkwwsinjpi.width,
611+ tkwwsinjpi.y + tkwwsinjpi.height,
612+ )
613+ return ax1 < bx2 and ax2 > bx1 and (ay1 < by2) and (ay2 > by1)
614+
615+ def mmzrajuxwp(self, hualjkqrro: Sprite) -> None:
616+ if self.vsoxmtrhqt is not None:
617+ self.ntuflwihof()
618+ self.vsoxmtrhqt = hualjkqrro
619+ if hualjkqrro is not None:
620+ hualjkqrro.pixels[(hualjkqrro.pixels >= 0) & (hualjkqrro.pixels != 4)] = 9
621+ hualjkqrro.set_layer(1)
622+ self.avangppqui = True
623+
624+ def ntuflwihof(self) -> None:
625+ if self.vsoxmtrhqt is not None:
626+ nogozwphuv = 15 if "tuvkdkhdokr" in self.vsoxmtrhqt.tags else 8
627+ self.vsoxmtrhqt.pixels[(self.vsoxmtrhqt.pixels >= 0) & (self.vsoxmtrhqt.pixels != 4)] = nogozwphuv
628+ self.vsoxmtrhqt.set_layer(0)
629+ self.vsoxmtrhqt = None
630+
631+ def vdwhttyyfq(self) -> None:
632+ self.dkvpswzsjg = "spill"
633+ self.ntuflwihof()
634+ self.hmxltcipkc = [(lpaiwmascx, 0, 1) for lpaiwmascx in self.qbsoyazkhk()]
635+ self.xpcxocsmmq = []
636+ self.kfdcqkodyy = False
637+ self.lybfalkrdl = False
638+ self.cevwbinfgl = set()
639+ self.onoqwewztl = set()
640+ for lwigswghhd in self.current_level.get_sprites_by_tag("sowlljgtjvn"):
641+ px, py = (lwigswghhd.x, lwigswghhd.y)
642+ cuftbajfn = lwigswghhd.pixels
643+ for y in range(cuftbajfn.shape[0]):
644+ for x in range(cuftbajfn.shape[1]):
645+ if int(cuftbajfn[y, x]) == 4:
646+ qxatjlxbsr, mdktzafzgr = (px + x, py + y)
647+ lxmalbxucn = self.current_level.get_sprite_at(qxatjlxbsr, mdktzafzgr + 1)
648+ ingqkycxdt = lxmalbxucn and "liolfvkveqg" in getattr(lxmalbxucn, "tags", [])
649+ if not ingqkycxdt and self.current_level.get_sprite_at(qxatjlxbsr, mdktzafzgr + 1) is None:
650+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(qxatjlxbsr, mdktzafzgr + 1)
651+ self.current_level.add_sprite(yfwryonwmf)
652+ self.hmxltcipkc.append((yfwryonwmf, 0, 1))
653+ self.xpcxocsmmq.append(yfwryonwmf)
654+
655+ def lpqbikobah(self) -> None:
656+ for s in self.xpcxocsmmq:
657+ self.current_level.remove_sprite(s)
658+ self.xpcxocsmmq = []
659+ for s in self.mxdlffpzkc():
660+ s.pixels[s.pixels >= 0] = 11
661+ for s in self.vgpoqzieha():
662+ s.pixels[s.pixels >= 0] = 1
663+ self.cevwbinfgl = set()
664+ self.onoqwewztl = set()
665+ self.dkvpswzsjg = "change"
666+ self.kfdcqkodyy = False
667+ self.lybfalkrdl = False
668+ self.hmxltcipkc = []
669+ self.lyremoheq += 1
670+ uhbgnthefe = self.gsvsxaspkc()
671+ if uhbgnthefe:
672+ self.mmzrajuxwp(uhbgnthefe)
673+
674+ def step(self) -> None:
675+ action_id, action_data = self.krehtwyvlu()
676+ if self.dkvpswzsjg == "change":
677+ if action_id != GameAction.RESET:
678+ self.ytqycovhld(1)
679+ if action_id == GameAction.ACTION6:
680+ tkqedciqx = action_data.get("x", 0)
681+ dqkivrvrc = action_data.get("y", 0)
682+ zvlpmllzzi = self.camera.display_to_grid(tkqedciqx, dqkivrvrc)
683+ if zvlpmllzzi:
684+ qxatjlxbsr, mdktzafzgr = zvlpmllzzi
685+ cbfkqeecgo: Optional[Sprite] = None
686+ for vcnqlwquvy in self.fbrwmvzsym():
687+ if vcnqlwquvy.x <= qxatjlxbsr < vcnqlwquvy.x + vcnqlwquvy.width and vcnqlwquvy.y <= mdktzafzgr < vcnqlwquvy.y + vcnqlwquvy.height:
688+ cbfkqeecgo = vcnqlwquvy
689+ break
690+ if cbfkqeecgo:
691+ self.mmzrajuxwp(cbfkqeecgo)
692+ self.yqejjfwwh = True
693+ self.complete_action()
694+ return
695+ if self.vsoxmtrhqt is not None:
696+ zmgbkzxvf, wcrkcuoyr = (0, 0)
697+ if action_id == GameAction.ACTION1:
698+ wcrkcuoyr = -1
699+ elif action_id == GameAction.ACTION2:
700+ wcrkcuoyr = 1
701+ elif action_id == GameAction.ACTION3:
702+ zmgbkzxvf = -1
703+ elif action_id == GameAction.ACTION4:
704+ zmgbkzxvf = 1
705+ if zmgbkzxvf != 0 or wcrkcuoyr != 0:
706+ ssgevmwqov = self.vsoxmtrhqt.x + zmgbkzxvf
707+ jppwwnrrfn = self.vsoxmtrhqt.y + wcrkcuoyr
708+ if self.husluhmboo(self.vsoxmtrhqt, ssgevmwqov, jppwwnrrfn):
709+ collisions = self.try_move_sprite(self.vsoxmtrhqt, zmgbkzxvf, wcrkcuoyr)
710+ if len(collisions) > 0 and all(["plzwjbfyfli" in c.tags or "tuvkdkhdokr" in c.tags for c in collisions]):
711+ self.vsoxmtrhqt.move(zmgbkzxvf, wcrkcuoyr)
712+ self.yqejjfwwh = False
713+ self.complete_action()
714+ self.avangppqui = False
715+ return
716+ if action_id == GameAction.ACTION5:
717+ if self.lyremoheq >= 4:
718+ self.lose()
719+ self.complete_action()
720+ return
721+ self.vdwhttyyfq()
722+ self.avangppqui = False
723+ self.yqejjfwwh = False
724+ return
725+ self.complete_action()
726+ return
727+ elif self.dkvpswzsjg == "spill":
728+ if self.lybfalkrdl:
729+ nldokazwta = self.mxdlffpzkc()
730+ zmkiirynyo = all((r in self.cevwbinfgl for r in nldokazwta))
731+ if self.kfdcqkodyy or not zmkiirynyo:
732+ if self.trhynadhiz < 6:
733+ for qyutcrxkne in self.onoqwewztl:
734+ qyutcrxkne.pixels[qyutcrxkne.pixels >= 0] = 14 if self.trhynadhiz % 2 == 1 else 1
735+ if self.trhynadhiz < 5:
736+ for ifavaamret in self.mxdlffpzkc():
737+ if ifavaamret not in self.cevwbinfgl:
738+ ifavaamret.pixels[ifavaamret.pixels >= 0] = 0 if self.trhynadhiz % 2 == 0 else 11
739+ self.trhynadhiz += 1
740+ else:
741+ self.lpqbikobah()
742+ if self.zlhbnhpcq <= 0:
743+ self.lose()
744+ self.complete_action()
745+ else:
746+ self.complete_action()
747+ self.next_level()
748+ return
749+ hhrqsxbmic: List[Tuple[Sprite, int, int]] = []
750+ for lpaiwmascx, zmgbkzxvf, wcrkcuoyr in self.hmxltcipkc:
751+ tayzpnizn, lxrpmtrmq = (lpaiwmascx.x, lpaiwmascx.y)
752+ obzjtntha, unvkukvdu = (-1, 1) if wcrkcuoyr != 0 else (0, 0)
753+ vwwcczstp, kghcadhlp = (-1, 1) if wcrkcuoyr == 0 else (0, 0)
754+ qkwtogjpyx = [(obzjtntha, vwwcczstp), (unvkukvdu, kghcadhlp)]
755+ lxmalbxucn = self.current_level.get_sprite_at(tayzpnizn + zmgbkzxvf, lxrpmtrmq + wcrkcuoyr)
756+ if lxmalbxucn is None:
757+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(tayzpnizn + zmgbkzxvf, lxrpmtrmq + wcrkcuoyr)
758+ self.current_level.add_sprite(yfwryonwmf)
759+ hhrqsxbmic.append((yfwryonwmf, zmgbkzxvf, wcrkcuoyr))
760+ self.xpcxocsmmq.append(yfwryonwmf)
761+ continue
762+ if "liolfvkveqg" in lxmalbxucn.tags:
763+ hhrqsxbmic.append((lxmalbxucn, zmgbkzxvf, wcrkcuoyr))
764+ if "plzwjbfyfli" in lxmalbxucn.tags:
765+ for oizjapxnvj, zrgzlvcvcr in qkwtogjpyx:
766+ if self.current_level.get_sprite_at(tayzpnizn + oizjapxnvj, lxrpmtrmq + zrgzlvcvcr) is None:
767+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(tayzpnizn + oizjapxnvj, lxrpmtrmq + zrgzlvcvcr)
768+ self.current_level.add_sprite(yfwryonwmf)
769+ hhrqsxbmic.append((yfwryonwmf, zmgbkzxvf, wcrkcuoyr))
770+ self.xpcxocsmmq.append(yfwryonwmf)
771+ continue
772+ if "repwkzbkhxl" in lxmalbxucn.tags:
773+ owyqnbmyij = self.current_level.get_sprite_at(tayzpnizn + obzjtntha, lxrpmtrmq + vwwcczstp)
774+ faksfmaezd = self.current_level.get_sprite_at(tayzpnizn + unvkukvdu, lxrpmtrmq + kghcadhlp)
775+ if owyqnbmyij is lxmalbxucn and faksfmaezd is lxmalbxucn:
776+ lxmalbxucn.pixels[lxmalbxucn.pixels >= 0] = 13
777+ self.cevwbinfgl.add(lxmalbxucn)
778+ continue
779+ else:
780+ for oizjapxnvj, zrgzlvcvcr in qkwtogjpyx:
781+ if self.current_level.get_sprite_at(tayzpnizn + oizjapxnvj, lxrpmtrmq + zrgzlvcvcr) is None:
782+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(tayzpnizn + oizjapxnvj, lxrpmtrmq + zrgzlvcvcr)
783+ self.current_level.add_sprite(yfwryonwmf)
784+ hhrqsxbmic.append((yfwryonwmf, zmgbkzxvf, wcrkcuoyr))
785+ self.xpcxocsmmq.append(yfwryonwmf)
786+ continue
787+ if "tuvkdkhdokr" in lxmalbxucn.tags:
788+ owyqnbmyij = self.current_level.get_sprite_at(tayzpnizn + obzjtntha, lxrpmtrmq + vwwcczstp)
789+ faksfmaezd = self.current_level.get_sprite_at(tayzpnizn + unvkukvdu, lxrpmtrmq + kghcadhlp)
790+ if owyqnbmyij is lxmalbxucn and faksfmaezd is None:
791+ nizmgdznmn = wcrkcuoyr
792+ yevagjsmfn = -zmgbkzxvf
793+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(tayzpnizn + nizmgdznmn, lxrpmtrmq + yevagjsmfn)
794+ self.current_level.add_sprite(yfwryonwmf)
795+ hhrqsxbmic.append((yfwryonwmf, nizmgdznmn, yevagjsmfn))
796+ self.xpcxocsmmq.append(yfwryonwmf)
797+ if faksfmaezd is lxmalbxucn and owyqnbmyij is None:
798+ nizmgdznmn = -wcrkcuoyr
799+ yevagjsmfn = zmgbkzxvf
800+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(tayzpnizn + nizmgdznmn, lxrpmtrmq + yevagjsmfn)
801+ self.current_level.add_sprite(yfwryonwmf)
802+ hhrqsxbmic.append((yfwryonwmf, nizmgdznmn, yevagjsmfn))
803+ self.xpcxocsmmq.append(yfwryonwmf)
804+ else:
805+ for oizjapxnvj, zrgzlvcvcr in qkwtogjpyx:
806+ if self.current_level.get_sprite_at(tayzpnizn + oizjapxnvj, lxrpmtrmq + zrgzlvcvcr) is None:
807+ yfwryonwmf = sprites["liolfvkveqg"].clone().set_position(tayzpnizn + oizjapxnvj, lxrpmtrmq + zrgzlvcvcr)
808+ self.current_level.add_sprite(yfwryonwmf)
809+ hhrqsxbmic.append((yfwryonwmf, zmgbkzxvf, wcrkcuoyr))
810+ self.xpcxocsmmq.append(yfwryonwmf)
811+ continue
812+ if "waoewejnqzc" in lxmalbxucn.tags:
813+ lxmalbxucn.pixels[lxmalbxucn.pixels >= 0] = 14
814+ self.onoqwewztl.add(lxmalbxucn)
815+ self.kfdcqkodyy = True
816+ continue
817+ self.hmxltcipkc = hhrqsxbmic
818+ if not self.hmxltcipkc:
819+ self.lybfalkrdl = True
820+ self.trhynadhiz = 0
821+ return
822+
823+ def ojydygjkdb(self, hyutemwrji: int, shkslvxwqs: int) -> Tuple[int, int]:
824+ """."""
825+ k = self.fahhoimkk
826+ if k == 0:
827+ return (hyutemwrji, shkslvxwqs)
828+ if k == 1:
829+ return (63 - shkslvxwqs, hyutemwrji)
830+ if k == 2:
831+ return (63 - hyutemwrji, 63 - shkslvxwqs)
832+ return (shkslvxwqs, 63 - hyutemwrji)
833+
834+ def rqlmciubuz(self, qxatjlxbsr: int, mdktzafzgr: int) -> Tuple[int, int]:
835+ """."""
836+ k = self.fahhoimkk
837+ if k == 0:
838+ return (qxatjlxbsr, mdktzafzgr)
839+ if k == 1:
840+ return (mdktzafzgr, 63 - qxatjlxbsr)
841+ if k == 2:
842+ return (63 - qxatjlxbsr, 63 - mdktzafzgr)
843+ return (63 - mdktzafzgr, qxatjlxbsr)
844+
845+ def krehtwyvlu(self) -> Tuple[GameAction, Dict[str, Any]]:
846+ """."""
847+ k = self.fahhoimkk
848+ hwpdaniibf = self.action.id
849+ data = self.action.data
850+ if k == 0:
851+ return (hwpdaniibf, data)
852+ if hwpdaniibf in self.mfkgvxzkbj.get(k, {}):
853+ return (self.mfkgvxzkbj[k][hwpdaniibf], data)
854+ if hwpdaniibf == GameAction.ACTION6:
855+ hyutemwrji = data.get("x", 0)
856+ shkslvxwqs = data.get("y", 0)
857+ qxatjlxbsr, mdktzafzgr = self.ojydygjkdb(hyutemwrji, shkslvxwqs)
858+ return (hwpdaniibf, {"x": qxatjlxbsr, "y": mdktzafzgr})
859+ return (hwpdaniibf, data)
860+
861+ def ytqycovhld(self, uarpgqegqg: int) -> None:
862+ """."""
863+ self.zlhbnhpcq = max(0, self.zlhbnhpcq - uarpgqegqg)
864+ self.lijmqzmgnw.fymfsbgqso(self.zlhbnhpcq)
865+ if self.zlhbnhpcq <= 0:
866+ self.lose()
867+ self.complete_action()
868+ return
+18 −0 referee/environment_files/vc33/5430563c/metadata.json 新增 查看文件
@@ -0,0 +1,18 @@
1+{
2+ "game_id": "vc33-5430563c",
3+ "title": "VC33",
4+ "default_fps": 20,
5+ "tags": [
6+ "click"
7+ ],
8+ "baseline_actions": [
9+ 7,
10+ 18,
11+ 44,
12+ 61,
13+ 131,
14+ 34,
15+ 152
16+ ],
17+ "date_downloaded": "2026-10-21T17:11:59.072364+00:00"
18+}
+2124 −0 referee/environment_files/vc33/5430563c/vc33.py 新增 查看文件
@@ -0,0 +1,2124 @@
1+# MIT License
2+#
3+# Copyright (c) 2026 ARC Prize Foundation
4+#
5+# Permission is hereby granted, free of charge, to any person obtaining a copy
6+# of this software and associated documentation files (the "Software"), to deal
7+# in the Software without restriction, including without limitation the rights
8+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+# copies of the Software, and to permit persons to whom the Software is
10+# furnished to do so, subject to the following conditions:
11+#
12+# The above copyright notice and this permission notice shall be included in all
13+# copies or substantial portions of the Software.
14+#
15+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+# SOFTWARE.
22+
23+import numpy as np
24+from arcengine import (
25+ ARCBaseGame,
26+ Camera,
27+ GameAction,
28+ Level,
29+ RenderableUserDisplay,
30+ Sprite,
31+)
32+
33+sprites = {
34+ "0000ufilpvvllo": Sprite(
35+ pixels=[
36+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
37+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
38+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
39+ ],
40+ name="0000ufilpvvllo",
41+ visible=True,
42+ collidable=True,
43+ tags=["0001symqacyexa"],
44+ ),
45+ "0002eemauzpzws": Sprite(
46+ pixels=[
47+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
48+ [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
49+ ],
50+ name="0002eemauzpzws",
51+ visible=True,
52+ collidable=True,
53+ tags=["0001symqacyexa"],
54+ ),
55+ "0003qvhiakludh": Sprite(
56+ pixels=[
57+ [1, 1, 1],
58+ [1, 1, 1],
59+ [1, 1, 1],
60+ [1, 1, 1],
61+ [1, 1, 1],
62+ [1, 1, 1],
63+ [1, 1, 1],
64+ [1, 1, 1],
65+ [1, 1, 1],
66+ [1, 1, 1],
67+ [1, 1, 1],
68+ [1, 1, 1],
69+ ],
70+ name="0003qvhiakludh",
71+ visible=True,
72+ collidable=True,
73+ tags=["0004sttgkofqwb", "sys_click"],
74+ layer=3,
75+ ),
76+ "0005nxriaixjyr": Sprite(
77+ pixels=[
78+ [1, 1],
79+ [1, 1],
80+ [1, 1],
81+ [1, 1],
82+ [1, 1],
83+ [1, 1],
84+ [1, 1],
85+ [1, 1],
86+ ],
87+ name="0005nxriaixjyr",
88+ visible=True,
89+ collidable=True,
90+ tags=["0004sttgkofqwb", "sys_click"],
91+ layer=3,
92+ ),
93+ "0006mfbmvylbss": Sprite(
94+ pixels=[
95+ [-2, -1, -1, -1, -1, -1, -2],
96+ [-2, -1, -1, -1, -1, -1, -2],
97+ [0, -1, -1, -1, -1, -1, 0],
98+ [0, -1, -1, -1, -1, -1, 0],
99+ [0, -1, -1, -1, -1, -1, 0],
100+ [0, -1, -1, -1, -1, -1, 0],
101+ [0, -1, -1, -1, -1, -1, 0],
102+ [0, -1, -1, -1, -1, -1, 0],
103+ [0, -1, -1, -1, -1, -1, 0],
104+ [0, -1, -1, -1, -1, -1, 0],
105+ [-2, -1, -1, -1, -1, -1, -2],
106+ [-2, -1, -1, -1, -1, -1, -2],
107+ ],
108+ name="0006mfbmvylbss",
109+ visible=True,
110+ collidable=True,
111+ tags=["0007gyluczquhi"],
112+ ),
113+ "0008rybtprnbie": Sprite(
114+ pixels=[
115+ [-2, -1, -1, -1, -1, -2],
116+ [0, -1, -1, -1, -1, 0],
117+ [0, -1, -1, -1, -1, 0],
118+ [0, -1, -1, -1, -1, 0],
119+ [0, -1, -1, -1, -1, 0],
120+ [0, -1, -1, -1, -1, 0],
121+ [0, -1, -1, -1, -1, 0],
122+ [-2, -1, -1, -1, -1, -2],
123+ ],
124+ name="0008rybtprnbie",
125+ visible=True,
126+ collidable=True,
127+ tags=["0007gyluczquhi"],
128+ ),
129+ "0009vwghyhtilb": Sprite(
130+ pixels=[
131+ [-2, -2],
132+ [-2, -2],
133+ [11, 11],
134+ ],
135+ name="0009vwghyhtilb",
136+ visible=True,
137+ collidable=True,
138+ tags=["0010gnulkywfpz"],
139+ layer=2,
140+ ),
141+ "0011egrqhpaniv": Sprite(
142+ pixels=[
143+ [-2, -2],
144+ [-2, -2],
145+ [14, 14],
146+ ],
147+ name="0011egrqhpaniv",
148+ visible=True,
149+ collidable=True,
150+ tags=["0010gnulkywfpz"],
151+ layer=1,
152+ ),
153+ "0012efovcqtrsv": Sprite(
154+ pixels=[
155+ [-2, -2],
156+ [-2, -2],
157+ [15, 15],
158+ ],
159+ name="0012efovcqtrsv",
160+ visible=True,
161+ collidable=True,
162+ tags=["0010gnulkywfpz"],
163+ layer=1,
164+ ),
165+ "0013nlpqaanefy": Sprite(
166+ pixels=[
167+ [-2, -2, -2],
168+ [-2, -2, -2],
169+ [-2, -2, -2],
170+ [-2, -2, -2],
171+ [11, 11, 11],
172+ [11, 11, 11],
173+ ],
174+ name="0013nlpqaanefy",
175+ visible=True,
176+ collidable=True,
177+ tags=["0010gnulkywfpz"],
178+ layer=1,
179+ ),
180+ "0014fnratutanf": Sprite(
181+ pixels=[
182+ [-2, -2, -2],
183+ [-2, -2, -2],
184+ [-2, -2, -2],
185+ [-2, -2, -2],
186+ [14, 14, 14],
187+ [14, 14, 14],
188+ ],
189+ name="0014fnratutanf",
190+ visible=True,
191+ collidable=True,
192+ tags=["0010gnulkywfpz"],
193+ layer=1,
194+ ),
195+ "0015cltmlkogkc": Sprite(
196+ pixels=[
197+ [-1, 4, -1],
198+ [4, 4, 4],
199+ [11, 11, 11],
200+ ],
201+ name="0015cltmlkogkc",
202+ visible=True,
203+ collidable=True,
204+ tags=["0016uciqlhjlom"],
205+ layer=1,
206+ ),
207+ "0017pmjcrnwxxj": Sprite(
208+ pixels=[
209+ [-1, 4, -1],
210+ [4, 4, 4],
211+ [14, 14, 14],
212+ ],
213+ name="0017pmjcrnwxxj",
214+ visible=True,
215+ collidable=True,
216+ tags=["0016uciqlhjlom"],
217+ ),
218+ "0018rxmsqpnhhx": Sprite(
219+ pixels=[
220+ [-1, 4, -1],
221+ [4, 4, 4],
222+ [15, 15, 15],
223+ ],
224+ name="0018rxmsqpnhhx",
225+ visible=True,
226+ collidable=True,
227+ tags=["0016uciqlhjlom"],
228+ ),
229+ "0019yzthbwsumy": Sprite(
230+ pixels=[
231+ [-1, -1, 4, 4, -1, -1],
232+ [-1, -1, 4, 4, -1, -1],
233+ [4, 4, 4, 4, 4, 4],
234+ [4, 4, 4, 4, 4, 4],
235+ [11, 11, 11, 11, 11, 11],
236+ [11, 11, 11, 11, 11, 11],
237+ ],
238+ name="0019yzthbwsumy",
239+ visible=True,
240+ collidable=True,
241+ tags=["0016uciqlhjlom"],
242+ layer=1,
243+ ),
244+ "0020supxvsgicv": Sprite(
245+ pixels=[
246+ [-1, -1, 4, 4, -1, -1],
247+ [-1, -1, 4, 4, -1, -1],
248+ [4, 4, 4, 4, 4, 4],
249+ [4, 4, 4, 4, 4, 4],
250+ [14, 14, 14, 14, 14, 14],
251+ [14, 14, 14, 14, 14, 14],
252+ ],
253+ name="0020supxvsgicv",
254+ visible=True,
255+ collidable=True,
256+ tags=["0016uciqlhjlom"],
257+ layer=1,
258+ ),
259+ "0021ayhektiwsl": Sprite(
260+ pixels=[
261+ [9, 9],
262+ [9, 9],
263+ ],
264+ name="0021ayhektiwsl",
265+ visible=True,
266+ collidable=True,
267+ tags=["0022jvmlspyigc", "sys_click"],
268+ layer=1,
269+ ),
270+ "0023zpxhabfwya": Sprite(
271+ pixels=[
272+ [9, 9, 9],
273+ [9, 9, 9],
274+ [9, 9, 9],
275+ ],
276+ name="0023zpxhabfwya",
277+ visible=True,
278+ collidable=True,
279+ tags=["0022jvmlspyigc", "sys_click"],
280+ layer=1,
281+ ),
282+ "0024oklzljpbjf": Sprite(
283+ pixels=[
284+ [5, 5],
285+ [5, 5],
286+ [5, 5],
287+ [5, 5],
288+ [5, 5],
289+ [5, 5],
290+ [5, 5],
291+ [5, 5],
292+ [5, 5],
293+ [5, 5],
294+ [5, 5],
295+ [5, 5],
296+ [5, 5],
297+ [5, 5],
298+ [5, 5],
299+ [5, 5],
300+ [5, 5],
301+ [5, 5],
302+ [5, 5],
303+ [5, 5],
304+ [5, 5],
305+ [5, 5],
306+ ],
307+ name="0024oklzljpbjf",
308+ visible=True,
309+ collidable=True,
310+ tags=["0025yfyiswdvoh"],
311+ layer=1,
312+ ),
313+ "0026mrilttcabm": Sprite(
314+ pixels=[
315+ [5, 5],
316+ [5, 5],
317+ [5, 5],
318+ [5, 5],
319+ [5, 5],
320+ [5, 5],
321+ [5, 5],
322+ [5, 5],
323+ [5, 5],
324+ [5, 5],
325+ [5, 5],
326+ [5, 5],
327+ [5, 5],
328+ [5, 5],
329+ [5, 5],
330+ [5, 5],
331+ [5, 5],
332+ [5, 5],
333+ [5, 5],
334+ [5, 5],
335+ [5, 5],
336+ [5, 5],
337+ [5, 5],
338+ [5, 5],
339+ [5, 5],
340+ [5, 5],
341+ [5, 5],
342+ [5, 5],
343+ ],
344+ name="0026mrilttcabm",
345+ visible=True,
346+ collidable=True,
347+ tags=["0025yfyiswdvoh"],
348+ ),
349+ "0027sdwqirupzd": Sprite(
350+ pixels=[
351+ [5, 5],
352+ [5, 5],
353+ [5, 5],
354+ [5, 5],
355+ [5, 5],
356+ [5, 5],
357+ [5, 5],
358+ [5, 5],
359+ [5, 5],
360+ [5, 5],
361+ [5, 5],
362+ [5, 5],
363+ [5, 5],
364+ [5, 5],
365+ [5, 5],
366+ [5, 5],
367+ [5, 5],
368+ [5, 5],
369+ [5, 5],
370+ [5, 5],
371+ [5, 5],
372+ [5, 5],
373+ ],
374+ name="0027sdwqirupzd",
375+ visible=True,
376+ collidable=True,
377+ tags=["0025yfyiswdvoh"],
378+ ),
379+ "0028yrxfnwssrz": Sprite(
380+ pixels=[
381+ [5, 5],
382+ [5, 5],
383+ [5, 5],
384+ [5, 5],
385+ [5, 5],
386+ [5, 5],
387+ ],
388+ name="0028yrxfnwssrz",
389+ visible=True,
390+ collidable=True,
391+ tags=["0025yfyiswdvoh"],
392+ ),
393+ "0029hisqstrfef": Sprite(
394+ pixels=[
395+ [5, 5],
396+ [5, 5],
397+ [5, 5],
398+ [5, 5],
399+ [5, 5],
400+ [5, 5],
401+ [5, 5],
402+ [5, 5],
403+ [5, 5],
404+ [5, 5],
405+ [5, 5],
406+ [5, 5],
407+ [5, 5],
408+ [5, 5],
409+ [5, 5],
410+ [5, 5],
411+ [5, 5],
412+ [5, 5],
413+ [5, 5],
414+ [5, 5],
415+ [5, 5],
416+ [5, 5],
417+ [5, 5],
418+ [5, 5],
419+ [5, 5],
420+ [5, 5],
421+ [5, 5],
422+ [5, 5],
423+ ],
424+ name="0029hisqstrfef",
425+ visible=True,
426+ collidable=True,
427+ tags=["0025yfyiswdvoh"],
428+ ),
429+ "0030tpzxnyfdvh": Sprite(
430+ pixels=[
431+ [5, 5, 5],
432+ [5, 5, 5],
433+ [5, 5, 5],
434+ [5, 5, 5],
435+ [5, 5, 5],
436+ [5, 5, 5],
437+ [5, 5, 5],
438+ [5, 5, 5],
439+ [5, 5, 5],
440+ [5, 5, 5],
441+ [5, 5, 5],
442+ [5, 5, 5],
443+ [-1, -1, -1],
444+ [-1, -1, -1],
445+ [-1, -1, -1],
446+ [-1, -1, -1],
447+ [-1, -1, -1],
448+ [-1, -1, -1],
449+ [-1, -1, -1],
450+ [-1, -1, -1],
451+ [-1, -1, -1],
452+ [-1, -1, -1],
453+ [-1, -1, -1],
454+ [-1, -1, -1],
455+ [5, 5, 5],
456+ [5, 5, 5],
457+ [5, 5, 5],
458+ [5, 5, 5],
459+ [5, 5, 5],
460+ [5, 5, 5],
461+ [5, 5, 5],
462+ [5, 5, 5],
463+ [5, 5, 5],
464+ ],
465+ name="0030tpzxnyfdvh",
466+ visible=True,
467+ collidable=True,
468+ tags=["0025yfyiswdvoh"],
469+ ),
470+ "0031pjczzavayi": Sprite(
471+ pixels=[
472+ [5, 5, 5],
473+ [5, 5, 5],
474+ [5, 5, 5],
475+ [5, 5, 5],
476+ [5, 5, 5],
477+ [5, 5, 5],
478+ [5, 5, 5],
479+ [5, 5, 5],
480+ [5, 5, 5],
481+ [5, 5, 5],
482+ [5, 5, 5],
483+ [5, 5, 5],
484+ [-1, -1, -1],
485+ [-1, -1, -1],
486+ [-1, -1, -1],
487+ [-1, -1, -1],
488+ [-1, -1, -1],
489+ [-1, -1, -1],
490+ [-1, -1, -1],
491+ [-1, -1, -1],
492+ [-1, -1, -1],
493+ [-1, -1, -1],
494+ [-1, -1, -1],
495+ [-1, -1, -1],
496+ [5, 5, 5],
497+ [5, 5, 5],
498+ [5, 5, 5],
499+ [5, 5, 5],
500+ [5, 5, 5],
501+ [5, 5, 5],
502+ [5, 5, 5],
503+ [5, 5, 5],
504+ [5, 5, 5],
505+ [5, 5, 5],
506+ [5, 5, 5],
507+ [5, 5, 5],
508+ [5, 5, 5],
509+ [5, 5, 5],
510+ [5, 5, 5],
511+ [5, 5, 5],
512+ [5, 5, 5],
513+ [5, 5, 5],
514+ ],
515+ name="0031pjczzavayi",
516+ visible=True,
517+ collidable=True,
518+ tags=["0025yfyiswdvoh"],
519+ ),
520+ "0032xvysrppdmd": Sprite(
521+ pixels=[
522+ [5, 5, 5],
523+ [5, 5, 5],
524+ [5, 5, 5],
525+ [5, 5, 5],
526+ [5, 5, 5],
527+ [5, 5, 5],
528+ [5, 5, 5],
529+ [5, 5, 5],
530+ [5, 5, 5],
531+ [5, 5, 5],
532+ [5, 5, 5],
533+ [5, 5, 5],
534+ [5, 5, 5],
535+ [5, 5, 5],
536+ [5, 5, 5],
537+ [-1, -1, -1],
538+ [-1, -1, -1],
539+ [-1, -1, -1],
540+ [-1, -1, -1],
541+ [-1, -1, -1],
542+ [-1, -1, -1],
543+ [-1, -1, -1],
544+ [-1, -1, -1],
545+ [-1, -1, -1],
546+ [-1, -1, -1],
547+ [-1, -1, -1],
548+ [-1, -1, -1],
549+ [5, 5, 5],
550+ [5, 5, 5],
551+ [5, 5, 5],
552+ [5, 5, 5],
553+ [5, 5, 5],
554+ [5, 5, 5],
555+ [5, 5, 5],
556+ [5, 5, 5],
557+ [5, 5, 5],
558+ [5, 5, 5],
559+ [5, 5, 5],
560+ [5, 5, 5],
561+ [5, 5, 5],
562+ [5, 5, 5],
563+ [5, 5, 5],
564+ [5, 5, 5],
565+ [5, 5, 5],
566+ [5, 5, 5],
567+ [5, 5, 5],
568+ [5, 5, 5],
569+ [5, 5, 5],
570+ [5, 5, 5],
571+ [5, 5, 5],
572+ [5, 5, 5],
573+ [5, 5, 5],
574+ [5, 5, 5],
575+ [5, 5, 5],
576+ ],
577+ name="0032xvysrppdmd",
578+ visible=True,
579+ collidable=True,
580+ tags=["0025yfyiswdvoh"],
581+ ),
582+ "0033jkunkpsthb": Sprite(
583+ pixels=[
584+ [5, 5, 5],
585+ [5, 5, 5],
586+ [5, 5, 5],
587+ [5, 5, 5],
588+ [5, 5, 5],
589+ [5, 5, 5],
590+ [5, 5, 5],
591+ [5, 5, 5],
592+ [5, 5, 5],
593+ [5, 5, 5],
594+ [5, 5, 5],
595+ [5, 5, 5],
596+ [5, 5, 5],
597+ [5, 5, 5],
598+ [5, 5, 5],
599+ [-1, -1, -1],
600+ [-1, -1, -1],
601+ [-1, -1, -1],
602+ [-1, -1, -1],
603+ [-1, -1, -1],
604+ [-1, -1, -1],
605+ [-1, -1, -1],
606+ [-1, -1, -1],
607+ [-1, -1, -1],
608+ [-1, -1, -1],
609+ [-1, -1, -1],
610+ [-1, -1, -1],
611+ [5, 5, 5],
612+ [5, 5, 5],
613+ [5, 5, 5],
614+ [5, 5, 5],
615+ [5, 5, 5],
616+ [5, 5, 5],
617+ [5, 5, 5],
618+ [5, 5, 5],
619+ [5, 5, 5],
620+ [5, 5, 5],
621+ [5, 5, 5],
622+ [5, 5, 5],
623+ ],
624+ name="0033jkunkpsthb",
625+ visible=True,
626+ collidable=True,
627+ tags=["0025yfyiswdvoh"],
628+ ),
629+ "0034gljhkoittz": Sprite(
630+ pixels=[
631+ [5, 5, 5],
632+ [5, 5, 5],
633+ [5, 5, 5],
634+ [5, 5, 5],
635+ [5, 5, 5],
636+ [5, 5, 5],
637+ [5, 5, 5],
638+ [5, 5, 5],
639+ [5, 5, 5],
640+ [5, 5, 5],
641+ [5, 5, 5],
642+ [5, 5, 5],
643+ [-1, -1, -1],
644+ [-1, -1, -1],
645+ [-1, -1, -1],
646+ [-1, -1, -1],
647+ [-1, -1, -1],
648+ [-1, -1, -1],
649+ [-1, -1, -1],
650+ [-1, -1, -1],
651+ [-1, -1, -1],
652+ [-1, -1, -1],
653+ [-1, -1, -1],
654+ [-1, -1, -1],
655+ [5, 5, 5],
656+ [5, 5, 5],
657+ [5, 5, 5],
658+ [5, 5, 5],
659+ [5, 5, 5],
660+ [5, 5, 5],
661+ [5, 5, 5],
662+ [5, 5, 5],
663+ [5, 5, 5],
664+ [5, 5, 5],
665+ [5, 5, 5],
666+ [5, 5, 5],
667+ [5, 5, 5],
668+ [5, 5, 5],
669+ [5, 5, 5],
670+ [5, 5, 5],
671+ [5, 5, 5],
672+ [5, 5, 5],
673+ [5, 5, 5],
674+ [5, 5, 5],
675+ [5, 5, 5],
676+ [5, 5, 5],
677+ [5, 5, 5],
678+ [5, 5, 5],
679+ ],
680+ name="0034gljhkoittz",
681+ visible=True,
682+ collidable=True,
683+ tags=["0025yfyiswdvoh"],
684+ ),
685+ "0035mojyqpmkca": Sprite(
686+ pixels=[
687+ [5, 5, 5],
688+ [5, 5, 5],
689+ [5, 5, 5],
690+ [5, 5, 5],
691+ [5, 5, 5],
692+ [5, 5, 5],
693+ [5, 5, 5],
694+ [5, 5, 5],
695+ [5, 5, 5],
696+ [5, 5, 5],
697+ [5, 5, 5],
698+ [5, 5, 5],
699+ [-1, -1, -1],
700+ [-1, -1, -1],
701+ [-1, -1, -1],
702+ [-1, -1, -1],
703+ [-1, -1, -1],
704+ [-1, -1, -1],
705+ [-1, -1, -1],
706+ [-1, -1, -1],
707+ [-1, -1, -1],
708+ [-1, -1, -1],
709+ [-1, -1, -1],
710+ [-1, -1, -1],
711+ [5, 5, 5],
712+ [5, 5, 5],
713+ [5, 5, 5],
714+ [5, 5, 5],
715+ [5, 5, 5],
716+ [5, 5, 5],
717+ [5, 5, 5],
718+ [5, 5, 5],
719+ [5, 5, 5],
720+ [5, 5, 5],
721+ [5, 5, 5],
722+ [5, 5, 5],
723+ [-1, -1, -1],
724+ [-1, -1, -1],
725+ [-1, -1, -1],
726+ [-1, -1, -1],
727+ [-1, -1, -1],
728+ [-1, -1, -1],
729+ [-1, -1, -1],
730+ [-1, -1, -1],
731+ [-1, -1, -1],
732+ [-1, -1, -1],
733+ [-1, -1, -1],
734+ [-1, -1, -1],
735+ [5, 5, 5],
736+ [5, 5, 5],
737+ [5, 5, 5],
738+ [5, 5, 5],
739+ [5, 5, 5],
740+ [5, 5, 5],
741+ ],
742+ name="0035mojyqpmkca",
743+ visible=True,
744+ collidable=True,
745+ tags=["0025yfyiswdvoh"],
746+ ),
747+ "0036rjrqlosxim": Sprite(
748+ pixels=[
749+ [5, 5],
750+ [5, 5],
751+ [5, 5],
752+ [5, 5],
753+ [5, 5],
754+ [5, 5],
755+ [5, 5],
756+ [5, 5],
757+ [5, 5],
758+ [5, 5],
759+ [-1, -1],
760+ [-1, -1],
761+ [-1, -1],
762+ [-1, -1],
763+ [-1, -1],
764+ [-1, -1],
765+ [-1, -1],
766+ [-1, -1],
767+ [5, 5],
768+ [5, 5],
769+ [5, 5],
770+ [5, 5],
771+ [5, 5],
772+ [5, 5],
773+ [5, 5],
774+ [5, 5],
775+ [5, 5],
776+ [5, 5],
777+ [5, 5],
778+ [5, 5],
779+ [5, 5],
780+ [5, 5],
781+ [5, 5],
782+ [5, 5],
783+ [5, 5],
784+ [5, 5],
785+ [5, 5],
786+ [5, 5],
787+ [5, 5],
788+ [5, 5],
789+ [5, 5],
790+ [5, 5],
791+ [5, 5],
792+ [5, 5],
793+ [5, 5],
794+ [5, 5],
795+ [5, 5],
796+ [5, 5],
797+ ],
798+ name="0036rjrqlosxim",
799+ visible=True,
800+ collidable=True,
801+ tags=["0025yfyiswdvoh"],
802+ ),
803+ "0037zhvthfywaf": Sprite(
804+ pixels=[
805+ [5, 5],
806+ [5, 5],
807+ [5, 5],
808+ [5, 5],
809+ [5, 5],
810+ [5, 5],
811+ [5, 5],
812+ [5, 5],
813+ [5, 5],
814+ [5, 5],
815+ [5, 5],
816+ [5, 5],
817+ [5, 5],
818+ [5, 5],
819+ [5, 5],
820+ [5, 5],
821+ [5, 5],
822+ [5, 5],
823+ [5, 5],
824+ [5, 5],
825+ [5, 5],
826+ [5, 5],
827+ ],
828+ name="0037zhvthfywaf",
829+ visible=True,
830+ collidable=True,
831+ tags=["0025yfyiswdvoh"],
832+ ),
833+ "0038kxomlaqnmm": Sprite(
834+ pixels=[
835+ [5, 5],
836+ [5, 5],
837+ [5, 5],
838+ [5, 5],
839+ [5, 5],
840+ [5, 5],
841+ [5, 5],
842+ [5, 5],
843+ [5, 5],
844+ [5, 5],
845+ [5, 5],
846+ [5, 5],
847+ [5, 5],
848+ [5, 5],
849+ [5, 5],
850+ [5, 5],
851+ [5, 5],
852+ [5, 5],
853+ [5, 5],
854+ [5, 5],
855+ ],
856+ name="0038kxomlaqnmm",
857+ visible=True,
858+ collidable=True,
859+ tags=["0025yfyiswdvoh"],
860+ ),
861+ "0039vrggqczkeg": Sprite(
862+ pixels=[
863+ [5, 5, 5],
864+ [5, 5, 5],
865+ [5, 5, 5],
866+ [5, 5, 5],
867+ [5, 5, 5],
868+ [5, 5, 5],
869+ [5, 5, 5],
870+ [5, 5, 5],
871+ [5, 5, 5],
872+ [5, 5, 5],
873+ [5, 5, 5],
874+ [5, 5, 5],
875+ [5, 5, 5],
876+ [5, 5, 5],
877+ [5, 5, 5],
878+ [5, 5, 5],
879+ [5, 5, 5],
880+ [5, 5, 5],
881+ [5, 5, 5],
882+ [5, 5, 5],
883+ [5, 5, 5],
884+ [5, 5, 5],
885+ [5, 5, 5],
886+ [5, 5, 5],
887+ [5, 5, 5],
888+ [5, 5, 5],
889+ [5, 5, 5],
890+ [5, 5, 5],
891+ [5, 5, 5],
892+ [5, 5, 5],
893+ [5, 5, 5],
894+ [5, 5, 5],
895+ [5, 5, 5],
896+ [5, 5, 5],
897+ [5, 5, 5],
898+ [5, 5, 5],
899+ [5, 5, 5],
900+ [5, 5, 5],
901+ [5, 5, 5],
902+ ],
903+ name="0039vrggqczkeg",
904+ visible=True,
905+ collidable=True,
906+ tags=["0025yfyiswdvoh"],
907+ ),
908+ "0040sfsyhdwzpa": Sprite(
909+ pixels=[
910+ [5, 5],
911+ [5, 5],
912+ [5, 5],
913+ [5, 5],
914+ [5, 5],
915+ [5, 5],
916+ [5, 5],
917+ [5, 5],
918+ [5, 5],
919+ [5, 5],
920+ [-1, -1],
921+ [-1, -1],
922+ [-1, -1],
923+ [-1, -1],
924+ [-1, -1],
925+ [-1, -1],
926+ [-1, -1],
927+ [-1, -1],
928+ [5, 5],
929+ [5, 5],
930+ [5, 5],
931+ [5, 5],
932+ [5, 5],
933+ [5, 5],
934+ [5, 5],
935+ [5, 5],
936+ [5, 5],
937+ [5, 5],
938+ [5, 5],
939+ [5, 5],
940+ [5, 5],
941+ [5, 5],
942+ [-1, -1],
943+ [-1, -1],
944+ [-1, -1],
945+ [-1, -1],
946+ [-1, -1],
947+ [-1, -1],
948+ [-1, -1],
949+ [-1, -1],
950+ [5, 5],
951+ [5, 5],
952+ [5, 5],
953+ [5, 5],
954+ [5, 5],
955+ [5, 5],
956+ [5, 5],
957+ [5, 5],
958+ ],
959+ name="0040sfsyhdwzpa",
960+ visible=True,
961+ collidable=True,
962+ tags=["0025yfyiswdvoh"],
963+ ),
964+ "0041wufoxqricu": Sprite(
965+ pixels=[
966+ [5, 5, 5],
967+ [5, 5, 5],
968+ [5, 5, 5],
969+ [5, 5, 5],
970+ [5, 5, 5],
971+ [5, 5, 5],
972+ [5, 5, 5],
973+ [5, 5, 5],
974+ [5, 5, 5],
975+ [5, 5, 5],
976+ [5, 5, 5],
977+ [5, 5, 5],
978+ [5, 5, 5],
979+ [5, 5, 5],
980+ [5, 5, 5],
981+ [5, 5, 5],
982+ [5, 5, 5],
983+ [5, 5, 5],
984+ [5, 5, 5],
985+ [5, 5, 5],
986+ [5, 5, 5],
987+ [5, 5, 5],
988+ [5, 5, 5],
989+ [5, 5, 5],
990+ [5, 5, 5],
991+ [5, 5, 5],
992+ [5, 5, 5],
993+ [5, 5, 5],
994+ [5, 5, 5],
995+ [5, 5, 5],
996+ ],
997+ name="0041wufoxqricu",
998+ visible=True,
999+ collidable=True,
1000+ tags=["0025yfyiswdvoh"],
1001+ ),
1002+ "0042ueboolxadn": Sprite(
1003+ pixels=[
1004+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1005+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1006+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1007+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1008+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1009+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1010+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1011+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1012+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1013+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1014+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1015+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1016+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1017+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1018+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1019+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1020+ ],
1021+ name="0042ueboolxadn",
1022+ visible=True,
1023+ collidable=True,
1024+ tags=["0043nzrtobajqi"],
1025+ ),
1026+ "0044auurrayaab": Sprite(
1027+ pixels=[
1028+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1029+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1030+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1031+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1032+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1033+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1034+ ],
1035+ name="0044auurrayaab",
1036+ visible=True,
1037+ collidable=True,
1038+ tags=["0043nzrtobajqi"],
1039+ ),
1040+ "0045wzhlvcxnxi": Sprite(
1041+ pixels=[
1042+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1043+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1044+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1045+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1046+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1047+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1048+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1049+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1050+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1051+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1052+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1053+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1054+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1055+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1056+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1057+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1058+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1059+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1060+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1061+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1062+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1063+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1064+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1065+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1066+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1067+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1068+ ],
1069+ name="0045wzhlvcxnxi",
1070+ visible=True,
1071+ collidable=True,
1072+ tags=["0043nzrtobajqi"],
1073+ ),
1074+ "0046qitpxixzbw": Sprite(
1075+ pixels=[
1076+ [0, 0, 0, 0, 0, 0, 0, 0],
1077+ [0, 0, 0, 0, 0, 0, 0, 0],
1078+ [0, 0, 0, 0, 0, 0, 0, 0],
1079+ [0, 0, 0, 0, 0, 0, 0, 0],
1080+ [0, 0, 0, 0, 0, 0, 0, 0],
1081+ [0, 0, 0, 0, 0, 0, 0, 0],
1082+ ],
1083+ name="0046qitpxixzbw",
1084+ visible=True,
1085+ collidable=True,
1086+ tags=["0043nzrtobajqi"],
1087+ ),
1088+ "0047nozrwoeeue": Sprite(
1089+ pixels=[
1090+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1091+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1092+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1093+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1094+ ],
1095+ name="0047nozrwoeeue",
1096+ visible=True,
1097+ collidable=True,
1098+ tags=["0043nzrtobajqi"],
1099+ ),
1100+ "0048uprazwxldi": Sprite(
1101+ pixels=[
1102+ [0, 0, 0, 0, 0, 0, 0, 0],
1103+ [0, 0, 0, 0, 0, 0, 0, 0],
1104+ [0, 0, 0, 0, 0, 0, 0, 0],
1105+ [0, 0, 0, 0, 0, 0, 0, 0],
1106+ ],
1107+ name="0048uprazwxldi",
1108+ visible=True,
1109+ collidable=True,
1110+ tags=["0043nzrtobajqi"],
1111+ ),
1112+ "0049gizsqrldri": Sprite(
1113+ pixels=[
1114+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1115+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1116+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1117+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1118+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1119+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1120+ ],
1121+ name="0049gizsqrldri",
1122+ visible=True,
1123+ collidable=True,
1124+ tags=["0043nzrtobajqi"],
1125+ ),
1126+ "0050xlivmfsgrg": Sprite(
1127+ pixels=[
1128+ [0, 0, 0, 0, 0, 0, 0, 0],
1129+ [0, 0, 0, 0, 0, 0, 0, 0],
1130+ [0, 0, 0, 0, 0, 0, 0, 0],
1131+ [0, 0, 0, 0, 0, 0, 0, 0],
1132+ [0, 0, 0, 0, 0, 0, 0, 0],
1133+ [0, 0, 0, 0, 0, 0, 0, 0],
1134+ [0, 0, 0, 0, 0, 0, 0, 0],
1135+ [0, 0, 0, 0, 0, 0, 0, 0],
1136+ [0, 0, 0, 0, 0, 0, 0, 0],
1137+ [0, 0, 0, 0, 0, 0, 0, 0],
1138+ [0, 0, 0, 0, 0, 0, 0, 0],
1139+ [0, 0, 0, 0, 0, 0, 0, 0],
1140+ [0, 0, 0, 0, 0, 0, 0, 0],
1141+ [0, 0, 0, 0, 0, 0, 0, 0],
1142+ [0, 0, 0, 0, 0, 0, 0, 0],
1143+ [0, 0, 0, 0, 0, 0, 0, 0],
1144+ [0, 0, 0, 0, 0, 0, 0, 0],
1145+ [0, 0, 0, 0, 0, 0, 0, 0],
1146+ [0, 0, 0, 0, 0, 0, 0, 0],
1147+ [0, 0, 0, 0, 0, 0, 0, 0],
1148+ [0, 0, 0, 0, 0, 0, 0, 0],
1149+ [0, 0, 0, 0, 0, 0, 0, 0],
1150+ [0, 0, 0, 0, 0, 0, 0, 0],
1151+ [0, 0, 0, 0, 0, 0, 0, 0],
1152+ [0, 0, 0, 0, 0, 0, 0, 0],
1153+ [0, 0, 0, 0, 0, 0, 0, 0],
1154+ [0, 0, 0, 0, 0, 0, 0, 0],
1155+ [0, 0, 0, 0, 0, 0, 0, 0],
1156+ ],
1157+ name="0050xlivmfsgrg",
1158+ visible=True,
1159+ collidable=True,
1160+ tags=["0043nzrtobajqi"],
1161+ ),
1162+ "0051cbovinmogo": Sprite(
1163+ pixels=[
1164+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1165+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1166+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1167+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1168+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1169+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1170+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1171+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1172+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1173+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1174+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1175+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1176+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1177+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1178+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1179+ ],
1180+ name="0051cbovinmogo",
1181+ visible=True,
1182+ collidable=True,
1183+ tags=["0043nzrtobajqi"],
1184+ ),
1185+ "0052jlqpbhssxz": Sprite(
1186+ pixels=[
1187+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1188+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1189+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1190+ ],
1191+ name="0052jlqpbhssxz",
1192+ visible=True,
1193+ collidable=True,
1194+ tags=["0043nzrtobajqi"],
1195+ ),
1196+ "0053hvedzitgvm": Sprite(
1197+ pixels=[
1198+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1199+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1200+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1201+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1202+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1203+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1204+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1205+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1206+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1207+ ],
1208+ name="0053hvedzitgvm",
1209+ visible=True,
1210+ collidable=True,
1211+ tags=["0043nzrtobajqi"],
1212+ ),
1213+ "0054vgoahtzchm": Sprite(
1214+ pixels=[
1215+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1216+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1217+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1218+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1219+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1220+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1221+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1222+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1223+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1224+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1225+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1226+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1227+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1228+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1229+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1230+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1231+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1232+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1233+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1234+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1235+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1236+ ],
1237+ name="0054vgoahtzchm",
1238+ visible=True,
1239+ collidable=True,
1240+ tags=["0043nzrtobajqi"],
1241+ ),
1242+ "0055zkynfqcbvf": Sprite(
1243+ pixels=[
1244+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1245+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1246+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1247+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1248+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1249+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1250+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1251+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1252+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1253+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1254+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1255+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1256+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1257+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1258+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1259+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1260+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1261+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1262+ ],
1263+ name="0055zkynfqcbvf",
1264+ visible=True,
1265+ collidable=True,
1266+ tags=["0043nzrtobajqi"],
1267+ ),
1268+ "0056gvcomjuyya": Sprite(
1269+ pixels=[
1270+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1271+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1272+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1273+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1274+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1275+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1276+ ],
1277+ name="0056gvcomjuyya",
1278+ visible=True,
1279+ collidable=True,
1280+ tags=["0043nzrtobajqi"],
1281+ ),
1282+ "0057jqxvzzgzuz": Sprite(
1283+ pixels=[
1284+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1285+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1286+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1287+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1288+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1289+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1290+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1291+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1292+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1293+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1294+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1295+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1296+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1297+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1298+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1299+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1300+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1301+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1302+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1303+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1304+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1305+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1306+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1307+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1308+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1309+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1310+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1311+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1312+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1313+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1314+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1315+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1316+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1317+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1318+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1319+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1320+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1321+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1322+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1323+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1324+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1325+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1326+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1327+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1328+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1329+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1330+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1331+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1332+ ],
1333+ name="0057jqxvzzgzuz",
1334+ visible=True,
1335+ collidable=True,
1336+ tags=["0043nzrtobajqi"],
1337+ ),
1338+ "0058isdkrjwbjw": Sprite(
1339+ pixels=[
1340+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1341+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1342+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1343+ ],
1344+ name="0058isdkrjwbjw",
1345+ visible=True,
1346+ collidable=True,
1347+ tags=["0043nzrtobajqi"],
1348+ ),
1349+ "0059nzfxpksuts": Sprite(
1350+ pixels=[
1351+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1352+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1353+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1354+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1355+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1356+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1357+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1358+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1359+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1360+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1361+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1362+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1363+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1364+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1365+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1366+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1367+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1368+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1369+ ],
1370+ name="0059nzfxpksuts",
1371+ visible=True,
1372+ collidable=True,
1373+ tags=["0043nzrtobajqi"],
1374+ ),
1375+ "0060vzyhngpdxk": Sprite(
1376+ pixels=[
1377+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1378+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1379+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1380+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1381+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1382+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1383+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1384+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1385+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1386+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1387+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1388+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1389+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1390+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1391+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1392+ ],
1393+ name="0060vzyhngpdxk",
1394+ visible=True,
1395+ collidable=True,
1396+ tags=["0043nzrtobajqi"],
1397+ ),
1398+ "0061hvrsaskhtv": Sprite(
1399+ pixels=[
1400+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1401+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1402+ ],
1403+ name="0061hvrsaskhtv",
1404+ visible=True,
1405+ collidable=True,
1406+ tags=["0043nzrtobajqi"],
1407+ ),
1408+ "0062jjoqcrrlqt": Sprite(
1409+ pixels=[
1410+ [0, 0, 0, 0, 0, 0, 0, 0],
1411+ [0, 0, 0, 0, 0, 0, 0, 0],
1412+ [0, 0, 0, 0, 0, 0, 0, 0],
1413+ [0, 0, 0, 0, 0, 0, 0, 0],
1414+ ],
1415+ name="0062jjoqcrrlqt",
1416+ visible=True,
1417+ collidable=True,
1418+ tags=["0043nzrtobajqi"],
1419+ ),
1420+ "0063vjsvlzmsou": Sprite(
1421+ pixels=[
1422+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
1423+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
1424+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
1425+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
1426+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
1427+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
1428+ ],
1429+ name="0063vjsvlzmsou",
1430+ visible=True,
1431+ collidable=True,
1432+ tags=["0043nzrtobajqi"],
1433+ ),
1434+ "0064keizattioe": Sprite(
1435+ pixels=[
1436+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1437+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1438+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1439+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1440+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1441+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1442+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1443+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1444+ ],
1445+ name="0064keizattioe",
1446+ visible=True,
1447+ collidable=True,
1448+ tags=["0043nzrtobajqi"],
1449+ ),
1450+ "0065dnabthoeah": Sprite(
1451+ pixels=[
1452+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1453+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1454+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1455+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1456+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1457+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1458+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1459+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1460+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1461+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1462+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1463+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1464+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1465+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1466+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1467+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1468+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1469+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1470+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1471+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1472+ ],
1473+ name="0065dnabthoeah",
1474+ visible=True,
1475+ collidable=True,
1476+ tags=["0043nzrtobajqi"],
1477+ ),
1478+ "0066vaxquypzdt": Sprite(
1479+ pixels=[
1480+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1481+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1482+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1483+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1484+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1485+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1486+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1487+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1488+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1489+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1490+ ],
1491+ name="0066vaxquypzdt",
1492+ visible=True,
1493+ collidable=True,
1494+ tags=["0043nzrtobajqi"],
1495+ ),
1496+ "0067nuweesmgmg": Sprite(
1497+ pixels=[
1498+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1499+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1500+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1501+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1502+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1503+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1504+ ],
1505+ name="0067nuweesmgmg",
1506+ visible=True,
1507+ collidable=True,
1508+ tags=["0043nzrtobajqi"],
1509+ ),
1510+ "0068ggudhgdmjj": Sprite(
1511+ pixels=[
1512+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1513+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1514+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1515+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1516+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1517+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1518+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1519+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1520+ ],
1521+ name="0068ggudhgdmjj",
1522+ visible=True,
1523+ collidable=True,
1524+ tags=["0043nzrtobajqi"],
1525+ ),
1526+ "0069aqtrahmrun": Sprite(
1527+ pixels=[
1528+ [0, 0, 0, 0, 0, 0, 0],
1529+ [0, 0, 0, 0, 0, 0, 0],
1530+ [0, 0, 0, 0, 0, 0, 0],
1531+ [0, 0, 0, 0, 0, 0, 0],
1532+ [0, 0, 0, 0, 0, 0, 0],
1533+ [0, 0, 0, 0, 0, 0, 0],
1534+ [0, 0, 0, 0, 0, 0, 0],
1535+ [0, 0, 0, 0, 0, 0, 0],
1536+ [0, 0, 0, 0, 0, 0, 0],
1537+ [0, 0, 0, 0, 0, 0, 0],
1538+ [0, 0, 0, 0, 0, 0, 0],
1539+ [0, 0, 0, 0, 0, 0, 0],
1540+ [0, 0, 0, 0, 0, 0, 0],
1541+ [0, 0, 0, 0, 0, 0, 0],
1542+ [0, 0, 0, 0, 0, 0, 0],
1543+ [0, 0, 0, 0, 0, 0, 0],
1544+ [0, 0, 0, 0, 0, 0, 0],
1545+ [0, 0, 0, 0, 0, 0, 0],
1546+ ],
1547+ name="0069aqtrahmrun",
1548+ visible=True,
1549+ collidable=True,
1550+ tags=["0043nzrtobajqi"],
1551+ ),
1552+}
1553+levels = [
1554+ # Level 1
1555+ Level(
1556+ sprites=[
1557+ sprites["0009vwghyhtilb"].clone().set_position(17, 14).set_rotation(270),
1558+ sprites["0015cltmlkogkc"].clone().set_position(23, 22).set_rotation(270),
1559+ sprites["0021ayhektiwsl"].clone().set_position(30, 12).set_rotation(270),
1560+ sprites["0021ayhektiwsl"].clone().set_position(30, 16).set_rotation(270),
1561+ sprites["0024oklzljpbjf"].clone().set_position(10, 14).set_rotation(270),
1562+ sprites["0042ueboolxadn"].clone().set_position(16, 0).set_rotation(270),
1563+ sprites["0044auurrayaab"].clone().set_position(26, 16).set_rotation(270),
1564+ ],
1565+ grid_size=(32, 32),
1566+ data={
1567+ "StepCounter": 50,
1568+ "Gravity": [2, 0],
1569+ },
1570+ ),
1571+ # Level 2
1572+ Level(
1573+ sprites=[
1574+ sprites["0011egrqhpaniv"].clone().set_position(14, 20).set_rotation(90),
1575+ sprites["0017pmjcrnwxxj"].clone().set_position(4, 26).set_rotation(90),
1576+ sprites["0021ayhektiwsl"].clone().set_position(0, 8).set_rotation(90),
1577+ sprites["0021ayhektiwsl"].clone().set_position(0, 12).set_rotation(90),
1578+ sprites["0021ayhektiwsl"].clone().set_position(0, 18).set_rotation(90),
1579+ sprites["0021ayhektiwsl"].clone().set_position(0, 22).set_rotation(90),
1580+ sprites["0026mrilttcabm"].clone().set_position(0, 10).set_rotation(90),
1581+ sprites["0027sdwqirupzd"].clone().set_position(0, 20).set_rotation(90),
1582+ sprites["0045wzhlvcxnxi"].clone().set_rotation(90),
1583+ sprites["0046qitpxixzbw"].clone().set_position(0, 12).set_rotation(90),
1584+ sprites["0047nozrwoeeue"].clone().set_position(0, 22).set_rotation(90),
1585+ ],
1586+ grid_size=(32, 32),
1587+ data={
1588+ "StepCounter": 50,
1589+ "Gravity": [-2, 0],
1590+ },
1591+ ),
1592+ # Level 3
1593+ Level(
1594+ sprites=[
1595+ sprites["0009vwghyhtilb"].clone().set_position(42, 39),
1596+ sprites["0011egrqhpaniv"].clone().set_position(8, 33),
1597+ sprites["0012efovcqtrsv"].clone().set_position(30, 31),
1598+ sprites["0015cltmlkogkc"].clone().set_position(46, 21),
1599+ sprites["0017pmjcrnwxxj"].clone().set_position(2, 45),
1600+ sprites["0018rxmsqpnhhx"].clone().set_position(35, 43),
1601+ sprites["0021ayhektiwsl"].clone().set_position(6, 50),
1602+ sprites["0021ayhektiwsl"].clone().set_position(10, 50),
1603+ sprites["0021ayhektiwsl"].clone().set_position(22, 50),
1604+ sprites["0021ayhektiwsl"].clone().set_position(18, 50),
1605+ sprites["0021ayhektiwsl"].clone().set_position(32, 50),
1606+ sprites["0021ayhektiwsl"].clone().set_position(28, 50),
1607+ sprites["0021ayhektiwsl"].clone().set_position(44, 50),
1608+ sprites["0021ayhektiwsl"].clone().set_position(40, 50),
1609+ sprites["0028yrxfnwssrz"].clone().set_position(20, 46),
1610+ sprites["0029hisqstrfef"].clone().set_position(42, 24),
1611+ sprites["0037zhvthfywaf"].clone().set_position(30, 30),
1612+ sprites["0038kxomlaqnmm"].clone().set_position(8, 32),
1613+ sprites["0048uprazwxldi"].clone().set_position(22, 48),
1614+ sprites["0049gizsqrldri"].clone().set_position(32, 46),
1615+ sprites["0050xlivmfsgrg"].clone().set_position(44, 24),
1616+ sprites["0061hvrsaskhtv"].clone().set_position(10, 50),
1617+ sprites["0062jjoqcrrlqt"].clone().set_position(0, 48),
1618+ ],
1619+ grid_size=(52, 52),
1620+ data={
1621+ "StepCounter": 75,
1622+ "Gravity": [0, 2],
1623+ },
1624+ ),
1625+ # Level 4
1626+ Level(
1627+ sprites=[
1628+ sprites["0003qvhiakludh"].clone().set_position(27, 34),
1629+ sprites["0003qvhiakludh"].clone().set_position(12, 43),
1630+ sprites["0013nlpqaanefy"].clone().set_position(42, 25),
1631+ sprites["0019yzthbwsumy"].clone().set_position(3, 43),
1632+ sprites["0023zpxhabfwya"].clone().set_position(15, 61),
1633+ sprites["0023zpxhabfwya"].clone().set_position(57, 61),
1634+ sprites["0023zpxhabfwya"].clone().set_position(9, 61),
1635+ sprites["0023zpxhabfwya"].clone().set_position(51, 61),
1636+ sprites["0023zpxhabfwya"].clone().set_position(45, 61),
1637+ sprites["0023zpxhabfwya"].clone().set_position(39, 61),
1638+ sprites["0030tpzxnyfdvh"].clone().set_position(12, 31),
1639+ sprites["0031pjczzavayi"].clone().set_position(27, 22),
1640+ sprites["0039vrggqczkeg"].clone().set_position(42, 25),
1641+ sprites["0041wufoxqricu"].clone().set_position(54, 34),
1642+ sprites["0051cbovinmogo"].clone().set_position(0, 49),
1643+ sprites["0052jlqpbhssxz"].clone().set_position(15, 61),
1644+ sprites["0053hvedzitgvm"].clone().set_position(30, 55),
1645+ sprites["0063vjsvlzmsou"].clone().set_position(45, 58),
1646+ sprites["0069aqtrahmrun"].clone().set_position(57, 46),
1647+ ],
1648+ grid_size=(64, 64),
1649+ data={
1650+ "StepCounter": 50,
1651+ "Gravity": [0, 3],
1652+ },
1653+ ),
1654+ # Level 5
1655+ Level(
1656+ sprites=[
1657+ sprites["0003qvhiakludh"].clone().set_position(28, 14).set_rotation(270),
1658+ sprites["0003qvhiakludh"].clone().set_position(25, 49).set_rotation(270),
1659+ sprites["0003qvhiakludh"].clone().set_position(40, 32).set_rotation(270),
1660+ sprites["0013nlpqaanefy"].clone().set_position(16, 14).set_rotation(270),
1661+ sprites["0014fnratutanf"].clone().set_position(10, 49).set_rotation(270),
1662+ sprites["0019yzthbwsumy"].clone().set_position(37, 55).set_rotation(270),
1663+ sprites["0020supxvsgicv"].clone().set_position(10, 5).set_rotation(270),
1664+ sprites["0023zpxhabfwya"].clone().set_position(61, 29).set_rotation(270),
1665+ sprites["0023zpxhabfwya"].clone().set_position(61, 35).set_rotation(270),
1666+ sprites["0023zpxhabfwya"].clone().set_position(61, 17).set_rotation(270),
1667+ sprites["0023zpxhabfwya"].clone().set_position(61, 46).set_rotation(270),
1668+ sprites["0023zpxhabfwya"].clone().set_position(61, 11).set_rotation(270),
1669+ sprites["0023zpxhabfwya"].clone().set_position(61, 52).set_rotation(270),
1670+ sprites["0032xvysrppdmd"].clone().set_position(10, 49).set_rotation(270),
1671+ sprites["0033jkunkpsthb"].clone().set_position(25, 32).set_rotation(270),
1672+ sprites["0034gljhkoittz"].clone().set_position(16, 14).set_rotation(270),
1673+ sprites["0054vgoahtzchm"].clone().set_position(43, 52).set_rotation(270),
1674+ sprites["0055zkynfqcbvf"].clone().set_position(46, 35).set_rotation(270),
1675+ sprites["0056gvcomjuyya"].clone().set_position(58, 17).set_rotation(270),
1676+ sprites["0057jqxvzzgzuz"].clone().set_position(16, 0).set_rotation(270),
1677+ ],
1678+ grid_size=(64, 64),
1679+ data={
1680+ "StepCounter": 200,
1681+ "Gravity": [3, 0],
1682+ },
1683+ ),
1684+ # Level 6
1685+ Level(
1686+ sprites=[
1687+ sprites["0000ufilpvvllo"].clone().set_position(21, 0).set_rotation(90),
1688+ sprites["0003qvhiakludh"].clone().set_position(30, 30).set_rotation(90),
1689+ sprites["0003qvhiakludh"].clone().set_position(6, 30).set_rotation(90),
1690+ sprites["0013nlpqaanefy"].clone().set_position(48, 30).set_rotation(90),
1691+ sprites["0019yzthbwsumy"].clone().set_position(3, 12).set_rotation(90),
1692+ sprites["0023zpxhabfwya"].clone().set_position(0, 27).set_rotation(90),
1693+ sprites["0023zpxhabfwya"].clone().set_position(0, 33).set_rotation(90),
1694+ sprites["0023zpxhabfwya"].clone().set_position(24, 33).set_rotation(90),
1695+ sprites["0023zpxhabfwya"].clone().set_position(24, 27).set_rotation(90),
1696+ sprites["0035mojyqpmkca"].clone().set_position(0, 30).set_rotation(90),
1697+ sprites["0058isdkrjwbjw"].clone().set_rotation(90),
1698+ sprites["0059nzfxpksuts"].clone().set_position(0, 33).set_rotation(90),
1699+ sprites["0060vzyhngpdxk"].clone().set_position(24, 0).set_rotation(90),
1700+ ],
1701+ grid_size=(64, 64),
1702+ data={
1703+ "StepCounter": 50,
1704+ "Gravity": [-3, 0],
1705+ },
1706+ ),
1707+ # Level 7
1708+ Level(
1709+ sprites=[
1710+ sprites["0002eemauzpzws"].clone().set_position(0, 22).set_rotation(180),
1711+ sprites["0002eemauzpzws"].clone().set_position(34, 22).set_rotation(180),
1712+ sprites["0005nxriaixjyr"].clone().set_position(14, 30).set_rotation(180),
1713+ sprites["0005nxriaixjyr"].clone().set_position(32, 8).set_rotation(180),
1714+ sprites["0005nxriaixjyr"].clone().set_position(32, 30).set_rotation(180),
1715+ sprites["0009vwghyhtilb"].clone().set_position(32, 18).set_rotation(180),
1716+ sprites["0011egrqhpaniv"].clone().set_position(14, 10).set_rotation(180),
1717+ sprites["0012efovcqtrsv"].clone().set_position(14, 42).set_rotation(180),
1718+ sprites["0015cltmlkogkc"].clone().set_position(6, 32).set_rotation(180),
1719+ sprites["0017pmjcrnwxxj"].clone().set_position(40, 34).set_rotation(180),
1720+ sprites["0018rxmsqpnhhx"].clone().set_position(40, 6).set_rotation(180),
1721+ sprites["0021ayhektiwsl"].clone().set_position(16, 0).set_rotation(180),
1722+ sprites["0021ayhektiwsl"].clone().set_position(12, 0).set_rotation(180),
1723+ sprites["0021ayhektiwsl"].clone().set_position(16, 24).set_rotation(180),
1724+ sprites["0021ayhektiwsl"].clone().set_position(12, 24).set_rotation(180),
1725+ sprites["0021ayhektiwsl"].clone().set_position(34, 24).set_rotation(180),
1726+ sprites["0021ayhektiwsl"].clone().set_position(30, 24).set_rotation(180),
1727+ sprites["0021ayhektiwsl"].clone().set_position(34, 0).set_rotation(180),
1728+ sprites["0021ayhektiwsl"].clone().set_position(30, 0).set_rotation(180),
1729+ sprites["0036rjrqlosxim"].clone().set_position(14, 0).set_rotation(180),
1730+ sprites["0040sfsyhdwzpa"].clone().set_position(32, 0).set_rotation(180),
1731+ sprites["0064keizattioe"].clone().set_position(0, 24).set_rotation(180),
1732+ sprites["0065dnabthoeah"].clone().set_rotation(180),
1733+ sprites["0066vaxquypzdt"].clone().set_position(34, 24).set_rotation(180),
1734+ sprites["0067nuweesmgmg"].clone().set_position(34, 0).set_rotation(180),
1735+ sprites["0068ggudhgdmjj"].clone().set_position(16, 0).set_rotation(180),
1736+ ],
1737+ grid_size=(48, 48),
1738+ data={
1739+ "StepCounter": 200,
1740+ "Gravity": [0, -2],
1741+ },
1742+ ),
1743+]
1744+BACKGROUND_COLOR = 3
1745+PADDING_COLOR = 4
1746+xbdwxvogip = 7
1747+fqzhkhmfxt = 12
1748+flmcufqvdo = 1
1749+qgrljjqvyn = 0
1750+
1751+
1752+class kzobdxxpyg:
1753+ hxvxoxlwtk: Sprite
1754+ xgwliflosy: tuple[int, int]
1755+
1756+ def __init__(self, sprite: Sprite, mtdlwrbmzk: tuple[int, int]) -> None:
1757+ self.hxvxoxlwtk = sprite
1758+ self.xgwliflosy = mtdlwrbmzk
1759+
1760+ def xryezihexa(self) -> bool:
1761+ vmfjnujmbm = (self.hxvxoxlwtk.x, self.hxvxoxlwtk.y)
1762+ mtdlwrbmzk = self.xgwliflosy
1763+ dx = mtdlwrbmzk[0] - vmfjnujmbm[0]
1764+ dy = mtdlwrbmzk[1] - vmfjnujmbm[1]
1765+ if dx == 0 and dy == 0:
1766+ return True
1767+ if abs(dx) >= abs(dy):
1768+ qqqlopeipe = (vmfjnujmbm[0] + np.sign(dx), vmfjnujmbm[1])
1769+ else:
1770+ qqqlopeipe = (vmfjnujmbm[0], vmfjnujmbm[1] + np.sign(dy))
1771+ self.hxvxoxlwtk.set_position(qqqlopeipe[0], qqqlopeipe[1])
1772+ return False
1773+
1774+
1775+class wqemqapjce:
1776+ emftrvixwu: list[kzobdxxpyg]
1777+ chacnmhmit: int
1778+
1779+ def __init__(self, maejydvpzz: list[kzobdxxpyg]) -> None:
1780+ self.emftrvixwu = maejydvpzz
1781+ self.chacnmhmit = 0
1782+
1783+ def xryezihexa(self) -> bool:
1784+ mxefvazonp = self.emftrvixwu[self.chacnmhmit]
1785+ if mxefvazonp.xryezihexa():
1786+ self.chacnmhmit += 1
1787+ if self.chacnmhmit == len(self.emftrvixwu):
1788+ return True
1789+ return False
1790+
1791+
1792+class xclqwacrmx(RenderableUserDisplay):
1793+ """."""
1794+
1795+ def __init__(self, dmesyeowwd: int):
1796+ """."""
1797+ self.dmesyeowwd = dmesyeowwd
1798+ self.current_steps = dmesyeowwd
1799+
1800+ def kzdrzwegyq(self, jwqkgpseim: int) -> None:
1801+ """."""
1802+ self.current_steps = max(0, min(jwqkgpseim, self.dmesyeowwd))
1803+
1804+ def tuvumryrbp(self) -> bool:
1805+ """."""
1806+ if self.current_steps > 0:
1807+ self.current_steps -= 1
1808+ return self.current_steps > 0
1809+
1810+ def mflhbpdcce(self) -> None:
1811+ """."""
1812+ self.current_steps = self.dmesyeowwd
1813+
1814+ def render_interface(self, frame: np.ndarray) -> np.ndarray:
1815+ """."""
1816+ if self.dmesyeowwd == 0:
1817+ return frame
1818+ xmiochpvpa = self.current_steps / self.dmesyeowwd
1819+ odvxyoizxg = round(64 * xmiochpvpa)
1820+ cjicgmvvti = xbdwxvogip
1821+ for x in range(64):
1822+ if x < odvxyoizxg:
1823+ frame[0, x] = cjicgmvvti
1824+ else:
1825+ frame[0, x] = 4
1826+ return frame
1827+
1828+
1829+class Vc33(ARCBaseGame):
1830+ heczcoeosi: xclqwacrmx
1831+ dwwmpxqsza: tuple[int, int]
1832+ wrcxjliglr: dict[Sprite, tuple[Sprite, Sprite]]
1833+ bnnqyrupir: wqemqapjce | None
1834+
1835+ def __init__(self) -> None:
1836+ self.heczcoeosi = xclqwacrmx(0)
1837+ xlpbmgyvhdc = Camera(
1838+ background=BACKGROUND_COLOR,
1839+ letter_box=PADDING_COLOR,
1840+ interfaces=[self.heczcoeosi],
1841+ )
1842+ super().__init__(game_id="vc33", levels=levels, camera=xlpbmgyvhdc, available_actions=[6])
1843+
1844+ def ztjckgmepu(self) -> None:
1845+ """."""
1846+ rwejtsvefe = self.current_level.get_data("StepCounter")
1847+ self.heczcoeosi.dmesyeowwd = rwejtsvefe
1848+ self.heczcoeosi.mflhbpdcce()
1849+
1850+ def cicmkyghjc(self, name: str) -> Sprite:
1851+ return self.current_level.get_sprites_by_name(name)[0]
1852+
1853+ def qhmwbtpcsk(self) -> bool:
1854+ return self.dwwmpxqsza[0] > 0 or self.dwwmpxqsza[1] > 0
1855+
1856+ def mzqwlqlkrv(self, sprite: Sprite) -> int:
1857+ if self.dwwmpxqsza[0]:
1858+ return sprite.y
1859+ return sprite.x
1860+
1861+ def xitrlzpbgu(self, sprite: Sprite) -> int:
1862+ if self.dwwmpxqsza[0]:
1863+ return sprite.x
1864+ return sprite.y
1865+
1866+ def vmjlfzxesj(self, sprite: Sprite) -> int:
1867+ if self.dwwmpxqsza[0]:
1868+ return sprite.height
1869+ return sprite.width
1870+
1871+ def pjfzvvjgud(self, sprite: Sprite) -> int:
1872+ if self.dwwmpxqsza[0]:
1873+ return sprite.width
1874+ return sprite.height
1875+
1876+ def zfcrfmorna(self, sprite: Sprite) -> int:
1877+ if self.qhmwbtpcsk():
1878+ return self.xitrlzpbgu(sprite) + self.pjfzvvjgud(sprite)
1879+ else:
1880+ return self.xitrlzpbgu(sprite)
1881+
1882+ def hpakcxndwy(self, sprite: Sprite) -> int:
1883+ if self.qhmwbtpcsk():
1884+ return self.xitrlzpbgu(sprite)
1885+ else:
1886+ return self.xitrlzpbgu(sprite) + self.pjfzvvjgud(sprite)
1887+
1888+ def ldbtzvbmoj(self, eqbmrymiwc: Sprite, abwvwckyso: Sprite) -> bool:
1889+ if self.qhmwbtpcsk():
1890+ return self.zfcrfmorna(eqbmrymiwc) >= self.hpakcxndwy(abwvwckyso)
1891+ else:
1892+ return self.zfcrfmorna(eqbmrymiwc) <= self.hpakcxndwy(abwvwckyso)
1893+
1894+ def on_set_level(self, level: Level) -> None:
1895+ """."""
1896+ self.ztjckgmepu()
1897+ self.bnnqyrupir = None
1898+ self.dwwmpxqsza = self.current_level.get_data("Gravity")
1899+ self.wrcxjliglr = dict()
1900+ wpgwyzgomg = self.current_level.get_sprites_by_tag("0022jvmlspyigc")
1901+ amifeafxwr = self.current_level.get_sprites_by_tag("0043nzrtobajqi")
1902+ for abwvwckyso in wpgwyzgomg:
1903+ dfghvrvmmj = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.mzqwlqlkrv(eqbmrymiwc) == self.mzqwlqlkrv(abwvwckyso) and self.ldbtzvbmoj(eqbmrymiwc, abwvwckyso)]
1904+ if dfghvrvmmj:
1905+ sxrzgujgtx = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.mzqwlqlkrv(eqbmrymiwc) + self.vmjlfzxesj(eqbmrymiwc) == self.mzqwlqlkrv(abwvwckyso) - self.vmjlfzxesj(abwvwckyso) and self.ldbtzvbmoj(eqbmrymiwc, abwvwckyso)]
1906+ if self.qhmwbtpcsk():
1907+ pzeognzxtp = min(sxrzgujgtx, key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki))
1908+ qrsthafmxa = min(dfghvrvmmj, key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki))
1909+ else:
1910+ pzeognzxtp = max(sxrzgujgtx, key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki))
1911+ qrsthafmxa = max(dfghvrvmmj, key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki))
1912+ self.wrcxjliglr[abwvwckyso] = (pzeognzxtp, qrsthafmxa)
1913+ else:
1914+ sxrzgujgtx = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.mzqwlqlkrv(eqbmrymiwc) < self.mzqwlqlkrv(abwvwckyso) and self.mzqwlqlkrv(eqbmrymiwc) + self.vmjlfzxesj(eqbmrymiwc) > self.mzqwlqlkrv(abwvwckyso) and self.ldbtzvbmoj(eqbmrymiwc, abwvwckyso)]
1915+ if sxrzgujgtx:
1916+ dfghvrvmmj = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.mzqwlqlkrv(eqbmrymiwc) == self.mzqwlqlkrv(abwvwckyso) + self.vmjlfzxesj(abwvwckyso) * 2 and self.ldbtzvbmoj(eqbmrymiwc, abwvwckyso)]
1917+ if self.qhmwbtpcsk():
1918+ pzeognzxtp = min(
1919+ sxrzgujgtx,
1920+ key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki),
1921+ )
1922+ qrsthafmxa = min(
1923+ dfghvrvmmj,
1924+ key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki),
1925+ )
1926+ else:
1927+ pzeognzxtp = max(
1928+ sxrzgujgtx,
1929+ key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki),
1930+ )
1931+ qrsthafmxa = max(
1932+ dfghvrvmmj,
1933+ key=lambda glarpukzki: self.xitrlzpbgu(glarpukzki),
1934+ )
1935+ self.wrcxjliglr[abwvwckyso] = (qrsthafmxa, pzeognzxtp)
1936+
1937+ def ielczunthe(self) -> bool:
1938+ """."""
1939+ wdfdpqxtkf = self.current_level.get_sprites_by_tag("0016uciqlhjlom")
1940+ vtcmlsebpq = self.current_level.get_sprites_by_tag("0010gnulkywfpz")
1941+ amifeafxwr = self.current_level.get_sprites_by_tag("0043nzrtobajqi")
1942+ bqppzuakxi = self.current_level.get_sprites_by_tag("0025yfyiswdvoh")
1943+ for vfddimntfs in wdfdpqxtkf:
1944+ zoovwgfyzl = vfddimntfs.pixels[-1, -1]
1945+ zvmujaknkt = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.bcpuwqzpxw(vfddimntfs, eqbmrymiwc)]
1946+ kxlcdazxzs = self.rcbyiqlbza(zvmujaknkt[0])
1947+ nyaroikuxn = True
1948+ for hxlxvkeipz in vtcmlsebpq:
1949+ bggewwdych = [wall for wall in bqppzuakxi if wall.collides_with(hxlxvkeipz)][0]
1950+ if zoovwgfyzl in hxlxvkeipz.pixels and self.xitrlzpbgu(vfddimntfs) == self.xitrlzpbgu(hxlxvkeipz) and (bggewwdych in kxlcdazxzs):
1951+ nyaroikuxn = False
1952+ break
1953+ if nyaroikuxn:
1954+ return False
1955+ return True
1956+
1957+ def ezbubuphlm(self, xklhcncusa: Sprite) -> bool:
1958+ amifeafxwr = self.current_level.get_sprites_by_tag("0043nzrtobajqi")
1959+ lqequazmqm = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.hpakcxndwy(eqbmrymiwc) == self.zfcrfmorna(xklhcncusa)]
1960+ vqoweqholk = [eqbmrymiwc for eqbmrymiwc in lqequazmqm if self.mzqwlqlkrv(eqbmrymiwc) + self.vmjlfzxesj(eqbmrymiwc) == self.mzqwlqlkrv(xklhcncusa)]
1961+ eltgoujmhx = [eqbmrymiwc for eqbmrymiwc in lqequazmqm if self.mzqwlqlkrv(eqbmrymiwc) == self.mzqwlqlkrv(xklhcncusa) + self.vmjlfzxesj(xklhcncusa)]
1962+ if vqoweqholk and eltgoujmhx:
1963+ return True
1964+ return False
1965+
1966+ def vktvbwfvhu(self, xklhcncusa: Sprite) -> None:
1967+ if self.ezbubuphlm(xklhcncusa):
1968+ xklhcncusa.color_remap(None, fqzhkhmfxt)
1969+ if xklhcncusa.pixels.shape[1] == 3:
1970+ pcbttqnhxk = sprites["0006mfbmvylbss"].clone()
1971+ else:
1972+ pcbttqnhxk = sprites["0008rybtprnbie"].clone()
1973+ pcbttqnhxk.set_rotation(xklhcncusa.rotation)
1974+ if xklhcncusa.rotation == 0:
1975+ pcbttqnhxk.set_position(xklhcncusa.x - 2, xklhcncusa.y)
1976+ elif xklhcncusa.rotation == 180:
1977+ pcbttqnhxk.set_position(xklhcncusa.x - 2, xklhcncusa.y)
1978+ if xklhcncusa.rotation == 90:
1979+ pcbttqnhxk.set_position(xklhcncusa.x, xklhcncusa.y - 2)
1980+ elif xklhcncusa.rotation == 270:
1981+ pcbttqnhxk.set_position(xklhcncusa.x, xklhcncusa.y - 2)
1982+ self.current_level.add_sprite(pcbttqnhxk)
1983+ else:
1984+ xklhcncusa.color_remap(None, flmcufqvdo)
1985+
1986+ def wpcgsoumbr(self) -> None:
1987+ cagzzrtjlm = self.current_level.get_sprites_by_tag("0007gyluczquhi")
1988+ for pcbttqnhxk in cagzzrtjlm:
1989+ self.current_level.remove_sprite(pcbttqnhxk)
1990+ pqklvzcuxd = self.current_level.get_sprites_by_tag("0004sttgkofqwb")
1991+ for xklhcncusa in pqklvzcuxd:
1992+ self.vktvbwfvhu(xklhcncusa)
1993+
1994+ def rcbyiqlbza(self, eqbmrymiwc: Sprite) -> list[Sprite]:
1995+ bqppzuakxi = self.current_level.get_sprites_by_tag("0025yfyiswdvoh")
1996+ kxlcdazxzs = [wall for wall in bqppzuakxi if self.mzqwlqlkrv(wall) + self.vmjlfzxesj(wall) == self.mzqwlqlkrv(eqbmrymiwc) or self.mzqwlqlkrv(wall) == self.mzqwlqlkrv(eqbmrymiwc) + self.vmjlfzxesj(eqbmrymiwc)]
1997+ return kxlcdazxzs
1998+
1999+ def kectayqmfn(self, eqbmrymiwc: Sprite) -> list[Sprite]:
2000+ wsqwqkejcw = self.current_level.get_sprites_by_tag("0001symqacyexa")
2001+ if self.qhmwbtpcsk():
2002+ mkmqnniulx = [floor for floor in wsqwqkejcw if self.mzqwlqlkrv(floor) == self.mzqwlqlkrv(eqbmrymiwc) and self.zfcrfmorna(floor) < self.zfcrfmorna(eqbmrymiwc)]
2003+ else:
2004+ mkmqnniulx = [floor for floor in wsqwqkejcw if self.mzqwlqlkrv(floor) == self.mzqwlqlkrv(eqbmrymiwc) and self.zfcrfmorna(floor) > self.zfcrfmorna(eqbmrymiwc)]
2005+ return mkmqnniulx
2006+
2007+ def bcpuwqzpxw(self, vfddimntfs: Sprite, eqbmrymiwc: Sprite) -> bool:
2008+ return self.mzqwlqlkrv(vfddimntfs) >= self.mzqwlqlkrv(eqbmrymiwc) and self.mzqwlqlkrv(vfddimntfs) < self.mzqwlqlkrv(eqbmrymiwc) + self.vmjlfzxesj(eqbmrymiwc) and (self.zfcrfmorna(vfddimntfs) == self.hpakcxndwy(eqbmrymiwc))
2009+
2010+ def usqfmpzewf(self, eqbmrymiwc: Sprite) -> list[Sprite]:
2011+ wdfdpqxtkf = self.current_level.get_sprites_by_tag("0016uciqlhjlom")
2012+ return [vfddimntfs for vfddimntfs in wdfdpqxtkf if self.bcpuwqzpxw(vfddimntfs, eqbmrymiwc)]
2013+
2014+ def ysoqxdegud(self, eqbmrymiwc: Sprite) -> int:
2015+ ehuyojkjcq = self.kectayqmfn(eqbmrymiwc)
2016+ if ehuyojkjcq:
2017+ if self.usqfmpzewf(eqbmrymiwc):
2018+ if self.dwwmpxqsza[0] == -3:
2019+ return max([self.zfcrfmorna(sprite) - 6 for sprite in ehuyojkjcq])
2020+ else:
2021+ return max([self.zfcrfmorna(sprite) - 4 for sprite in ehuyojkjcq])
2022+ else:
2023+ return max([self.zfcrfmorna(sprite) for sprite in ehuyojkjcq])
2024+ katgaxrnxd = self.rcbyiqlbza(eqbmrymiwc)
2025+ if self.qhmwbtpcsk():
2026+ return max([self.hpakcxndwy(sprite) for sprite in katgaxrnxd])
2027+ else:
2028+ return min([self.hpakcxndwy(sprite) for sprite in katgaxrnxd])
2029+
2030+ def xowbpvmzbd(self, yvppaekogs: Sprite, dvfrzxabyk: Sprite) -> None:
2031+ if self.pjfzvvjgud(yvppaekogs) > 0 and (self.qhmwbtpcsk() and self.xitrlzpbgu(dvfrzxabyk) > self.ysoqxdegud(dvfrzxabyk) or (not self.qhmwbtpcsk() and self.hpakcxndwy(dvfrzxabyk) < self.ysoqxdegud(dvfrzxabyk))):
2032+ volqrbaomzl, duyfsmiznvg = self.dwwmpxqsza
2033+ for vfddimntfs in self.usqfmpzewf(yvppaekogs):
2034+ vfddimntfs.move(volqrbaomzl, duyfsmiznvg)
2035+ for vfddimntfs in self.usqfmpzewf(dvfrzxabyk):
2036+ vfddimntfs.move(-volqrbaomzl, -duyfsmiznvg)
2037+ if volqrbaomzl >= 0:
2038+ yvppaekogs.move(volqrbaomzl, 0)
2039+ dvfrzxabyk.move(-volqrbaomzl, 0)
2040+ if duyfsmiznvg >= 0:
2041+ yvppaekogs.move(0, duyfsmiznvg)
2042+ dvfrzxabyk.move(0, -duyfsmiznvg)
2043+ ogkqtyxbce = np.full((1, dvfrzxabyk.pixels.shape[1]), qgrljjqvyn)
2044+ if volqrbaomzl != 0:
2045+ yvppaekogs.pixels = yvppaekogs.pixels[: -abs(volqrbaomzl)]
2046+ for i in range(abs(volqrbaomzl)):
2047+ dvfrzxabyk.pixels = np.vstack([dvfrzxabyk.pixels, ogkqtyxbce])
2048+ else:
2049+ yvppaekogs.pixels = yvppaekogs.pixels[: -abs(duyfsmiznvg)]
2050+ for i in range(abs(duyfsmiznvg)):
2051+ dvfrzxabyk.pixels = np.vstack([dvfrzxabyk.pixels, ogkqtyxbce])
2052+ self.wpcgsoumbr()
2053+
2054+ def iootdyzbwv(self, abwvwckyso: Sprite) -> None:
2055+ yvppaekogs, dvfrzxabyk = self.wrcxjliglr[abwvwckyso]
2056+ self.xowbpvmzbd(yvppaekogs, dvfrzxabyk)
2057+
2058+ def mwsdltsaxd(self, xklhcncusa: Sprite) -> wqemqapjce:
2059+ amifeafxwr = self.current_level.get_sprites_by_tag("0043nzrtobajqi")
2060+ lqequazmqm = [eqbmrymiwc for eqbmrymiwc in amifeafxwr if self.hpakcxndwy(eqbmrymiwc) == self.zfcrfmorna(xklhcncusa)]
2061+ vqoweqholk = [eqbmrymiwc for eqbmrymiwc in lqequazmqm if self.mzqwlqlkrv(eqbmrymiwc) + self.vmjlfzxesj(eqbmrymiwc) == self.mzqwlqlkrv(xklhcncusa)]
2062+ eltgoujmhx = [eqbmrymiwc for eqbmrymiwc in lqequazmqm if self.mzqwlqlkrv(eqbmrymiwc) == self.mzqwlqlkrv(xklhcncusa) + self.vmjlfzxesj(xklhcncusa)]
2063+ wrrpfpsshs = vqoweqholk[0]
2064+ nmhvenelbu = eltgoujmhx[0]
2065+ hgrgnxfhxv = []
2066+ jhnzlxbvwh = self.usqfmpzewf(wrrpfpsshs)
2067+ ydofmpomfe = self.usqfmpzewf(nmhvenelbu)
2068+ for vfddimntfs in jhnzlxbvwh:
2069+ if self.dwwmpxqsza[0] != 0:
2070+ y = nmhvenelbu.y + nmhvenelbu.height // 2 - vfddimntfs.height // 2
2071+ x = vfddimntfs.x
2072+ else:
2073+ x = nmhvenelbu.x + nmhvenelbu.width // 2 - vfddimntfs.width // 2
2074+ y = vfddimntfs.y
2075+ hgrgnxfhxv.append(kzobdxxpyg(vfddimntfs, (x, y)))
2076+ for vfddimntfs in ydofmpomfe:
2077+ if self.dwwmpxqsza[0] != 0:
2078+ y = wrrpfpsshs.y + wrrpfpsshs.height // 2 - vfddimntfs.height // 2
2079+ x = vfddimntfs.x
2080+ else:
2081+ x = wrrpfpsshs.x + wrrpfpsshs.width // 2 - vfddimntfs.width // 2
2082+ y = vfddimntfs.y
2083+ hgrgnxfhxv.append(kzobdxxpyg(vfddimntfs, (x, y)))
2084+ if self.dwwmpxqsza[0] > 0:
2085+ zbfsemofrj = kzobdxxpyg(xklhcncusa, (xklhcncusa.x - xklhcncusa.width, xklhcncusa.y))
2086+ elif self.dwwmpxqsza[0] < 0:
2087+ zbfsemofrj = kzobdxxpyg(xklhcncusa, (xklhcncusa.x + xklhcncusa.width, xklhcncusa.y))
2088+ else:
2089+ zbfsemofrj = kzobdxxpyg(xklhcncusa, (xklhcncusa.x, xklhcncusa.y - xklhcncusa.height))
2090+ nxdhyqlepc = kzobdxxpyg(xklhcncusa, (xklhcncusa.x, xklhcncusa.y))
2091+ ocvdtekxgc = wqemqapjce([zbfsemofrj] + hgrgnxfhxv + [nxdhyqlepc])
2092+ return ocvdtekxgc
2093+
2094+ def step(self) -> None:
2095+ """."""
2096+ if self.bnnqyrupir:
2097+ if self.bnnqyrupir.xryezihexa():
2098+ self.bnnqyrupir = None
2099+ self.wpcgsoumbr()
2100+ else:
2101+ return
2102+ elif self.action.id == GameAction.ACTION6:
2103+ self.heczcoeosi.tuvumryrbp()
2104+ wmatnlmsbs = self.action.data.get("x", 0)
2105+ iecizdiqxl = self.action.data.get("y", 0)
2106+ rgadpfgsms = self.camera.display_to_grid(wmatnlmsbs, iecizdiqxl)
2107+ if rgadpfgsms:
2108+ game_x, game_y = rgadpfgsms
2109+ sprite = self.current_level.get_sprite_at(game_x, game_y)
2110+ if sprite:
2111+ if "0022jvmlspyigc" in sprite.tags:
2112+ self.iootdyzbwv(sprite)
2113+ elif "0004sttgkofqwb" in sprite.tags:
2114+ if self.ezbubuphlm(sprite):
2115+ self.bnnqyrupir = self.mwsdltsaxd(sprite)
2116+ cagzzrtjlm = self.current_level.get_sprites_by_tag("0007gyluczquhi")
2117+ for pcbttqnhxk in cagzzrtjlm:
2118+ pcbttqnhxk.set_visible(False)
2119+ return
2120+ if self.ielczunthe():
2121+ self.next_level()
2122+ elif not self.heczcoeosi.current_steps:
2123+ self.lose()
2124+ self.complete_action()
+6 −0 referee/games.txt 新增 查看文件
@@ -0,0 +1,6 @@
1+# The season's games, from the public ARC-AGI-3 set (files in environment_files/, MIT).
2+ls20
3+ft09
4+vc33
5+sp80
6+lp85
+91 −0 referee/play.py 新增 查看文件
@@ -0,0 +1,91 @@
1+"""The project's referee, on the official ARC-AGI-3 toolkit. ARC-AGI-3 is played alone: the season's field is a set of
2+its public games, each a subtask. check: the route's agent plays each game up to the action limit through the toolkit,
3+served locally; the score is ARC's own RHAE: for each level cleared, (human baseline actions / actions taken)²,
4+capped at 1.15, weighted by the level's number, as a percentage of the game; the mean over the games is the score.
5+practice: the first two games, a replay of each in replays/.
6+ python3 referee/play.py check|practice <route folder>
7+"""
8+import glob, gzip, json, os, socket, subprocess, sys, tempfile, time
9+
10+ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
11+sys.path.insert(0, os.path.join(ROOT, 'kit'))
12+import league # noqa: E402
13+
14+ENVS = os.path.join(ROOT, 'referee', 'environment_files')
15+MOST = 400
16+
17+
18+def games():
19+ with open(os.path.join(ROOT, 'referee', 'games.txt')) as f:
20+ return [l.strip() for l in f if l.strip() and not l.startswith('#')]
21+
22+
23+def meta(game):
24+ return json.load(open(glob.glob(os.path.join(ENVS, game, '*', 'metadata.json'))[0]))
25+
26+
27+def rhae(steps, baseline):
28+ """Per level cleared, (baseline / actions)^2 capped at 1.15, weighted by level number, as a % of the game."""
29+ total, done, since = 0.0, 0, 0
30+ for s in steps:
31+ since += 1
32+ if s['levels_completed'] > done:
33+ level = s['levels_completed']
34+ b = baseline[level - 1] if level - 1 < len(baseline) else baseline[-1]
35+ total += level * min(1.15, (b / since) ** 2)
36+ done, since = level, 0
37+ return 100 * total / sum(range(1, len(baseline) + 1))
38+
39+
40+def replay(game, steps):
41+ m = meta(game)
42+ frame = lambda s: ''.join('%x' % (v & 15) for row in s['frame'][-1] for v in row) if s['frame'] else ''
43+ return {'game': 'arc-agi-3', 'id': m['game_id'], 'title': m.get('title', game), 'fps': m.get('default_fps', 10), 'levels': len(m['baseline_actions']),
44+ 'steps': [{'a': (s.get('action_input') or {}).get('id', 0), 'd': (s.get('action_input') or {}).get('data') or {}, 's': s['state'], 'l': s['levels_completed'], 'f': frame(s)} for s in steps]}
45+
46+
47+def main(mode, route):
48+ bot = os.path.join(league.bot_dir(route), 'agent.py')
49+ if not os.path.isfile(bot):
50+ sys.exit(f'No bot in {route}: add agent.py with a class Agent (choose_action(frames, latest_frame)), as ARC-AGI-3-Agents writes them')
51+ name = league.route_name()
52+ reps = league.Replays() if mode == 'practice' else None
53+ clean = tempfile.mkdtemp() # the toolkit reads .env from where it runs; nothing of the route's goes there
54+ recs = os.path.join(clean, 'recordings')
55+ with socket.socket() as s:
56+ s.bind(('127.0.0.1', 0))
57+ port = s.getsockname()[1]
58+ env = {k: v for k, v in os.environ.items() if not k.startswith(('ARC_', 'OPERATION_MODE', 'SS_', 'SLURM_'))}
59+ server = subprocess.Popen([sys.executable, '-s', os.path.join(ROOT, 'referee', 'serve.py'), ENVS, recs, str(port)], cwd=clean, env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
60+ try:
61+ for _ in range(100):
62+ try:
63+ socket.create_connection(('127.0.0.1', port), 0.2).close()
64+ break
65+ except OSError:
66+ time.sleep(0.1)
67+ subtasks = {}
68+ for game in games() if mode == 'check' else games()[:2]:
69+ before = set(glob.glob(os.path.join(recs, '**', '*.jsonl*'), recursive=True))
70+ try:
71+ subprocess.run([sys.executable, '-s', os.path.join(ROOT, 'referee', 'agent_child.py'), bot, f'http://127.0.0.1:{port}', game, str(MOST)],
72+ cwd=clean, env={**env, 'PYTHONHASHSEED': '0'}, timeout=MOST * 2 + 30, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
73+ except subprocess.TimeoutExpired:
74+ pass
75+ time.sleep(0.3)
76+ new = sorted(set(glob.glob(os.path.join(recs, '**', f'{game}-*.jsonl*'), recursive=True)) - before, key=os.path.getmtime)
77+ steps = []
78+ for path in new:
79+ with (gzip.open if path.endswith('.gz') else open)(path, 'rt') as f:
80+ steps += [json.loads(l)['data'] for l in f if l.strip()]
81+ subtasks[game] = rhae(steps[1:], meta(game)['baseline_actions']) if steps else 0.0
82+ if reps and steps:
83+ r = replay(game, steps)
84+ reps.add(f'{game}.json', r, f'{r["title"]}: {name}', [name], f'{max(s["levels_completed"] for s in steps)} of {r["levels"]} levels in {len(steps) - 1} actions, {subtasks[game]:.1f} RHAE')
85+ league.write_metrics(sum(subtasks.values()) / len(subtasks), subtasks)
86+ finally:
87+ server.kill()
88+
89+
90+if __name__ == '__main__':
91+ main(sys.argv[1], sys.argv[2])
+6 −0 referee/practice.sbatch 新增 查看文件
@@ -0,0 +1,6 @@
1+#!/bin/bash
2+#SBATCH --job-name=practice
3+#SBATCH --time=30:00
4+# A practice run from your route: the first two games, replays in replays/ (see Matches).
5+PY=$(command -v arc-agi-3-python || command -v python3)
6+PYTHONHASHSEED=0 "$PY" -s referee/play.py practice "$SS_INPUT/$SS_ROUTE_DIR"
+3 −0 referee/requirements.txt 新增 查看文件
@@ -0,0 +1,3 @@
1+# Python 3.12. The official ARC-AGI-3 toolkit and engine (MIT); the games are in environment_files/.
2+arc-agi==0.9.9
3+arcengine==0.9.3
+8 −0 referee/serve.py 新增 查看文件
@@ -0,0 +1,8 @@
1+"""The games, served over ARC-AGI-3's own REST API by the official toolkit in offline mode: the bot plays them through
2+the toolkit exactly as it would play arcprize.org, but never sees a game's source. Every step is recorded.
3+ python3 referee/serve.py <environment_files> <recordings> <port>
4+"""
5+import sys
6+from arc_agi import Arcade, OperationMode
7+
8+Arcade(operation_mode=OperationMode.OFFLINE, environments_dir=sys.argv[1], recordings_dir=sys.argv[2]).listen_and_serve(host='127.0.0.1', port=int(sys.argv[3]), save_all_recordings=True)
+18 −0 routes/agent.py 新增 查看文件
@@ -0,0 +1,18 @@
1+"""The starter: ARC-AGI-3-Agents' random agent, which picks any action the game offers and clicks anywhere. Copy it
2+into routes/<your route>/agent.py and make an agent that learns a game's rules as it plays: the referee calls
3+choose_action(frames, latest_frame) every step, as the official agents framework does."""
4+import random
5+from arcengine import GameAction, GameState
6+
7+
8+class Agent:
9+ def is_done(self, frames, latest_frame):
10+ return latest_frame.state is GameState.WIN
11+
12+ def choose_action(self, frames, latest_frame):
13+ if latest_frame.state in (GameState.NOT_PLAYED, GameState.GAME_OVER):
14+ return GameAction.RESET
15+ action = GameAction.from_id(random.choice(latest_frame.available_actions))
16+ if action.is_complex():
17+ return action, {'x': random.randrange(64), 'y': random.randrange(64)}
18+ return action
+19 −0 viewer/bridge.js 新增 查看文件
@@ -0,0 +1,19 @@
1+// The page around a game's viewer hands it the replay (Shoal's public/app.js): the viewer runs in a frame with scripts
2+// only, says it is ready, and gets {shoal: 'replay', name, text}. Opened by itself, it reads ?replay=<file> instead,
3+// so a replay can be watched from a clone: python3 -m http.server, then viewer/index.html?replay=../replays/x.json
4+// A live room (docs/games.md §8.4) opens the viewer as index.html?live. shoalLive(fn) says {shoal: 'ready', live: true}
5+// and calls fn(batch) for each {shoal: 'live', room, you, messages}: you lists the seats this viewer controls, the first
6+// batch holds all the history it may see, and each message is the room's (§8.3) plus its sequence number n: {n, to,
7+// version, obs, legal} asks a seat to act, {n, to, obs} tells one seat, {n, event} is public, {n, end} ends the room.
8+// shoalAct(seat, version, action) plays for a seat in you, answering the request with that version.
9+window.shoalReplay = start => {
10+ addEventListener('message', e => { if (e.data && e.data.shoal === 'replay') start(e.data.text, e.data.name) })
11+ const local = new URLSearchParams(location.search).get('replay')
12+ if (local) fetch(local).then(r => r.text()).then(t => start(t, local))
13+ else if (parent !== window) parent.postMessage({ shoal: 'ready' }, '*')
14+}
15+window.shoalLive = fn => {
16+ addEventListener('message', e => { if (e.data && e.data.shoal === 'live') fn(e.data) })
17+ if (parent !== window) parent.postMessage({ shoal: 'ready', live: true }, '*')
18+}
19+window.shoalAct = (seat, version, action) => parent.postMessage({ shoal: 'act', seat, version, action }, '*')
+51 −0 viewer/index.html 新增 查看文件
@@ -0,0 +1,51 @@
1+<!doctype html>
2+<html lang="en">
3+<head>
4+<meta charset="utf-8">
5+<meta name="viewport" content="width=device-width, initial-scale=1">
6+<title>ARC-AGI-3 replay</title>
7+<style>
8+/* ARC-AGI-3's own look: the 64x64 frame in the official sixteen colours, drawn pixel for pixel, a click marked in
9+ yellow, the screen washed red on game over and green on a win. */
10+html, body { margin: 0; height: 100%; background: #0d0d0d; color: #e6e6e6; font: 13px ui-monospace, Menlo, Consolas, monospace; }
11+body { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; }
12+.head { display: flex; gap: 18px; align-items: baseline; }
13+.head b { font-size: 16px; letter-spacing: .08em; }
14+canvas { image-rendering: pixelated; width: min(78vh, 92vw); height: min(78vh, 92vw); background: #000; }
15+.ctl { display: flex; gap: 8px; align-items: center; }
16+button { font: inherit; color: #e6e6e6; background: #222; border: 1px solid #444; border-radius: 4px; padding: 3px 10px; cursor: pointer; }
17+input[type=range] { width: 300px; }
18+</style>
19+</head>
20+<body>
21+<div class="head"><b id="title">ARC-AGI-3</b><span id="lv"></span><span id="act"></span></div>
22+<canvas id="c" width="64" height="64"></canvas>
23+<div class="ctl"><button id="play">Pause</button><input id="at" type="range" min="0" value="0" aria-label="Action"><span id="n"></span></div>
24+<script src="bridge.js"></script>
25+<script>
26+const PALETTE = ['#FFFFFF', '#CCCCCC', '#999999', '#666666', '#333333', '#000000', '#E53AA3', '#FF7BCC', '#F93C31', '#1E93FF', '#88D8F1', '#FFDC00', '#FF851B', '#921231', '#4FCC30', '#A356D6']
27+const RGB = PALETTE.map(h => [1, 3, 5].map(i => parseInt(h.slice(i, i + 2), 16)))
28+const NAME = ['RESET', 'UP', 'DOWN', 'LEFT', 'RIGHT', 'INTERACT', 'CLICK', 'UNDO']
29+const cv = document.getElementById('c'), g = cv.getContext('2d'), img = g.createImageData(64, 64), at = document.getElementById('at')
30+let R = null, t = 0, timer = 0
31+function draw() {
32+ const s = R.steps[t], f = s.f
33+ for (let i = 0; i < 4096; i++) { const c = RGB[parseInt(f[i] || '5', 16)]; img.data.set([c[0], c[1], c[2], 255], i * 4) }
34+ g.putImageData(img, 0, 0)
35+ if (s.s === 'GAME_OVER' || s.s === 'WIN') { g.fillStyle = s.s === 'WIN' ? 'rgba(79,204,48,.45)' : 'rgba(249,60,49,.45)'; g.fillRect(0, 0, 64, 64) }
36+ const act = typeof s.a === 'number' ? NAME[s.a] || `ACTION${s.a}` : String(s.a)
37+ if ((act === 'ACTION6' || act === 'CLICK') && s.d && s.d.x != null) { g.fillStyle = '#FFDC00'; g.fillRect(s.d.x, s.d.y, 1, 1) }
38+ document.getElementById('lv').textContent = `level ${s.l} / ${R.levels}`
39+ document.getElementById('act').textContent = t ? act : 'start'
40+ document.getElementById('n').textContent = `action ${t} / ${R.steps.length - 1}`
41+ at.value = t
42+}
43+function go(n) { t = Math.max(0, Math.min(R.steps.length - 1, n)); draw() }
44+function run() { timer = setInterval(() => (t >= R.steps.length - 1 ? stop() : go(t + 1)), Math.max(60, 1000 / (R.fps || 10))); document.getElementById('play').textContent = 'Pause' }
45+function stop() { clearInterval(timer); timer = 0; document.getElementById('play').textContent = 'Play' }
46+document.getElementById('play').onclick = () => (timer ? stop() : run())
47+at.oninput = () => { stop(); go(+at.value) }
48+shoalReplay(text => { R = JSON.parse(text); document.getElementById('title').textContent = R.title; at.max = R.steps.length - 1; go(0); run() })
49+</script>
50+</body>
51+</html>