To beatRandom agent 0
Join
868 lines · 38.9 KB Raw Permalink History
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
23from typing import Any, Dict, List, Optional, Set, Tuple
24
25import numpy as np
26from arcengine import (
27 ActionInput,
28 ARCBaseGame,
29 Camera,
30 GameAction,
31 Level,
32 RenderableUserDisplay,
33 Sprite,
34)
35
36sprites = {
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}
274levels = [
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]
411BACKGROUND_COLOR = 12
412PADDING_COLOR = 1
413
414
415class 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
439class 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
454class 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