From 765a84db8bde26a3643182c96679bd4fa33c2d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Thu, 14 Nov 2024 23:27:13 +0800 Subject: [PATCH 1/8] source: upload --- .../code/LICENSE" | 202 +++++ .../code/README.md" | 1 + .../code/VERSION" | 1 + .../code/arch-run.sh" | 2 + .../code/moon.mod.json" | 13 + .../code/nix-run.sh" | 2 + .../code/src/arrow.mbt" | 122 +++ .../code/src/bar.mbt" | 20 + .../code/src/cd.mbt" | 23 + .../code/src/color.mbt" | 33 + .../code/src/column.mbt" | 6 + .../code/src/direction.mbt" | 6 + .../code/src/end.mbt" | 7 + .../code/src/enemy.mbt" | 220 +++++ .../code/src/game.mbt" | 71 ++ .../code/src/hitbox.mbt" | 56 ++ .../code/src/id_pool.mbt" | 14 + .../code/src/info.mbt" | 10 + .../code/src/inputer.mbt" | 21 + .../code/src/main.mbt" | 20 + .../code/src/moon.pkg.json" | 20 + .../code/src/obstacle.mbt" | 20 + .../code/src/player.mbt" | 75 ++ .../code/src/pos.mbt" | 19 + .../code/src/render.mbt" | 780 ++++++++++++++++++ .../code/src/room.mbt" | 140 ++++ .../code/src/texture.mbt" | 437 ++++++++++ .../code/src/weapon.mbt" | 153 ++++ .../code/src/xor_shift.mbt" | 20 + 29 files changed, 2514 insertions(+) create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/LICENSE" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/README.md" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/VERSION" create mode 100755 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/moon.mod.json" create mode 100755 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/nix-run.sh" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/cd.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/column.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/direction.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/end.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/id_pool.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/info.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/moon.pkg.json" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/LICENSE" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/LICENSE" new file mode 100644 index 0000000..d645695 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/LICENSE" @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/README.md" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/README.md" new file mode 100644 index 0000000..896a6ec --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/README.md" @@ -0,0 +1 @@ +# Lampese/汪汪立功 \ No newline at end of file diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/VERSION" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/VERSION" new file mode 100644 index 0000000..56e6e30 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/VERSION" @@ -0,0 +1 @@ +moon 0.1.20241111 (e6d64e0 2024-11-11) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" new file mode 100755 index 0000000..70e9cce --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" @@ -0,0 +1,2 @@ +moon build --target wasm-gc +w4 run ./target/wasm-gc/release/build/汪汪立功.wasm diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/moon.mod.json" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/moon.mod.json" new file mode 100644 index 0000000..9dda27b --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/moon.mod.json" @@ -0,0 +1,13 @@ +{ + "name": "Lampese/汪汪立功", + "version": "0.1.0", + "deps": { + "moonbitlang/wasm4": "0.2.2" + }, + "readme": "README.md", + "repository": "", + "license": "Apache-2.0", + "keywords": [], + "description": "", + "source": "src" +} \ No newline at end of file diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/nix-run.sh" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/nix-run.sh" new file mode 100755 index 0000000..f413bd9 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/nix-run.sh" @@ -0,0 +1,2 @@ +moon build --target wasm-gc +nix run github:szamuboy/wasm4-nix run ./target/wasm-gc/release/build/汪汪立功.wasm diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" new file mode 100644 index 0000000..3c8d501 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" @@ -0,0 +1,122 @@ +struct Arrow { + mut pos : Position + speed : Double + k : Double + damage : Int + direction : Bool + vert : Bool + belong : Bool +} + +fn Arrow::new( + pos : Position, + speed : Double, + k : Double, + damage : Int, + direction : Bool, + vert : Bool, + belong : Bool +) -> Arrow { + { pos, speed, k, damage, direction, vert, belong } +} + +fn get_hitbox(self : Arrow) -> Shape { + Rect(self.pos.x - 2.5, self.pos.y - 2.5, self.pos.x + 2.5, self.pos.y + 2.5) +} + +fn render_arrow(arrow : Arrow) -> Unit { + set_draw_color(1, LightBrown) + set_draw_color(2, Brown) + let (x, y) = arrow.pos.to_wasm4_pos() + @wasm4.oval(x, y, 5, 5) +} + +fn generate_arrow( + from_pos : Position, + to_pos : Position, + speed : Double, + damage : Int, + belong : Bool +) -> (UInt, Arrow) { + let id = id_pool.get_id() + if from_pos.x == to_pos.x { + ( + id, + Arrow::new( + from_pos, + speed, + 1, + damage, + from_pos.y < to_pos.y, + true, + belong, + ), + ) + } else { + let k = (from_pos.y - to_pos.y) / (from_pos.x - to_pos.x) + ( + id, + Arrow::new( + from_pos, + speed, + k, + damage, + from_pos.x < to_pos.x, + false, + belong, + ), + ) + } +} + +fn update_arrow(self : Room) -> Unit { + let erase_list : Array[UInt] = [] + for id, arrow in self.arrows { + let hitbox = arrow.get_hitbox() + let mut flag = false + if game.current_room.arrow_walls.shape_in_box(hitbox) { + erase_list.push(id) + flag = true + } else if arrow.belong == true && + game.player.pos.get_hitbox_player().intersect(hitbox) { + game.player.damage(arrow.damage) + erase_list.push(id) + flag = true + } else if arrow.belong == false { + if game.current_room.move_hitbox().shape_in_box(hitbox) { + erase_list.push(id) + flag = true + } + for _, enemy in self.enemys { + if enemy.get_hitbox().intersect(hitbox) { + enemy.damage(arrow.damage) + erase_list.push(id) + flag = true + break + } + } + } + if flag.not() { + arrow.ai() + } + } + for id in erase_list { + self.arrows.remove(id) + } +} + +fn ai(self : Arrow) -> Unit { + let k_signum = self.k.signum() + let direction = (if self.direction { 1.0 } else { -1.0 }) * + (if k_signum == 0 { 1 } else { k_signum }) + self.pos = if self.vert.not() { + let k_s = self.k * self.k + let sin = (k_s / (k_s + 1)).sqrt() + let cos = if self.k == 0 { 1.0 } else { sin / self.k } + let dy = self.speed * sin * direction + let dx = self.speed * cos * direction + { x: self.pos.x + dx, y: self.pos.y + dy } + } else { + { x: self.pos.x, y: self.pos.y + self.speed * direction } + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" new file mode 100644 index 0000000..53c9277 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" @@ -0,0 +1,20 @@ +fn render_hp_bar(player : Player) -> Unit { + set_main_color_with_transparent(LightBrown) + let now_hp = if player.hp < 0 { 0 } else { player.hp } + let progress = now_hp.to_double() / player.hp_max.to_double() + let break_point = 8 + (60.0 * progress).to_int() + @wasm4.rect(8, 7, 60, 7) + set_draw_color(1, Brown) + @wasm4.rect(break_point, 7, 60 - (break_point - 8), 7) +} + +fn render_cd_bar(player : Player) -> Unit { + set_main_color_with_transparent(LightBrown) + let cd = player.weapon.get_cd() + let now_cd = if cd.cd < 0 { 0 } else { cd.cd } + let progress = (cd.total - now_cd).to_double() / cd.total.to_double() + let break_point = 88 + (42.0 * progress).to_int() + @wasm4.rect(88, 7, 42, 7) + set_draw_color(1, Brown) + @wasm4.rect(break_point, 7, 42 - (break_point - 88), 7) +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/cd.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/cd.mbt" new file mode 100644 index 0000000..47d3a6d --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/cd.mbt" @@ -0,0 +1,23 @@ +struct CD { + mut cd : Int + total : Int + decrease : Int +} + +fn CD::new(total : Int, decrease : Int) -> CD { + { cd: total, total, decrease } +} + +fn decrease(self : CD) -> Unit { + if self.cd > 0 { + self.cd -= self.decrease + } +} + +fn refersh(self : CD) -> Unit { + self.cd = self.total +} + +fn check(self : CD) -> Bool { + self.cd <= 0 +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" new file mode 100644 index 0000000..12b4357 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" @@ -0,0 +1,33 @@ +enum Color_Type { + Transparent + Black + Brown + LightBrown + Grey +} + +fn to_int(self : Color_Type) -> UInt { + match self { + Transparent => 0 + Black => 1 + Brown => 2 + LightBrown => 3 + Grey => 4 + } +} + +fn set_draw_color(index : UInt, color_type : Color_Type) -> Unit { + @wasm4.set_draw_colors(~index, color_type.to_int()) +} + +fn set_main_color_with_transparent(color_type : Color_Type) -> Unit { + @wasm4.set_draw_colors(index=1, color_type.to_int()) + @wasm4.set_draw_colors(index=2, 0) +} + +fn init_color() -> Unit { + @wasm4.set_palette(1, @wasm4.rgb(0x040404)) // Black + @wasm4.set_palette(2, @wasm4.rgb(0x7c7464)) // Brown + @wasm4.set_palette(3, @wasm4.rgb(0xf4e4bc)) // LightBrown + @wasm4.set_palette(4, @wasm4.rgb(0x34342c)) // Grey +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/column.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/column.mbt" new file mode 100644 index 0000000..7b650b1 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/column.mbt" @@ -0,0 +1,6 @@ +fn render_weapon_column() -> Unit { + set_main_color_with_transparent(LightBrown) + @wasm4.rect(1, 40, 15, 18) // patch column + sword_texture.render_texture(3, 23) + slingshot_texture.render_texture(3, 43) +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/direction.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/direction.mbt" new file mode 100644 index 0000000..29d224f --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/direction.mbt" @@ -0,0 +1,6 @@ +enum Direction { + Left + Right + Up + Down +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/end.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/end.mbt" new file mode 100644 index 0000000..53b3129 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/end.mbt" @@ -0,0 +1,7 @@ +fn render_end_ui() -> Unit { + set_main_color_with_transparent(Black) + @wasm4.rect(22, 22, 116, 116) + set_main_color_with_transparent(LightBrown) + @wasm4.text("YOU ARE DEAD", 30, 50) + @wasm4.text("Press R to restart", 10, 75) +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" new file mode 100644 index 0000000..fb247a9 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" @@ -0,0 +1,220 @@ +enum Enemy { + Mummy(Mummy) + Skeleton(Skeleton) + Bug(Bug) +} + +fn get_pos(self : Enemy) -> Position { + match self { + Mummy({ pos, .. }) => pos + Skeleton({ pos, .. }) => pos + Bug({ pos, .. }) => pos + } +} + +fn get_hp(self : Enemy) -> Int { + match self { + Mummy({ hp, .. }) => hp + Skeleton({ hp, .. }) => hp + Bug({ hp, .. }) => hp + } +} + +fn get_id(self : Enemy) -> UInt { + match self { + Mummy({ id, .. }) => id + Skeleton({ id, .. }) => id + Bug({ id, .. }) => id + } +} + +fn get_hitbox(self : Enemy, ~pos : Position = self.get_pos()) -> Shape { + match self { + Mummy(_) => pos.get_hitbox_mummy() + Skeleton(_) => pos.get_hitbox_skeleton() + Bug(_) => pos.get_hitbox_bug() + } +} + +fn damage(self : Enemy, damage : Int) -> Unit { + match self { + Mummy(mummy) => mummy.hp -= damage + Skeleton(skeleton) => skeleton.hp -= damage + Bug(mummy) => mummy.hp -= damage + } +} + +fn render_enermy(enemy : Enemy) -> Unit { + match enemy { + Mummy({ pos, .. }) => { + let (x, y) = pos.to_wasm4_pos() + mummy_texture.render_texture(x - 5, y - 5) + } + Skeleton({ pos, .. }) => { + let (x, y) = pos.to_wasm4_pos() + skeleton_texture.render_texture(x - 5, y - 5) + } + Bug({ pos, .. }) => { + let (x, y) = pos.to_wasm4_pos() + bug_texture.render_texture(x - 5, y - 5) + } + } +} + +fn update_enemy(self : Room) -> Unit { + let erase_list : Array[UInt] = [] + for id, enemy in self.enemys { + if enemy.get_hp() <= 0 { + erase_list.push(id) + } else { + match enemy { + Mummy(mummy) => mummy.ai() + Skeleton(skeleton) => skeleton.ai() + Bug(bug) => bug.ai() + } + } + } + for id in erase_list { + self.enemys.remove(id) + } +} + +fn set_pos(self : Enemy, pos : Position) -> Unit { + match self { + Mummy(mummy) => mummy.pos = pos + Skeleton(skeleton) => skeleton.pos = pos + Bug(mummy) => mummy.pos = pos + } +} + +fn apply(self : Enemy, pos : Position) -> Unit { + let hitbox = self.get_hitbox(~pos) + if game.current_room.move_hitbox().shape_in_box(hitbox).not() && + game.player.pos.get_hitbox_player().intersect(hitbox).not() { + self.set_pos(pos) + } +} + +// -------------- Mummy -------------- +// size: 10*10 +struct Mummy { + id : UInt + speed : Double + mut pos : Position + mut hp : Int + hit : Int + hitcd : CD +} + +fn Mummy::new(id : UInt, pos : Position, level : Int) -> Mummy { + { + id, + pos, + hp: 50 + level * 5, + speed: 0.35, + hit: 10 + level * 2, + hitcd: CD::new(100, 3 + level / 10), + } +} + +fn get_hitbox_mummy(self : Position) -> Shape { + Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) +} + +pub fn ai(self : Mummy) -> Unit { + let distance = self.pos.distance(game.player.pos) + self.hitcd.decrease() + if distance <= 11 && self.hitcd.check() { + game.player.damage(self.hit) + self.hitcd.refersh() + } else if distance > 11 { + let way = self.pos.find_way(game.player.pos, self.speed) + Mummy(self).apply({ x: way.x, y: self.pos.y }) + Mummy(self).apply({ x: self.pos.x, y: way.y }) + } +} + +// -------------- Skeleton -------------- +// size: 10*10 +struct Skeleton { + id : UInt + mut pos : Position + mut hp : Int + hitcd : CD + speed : Double + damage : Int +} + +fn get_hitbox_skeleton(self : Position) -> Shape { + Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) +} + +fn Skeleton::new(id : UInt, pos : Position, level : Int) -> Skeleton { + { + id, + pos, + hp: 40 + level * 5, + hitcd: CD::new(100, level), + speed: 0.3 + 0.05 * level.to_double(), + damage: 10 + level * 2, + } +} + +fn ai(self : Skeleton) -> Unit { + let distance = self.pos.distance(game.player.pos) + self.hitcd.decrease() + if distance <= 40 && self.hitcd.check() { + let (id, arrow) = generate_arrow( + self.pos, + game.player.pos, + self.speed, + self.damage, + true, + ) + game.current_room.arrows.set(id, arrow) + self.hitcd.refersh() + } else if distance > 40 { + let way = self.pos.find_way(game.player.pos, 0.25) + Skeleton(self).apply({ x: way.x, y: self.pos.y }) + Skeleton(self).apply({ x: self.pos.x, y: way.y }) + } +} + +// -------------- Bug -------------- +// size: 11*10 +struct Bug { + id : UInt + speed : Double + mut pos : Position + mut hp : Int + hit : Int + hitcd : CD +} + +fn Bug::new(id : UInt, pos : Position, level : Int) -> Bug { + { + id, + pos, + hp: 20 + level * 2, + speed: 0.4 + 0.05 * level.to_double(), + hit: 3 + level, + hitcd: CD::new(100, 2 + level / 10), + } +} + +fn get_hitbox_bug(self : Position) -> Shape { + Rect(self.x - 5, self.y - 5, self.x + 6, self.y + 5) +} + +fn ai(self : Bug) -> Unit { + let distance = self.pos.distance(game.player.pos) + self.hitcd.decrease() + if distance <= 11 && self.hitcd.check() { + game.player.damage(self.hit) + self.hitcd.refersh() + } else if distance > 11 { + let way = self.pos.find_way(game.player.pos, self.speed) + Bug(self).apply({ x: way.x, y: self.pos.y }) + Bug(self).apply({ x: self.pos.x, y: way.y }) + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" new file mode 100644 index 0000000..3cf5329 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -0,0 +1,71 @@ +struct Game { + mut level : Int + mut stop : Bool + player : Player + mut current_room : Room +} + +fn Game::new() -> Game { + { + level: 1, + stop: false, + player: Player::new({ x: 80, y: 120 }), + current_room: generate_room(1), + } +} + +fn update_level(self : Player) -> Unit { + match check_next_room(self) { + Some(Up) => { + if game.current_room.upgrade { + self.level += 1 + self.hp += 50 + } + game.level += 1 + game.current_room = generate_room(game.level) + self.pos = { x: 73, y: 121 } + } + Some(Down) => { + if game.current_room.upgrade { + self.hp = self.hp_max + } + game.level += 1 + game.current_room = generate_room(game.level) + self.pos = { x: 31, y: 77 } + } + Some(Left) => { + if game.current_room.upgrade { + let level = self.slingshot.level + self.slingshot = Slingshot::new(level + 1) + } + game.level += 1 + game.current_room = generate_room(game.level) + self.pos = { x: 126, y: 73 } + } + Some(Right) => { + if game.current_room.upgrade { + let level = self.sword.level + self.sword = Sword::new(level + 1) + } + game.level += 1 + game.current_room = generate_room(game.level) + self.pos = { x: 76, y: 30 } + } + None => () + } +} + +fn check_next_room(self : Player) -> Direction? { + let (x, y) = self.pos.to_wasm4_pos() + if x > 0 && x < 160 && y > 0 && y < 160 { + None + } else if x <= 0 { + Some(Left) + } else if x >= 160 { + Some(Right) + } else if y <= 0 { + Some(Up) + } else { + Some(Down) + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" new file mode 100644 index 0000000..b537e50 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" @@ -0,0 +1,56 @@ +enum Shape { + Rect(Double, Double, Double, Double) +} + +struct HitBox { + shapes : Array[Shape] +} + +fn HitBox::new() -> HitBox { + { shapes: [] } +} + +fn add(self : HitBox, shape : Shape) -> Unit { + self.shapes.push(shape) +} + +fn merge(self : HitBox, other : HitBox) -> HitBox { + { shapes: self.shapes + other.shapes } +} + +fn intersect(self : Shape, other : Shape) -> Bool { + let Rect(x1, y1, x2, y2) = self + let Rect(x3, y3, x4, y4) = other + (x1 > x4 || x3 > x2 || y1 > y4 || y3 > y2).not() +} + +fn init_wall() -> HitBox { + let hitbox : HitBox = HitBox::new() + hitbox.add(Rect(3, 3, 70, 20)) + hitbox.add(Rect(3, 3, 20, 71)) + hitbox.add(Rect(3, 85, 20, 154)) + hitbox.add(Rect(3, 137, 71, 154)) + hitbox.add(Rect(85, 137, 154, 154)) + hitbox.add(Rect(137, 85, 154, 154)) + hitbox.add(Rect(84, 3, 154, 20)) + hitbox.add(Rect(137, 3, 154, 71)) + hitbox +} + +fn frame() -> HitBox { + let hitbox : HitBox = HitBox::new() + hitbox.add(Rect(3, 71, 20, 85)) + hitbox.add(Rect(70, 3, 84, 20)) + hitbox.add(Rect(137, 71, 154, 85)) + hitbox.add(Rect(72, 138, 86, 155)) + hitbox +} + +fn shape_in_box(self : HitBox, shape : Shape) -> Bool { + for current_shape in self.shapes { + if intersect(current_shape, shape) { + return true + } + } + false +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/id_pool.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/id_pool.mbt" new file mode 100644 index 0000000..c413b93 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/id_pool.mbt" @@ -0,0 +1,14 @@ +struct ID_Pool { + mut count : UInt +} + +fn ID_Pool::new() -> ID_Pool { + { count: 0 } +} + +fn get_id(self : ID_Pool) -> UInt { + self.count += 1 + self.count +} + +let id_pool : ID_Pool = ID_Pool::new() diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/info.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/info.mbt" new file mode 100644 index 0000000..084077f --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/info.mbt" @@ -0,0 +1,10 @@ +fn render_info(self : Player) -> Unit { + set_main_color_with_transparent(LightBrown) + @wasm4.text(if self.weapon_type == true { "1" } else { "2" }, 135, 7) + @wasm4.text( + "\{self.level}/\{self.sword.level}/\{self.slingshot.level}", + 16, + 146, + ) + @wasm4.text("\{self.hp}/\{self.hp_max}", 97, 146) +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" new file mode 100644 index 0000000..5b2168b --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" @@ -0,0 +1,21 @@ +fn inputer(player : Player) -> Unit { + let gamepad = @wasm4.get_gamepad() + let mouse = @wasm4.get_mouse() + if gamepad.button_up { + player.move(Up) + } + if gamepad.button_down { + player.move(Down) + } + if gamepad.button_left { + player.move(Left) + } + if gamepad.button_right { + player.move(Right) + } + if mouse.left && player.weapon.get_cd().check() { + player.weapon.attack(player.pos, game.current_room, mouse.x, mouse.y) + } else if mouse.right && player.switch_cd.check() { + player.switch_weapon() + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" new file mode 100644 index 0000000..38361ea --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" @@ -0,0 +1,20 @@ +let game : Game = Game::new() + +pub fn start() -> Unit { + init_color() +} + +pub fn update() -> Unit { + render(game.current_room, game.player) + if game.stop { + render_end_ui() + } else { + update_level(game.player) + update_room(game.current_room) + update_player(game.player) + update_weapon(game.player) + update_enemy(game.current_room) + update_arrow(game.current_room) + inputer(game.player) + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/moon.pkg.json" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/moon.pkg.json" new file mode 100644 index 0000000..d02c494 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/moon.pkg.json" @@ -0,0 +1,20 @@ +{ + "import": ["moonbitlang/wasm4"], + "link": { + "wasm-gc": { + "exports": ["start", "update"], + "import-memory": { + "module": "env", + "name": "memory" + } + }, + "wasm": { + "exports": ["start", "update"], + "import-memory": { + "module": "env", + "name": "memory" + }, + "heap-start-address": 6560 + } + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" new file mode 100644 index 0000000..467a263 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" @@ -0,0 +1,20 @@ +enum Obstacle { + Jar(Int, Int) + Tombstone(Int, Int) +} + +fn get_obstacle_hitbox(self : Obstacle) -> Shape { + match self { + Jar(x, y) => + Rect(x.to_double(), y.to_double(), x.to_double() + 12, y.to_double() + 12) + Tombstone(x, y) => + Rect(x.to_double(), y.to_double(), x.to_double() + 7, y.to_double() + 13) + } +} + +fn render_obstacle(self : Obstacle) -> Unit { + match self { + Jar(x, y) => jar_texture.render_texture(x, y) + Tombstone(x, y) => tombstone_texture.render_texture(x, y) + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" new file mode 100644 index 0000000..4b1b8bf --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" @@ -0,0 +1,75 @@ +struct Player { + mut level : Int + mut pos : Position + mut hp : Int + mut hp_max : Int + mut sword : Sword + mut slingshot : Slingshot + mut weapon : Weapon + mut weapon_type : Bool + switch_cd : CD +} + +fn Player::new(pos : Position) -> Player { + { + level: 1, + pos, + hp: 100, + hp_max: 100, + sword: Sword::new(1), + slingshot: Slingshot::new(1), + weapon: Sword(Sword::new(1)), + weapon_type: true, + switch_cd: CD::new(100, 10), + } +} + +// -------------- MOVE -------------- + +let speed = 1 + +fn apply(self : Player, pos : Position) -> Unit { + let hitbox = pos.get_hitbox_player() + if game.current_room.move_hitbox().shape_in_box(hitbox).not() { + self.pos = pos + } +} + +fn get_hitbox_player(self : Position) -> Shape { + Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) +} + +fn move(self : Player, direction : Direction) -> Unit { + match direction { + Up => self.apply({ x: self.pos.x, y: self.pos.y - speed.to_double() }) + Down => self.apply({ x: self.pos.x, y: self.pos.y + speed.to_double() }) + Left => self.apply({ x: self.pos.x - speed.to_double(), y: self.pos.y }) + Right => self.apply({ x: self.pos.x + speed.to_double(), y: self.pos.y }) + } +} + +fn damage(self : Player, hp : Int) -> Unit { + self.hp -= hp +} + +// -------------- RENDER -------------- + +fn render_player(player : Player) -> Unit { + player_texture.render_texture( + (player.pos.x - 5).to_int(), + (player.pos.y - 5).to_int(), + ) +} + +// -------------- UPDATE -------------- + +fn update_player(self : Player) -> Unit { + if self.hp < 0 { + game.stop = true + } +} + +fn level_up(self : Player) -> Unit { + self.level += 1 + self.hp_max = 100 + self.level * 50 +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" new file mode 100644 index 0000000..31cd769 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" @@ -0,0 +1,19 @@ +struct Position { + x : Double + y : Double +} + +fn to_wasm4_pos(self : Position) -> (Int, Int) { + (self.x.to_int(), self.y.to_int()) +} + +fn distance(self : Position, other : Position) -> Double { + ((self.x - other.x) * (self.x - other.x) + + (self.y - other.y) * (self.y - other.y)).sqrt() +} + +fn find_way(self : Position, to : Position, speed : Double) -> Position { + let x_diff = speed * (to.x - self.x).compare(0).to_double() + let y_diff = speed * (to.y - self.y).compare(0).to_double() + { x: self.x + x_diff, y: self.y + y_diff } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" new file mode 100644 index 0000000..a796049 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" @@ -0,0 +1,780 @@ +fn render(room : Room, player : Player) -> Unit { + render_background_normal() + if room.upgrade { + set_main_color_with_transparent(LightBrown) + render_upgrade_room() + } + if room.start { + set_main_color_with_transparent(LightBrown) + render_start_room() + } + render_weapon_column() + render_player(player) + render_hp_bar(player) + render_cd_bar(player) + render_info(player) + for obstacle in room.obstacles { + obstacle.render_obstacle() + } + for _, enemy in room.enemys { + render_enermy(enemy) + } + for _, arrow in room.arrows { + render_arrow(arrow) + } +} + +fn render_upgrade_room() -> Unit { + @wasm4.text("Upgrade Room", 35, 50) + @wasm4.text("Player", 60, 25) + @wasm4.text("HP MAX", 60, 126) + @wasm4.text("Sword", 15, 75) + @wasm4.text("Slingshot", 85, 75) +} + +fn render_start_room() -> Unit { + @wasm4.text("SOUL", 62, 40) + @wasm4.text("OF", 70, 50) + @wasm4.text("THE", 65, 60) + @wasm4.text("DESERT", 55, 70) + @wasm4.text("MOUSE 1 ATTACK", 25, 90) + @wasm4.text("MOUSE 2 SWITCH", 25, 105) +} + +fn render_background_normal() -> Unit { + render_background() + set_main_color_with_transparent(Black) + @wasm4.rect(22, 22, 116, 116) // patch backgroud +} + +fn render_background() -> Unit { + set_draw_color(1, LightBrown) + set_draw_color(2, Brown) + set_draw_color(3, Grey) + set_draw_color(4, Black) + @wasm4.blit( + @wasm4.sprite(map_bilt), + 0, + 0, + 160, + 160, + { flip_x: false, flip_y: false, one_bit_per_pixel: false, rotate: false }, + ) +} + +let map_bilt : Bytes = Bytes::from_array( + [ + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\xff', b'\xff', + b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\xff', b'\xff', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\xff', b'\xff', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', + b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', + b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', + b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', + b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', + b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\xff', b'\xff', b'\xff', b'\xc0', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', + b'\x55', b'\x55', b'\x55', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', + b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', + b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', + b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfc', + b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', + b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', + b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', + b'\x55', b'\x55', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', + b'\xf5', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', + b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', + b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfc', b'\xff', + b'\xff', b'\xff', b'\xcf', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x5f', + b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x3f', b'\xc0', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\xff', b'\xff', b'\xff', b'\xc0', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x03', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', + b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xfa', b'\xaa', b'\xaf', b'\xfa', + b'\xfe', b'\xff', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xff', b'\xbf', + b'\xff', b'\xfa', b'\xaa', b'\xaf', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', + b'\xfa', b'\xaa', b'\xaf', b'\xaa', b'\xbe', b'\xff', b'\xbb', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xaa', b'\xfa', b'\xaa', b'\xaf', b'\xff', + b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', + b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xaa', b'\xaf', b'\xaa', b'\xbe', + b'\xff', b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xaa', + b'\xfa', b'\xaa', b'\xaf', b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xca', b'\xab', b'\xba', + b'\xaa', b'\xaf', b'\xaa', b'\xbe', b'\xaa', b'\xbb', b'\xeb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xee', b'\xab', b'\xbf', b'\xab', b'\xfa', b'\xaa', b'\xbe', b'\xea', b'\xa3', + b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', + b'\x3f', b'\xcf', b'\xeb', b'\xbe', b'\xaa', b'\xab', b'\xfe', b'\xfe', b'\xff', + b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xbf', b'\xea', + b'\xaa', b'\xbe', b'\xeb', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xeb', b'\xbe', b'\xaa', + b'\xbf', b'\xfe', b'\xfa', b'\xff', b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', + b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xea', b'\xbe', b'\xeb', b'\xf3', b'\xfc', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', + b'\x4f', b'\xeb', b'\xbf', b'\xeb', b'\xff', b'\xfe', b'\xfa', b'\xaa', b'\xfb', + b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xef', b'\xea', b'\xaf', b'\xbf', b'\xff', b'\xfb', + b'\xfe', b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', + b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xeb', b'\xbf', b'\xea', b'\xaa', + b'\xaa', b'\xff', b'\xea', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', + b'\xff', b'\xaa', b'\xaa', b'\xab', b'\xfe', b'\xeb', b'\xf1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', + b'\xef', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xbe', b'\xeb', b'\xeb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xeb', b'\xeb', b'\xfe', b'\xaa', b'\xfe', b'\xbf', b'\xaf', b'\xfe', + b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', + b'\xff', b'\xff', b'\x15', b'\x4f', b'\xef', b'\xbe', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xf1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xef', + b'\xfe', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xfb', + b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', + b'\xff', b'\x15', b'\x4f', b'\xff', b'\xfe', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xbf', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xfa', b'\xbe', + b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbf', b'\xba', b'\xaf', b'\xf1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', + b'\x15', b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xea', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xff', b'\xae', b'\xfe', + b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xea', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x15', + b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xaa', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xbf', + b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xab', b'\xae', b'\xfe', b'\xba', + b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', + b'\xff', b'\xfe', b'\xae', b'\xbf', b'\xba', b'\xea', b'\xa1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', + b'\xab', b'\xae', b'\xfe', b'\xbe', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbe', b'\xbf', b'\xba', + b'\xea', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x4a', b'\xbf', b'\xae', b'\xfe', b'\xbe', b'\xab', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xea', b'\xfe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x15', b'\x4a', b'\xbf', + b'\xbe', b'\xfe', b'\xbe', b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xfe', b'\xbf', b'\xba', b'\xfa', + b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', + b'\xff', b'\x15', b'\x4a', b'\xff', b'\xbe', b'\xfe', b'\xbe', b'\xfa', b'\xbf', + b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xae', + b'\xfe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xfe', + b'\xfe', b'\xbe', b'\xfa', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xfa', b'\xbe', b'\xfe', b'\xbe', b'\xbf', b'\xff', b'\xa1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', + b'\x3f', b'\xcf', b'\xea', b'\xfe', b'\xbe', b'\xbe', b'\xfb', b'\xab', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', b'\xbe', b'\xfe', + b'\xbe', b'\xbf', b'\xab', b'\xa3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xfa', b'\xfe', b'\xfe', + b'\xbe', b'\xfb', b'\xea', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xaf', b'\xff', b'\xff', b'\xff', + b'\xfe', b'\xaf', b'\xbe', b'\xfe', b'\xbe', b'\xbf', b'\xaf', b'\xf3', b'\xfc', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', + b'\xcf', b'\xfe', b'\xee', b'\xbe', b'\xbe', b'\xfb', b'\xee', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaf', b'\xbe', b'\xfe', b'\xbe', + b'\xff', b'\xbf', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', + b'\xff', b'\xff', b'\xff', b'\x3f', b'\xce', b'\xae', b'\xab', b'\xbe', b'\xbe', + b'\xfb', b'\xef', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xef', b'\xbe', b'\xfe', b'\xbe', b'\xea', b'\xba', b'\xb3', b'\xfc', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', + b'\xaf', b'\xab', b'\xbe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xbe', b'\xfa', + b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', + b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xbe', b'\xbe', b'\xfb', + b'\xef', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', + b'\xbe', b'\xfe', b'\xbe', b'\xaf', b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', + b'\xab', b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xea', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xab', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xbf', b'\xfa', b'\xaa', + b'\xb3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', + b'\xff', b'\x15', b'\x4e', b'\xbf', b'\xff', b'\xfe', b'\xbe', b'\xfb', b'\xef', + b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xef', b'\xfe', b'\xff', b'\xff', b'\xef', b'\xfb', b'\xeb', b'\xef', b'\xbe', + b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4e', b'\xaa', b'\xaa', + b'\xae', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', + b'\xff', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xfe', b'\xbf', b'\xff', b'\xef', + b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xba', b'\xaa', b'\xaa', b'\xb1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', + b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', + b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xef', b'\xfe', b'\xef', b'\xef', + b'\xfa', b'\xbf', b'\xfa', b'\xaf', b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xfe', + b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', + b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', + b'\xef', b'\xaa', b'\xaa', b'\xaf', b'\xff', b'\xbf', b'\xea', b'\xaf', b'\xfb', + b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', + b'\x4a', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xea', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xea', b'\xab', + b'\xaf', b'\xff', b'\xaf', b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xaa', + b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', + b'\xff', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', b'\xaa', b'\xaa', b'\xbe', + b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xaf', b'\xff', b'\xeb', + b'\xfe', b'\xff', b'\xef', b'\xfa', b'\xaa', b'\xaa', b'\xaf', b'\xfb', b'\xeb', + b'\xef', b'\xbe', b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x15', b'\x4f', + b'\xff', b'\xff', b'\xff', b'\xae', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', + b'\xff', b'\xaf', b'\xff', b'\xfa', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xbf', + b'\xaf', b'\xea', b'\xeb', b'\xeb', b'\xef', b'\xbe', b'\xfa', b'\xff', b'\xff', + b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xfb', + b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xfa', b'\xfe', + b'\xff', b'\xef', b'\xff', b'\xbf', b'\xff', b'\xee', b'\xab', b'\xeb', b'\xef', + b'\xbe', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', + b'\xff', b'\xff', b'\xea', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', + b'\xef', b'\xaa', b'\xbb', b'\xea', b'\xbf', b'\xea', b'\xff', b'\xbf', b'\xff', + b'\xef', b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xaf', b'\xff', b'\xff', b'\xff', + b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbb', b'\xef', + b'\xeb', b'\xef', b'\xfe', b'\xfa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaf', b'\xef', b'\xfb', b'\xeb', b'\xef', b'\xbe', + b'\xbf', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', + b'\xff', b'\xfe', b'\xab', b'\xef', b'\xeb', b'\xee', b'\xaa', b'\xfb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xaf', + b'\xfb', b'\xeb', b'\xef', b'\xba', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xab', b'\xef', b'\xeb', + b'\xee', b'\xaa', b'\xbb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xae', b'\xaf', b'\xfb', b'\xeb', b'\xef', b'\xab', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xea', b'\xef', b'\xeb', b'\xef', b'\xaa', b'\xab', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xef', b'\xfb', + b'\xeb', b'\xef', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', + b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xaf', b'\xeb', b'\xef', + b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xaa', b'\xaa', b'\xfb', b'\xeb', b'\xea', b'\xbf', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xaf', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xee', b'\xab', b'\xeb', + b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xeb', b'\xef', b'\xee', + b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xbf', b'\xef', b'\xfb', b'\xeb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xfa', b'\xeb', b'\xef', b'\xea', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xef', b'\xfb', b'\xeb', b'\xaf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xab', b'\xef', b'\xef', b'\xfb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xba', + b'\xaf', b'\xfb', b'\xea', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xab', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xbe', b'\xaf', b'\xfb', b'\xea', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xef', + b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', + b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xea', b'\xab', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xaf', b'\xef', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x50', b'\x00', b'\x00', b'\x00', b'\x0f', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xaa', b'\xab', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xaa', b'\xab', + b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf0', b'\x00', + b'\x00', b'\x00', b'\x05', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xeb', + b'\xfa', b'\xbb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xbf', b'\xeb', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xeb', b'\xfb', b'\xeb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', + b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xbf', b'\xeb', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xfb', b'\xfb', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', + b'\xfb', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbb', + b'\xeb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xea', b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xbf', b'\xba', b'\xab', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xba', b'\xab', + b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', + b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xef', b'\xea', b'\xfb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xbf', b'\xfb', b'\xeb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xea', + b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xaa', b'\xbf', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xeb', b'\xef', b'\xeb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xba', b'\xaa', b'\xab', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\x50', b'\x00', b'\x00', b'\x00', b'\x0f', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xef', b'\xfb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', + b'\xbf', b'\xeb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xf0', b'\x00', b'\x00', b'\x00', b'\x05', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xeb', b'\xee', b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xeb', b'\xeb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xeb', b'\xfb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', + b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', + b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xef', b'\xeb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xab', b'\xef', b'\xeb', b'\xfb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xfb', + b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', + b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xab', b'\xef', + b'\xeb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xea', b'\xbf', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xfa', b'\xeb', b'\xea', b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xeb', b'\xeb', + b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xeb', b'\xef', b'\xfb', + b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xaf', b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xba', b'\xfb', b'\xeb', b'\xba', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xfe', b'\xaf', b'\xeb', b'\xef', b'\xfb', b'\xfb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbe', + b'\xbb', b'\xfb', b'\xeb', b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', b'\xef', + b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xab', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xab', b'\xef', b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbe', b'\xff', + b'\xfb', b'\xeb', b'\xbe', b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xab', b'\xef', b'\xeb', + b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfa', b'\xbf', + b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', + b'\xfa', b'\xbb', b'\xef', b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbe', b'\xff', b'\xfb', + b'\xeb', b'\xbe', b'\xfa', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', + b'\x4f', b'\xff', b'\xff', b'\xff', b'\xea', b'\xfb', b'\xef', b'\xeb', b'\xef', + b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xab', b'\xff', + b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xea', + b'\xfb', b'\xef', b'\xeb', b'\xea', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xff', b'\xfb', b'\xeb', + b'\xbe', b'\xfb', b'\xaa', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', + b'\xff', b'\xff', b'\xff', b'\xae', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfb', + b'\xfe', b'\xff', b'\xff', b'\xfe', b'\xff', b'\xff', b'\xaf', b'\xfb', b'\xef', + b'\xfe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xba', b'\xff', b'\xff', + b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', + b'\xef', b'\xeb', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xff', + b'\xff', b'\xbf', b'\xfb', b'\xeb', b'\xfa', b'\xff', b'\xfb', b'\xeb', b'\xbe', + b'\xfb', b'\xbe', b'\xaa', b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', + b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xbb', b'\xff', + b'\xff', b'\xaa', b'\xaa', b'\xaa', b'\xbf', b'\xbf', b'\xfa', b'\xfb', b'\xaa', + b'\xbf', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xaa', b'\xaa', b'\xaa', + b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', b'\xbe', b'\xfb', b'\xef', + b'\xeb', b'\xee', b'\xaa', b'\xaa', b'\xaa', b'\xaf', b'\xfe', b'\xff', b'\xea', + b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xab', b'\xfb', b'\xeb', b'\xbe', b'\xfb', + b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', + b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xeb', b'\xff', b'\xff', + b'\xef', b'\xfe', b'\xff', b'\xff', b'\xbf', b'\xff', b'\xfb', b'\xff', b'\xfa', + b'\xab', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xf1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x15', b'\x4e', b'\xaa', b'\xaa', b'\xae', b'\xbe', b'\xfb', b'\xef', b'\xeb', + b'\xef', b'\xfb', b'\xff', b'\xff', b'\xef', b'\xfe', b'\xbf', b'\xff', b'\xef', + b'\xff', b'\xab', b'\xff', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xbe', + b'\xba', b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', + b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfa', b'\xff', b'\xff', b'\xeb', + b'\xff', b'\xbf', b'\xff', b'\xef', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xfb', + b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', + b'\xca', b'\xaa', b'\xab', b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xea', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbf', + b'\xea', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xbe', b'\xbe', + b'\xfb', b'\xef', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xbe', b'\xfb', b'\xbe', b'\xbf', b'\xaf', b'\xfa', b'\xf3', b'\xfc', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', + b'\xaf', b'\xab', b'\xbe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbe', b'\xfa', + b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x3f', b'\xce', b'\xae', b'\xab', b'\xbe', b'\xbe', b'\xfb', + b'\xef', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', + b'\xfb', b'\xbe', b'\xbe', b'\xea', b'\xba', b'\xb3', b'\xfc', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xfe', + b'\xee', b'\xbe', b'\xbe', b'\xfb', b'\xee', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xbe', b'\xbe', b'\xff', b'\xbf', + b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x3f', b'\xcf', b'\xfa', b'\xfe', b'\xfe', b'\xbe', b'\xfb', b'\xea', + b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xfe', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xae', b'\xfb', + b'\xbe', b'\xbf', b'\xbf', b'\xaf', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xea', b'\xfe', + b'\xfe', b'\xbe', b'\xfa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xea', b'\xfb', b'\xbe', b'\xbf', b'\xbf', b'\xaa', b'\xf3', + b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x15', b'\x4f', b'\xff', b'\xfe', b'\xfe', b'\xbe', b'\xfa', b'\xaf', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbb', b'\xbe', + b'\xbf', b'\xbf', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xab', b'\xae', b'\xfe', + b'\xbe', b'\xfa', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', + b'\xff', b'\xfe', b'\xab', b'\xbe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', + b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xbe', b'\xea', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xab', b'\xbe', b'\xbf', + b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xbe', + b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xea', b'\xbe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', + b'\xab', b'\xae', b'\xfe', b'\xbe', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbe', b'\xbf', b'\xba', + b'\xea', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x4a', b'\xab', b'\xae', b'\xfe', b'\xba', b'\xbf', + b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', + b'\xfe', b'\xae', b'\xbf', b'\xba', b'\xea', b'\xa1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaf', + b'\xae', b'\xfe', b'\xaa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xbf', b'\xba', b'\xfa', + b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x15', b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xab', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xea', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaf', b'\xae', + b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbf', b'\xba', b'\xfa', b'\xa1', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x15', b'\x4f', b'\xfa', b'\xae', b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xea', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', + b'\xbf', b'\xba', b'\xaf', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xee', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xff', b'\xf1', b'\x54', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', + b'\x4f', b'\xef', b'\xfe', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xbf', b'\xfb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xef', b'\xbe', b'\xaa', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xaa', + b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xf1', b'\x54', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', + b'\xeb', b'\xbf', b'\xba', b'\xfe', b'\xbf', b'\xaa', b'\xab', b'\xeb', b'\xeb', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xeb', b'\xeb', b'\xfe', b'\xab', b'\xfe', b'\xbf', b'\xab', b'\xfe', + b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x4f', b'\xeb', b'\xbf', b'\xaa', b'\xaa', b'\xaa', + b'\xff', b'\xea', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xeb', b'\xff', + b'\xaa', b'\xaa', b'\xab', b'\xfe', b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xeb', + b'\xbf', b'\xeb', b'\xff', b'\xfe', b'\xfa', b'\xaa', b'\xfb', b'\xab', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xeb', b'\xef', b'\xaa', b'\xaf', b'\xbf', b'\xff', b'\xeb', b'\xfe', b'\xeb', + b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x3f', b'\xcf', b'\xeb', b'\xbe', b'\xab', b'\xff', b'\xfe', b'\xfa', + b'\xff', b'\xbb', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xaf', b'\xbf', + b'\xff', b'\xaa', b'\xbe', b'\xeb', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xeb', b'\xbe', + b'\xaa', b'\xab', b'\xfe', b'\xfe', b'\xff', b'\xbb', b'\xab', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', + b'\xee', b'\xff', b'\xbf', b'\xbf', b'\xea', b'\xaa', b'\xbe', b'\xeb', b'\xf3', + b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x3f', b'\xca', b'\xab', b'\xba', b'\xaa', b'\xaf', b'\xaa', b'\xbe', b'\xaa', + b'\xbb', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xab', b'\xbf', b'\xab', b'\xfa', + b'\xaa', b'\xae', b'\xea', b'\xa3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xaa', + b'\xae', b'\xaa', b'\xbe', b'\xff', b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', + b'\xff', b'\xbf', b'\xaa', b'\xfa', b'\xaa', b'\xaf', b'\xfa', b'\xf3', b'\xfc', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', + b'\xcf', b'\xff', b'\xfa', b'\xaa', b'\xae', b'\xaa', b'\xbe', b'\xff', b'\xbb', + b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xaa', b'\xfa', b'\xaa', + b'\xaf', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xfa', b'\xaa', b'\xaf', + b'\xfa', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xff', + b'\xbf', b'\xaf', b'\xfa', b'\xaa', b'\xaf', b'\xff', b'\xf3', b'\xfc', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xc0', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x3f', b'\xff', b'\xff', b'\xf0', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x03', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x57', + b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x7f', b'\xff', b'\x3f', b'\xff', + b'\xff', b'\xf3', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', + b'\xf5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', + b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', + b'\x7f', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xf5', b'\x55', + b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\xff', + b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', + b'\xf5', b'\x55', b'\x55', b'\x55', b'\x7f', b'\xff', b'\x3f', b'\xff', b'\xff', + b'\xf3', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', + b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', + b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x7f', + b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xf5', b'\x55', b'\x55', + b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', + b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x3f', b'\xff', b'\xff', b'\xf0', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', + b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', + b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', + b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', + b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', + b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', + b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', + b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x7f', b'\xff', b'\xff', b'\xf5', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\xff', b'\xff', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x7f', + b'\xff', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', + b'\x55', b'\x55', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', + b'\xff', + ], +) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" new file mode 100644 index 0000000..781ff9c --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" @@ -0,0 +1,140 @@ +struct Room { + mut stop : Bool + enemys : Map[UInt, Enemy] + arrows : Map[UInt, Arrow] + walls : HitBox + arrow_walls : HitBox + mut frame : HitBox + mut obstacles : FixedArray[Obstacle] + upgrade : Bool + start : Bool +} + +fn Room::new(upgrade : Bool, start : Bool) -> Room { + { + stop: false, + walls: init_wall(), + enemys: {}, + arrows: {}, + arrow_walls: init_wall(), + frame: HitBox::new(), + obstacles: [], + upgrade, + start, + } +} + +fn patch_out(direction : Direction) -> Unit { + set_main_color_with_transparent(LightBrown) + match direction { + Up => @wasm4.rect(71, 4, 15, 18) + Down => @wasm4.rect(72, 138, 15, 18) // need to fix + Left => @wasm4.rect(4, 72, 18, 15) + Right => @wasm4.rect(138, 72, 18, 15) + } +} + +fn update_room(self : Room) -> Unit { + if self.stop.not() { + patch_out(Up) + patch_out(Down) + patch_out(Left) + patch_out(Right) + self.frame = frame() + } else { + self.frame = HitBox::new() + } + if self.enemys.is_empty() { + self.stop = true + } +} + +fn move_hitbox(self : Room) -> HitBox { + self.walls.merge(self.frame) +} + +fn arrow_hitbox(self : Room) -> HitBox { + self.walls.merge(self.frame) +} + +fn bind_style(self : Room, style : RoomStyle) -> Unit { + guard let RoomStyle(obstacles) = style + self.obstacles = obstacles + for obstacle in obstacles { + self.walls.add(obstacle.get_obstacle_hitbox()) + } +} + +fn add_enemy(self : Room, enemy : Enemy) -> Unit { + self.enemys.set(enemy.get_id(), enemy) +} + +enum RoomStyle { + RoomStyle(FixedArray[Obstacle]) +} + +let room_styles : FixedArray[RoomStyle] = [ + RoomStyle([Jar(24, 24), Jar(24, 124), Jar(124, 124), Jar(124, 24)]), + RoomStyle( + [Jar(24, 24), Jar(24, 124), Jar(124, 124), Jar(124, 24), Tombstone(72, 72)], + ), + RoomStyle( + [Jar(24, 24), Jar(24, 124), Jar(124, 124), Jar(124, 24), Tombstone(72, 72)], + ), + RoomStyle( + [ + Tombstone(24, 24), + Tombstone(24, 121), + Tombstone(121, 121), + Tombstone(121, 24), + ], + ), + RoomStyle( + [ + Tombstone(24, 24), + Tombstone(24, 121), + Tombstone(121, 121), + Tombstone(121, 24), + Jar(75, 75), + ], + ), + RoomStyle([Jar(75, 75)]), + RoomStyle([Tombstone(72, 72)]), +] + +let room_style_upper_index : Int = room_styles.length() - 1 + +fn generate_room(level : Int) -> Room { + if level == 1 { + Room::new(false, true) + } else if level % 3 == 0 { + Room::new(true, false) + } else { + let room = Room::new(false, false) + room.bind_style(room_styles[random.next(0, room_style_upper_index)]) + let enemy_count = 3 + level / 2 + level / 10 + level / 20 + level / 40 + let enemy_level = 1 + level / 8 + level / 10 + level / 15 + let mummy_count = random.next(0, enemy_count) + let skeleton_count = random.next(0, enemy_count - mummy_count) + let bug_count = enemy_count - mummy_count - skeleton_count + for i = 1; i <= mummy_count; i = i + 1 { + let id = id_pool.get_id() + let pos = random.next_pos() + let mummy = Mummy::new(id, pos, enemy_level) + room.add_enemy(Mummy(mummy)) + } + for i = 1; i <= skeleton_count; i = i + 1 { + let id = id_pool.get_id() + let pos = random.next_pos() + let skeleton = Skeleton::new(id, pos, enemy_level) + room.add_enemy(Skeleton(skeleton)) + } + for i = 1; i <= bug_count; i = i + 1 { + let id = id_pool.get_id() + let pos = random.next_pos() + let bug = Bug::new(id, pos, enemy_level) + room.add_enemy(Bug(bug)) + } + room + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" new file mode 100644 index 0000000..08e2c15 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" @@ -0,0 +1,437 @@ +enum Texture { + Texture( + FixedArray[(Int, Int, Int, Int)], + FixedArray[(Int, Int, Int, Int)], + FixedArray[(Int, Int, Int, Int)], + FixedArray[(Int, Int, Int, Int)] + ) +} + +fn render_rect(rect : (Int, Int, Int, Int), x : Int, y : Int) -> Unit { + let (x1, y1, x2, y2) = rect + @wasm4.rect(x + x1 - 1, y + y1 - 1, x2 - x1 + 1, y2 - y1 + 1) +} + +fn render_texture(self : Texture, x : Int, y : Int) -> Unit { + guard let Texture(black, brown, light_brown, gery) = self + set_main_color_with_transparent(Black) + for rect in black { + render_rect(rect, x, y) + } + set_draw_color(1, Brown) + for rect in brown { + render_rect(rect, x, y) + } + set_draw_color(1, LightBrown) + for rect in light_brown { + render_rect(rect, x, y) + } + set_draw_color(1, Grey) + for rect in gery { + render_rect(rect, x, y) + } +} + +let player_texture : Texture = Texture( + [ + (2, 4, 2, 7), + (3, 4, 4, 4), + (4, 5, 4, 5), + (6, 4, 7, 4), + (7, 5, 7, 5), + (11, 4, 11, 6), + (10, 7, 10, 7), + (2, 9, 2, 10), + (11, 9, 11, 10), + (3, 10, 4, 10), + (6, 10, 7, 10), + (9, 10, 10, 10), + (4, 11, 9, 11), + ], + [(5, 9, 8, 9)], + [ + (2, 1, 4, 1), + (6, 1, 6, 1), + (7, 1, 10, 2), + (1, 2, 3, 2), + (5, 2, 5, 2), + (5, 4, 5, 4), + (8, 4, 8, 5), + (10, 5, 10, 6), + (3, 5, 3, 5), + (5, 5, 6, 5), + (3, 6, 9, 7), + (3, 9, 3, 9), + (5, 10, 5, 10), + (8, 10, 8, 10), + (10, 9, 10, 9), + ], + [ + (5, 1, 5, 1), + (4, 2, 4, 2), + (6, 2, 6, 2), + (1, 3, 10, 3), + (9, 4, 9, 5), + (10, 4, 10, 4), + (3, 8, 10, 8), + (4, 9, 4, 9), + (9, 9, 9, 9), + ], +) + +let jar_texture : Texture = Texture( + [ + (4, 1, 4, 1), + (10, 1, 10, 1), + (5, 2, 5, 3), + (9, 2, 9, 3), + (3, 4, 4, 4), + (10, 4, 11, 4), + (2, 5, 2, 6), + (12, 5, 12, 6), + (1, 7, 1, 8), + (13, 7, 13, 8), + (2, 9, 2, 10), + (12, 9, 12, 10), + (3, 11, 3, 11), + (11, 11, 11, 11), + (4, 12, 4, 12), + (10, 12, 10, 12), + (5, 13, 9, 13), + ], + [ + (6, 2, 8, 2), + (7, 3, 8, 3), + (8, 4, 9, 4), + (9, 5, 11, 5), + (10, 6, 11, 6), + (10, 7, 10, 7), + (9, 8, 10, 8), + (9, 9, 9, 9), + (3, 10, 3, 10), + (8, 10, 8, 10), + (4, 11, 7, 11), + ], + [ + (5, 1, 9, 1), + (6, 3, 6, 3), + (5, 4, 7, 4), + (3, 5, 8, 9), + (2, 7, 2, 8), + (9, 6, 9, 7), + (4, 10, 7, 10), + ], + [ + (5, 12, 9, 12), + (8, 11, 10, 11), + (9, 10, 11, 10), + (10, 9, 11, 9), + (11, 7, 12, 8), + ], +) + +let skeleton_texture : Texture = Texture( + [ + (3, 1, 9, 1), + (2, 2, 2, 3), + (10, 2, 10, 2), + (1, 3, 1, 7), + (3, 4, 4, 5), + (7, 4, 8, 5), + (11, 3, 11, 7), + (5, 6, 6, 6), + (4, 7, 7, 7), + (2, 7, 2, 10), + (3, 8, 10, 8), + (10, 7, 10, 7), + (4, 9, 4, 11), + (9, 9, 9, 10), + (3, 10, 3, 10), + (11, 9, 11, 9), + (10, 10, 11, 10), + (5, 11, 9, 11), + ], + [ + (5, 2, 9, 2), + (3, 3, 4, 3), + (10, 5, 10, 5), + (9, 4, 9, 4), + (8, 3, 8, 3), + (3, 9, 3, 9), + (10, 9, 10, 9), + ], + [ + (3, 2, 4, 2), + (5, 3, 6, 5), + (7, 3, 8, 3), + (9, 3, 10, 4), + (2, 4, 2, 5), + (9, 5, 9, 5), + (2, 6, 4, 6), + (7, 6, 8, 6), + (10, 6, 10, 6), + (3, 7, 3, 7), + (9, 7, 9, 7), + (6, 9, 8, 9), + (8, 10, 8, 10), + ], + [], +) + +let tombstone_texture : Texture = Texture( + [ + (2, 1, 8, 1), + (2, 2, 2, 4), + (8, 2, 8, 4), + (1, 3, 1, 9), + (9, 3, 9, 9), + (2, 10, 2, 11), + (8, 10, 8, 11), + (3, 12, 3, 13), + (7, 12, 7, 13), + (8, 14, 8, 15), + (2, 14, 2, 15), + ], + [ + (3, 2, 7, 2), + (3, 3, 3, 3), + (7, 3, 7, 3), + (4, 4, 4, 5), + (6, 4, 6, 5), + (3, 7, 3, 8), + (7, 7, 7, 8), + (4, 9, 6, 9), + (5, 10, 5, 10), + (5, 13, 5, 13), + ], + [ + (4, 3, 6, 3), + (5, 4, 5, 5), + (2, 5, 2, 9), + (8, 5, 8, 9), + (4, 7, 4, 8), + (6, 7, 6, 8), + (3, 9, 3, 11), + (7, 9, 7, 11), + (5, 8, 5, 8), + (5, 11, 5, 12), + (3, 15, 7, 15), + ], + [ + (3, 4, 3, 5), + (7, 4, 7, 5), + (3, 6, 7, 6), + (5, 7, 5, 7), + (4, 10, 4, 13), + (6, 10, 6, 13), + (3, 12, 7, 12), + ], +) + +let slingshot_texture : Texture = Texture( + [ + (8, 1, 9, 1), + (7, 2, 8, 2), + (7, 3, 7, 3), + (6, 3, 6, 4), + (5, 5, 5, 5), + (4, 6, 4, 9), + (4, 10, 8, 10), + (3, 11, 3, 11), + (1, 12, 2, 12), + (9, 9, 9, 9), + (9, 7, 9, 7), + (10, 8, 10, 8), + (10, 6, 10, 6), + (11, 5, 11, 7), + ], + [(9, 2, 9, 6), (10, 7, 10, 7), (11, 8, 11, 8)], + [], + [ + (7, 1, 7, 1), + (6, 2, 6, 2), + (5, 3, 5, 3), + (4, 4, 5, 4), + (4, 5, 4, 5), + (3, 5, 3, 10), + (2, 10, 2, 10), + (1, 11, 2, 11), + (5, 8, 5, 8), + (5, 9, 8, 9), + (8, 8, 9, 8), + ], +) + +let bug_texture : Texture = Texture( + [ + (7, 1, 10, 1), + (4, 2, 6, 2), + (11, 2, 11, 2), + (3, 3, 3, 3), + (2, 4, 5, 4), + (9, 4, 9, 8), + (1, 5, 1, 5), + (2, 6, 2, 6), + (4, 6, 4, 6), + (6, 5, 6, 5), + (7, 5, 7, 8), + (10, 6, 11, 6), + (1, 7, 1, 9), + (3, 8, 4, 9), + (6, 7, 6, 9), + (11, 8, 11, 8), + (8, 9, 8, 9), + (2, 10, 2, 10), + (5, 10, 5, 10), + ], + [ + (9, 3, 10, 3), + (6, 4, 7, 4), + (10, 4, 10, 5), + (11, 5, 11, 5), + (8, 5, 8, 6), + (5, 6, 5, 8), + (6, 6, 6, 6), + (4, 7, 4, 7), + (2, 8, 2, 8), + ], + [ + (7, 2, 10, 2), + (4, 3, 8, 3), + (11, 3, 11, 4), + (8, 4, 8, 4), + (2, 5, 5, 5), + (1, 6, 1, 6), + (3, 6, 3, 7), + (2, 7, 2, 7), + (11, 7, 11, 7), + (8, 8, 8, 8), + (2, 9, 2, 9), + (5, 9, 5, 9), + ], + [], +) + +let sword_texture : Texture = Texture( + [ + (11, 1, 13, 1), + (13, 2, 13, 3), + (4, 5, 5, 5), + (5, 6, 5, 6), + (2, 9, 2, 10), + (3, 9, 3, 9), + (8, 9, 8, 10), + (9, 10, 9, 10), + (1, 11, 1, 13), + (5, 11, 5, 11), + (4, 12, 5, 12), + (7, 12, 7, 12), + (2, 13, 3, 13), + ], + [ + (2, 11, 3, 12), + (4, 10, 4, 10), + (5, 9, 5, 9), + (6, 8, 6, 8), + (7, 7, 7, 7), + (8, 6, 8, 6), + (9, 5, 9, 5), + (10, 4, 10, 4), + (11, 3, 11, 3), + (4, 7, 4, 8), + (6, 10, 7, 10), + (8, 11, 8, 11), + (3, 6, 3, 6), + ], + [ + (6, 7, 6, 7), + (7, 6, 7, 6), + (8, 5, 8, 5), + (9, 4, 9, 4), + (10, 3, 10, 3), + (7, 8, 7, 8), + (8, 7, 8, 7), + (9, 6, 9, 6), + (10, 5, 10, 5), + (11, 4, 11, 4), + ], + [ + (2, 5, 2, 6), + (3, 5, 3, 5), + (4, 6, 4, 6), + (3, 7, 3, 8), + (5, 7, 5, 8), + (3, 10, 3, 10), + (4, 11, 4, 11), + (5, 10, 5, 10), + (4, 9, 4, 9), + (6, 9, 7, 9), + (6, 11, 7, 11), + (8, 12, 8, 12), + (9, 11, 9, 12), + (6, 6, 6, 6), + (7, 5, 7, 5), + (8, 4, 8, 4), + (9, 3, 9, 3), + (10, 2, 11, 2), + (12, 2, 12, 4), + (8, 8, 8, 8), + (9, 7, 9, 7), + (10, 6, 10, 6), + (11, 5, 11, 5), + ], +) + +let mummy_texture : Texture = Texture( + [ + (2, 2, 2, 6), + (3, 1, 3, 1), + (9, 1, 9, 1), + (10, 2, 10, 6), + (4, 4, 4, 4), + (7, 4, 7, 4), + (3, 6, 3, 7), + (4, 7, 4, 7), + (5, 5, 6, 7), + (7, 7, 9, 7), + (9, 6, 9, 6), + (1, 8, 2, 8), + (4, 8, 4, 9), + (8, 8, 8, 9), + (10, 8, 11, 8), + (1, 9, 1, 10), + (2, 10, 2, 10), + (3, 9, 3, 10), + (5, 10, 6, 10), + (11, 9, 11, 9), + (9, 9, 9, 10), + (10, 10, 11, 10), + (3, 11, 9, 11), + ], + [ + (4, 1, 8, 1), + (4, 3, 4, 3), + (7, 3, 7, 3), + (3, 5, 4, 5), + (8, 5, 8, 6), + (9, 5, 9, 5), + (4, 6, 4, 6), + (6, 9, 7, 9), + (4, 10, 4, 10), + (7, 10, 8, 10), + ], + [ + (3, 2, 9, 2), + (3, 3, 3, 4), + (5, 3, 6, 4), + (8, 3, 9, 4), + (7, 5, 7, 6), + (3, 8, 3, 8), + (2, 9, 2, 9), + (5, 8, 5, 9), + (6, 8, 7, 8), + (9, 8, 9, 8), + (10, 9, 10, 9), + ], + [], +) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" new file mode 100644 index 0000000..eb890e2 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" @@ -0,0 +1,153 @@ +enum Weapon { + Sword(Sword) + Slingshot(Slingshot) +} + +fn switch_weapon(self : Player) -> Unit { + if self.weapon_type == true { + self.weapon = Slingshot(self.slingshot) + self.weapon_type = false + } else { + self.weapon = Sword(self.sword) + self.weapon_type = true + } + self.switch_cd.refersh() +} + +fn attack( + self : Weapon, + pos : Position, + room : Room, + mouse_x : Int, + mouse_y : Int +) -> Unit { + match self { + Sword(sword) => sword.sword_attack(pos, room, mouse_x, mouse_y) + Slingshot(slingshot) => + slingshot.slingshot_attack(pos, room, mouse_x, mouse_y) + } +} + +fn get_cd(self : Weapon) -> CD { + match self { + Sword(sword) => sword.cd + Slingshot(slingshot) => slingshot.cd + } +} + +fn update_weapon(self : Player) -> Unit { + self.switch_cd.decrease() + match self.weapon { + Sword(sword) => sword.cd.decrease() + Slingshot(slingshot) => slingshot.cd.decrease() + } +} + +struct Sword { + level : Int + damage : Int + range : Int + cd : CD +} + +fn Sword::new(level : Int) -> Sword { + { + level, + damage: 10 + level * 10, + range: 5 + level / 4, + cd: CD::new(100, 10 + level / 5), + } +} + +fn sword_determine_direction( + mouse_x : Int, + mouse_y : Int, + pos : Position +) -> Direction { + let dx = mouse_x.to_double() - pos.x + let dy = mouse_y.to_double() - pos.y + if dy < 0 && dx.abs() < dy.abs() { + Up + } else if dy > 0 && dx.abs() < dy.abs() { + Down + } else if dx < 0 && dy.abs() < dx.abs() { + Left + } else { + Right + } +} + +fn sword_generate_attack_hitbox( + self : Direction, + sword : Sword, + pos : Position +) -> Shape { + let range = sword.range.to_double() + match self { + Left => Rect(pos.x - 5 - range, pos.y - 5, pos.x - 5, pos.y) + Right => Rect(pos.x, pos.y - 5, pos.x + 5 + range, pos.y + 5) + Up => Rect(pos.x - 5, pos.y - 5 - range, pos.x + 5, pos.y) + Down => Rect(pos.x - 5, pos.y, pos.x + 5, pos.y + 5 + range) + } +} + +fn sword_attack( + self : Sword, + pos : Position, + room : Room, + mouse_x : Int, + mouse_y : Int +) -> Unit { + for _, enemy in room.enemys { + let { damage, .. } = self + let hitbox = sword_determine_direction(mouse_x, mouse_y, pos).sword_generate_attack_hitbox( + self, pos, + ) + if hitbox.intersect(enemy.get_hitbox()) { + enemy.damage(damage) + } + } + self.cd.refersh() +} + +struct Slingshot { + level : Int + damage : Int + speed : Double + cd : CD +} + +fn Slingshot::new(level : Int) -> Slingshot { + { + level, + damage: 8 + level * 2, + speed: 0.5 + 0.2 * level.to_double(), + cd: CD::new(100, 2 + level / 3 * 2), + } +} + +fn slingshot_attack( + self : Slingshot, + pos : Position, + room : Room, + mouse_x : Int, + mouse_y : Int +) -> Unit { + let (id, arrow) = generate_arrow( + pos, + { x: mouse_x.to_double(), y: mouse_y.to_double() }, + self.speed, + self.damage, + false, + ) + room.arrows.set(id, arrow) + self.cd.refersh() +} + +fn refersh_weapon(self : Player) -> Unit { + self.weapon = if self.weapon_type { + Sword(self.sword) + } else { + Slingshot(self.slingshot) + } +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" new file mode 100644 index 0000000..81ba666 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" @@ -0,0 +1,20 @@ +struct RandomGenerator { + mut seed : Int +} + +fn RandomGenerator::new(seed : Int) -> RandomGenerator { + { seed, } +} + +fn next(self : RandomGenerator, range_l : Int, range_r : Int) -> Int { + self.seed = self.seed ^ (self.seed << 13) + self.seed = self.seed ^ (self.seed >> 17) + self.seed = self.seed ^ (self.seed << 5) + range_l + self.seed.abs() % (range_r - range_l + 1) +} + +fn next_pos(self : RandomGenerator) -> Position { + { x: self.next(40, 100).to_double(), y: self.next(40, 100).to_double() } +} + +let random : RandomGenerator = RandomGenerator::new(114514) From 12db041973308b070da6565d194fa93eee35cc7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Wed, 20 Nov 2024 21:37:01 +0800 Subject: [PATCH 2/8] perf: add map rect render --- .../code/.gitignore" | 2 + .../code/src/render.mbt" | 726 +----------------- .../code/src/texture.mbt" | 48 ++ 3 files changed, 51 insertions(+), 725 deletions(-) create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/.gitignore" diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/.gitignore" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/.gitignore" new file mode 100644 index 0000000..17ed8e7 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/.gitignore" @@ -0,0 +1,2 @@ +target +.mooncakes diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" index a796049..63b91c6 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" @@ -52,729 +52,5 @@ fn render_background() -> Unit { set_draw_color(2, Brown) set_draw_color(3, Grey) set_draw_color(4, Black) - @wasm4.blit( - @wasm4.sprite(map_bilt), - 0, - 0, - 160, - 160, - { flip_x: false, flip_y: false, one_bit_per_pixel: false, rotate: false }, - ) + map_texture.render_texture(0,0) } - -let map_bilt : Bytes = Bytes::from_array( - [ - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\xff', b'\xff', - b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\xff', b'\xff', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\xff', b'\xff', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', - b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', - b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', - b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', - b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', - b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\xff', b'\xff', b'\xff', b'\xc0', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', - b'\x55', b'\x55', b'\x55', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', - b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', - b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', - b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfc', - b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', - b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', - b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', - b'\x55', b'\x55', b'\xff', b'\xfc', b'\xff', b'\xff', b'\xff', b'\xcf', b'\xff', - b'\xf5', b'\x55', b'\x55', b'\x55', b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', - b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', - b'\x5f', b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfc', b'\xff', - b'\xff', b'\xff', b'\xcf', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x5f', - b'\xff', b'\xd5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x3f', b'\xc0', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\xff', b'\xff', b'\xff', b'\xc0', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x03', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', - b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xfa', b'\xaa', b'\xaf', b'\xfa', - b'\xfe', b'\xff', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xff', b'\xbf', - b'\xff', b'\xfa', b'\xaa', b'\xaf', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', - b'\xfa', b'\xaa', b'\xaf', b'\xaa', b'\xbe', b'\xff', b'\xbb', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xaa', b'\xfa', b'\xaa', b'\xaf', b'\xff', - b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', - b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xaa', b'\xaf', b'\xaa', b'\xbe', - b'\xff', b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xaa', - b'\xfa', b'\xaa', b'\xaf', b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xca', b'\xab', b'\xba', - b'\xaa', b'\xaf', b'\xaa', b'\xbe', b'\xaa', b'\xbb', b'\xeb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xee', b'\xab', b'\xbf', b'\xab', b'\xfa', b'\xaa', b'\xbe', b'\xea', b'\xa3', - b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', - b'\x3f', b'\xcf', b'\xeb', b'\xbe', b'\xaa', b'\xab', b'\xfe', b'\xfe', b'\xff', - b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xbf', b'\xea', - b'\xaa', b'\xbe', b'\xeb', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xeb', b'\xbe', b'\xaa', - b'\xbf', b'\xfe', b'\xfa', b'\xff', b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', - b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xea', b'\xbe', b'\xeb', b'\xf3', b'\xfc', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', - b'\x4f', b'\xeb', b'\xbf', b'\xeb', b'\xff', b'\xfe', b'\xfa', b'\xaa', b'\xfb', - b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xef', b'\xea', b'\xaf', b'\xbf', b'\xff', b'\xfb', - b'\xfe', b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', - b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xeb', b'\xbf', b'\xea', b'\xaa', - b'\xaa', b'\xff', b'\xea', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', - b'\xff', b'\xaa', b'\xaa', b'\xab', b'\xfe', b'\xeb', b'\xf1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', - b'\xef', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xbe', b'\xeb', b'\xeb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xeb', b'\xeb', b'\xfe', b'\xaa', b'\xfe', b'\xbf', b'\xaf', b'\xfe', - b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', - b'\xff', b'\xff', b'\x15', b'\x4f', b'\xef', b'\xbe', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xf1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xef', - b'\xfe', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xfb', - b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', - b'\xff', b'\x15', b'\x4f', b'\xff', b'\xfe', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xbf', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xfa', b'\xbe', - b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbf', b'\xba', b'\xaf', b'\xf1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', - b'\x15', b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xea', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xff', b'\xae', b'\xfe', - b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xea', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x15', - b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xaa', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xbf', - b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xab', b'\xae', b'\xfe', b'\xba', - b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', - b'\xff', b'\xfe', b'\xae', b'\xbf', b'\xba', b'\xea', b'\xa1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', - b'\xab', b'\xae', b'\xfe', b'\xbe', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbe', b'\xbf', b'\xba', - b'\xea', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x4a', b'\xbf', b'\xae', b'\xfe', b'\xbe', b'\xab', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xea', b'\xfe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x15', b'\x4a', b'\xbf', - b'\xbe', b'\xfe', b'\xbe', b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xfe', b'\xbf', b'\xba', b'\xfa', - b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', - b'\xff', b'\x15', b'\x4a', b'\xff', b'\xbe', b'\xfe', b'\xbe', b'\xfa', b'\xbf', - b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xae', - b'\xfe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xfe', - b'\xfe', b'\xbe', b'\xfa', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xfa', b'\xbe', b'\xfe', b'\xbe', b'\xbf', b'\xff', b'\xa1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', - b'\x3f', b'\xcf', b'\xea', b'\xfe', b'\xbe', b'\xbe', b'\xfb', b'\xab', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', b'\xbe', b'\xfe', - b'\xbe', b'\xbf', b'\xab', b'\xa3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xfa', b'\xfe', b'\xfe', - b'\xbe', b'\xfb', b'\xea', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xaf', b'\xff', b'\xff', b'\xff', - b'\xfe', b'\xaf', b'\xbe', b'\xfe', b'\xbe', b'\xbf', b'\xaf', b'\xf3', b'\xfc', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', - b'\xcf', b'\xfe', b'\xee', b'\xbe', b'\xbe', b'\xfb', b'\xee', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaf', b'\xbe', b'\xfe', b'\xbe', - b'\xff', b'\xbf', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', - b'\xff', b'\xff', b'\xff', b'\x3f', b'\xce', b'\xae', b'\xab', b'\xbe', b'\xbe', - b'\xfb', b'\xef', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xef', b'\xbe', b'\xfe', b'\xbe', b'\xea', b'\xba', b'\xb3', b'\xfc', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xcf', - b'\xaf', b'\xab', b'\xbe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xbe', b'\xfa', - b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', - b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xbe', b'\xbe', b'\xfb', - b'\xef', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', - b'\xbe', b'\xfe', b'\xbe', b'\xaf', b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', - b'\xab', b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xea', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xab', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xbf', b'\xfa', b'\xaa', - b'\xb3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', - b'\xff', b'\x15', b'\x4e', b'\xbf', b'\xff', b'\xfe', b'\xbe', b'\xfb', b'\xef', - b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xef', b'\xfe', b'\xff', b'\xff', b'\xef', b'\xfb', b'\xeb', b'\xef', b'\xbe', - b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4e', b'\xaa', b'\xaa', - b'\xae', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', - b'\xff', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xfe', b'\xbf', b'\xff', b'\xef', - b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xba', b'\xaa', b'\xaa', b'\xb1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', - b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', - b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xef', b'\xfe', b'\xef', b'\xef', - b'\xfa', b'\xbf', b'\xfa', b'\xaf', b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xfe', - b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', - b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', - b'\xef', b'\xaa', b'\xaa', b'\xaf', b'\xff', b'\xbf', b'\xea', b'\xaf', b'\xfb', - b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\x15', - b'\x4a', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xea', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xea', b'\xab', - b'\xaf', b'\xff', b'\xaf', b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xfe', b'\xaa', - b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xf3', - b'\xff', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', b'\xaa', b'\xaa', b'\xbe', - b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xaf', b'\xff', b'\xeb', - b'\xfe', b'\xff', b'\xef', b'\xfa', b'\xaa', b'\xaa', b'\xaf', b'\xfb', b'\xeb', - b'\xef', b'\xbe', b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xf0', b'\x00', b'\x00', b'\x00', b'\x15', b'\x4f', - b'\xff', b'\xff', b'\xff', b'\xae', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', - b'\xff', b'\xaf', b'\xff', b'\xfa', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xbf', - b'\xaf', b'\xea', b'\xeb', b'\xeb', b'\xef', b'\xbe', b'\xfa', b'\xff', b'\xff', - b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xfb', - b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', b'\xef', b'\xff', b'\xfa', b'\xfe', - b'\xff', b'\xef', b'\xff', b'\xbf', b'\xff', b'\xee', b'\xab', b'\xeb', b'\xef', - b'\xbe', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', - b'\xff', b'\xff', b'\xea', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfe', b'\xff', - b'\xef', b'\xaa', b'\xbb', b'\xea', b'\xbf', b'\xea', b'\xff', b'\xbf', b'\xff', - b'\xef', b'\xfb', b'\xeb', b'\xef', b'\xbe', b'\xaf', b'\xff', b'\xff', b'\xff', - b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbb', b'\xef', - b'\xeb', b'\xef', b'\xfe', b'\xfa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaf', b'\xef', b'\xfb', b'\xeb', b'\xef', b'\xbe', - b'\xbf', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', - b'\xff', b'\xfe', b'\xab', b'\xef', b'\xeb', b'\xee', b'\xaa', b'\xfb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xaf', - b'\xfb', b'\xeb', b'\xef', b'\xba', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xab', b'\xef', b'\xeb', - b'\xee', b'\xaa', b'\xbb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xae', b'\xaf', b'\xfb', b'\xeb', b'\xef', b'\xab', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xea', b'\xef', b'\xeb', b'\xef', b'\xaa', b'\xab', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xef', b'\xfb', - b'\xeb', b'\xef', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', - b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xaf', b'\xeb', b'\xef', - b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xaa', b'\xaa', b'\xfb', b'\xeb', b'\xea', b'\xbf', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xaf', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xee', b'\xab', b'\xeb', - b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xeb', b'\xef', b'\xee', - b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xbf', b'\xef', b'\xfb', b'\xeb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xfa', b'\xeb', b'\xef', b'\xea', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xef', b'\xfb', b'\xeb', b'\xaf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xab', b'\xef', b'\xef', b'\xfb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xba', - b'\xaf', b'\xfb', b'\xea', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xab', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xbe', b'\xaf', b'\xfb', b'\xea', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xef', - b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', - b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xea', b'\xab', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xaf', b'\xef', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x50', b'\x00', b'\x00', b'\x00', b'\x0f', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xaa', b'\xab', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xaa', b'\xab', - b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf0', b'\x00', - b'\x00', b'\x00', b'\x05', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xeb', - b'\xfa', b'\xbb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xbf', b'\xeb', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xeb', b'\xfb', b'\xeb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', - b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xbf', b'\xeb', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xfb', b'\xfb', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', - b'\xfb', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbb', - b'\xeb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xea', b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xbf', b'\xba', b'\xab', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xef', b'\xfb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xba', b'\xab', - b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', - b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xef', b'\xea', b'\xfb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xbf', b'\xfb', b'\xeb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xea', - b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xaa', b'\xbf', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xeb', b'\xef', b'\xeb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xba', b'\xaa', b'\xab', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\x50', b'\x00', b'\x00', b'\x00', b'\x0f', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xef', b'\xfb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', - b'\xbf', b'\xeb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xf0', b'\x00', b'\x00', b'\x00', b'\x05', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xeb', b'\xee', b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xeb', b'\xeb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xeb', b'\xfb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', - b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', - b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xef', b'\xeb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xab', b'\xef', b'\xeb', b'\xfb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xfb', - b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', - b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xab', b'\xef', - b'\xeb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xbf', b'\xbf', b'\xfb', b'\xea', b'\xbf', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xfa', b'\xeb', b'\xea', b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xbf', b'\xeb', b'\xeb', - b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf3', b'\xfc', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xeb', b'\xef', b'\xfb', - b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xaf', b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xaf', b'\xba', b'\xfb', b'\xeb', b'\xba', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xfe', b'\xaf', b'\xeb', b'\xef', b'\xfb', b'\xfb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbe', - b'\xbb', b'\xfb', b'\xeb', b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', b'\xef', - b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xab', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xab', b'\xef', b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbe', b'\xff', - b'\xfb', b'\xeb', b'\xbe', b'\xea', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xab', b'\xef', b'\xeb', - b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfa', b'\xbf', - b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', - b'\xfa', b'\xbb', b'\xef', b'\xeb', b'\xef', b'\xfb', b'\xfb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbe', b'\xff', b'\xfb', - b'\xeb', b'\xbe', b'\xfa', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', - b'\x4f', b'\xff', b'\xff', b'\xff', b'\xea', b'\xfb', b'\xef', b'\xeb', b'\xef', - b'\xfb', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xab', b'\xff', - b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xff', b'\xea', - b'\xfb', b'\xef', b'\xeb', b'\xea', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xff', b'\xfb', b'\xeb', - b'\xbe', b'\xfb', b'\xaa', b'\xff', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', - b'\xff', b'\xff', b'\xff', b'\xae', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfb', - b'\xfe', b'\xff', b'\xff', b'\xfe', b'\xff', b'\xff', b'\xaf', b'\xfb', b'\xef', - b'\xfe', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xba', b'\xff', b'\xff', - b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', - b'\xef', b'\xeb', b'\xef', b'\xfb', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xff', - b'\xff', b'\xbf', b'\xfb', b'\xeb', b'\xfa', b'\xff', b'\xfb', b'\xeb', b'\xbe', - b'\xfb', b'\xbe', b'\xaa', b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaa', - b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xbb', b'\xff', - b'\xff', b'\xaa', b'\xaa', b'\xaa', b'\xbf', b'\xbf', b'\xfa', b'\xfb', b'\xaa', - b'\xbf', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xaa', b'\xaa', b'\xaa', - b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', b'\xbe', b'\xfb', b'\xef', - b'\xeb', b'\xee', b'\xaa', b'\xaa', b'\xaa', b'\xaf', b'\xfe', b'\xff', b'\xea', - b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xab', b'\xfb', b'\xeb', b'\xbe', b'\xfb', - b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', - b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xeb', b'\xff', b'\xff', - b'\xef', b'\xfe', b'\xff', b'\xff', b'\xbf', b'\xff', b'\xfb', b'\xff', b'\xfa', - b'\xab', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xf1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x15', b'\x4e', b'\xaa', b'\xaa', b'\xae', b'\xbe', b'\xfb', b'\xef', b'\xeb', - b'\xef', b'\xfb', b'\xff', b'\xff', b'\xef', b'\xfe', b'\xbf', b'\xff', b'\xef', - b'\xff', b'\xab', b'\xff', b'\xff', b'\xfb', b'\xeb', b'\xbe', b'\xfb', b'\xbe', - b'\xba', b'\xaa', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xff', b'\xfe', - b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xef', b'\xfa', b'\xff', b'\xff', b'\xeb', - b'\xff', b'\xbf', b'\xff', b'\xef', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xfb', - b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbf', b'\xff', b'\xff', b'\xf1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', - b'\xca', b'\xaa', b'\xab', b'\xfe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xea', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbf', - b'\xea', b'\xaa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xbe', b'\xbe', - b'\xfb', b'\xef', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xbe', b'\xfb', b'\xbe', b'\xbf', b'\xaf', b'\xfa', b'\xf3', b'\xfc', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', - b'\xaf', b'\xab', b'\xbe', b'\xbe', b'\xfb', b'\xef', b'\xeb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xbe', b'\xfb', b'\xbe', b'\xbe', b'\xfa', - b'\xfa', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x3f', b'\xce', b'\xae', b'\xab', b'\xbe', b'\xbe', b'\xfb', - b'\xef', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', - b'\xfb', b'\xbe', b'\xbe', b'\xea', b'\xba', b'\xb3', b'\xfc', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xfe', - b'\xee', b'\xbe', b'\xbe', b'\xfb', b'\xee', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xbe', b'\xbe', b'\xff', b'\xbf', - b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x3f', b'\xcf', b'\xfa', b'\xfe', b'\xfe', b'\xbe', b'\xfb', b'\xea', - b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xfe', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xae', b'\xfb', - b'\xbe', b'\xbf', b'\xbf', b'\xaf', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xea', b'\xfe', - b'\xfe', b'\xbe', b'\xfa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xea', b'\xfb', b'\xbe', b'\xbf', b'\xbf', b'\xaa', b'\xf3', - b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x15', b'\x4f', b'\xff', b'\xfe', b'\xfe', b'\xbe', b'\xfa', b'\xaf', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbb', b'\xbe', - b'\xbf', b'\xbf', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xab', b'\xae', b'\xfe', - b'\xbe', b'\xfa', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', - b'\xff', b'\xfe', b'\xab', b'\xbe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', - b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xbe', b'\xea', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xab', b'\xbe', b'\xbf', - b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xbe', - b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xea', b'\xbe', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', - b'\xab', b'\xae', b'\xfe', b'\xbe', b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xfa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xbe', b'\xbf', b'\xba', - b'\xea', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x4a', b'\xab', b'\xae', b'\xfe', b'\xba', b'\xbf', - b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xfe', b'\xbf', b'\xff', b'\xff', b'\xff', - b'\xfe', b'\xae', b'\xbf', b'\xba', b'\xea', b'\xa1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaf', - b'\xae', b'\xfe', b'\xaa', b'\xff', b'\xff', b'\xff', b'\xff', b'\xfa', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xaf', b'\xff', b'\xff', b'\xff', b'\xff', b'\xaa', b'\xbf', b'\xba', b'\xfa', - b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x15', b'\x4a', b'\xaf', b'\xae', b'\xfe', b'\xab', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xea', b'\xbf', b'\xba', b'\xfa', b'\xa1', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4a', b'\xaf', b'\xae', - b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xea', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbf', b'\xba', b'\xfa', b'\xa1', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x15', b'\x4f', b'\xfa', b'\xae', b'\xfe', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xaa', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xea', b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xaa', - b'\xbf', b'\xba', b'\xaf', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xff', b'\xee', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xbf', b'\xff', b'\xf1', b'\x54', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', - b'\x4f', b'\xef', b'\xfe', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xbf', b'\xfb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xef', b'\xbe', b'\xaa', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xab', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xea', b'\xaa', - b'\xaa', b'\xaa', b'\xaa', b'\xaa', b'\xbe', b'\xfb', b'\xf1', b'\x54', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', - b'\xeb', b'\xbf', b'\xba', b'\xfe', b'\xbf', b'\xaa', b'\xab', b'\xeb', b'\xeb', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xeb', b'\xeb', b'\xfe', b'\xab', b'\xfe', b'\xbf', b'\xab', b'\xfe', - b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x4f', b'\xeb', b'\xbf', b'\xaa', b'\xaa', b'\xaa', - b'\xff', b'\xea', b'\xff', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xff', b'\xeb', b'\xff', - b'\xaa', b'\xaa', b'\xab', b'\xfe', b'\xeb', b'\xf1', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x4f', b'\xeb', - b'\xbf', b'\xeb', b'\xff', b'\xfe', b'\xfa', b'\xaa', b'\xfb', b'\xab', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xeb', b'\xef', b'\xaa', b'\xaf', b'\xbf', b'\xff', b'\xeb', b'\xfe', b'\xeb', - b'\xf1', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x3f', b'\xcf', b'\xeb', b'\xbe', b'\xab', b'\xff', b'\xfe', b'\xfa', - b'\xff', b'\xbb', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xaf', b'\xbf', - b'\xff', b'\xaa', b'\xbe', b'\xeb', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xeb', b'\xbe', - b'\xaa', b'\xab', b'\xfe', b'\xfe', b'\xff', b'\xbb', b'\xab', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', - b'\xee', b'\xff', b'\xbf', b'\xbf', b'\xea', b'\xaa', b'\xbe', b'\xeb', b'\xf3', - b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x3f', b'\xca', b'\xab', b'\xba', b'\xaa', b'\xaf', b'\xaa', b'\xbe', b'\xaa', - b'\xbb', b'\xab', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', b'\xab', b'\xbf', b'\xab', b'\xfa', - b'\xaa', b'\xae', b'\xea', b'\xa3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xaf', b'\xfa', b'\xaa', - b'\xae', b'\xaa', b'\xbe', b'\xff', b'\xbb', b'\xeb', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xee', - b'\xff', b'\xbf', b'\xaa', b'\xfa', b'\xaa', b'\xaf', b'\xfa', b'\xf3', b'\xfc', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', - b'\xcf', b'\xff', b'\xfa', b'\xaa', b'\xae', b'\xaa', b'\xbe', b'\xff', b'\xbb', - b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xeb', b'\xee', b'\xff', b'\xbf', b'\xaa', b'\xfa', b'\xaa', - b'\xaf', b'\xff', b'\xf3', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xcf', b'\xff', b'\xfa', b'\xaa', b'\xaf', - b'\xfa', b'\xbe', b'\xff', b'\xfb', b'\xeb', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xeb', b'\xef', b'\xff', - b'\xbf', b'\xaf', b'\xfa', b'\xaa', b'\xaf', b'\xff', b'\xf3', b'\xfc', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x3f', b'\xc0', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x3f', b'\xff', b'\xff', b'\xf0', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x03', b'\xfc', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x57', - b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x7f', b'\xff', b'\x3f', b'\xff', - b'\xff', b'\xf3', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', - b'\xf5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', - b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', - b'\x7f', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xf5', b'\x55', - b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\xff', - b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', - b'\xf5', b'\x55', b'\x55', b'\x55', b'\x7f', b'\xff', b'\x3f', b'\xff', b'\xff', - b'\xf3', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', - b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', b'\x54', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\x15', b'\x7f', b'\xff', b'\x55', - b'\x55', b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x7f', - b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xf5', b'\x55', b'\x55', - b'\x55', b'\x57', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\xff', b'\xfd', - b'\x54', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x3f', b'\xff', b'\xff', b'\xf0', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', - b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', - b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', - b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', - b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', - b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', - b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x5f', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\x3f', b'\xff', b'\xff', b'\xf3', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xf5', b'\xff', - b'\xff', b'\x5f', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\x3f', b'\xff', b'\xff', b'\xf3', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xf5', b'\xff', b'\xff', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x7f', b'\xff', b'\xff', b'\xf5', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\xff', b'\xff', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x7f', - b'\xff', b'\xff', b'\xf5', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', b'\x55', - b'\x55', b'\x55', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', b'\xff', - b'\xff', - ], -) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" index 08e2c15..a4e6549 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" @@ -32,6 +32,54 @@ fn render_texture(self : Texture, x : Int, y : Int) -> Unit { } } +let map_texture : Texture = Texture( + [(1, 1, 160, 160)], + [ + (5, 5, 6, 73), + (5, 5, 73, 6), + (18, 18, 21, 21), + (29, 18, 42, 21), + (18, 29, 21, 43), + (50, 18, 64, 21), + (18, 51, 21, 65), + (187, 5, 156, 6), + (156, 7, 155, 73), + (95, 18, 110, 21), + (118, 18, 132, 21), + (140, 18, 143, 21), + (140, 29, 143, 44), + (140, 52, 143, 66), + (155, 87, 156, 156), + (5, 87, 6, 156), + (7, 155, 73, 156), + (140, 95, 143, 110), + (140, 118, 143, 132), + (87, 155, 154, 156), + (5, 155, 73, 156), + (140, 140, 143, 143), + (119, 140, 132, 143), + (95, 140, 111, 143), + (155, 5, 156, 73), + (87, 5, 154, 6), + (51, 140, 65, 143), + (29, 140, 43, 143), + (18, 140, 21, 143), + (18, 117, 21, 132), + (18, 95, 21, 109), + ], + [ + (7, 73, 22, 73), + (73, 7, 73, 22), + (22, 22, 72, 22), + (22, 22, 22, 72), + (17, 17, 72, 17), + (17, 17, 17, 72), + (3, 22, 16, 38), + (3, 42, 16, 58), + ], + [], +) + let player_texture : Texture = Texture( [ (2, 4, 2, 7), From 35a0796412c13cdf362e43ad8a4614c9ce843766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Wed, 20 Nov 2024 21:51:55 +0800 Subject: [PATCH 3/8] fix: sword and slightshot mixing --- .../code/src/color.mbt" | 2 +- .../code/src/enemy.mbt" | 4 ++-- .../code/src/game.mbt" | 12 ++++++------ .../code/src/inputer.mbt" | 8 ++++---- .../code/src/player.mbt" | 2 +- .../code/src/render.mbt" | 1 - 6 files changed, 14 insertions(+), 15 deletions(-) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" index 12b4357..2c8b43b 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" @@ -17,7 +17,7 @@ fn to_int(self : Color_Type) -> UInt { } fn set_draw_color(index : UInt, color_type : Color_Type) -> Unit { - @wasm4.set_draw_colors(~index, color_type.to_int()) + @wasm4.set_draw_colors(index~, color_type.to_int()) } fn set_main_color_with_transparent(color_type : Color_Type) -> Unit { diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" index fb247a9..9cee5ec 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" @@ -28,7 +28,7 @@ fn get_id(self : Enemy) -> UInt { } } -fn get_hitbox(self : Enemy, ~pos : Position = self.get_pos()) -> Shape { +fn get_hitbox(self : Enemy, pos~ : Position = self.get_pos()) -> Shape { match self { Mummy(_) => pos.get_hitbox_mummy() Skeleton(_) => pos.get_hitbox_skeleton() @@ -88,7 +88,7 @@ fn set_pos(self : Enemy, pos : Position) -> Unit { } fn apply(self : Enemy, pos : Position) -> Unit { - let hitbox = self.get_hitbox(~pos) + let hitbox = self.get_hitbox(pos~) if game.current_room.move_hitbox().shape_in_box(hitbox).not() && game.player.pos.get_hitbox_player().intersect(hitbox).not() { self.set_pos(pos) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" index 3cf5329..55d96b9 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -35,21 +35,21 @@ fn update_level(self : Player) -> Unit { } Some(Left) => { if game.current_room.upgrade { - let level = self.slingshot.level - self.slingshot = Slingshot::new(level + 1) + let level = self.sword.level + self.sword = Sword::new(level + 1) } game.level += 1 game.current_room = generate_room(game.level) - self.pos = { x: 126, y: 73 } + self.pos = { x: 76, y: 30 } } Some(Right) => { if game.current_room.upgrade { - let level = self.sword.level - self.sword = Sword::new(level + 1) + let level = self.slingshot.level + self.slingshot = Slingshot::new(level + 1) } game.level += 1 game.current_room = generate_room(game.level) - self.pos = { x: 76, y: 30 } + self.pos = { x: 126, y: 73 } } None => () } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" index 5b2168b..e76dcb6 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/inputer.mbt" @@ -2,16 +2,16 @@ fn inputer(player : Player) -> Unit { let gamepad = @wasm4.get_gamepad() let mouse = @wasm4.get_mouse() if gamepad.button_up { - player.move(Up) + player.move_(Up) } if gamepad.button_down { - player.move(Down) + player.move_(Down) } if gamepad.button_left { - player.move(Left) + player.move_(Left) } if gamepad.button_right { - player.move(Right) + player.move_(Right) } if mouse.left && player.weapon.get_cd().check() { player.weapon.attack(player.pos, game.current_room, mouse.x, mouse.y) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" index 4b1b8bf..4bce130 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" @@ -39,7 +39,7 @@ fn get_hitbox_player(self : Position) -> Shape { Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) } -fn move(self : Player, direction : Direction) -> Unit { +fn move_(self : Player, direction : Direction) -> Unit { match direction { Up => self.apply({ x: self.pos.x, y: self.pos.y - speed.to_double() }) Down => self.apply({ x: self.pos.x, y: self.pos.y + speed.to_double() }) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" index 63b91c6..887dc14 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" @@ -44,7 +44,6 @@ fn render_start_room() -> Unit { fn render_background_normal() -> Unit { render_background() set_main_color_with_transparent(Black) - @wasm4.rect(22, 22, 116, 116) // patch backgroud } fn render_background() -> Unit { From b64a2d46e804dd0cd8063ae1aea0ba9cec6f8728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Thu, 21 Nov 2024 02:47:00 +0800 Subject: [PATCH 4/8] patch: music / compress --- .../README.md" | 7 +- .../code/arch-run.sh" | 4 +- .../code/src/arrow.mbt" | 89 ++++--- .../code/src/bar.mbt" | 8 +- .../code/src/color.mbt" | 10 +- .../code/src/enemy.mbt" | 218 +++++------------- .../code/src/game.mbt" | 61 +++-- .../code/src/hitbox.mbt" | 2 +- .../code/src/main.mbt" | 6 +- .../code/src/music.mbt" | 17 ++ .../code/src/obstacle.mbt" | 4 +- .../code/src/player.mbt" | 24 +- .../code/src/pos.mbt" | 21 +- .../code/src/render.mbt" | 2 +- .../code/src/room.mbt" | 38 ++- .../code/src/texture.mbt" | 18 ++ .../code/src/weapon.mbt" | 29 +-- .../code/src/xor_shift.mbt" | 2 +- 18 files changed, 247 insertions(+), 313 deletions(-) create mode 100644 "teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/music.mbt" diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/README.md" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/README.md" index d0f0b67..7e35095 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/README.md" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/README.md" @@ -67,14 +67,15 @@ ##### 剑 -- 伤害:10 + sword_level * 5 -- 范围:4 + sword_level / 4 +- 伤害:10 + sword_level * 8 +- 范围:6 + sword_level / 4 - 攻击 CD:100 total, 10 + sword_level / 5 per tick +- 击退:2 + sword_level / 4 ##### 弹弓 - 伤害:8 + slingshot_level * 2 -- 子弹速度:0.5 + 0.1 * slingshot_level +- 子弹速度:0.5 + 0.2 * slingshot_level - 攻击 CD:100 total, 2 + slingshot_level / 3 * 2 per tick ### 怪物 diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" index 70e9cce..c467c95 100755 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/arch-run.sh" @@ -1,2 +1,2 @@ -moon build --target wasm-gc -w4 run ./target/wasm-gc/release/build/汪汪立功.wasm +moon build --target wasm +w4 run ./target/wasm/release/build/汪汪立功.wasm diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" index 3c8d501..44ae4f3 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" @@ -1,7 +1,7 @@ struct Arrow { mut pos : Position - speed : Double - k : Double + speed : Float + k : Float damage : Int direction : Bool vert : Bool @@ -10,8 +10,8 @@ struct Arrow { fn Arrow::new( pos : Position, - speed : Double, - k : Double, + speed : Float, + k : Float, damage : Int, direction : Bool, vert : Bool, @@ -20,10 +20,6 @@ fn Arrow::new( { pos, speed, k, damage, direction, vert, belong } } -fn get_hitbox(self : Arrow) -> Shape { - Rect(self.pos.x - 2.5, self.pos.y - 2.5, self.pos.x + 2.5, self.pos.y + 2.5) -} - fn render_arrow(arrow : Arrow) -> Unit { set_draw_color(1, LightBrown) set_draw_color(2, Brown) @@ -34,52 +30,42 @@ fn render_arrow(arrow : Arrow) -> Unit { fn generate_arrow( from_pos : Position, to_pos : Position, - speed : Double, + speed : Float, damage : Int, belong : Bool ) -> (UInt, Arrow) { let id = id_pool.get_id() - if from_pos.x == to_pos.x { - ( - id, - Arrow::new( - from_pos, - speed, - 1, - damage, - from_pos.y < to_pos.y, - true, - belong, - ), - ) - } else { - let k = (from_pos.y - to_pos.y) / (from_pos.x - to_pos.x) - ( - id, - Arrow::new( - from_pos, - speed, - k, - damage, - from_pos.x < to_pos.x, - false, - belong, - ), - ) - } + let is_x_pos_equal = from_pos.x == to_pos.x + ( + id, + Arrow::new( + from_pos, + speed, + if is_x_pos_equal { + 1 + } else { + (from_pos.y - to_pos.y) / (from_pos.x - to_pos.x) + }, + damage, + from_pos.x < to_pos.x, + is_x_pos_equal, + belong, + ), + ) } fn update_arrow(self : Room) -> Unit { let erase_list : Array[UInt] = [] for id, arrow in self.arrows { - let hitbox = arrow.get_hitbox() + let hitbox = get_hitbox_f(arrow.pos,2.5) let mut flag = false if game.current_room.arrow_walls.shape_in_box(hitbox) { erase_list.push(id) flag = true } else if arrow.belong == true && - game.player.pos.get_hitbox_player().intersect(hitbox) { - game.player.damage(arrow.damage) + game.player.pos.get_hitbox_f(5).intersect(hitbox) { + game.player.hp -= arrow.damage + music_attack() erase_list.push(id) flag = true } else if arrow.belong == false { @@ -88,8 +74,9 @@ fn update_arrow(self : Room) -> Unit { flag = true } for _, enemy in self.enemys { - if enemy.get_hitbox().intersect(hitbox) { - enemy.damage(arrow.damage) + if get_hitbox_f(enemy.pos,5).intersect(hitbox) { + enemy.hp -= arrow.damage + music_damage() erase_list.push(id) flag = true break @@ -105,14 +92,24 @@ fn update_arrow(self : Room) -> Unit { } } +fn signum(f : Float) -> Int { + if f == 0 { + 0 + } else if f < 0 { + -1 + } else { + 1 + } +} + fn ai(self : Arrow) -> Unit { - let k_signum = self.k.signum() - let direction = (if self.direction { 1.0 } else { -1.0 }) * - (if k_signum == 0 { 1 } else { k_signum }) + let k_signum = signum(self.k) + let direction = (if self.direction { 1.0 } else { -1.0 }).to_float() * + (if k_signum == 0 { 1 } else { k_signum.to_float() }) self.pos = if self.vert.not() { let k_s = self.k * self.k let sin = (k_s / (k_s + 1)).sqrt() - let cos = if self.k == 0 { 1.0 } else { sin / self.k } + let cos = if self.k == 0 { 1.0.to_float() } else { sin / self.k } let dy = self.speed * sin * direction let dx = self.speed * cos * direction { x: self.pos.x + dx, y: self.pos.y + dy } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" index 53c9277..1cfa5c9 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/bar.mbt" @@ -1,8 +1,8 @@ fn render_hp_bar(player : Player) -> Unit { set_main_color_with_transparent(LightBrown) let now_hp = if player.hp < 0 { 0 } else { player.hp } - let progress = now_hp.to_double() / player.hp_max.to_double() - let break_point = 8 + (60.0 * progress).to_int() + let progress = now_hp.to_float() / player.hp_max.to_float() + let break_point = 8 + float_to_int(60.0.to_float() * progress) @wasm4.rect(8, 7, 60, 7) set_draw_color(1, Brown) @wasm4.rect(break_point, 7, 60 - (break_point - 8), 7) @@ -12,8 +12,8 @@ fn render_cd_bar(player : Player) -> Unit { set_main_color_with_transparent(LightBrown) let cd = player.weapon.get_cd() let now_cd = if cd.cd < 0 { 0 } else { cd.cd } - let progress = (cd.total - now_cd).to_double() / cd.total.to_double() - let break_point = 88 + (42.0 * progress).to_int() + let progress = (cd.total - now_cd).to_float() / cd.total.to_float() + let break_point = 88 + float_to_int(42.0.to_float() * progress) @wasm4.rect(88, 7, 42, 7) set_draw_color(1, Brown) @wasm4.rect(break_point, 7, 42 - (break_point - 88), 7) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" index 2c8b43b..e76ec2e 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/color.mbt" @@ -1,14 +1,12 @@ -enum Color_Type { - Transparent +enum Color { Black Brown LightBrown Grey } -fn to_int(self : Color_Type) -> UInt { +fn to_int(self : Color) -> UInt { match self { - Transparent => 0 Black => 1 Brown => 2 LightBrown => 3 @@ -16,11 +14,11 @@ fn to_int(self : Color_Type) -> UInt { } } -fn set_draw_color(index : UInt, color_type : Color_Type) -> Unit { +fn set_draw_color(index : UInt, color_type : Color) -> Unit { @wasm4.set_draw_colors(index~, color_type.to_int()) } -fn set_main_color_with_transparent(color_type : Color_Type) -> Unit { +fn set_main_color_with_transparent(color_type : Color) -> Unit { @wasm4.set_draw_colors(index=1, color_type.to_int()) @wasm4.set_draw_colors(index=2, 0) } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" index 9cee5ec..d20a22a 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/enemy.mbt" @@ -1,113 +1,65 @@ -enum Enemy { - Mummy(Mummy) - Skeleton(Skeleton) - Bug(Bug) -} - -fn get_pos(self : Enemy) -> Position { - match self { - Mummy({ pos, .. }) => pos - Skeleton({ pos, .. }) => pos - Bug({ pos, .. }) => pos - } -} - -fn get_hp(self : Enemy) -> Int { - match self { - Mummy({ hp, .. }) => hp - Skeleton({ hp, .. }) => hp - Bug({ hp, .. }) => hp - } -} - -fn get_id(self : Enemy) -> UInt { - match self { - Mummy({ id, .. }) => id - Skeleton({ id, .. }) => id - Bug({ id, .. }) => id - } -} - -fn get_hitbox(self : Enemy, pos~ : Position = self.get_pos()) -> Shape { - match self { - Mummy(_) => pos.get_hitbox_mummy() - Skeleton(_) => pos.get_hitbox_skeleton() - Bug(_) => pos.get_hitbox_bug() - } -} - -fn damage(self : Enemy, damage : Int) -> Unit { - match self { - Mummy(mummy) => mummy.hp -= damage - Skeleton(skeleton) => skeleton.hp -= damage - Bug(mummy) => mummy.hp -= damage - } +struct Enemy { + type_ : Int + id : UInt + speed : Float + mut pos : Position + mut hp : Int + hit : Int + hitcd : CD } fn render_enermy(enemy : Enemy) -> Unit { - match enemy { - Mummy({ pos, .. }) => { - let (x, y) = pos.to_wasm4_pos() - mummy_texture.render_texture(x - 5, y - 5) - } - Skeleton({ pos, .. }) => { - let (x, y) = pos.to_wasm4_pos() - skeleton_texture.render_texture(x - 5, y - 5) - } - Bug({ pos, .. }) => { - let (x, y) = pos.to_wasm4_pos() - bug_texture.render_texture(x - 5, y - 5) - } + let (x, y) = enemy.pos.to_wasm4_pos() + match enemy.type_ { + 1 => mummy_texture.render_texture(x - 5, y - 5) + 2 => skeleton_texture.render_texture(x - 5, y - 5) + 3 => bug_texture.render_texture(x - 5, y - 5) } } fn update_enemy(self : Room) -> Unit { let erase_list : Array[UInt] = [] for id, enemy in self.enemys { - if enemy.get_hp() <= 0 { + if enemy.hp <= 0 { erase_list.push(id) + } else if enemy.type_ == 1 || enemy.type_ == 3 { + enemy.ai_mummy() } else { - match enemy { - Mummy(mummy) => mummy.ai() - Skeleton(skeleton) => skeleton.ai() - Bug(bug) => bug.ai() - } + enemy.ai_skeleton() } } for id in erase_list { self.enemys.remove(id) - } -} - -fn set_pos(self : Enemy, pos : Position) -> Unit { - match self { - Mummy(mummy) => mummy.pos = pos - Skeleton(skeleton) => skeleton.pos = pos - Bug(mummy) => mummy.pos = pos + game.player.hp = if game.player.hp + 5 > game.player.hp_max { + game.player.hp_max + } else { + game.player.hp + 5 + } } } fn apply(self : Enemy, pos : Position) -> Unit { - let hitbox = self.get_hitbox(pos~) + let hitbox = get_hitbox_f(pos, 5) if game.current_room.move_hitbox().shape_in_box(hitbox).not() && - game.player.pos.get_hitbox_player().intersect(hitbox).not() { - self.set_pos(pos) + game.player.pos.get_hitbox_f(5).intersect(hitbox).not() { + self.pos = pos } } -// -------------- Mummy -------------- -// size: 10*10 -struct Mummy { - id : UInt - speed : Double - mut pos : Position - mut hp : Int - hit : Int - hitcd : CD +fn repel(self : Enemy, direction : Direction, range : Int) -> Unit { + self.apply( + match direction { + Up => { x: self.pos.x, y: self.pos.y + range.to_float() } + Down => { x: self.pos.x, y: self.pos.y - range.to_float() } + Left => { x: self.pos.x - range.to_float(), y: self.pos.y } + Right => { x: self.pos.x + range.to_float(), y: self.pos.y } + }, + ) } -fn Mummy::new(id : UInt, pos : Position, level : Int) -> Mummy { +fn new_mummy(id : UInt, pos : Position, level : Int) -> Enemy { { + type_: 1, id, pos, hp: 50 + level * 5, @@ -117,104 +69,62 @@ fn Mummy::new(id : UInt, pos : Position, level : Int) -> Mummy { } } -fn get_hitbox_mummy(self : Position) -> Shape { - Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) -} - -pub fn ai(self : Mummy) -> Unit { - let distance = self.pos.distance(game.player.pos) - self.hitcd.decrease() - if distance <= 11 && self.hitcd.check() { - game.player.damage(self.hit) - self.hitcd.refersh() - } else if distance > 11 { - let way = self.pos.find_way(game.player.pos, self.speed) - Mummy(self).apply({ x: way.x, y: self.pos.y }) - Mummy(self).apply({ x: self.pos.x, y: way.y }) - } -} - -// -------------- Skeleton -------------- -// size: 10*10 -struct Skeleton { - id : UInt - mut pos : Position - mut hp : Int - hitcd : CD - speed : Double - damage : Int -} - -fn get_hitbox_skeleton(self : Position) -> Shape { - Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) -} - -fn Skeleton::new(id : UInt, pos : Position, level : Int) -> Skeleton { +fn new_skeleton(id : UInt, pos : Position, level : Int) -> Enemy { { + type_: 2, id, pos, hp: 40 + level * 5, hitcd: CD::new(100, level), - speed: 0.3 + 0.05 * level.to_double(), - damage: 10 + level * 2, + speed: 0.3.to_float(), + hit: 10 + level * 2, } } -fn ai(self : Skeleton) -> Unit { +fn go(self : Enemy) -> Unit { + let way = self.pos.find_way(game.player.pos, self.speed) + self.apply({ x: way.x, y: self.pos.y }) + self.apply({ x: self.pos.x, y: way.y }) +} + +fn ai_skeleton(self : Enemy) -> Unit { let distance = self.pos.distance(game.player.pos) self.hitcd.decrease() - if distance <= 40 && self.hitcd.check() { + if distance > 40 { + self.go() + } else if self.hitcd.check() { let (id, arrow) = generate_arrow( self.pos, game.player.pos, self.speed, - self.damage, + self.hit, true, ) game.current_room.arrows.set(id, arrow) self.hitcd.refersh() - } else if distance > 40 { - let way = self.pos.find_way(game.player.pos, 0.25) - Skeleton(self).apply({ x: way.x, y: self.pos.y }) - Skeleton(self).apply({ x: self.pos.x, y: way.y }) } } -// -------------- Bug -------------- -// size: 11*10 -struct Bug { - id : UInt - speed : Double - mut pos : Position - mut hp : Int - hit : Int - hitcd : CD +pub fn ai_mummy(self : Enemy) -> Unit { + let distance = self.pos.distance(game.player.pos) + self.hitcd.decrease() + if distance > 11 { + self.go() + } else if self.hitcd.check() { + game.player.hp -= self.hit + music_attack() + self.hitcd.refersh() + } } -fn Bug::new(id : UInt, pos : Position, level : Int) -> Bug { +fn new_bug(id : UInt, pos : Position, level : Int) -> Enemy { { + type_: 3, id, pos, hp: 20 + level * 2, - speed: 0.4 + 0.05 * level.to_double(), + speed: 0.4.to_float() + 0.05.to_float() * level.to_float(), hit: 3 + level, hitcd: CD::new(100, 2 + level / 10), } } - -fn get_hitbox_bug(self : Position) -> Shape { - Rect(self.x - 5, self.y - 5, self.x + 6, self.y + 5) -} - -fn ai(self : Bug) -> Unit { - let distance = self.pos.distance(game.player.pos) - self.hitcd.decrease() - if distance <= 11 && self.hitcd.check() { - game.player.damage(self.hit) - self.hitcd.refersh() - } else if distance > 11 { - let way = self.pos.find_way(game.player.pos, self.speed) - Bug(self).apply({ x: way.x, y: self.pos.y }) - Bug(self).apply({ x: self.pos.x, y: way.y }) - } -} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" index 55d96b9..4512ca2 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -1,6 +1,7 @@ struct Game { mut level : Int mut stop : Bool + mut pause_cd : CD player : Player mut current_room : Room } @@ -9,6 +10,7 @@ fn Game::new() -> Game { { level: 1, stop: false, + pause_cd: CD::new(100, 100), player: Player::new({ x: 80, y: 120 }), current_room: generate_room(1), } @@ -16,40 +18,37 @@ fn Game::new() -> Game { fn update_level(self : Player) -> Unit { match check_next_room(self) { - Some(Up) => { - if game.current_room.upgrade { - self.level += 1 - self.hp += 50 - } - game.level += 1 - game.current_room = generate_room(game.level) - self.pos = { x: 73, y: 121 } - } - Some(Down) => { - if game.current_room.upgrade { - self.hp = self.hp_max - } - game.level += 1 - game.current_room = generate_room(game.level) - self.pos = { x: 31, y: 77 } - } - Some(Left) => { - if game.current_room.upgrade { - let level = self.sword.level - self.sword = Sword::new(level + 1) - } + Some(direction) => { game.level += 1 - game.current_room = generate_room(game.level) - self.pos = { x: 76, y: 30 } - } - Some(Right) => { - if game.current_room.upgrade { - let level = self.slingshot.level - self.slingshot = Slingshot::new(level + 1) + match direction { + Up => { + if game.current_room.upgrade { + self.level += 1 + self.hp += 50 + } + self.pos = { x: 73, y: 121 } + } + Down => { + if game.current_room.upgrade { + self.hp = self.hp_max + } + self.pos = { x: 31, y: 77 } + } + Left => { + if game.current_room.upgrade { + self.sword = Sword::new(self.sword.level + 1) + } + self.pos = { x: 76, y: 30 } + } + Right => { + if game.current_room.upgrade { + self.slingshot = Slingshot::new(self.slingshot.level + 1) + } + self.pos = { x: 126, y: 73 } + } } - game.level += 1 game.current_room = generate_room(game.level) - self.pos = { x: 126, y: 73 } + game.pause_cd = CD::new(50, 1) } None => () } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" index b537e50..85fa2ad 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" @@ -1,5 +1,5 @@ enum Shape { - Rect(Double, Double, Double, Double) + Rect(Float,Float,Float,Float) } struct HitBox { diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" index 38361ea..4d1415d 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/main.mbt" @@ -12,8 +12,12 @@ pub fn update() -> Unit { update_level(game.player) update_room(game.current_room) update_player(game.player) + if game.pause_cd.check() { + update_enemy(game.current_room) + } else { + game.pause_cd.decrease() + } update_weapon(game.player) - update_enemy(game.current_room) update_arrow(game.current_room) inputer(game.player) } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/music.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/music.mbt" new file mode 100644 index 0000000..4fc2371 --- /dev/null +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/music.mbt" @@ -0,0 +1,17 @@ +pub fn music_damage() -> Unit { + @wasm4.tone_note_mode( + (@wasm4.Note::new(55, bend=10), None), + @wasm4.ADSR::new(15), + @wasm4.ADSRVolume::new(50), + @wasm4.ToneFlag::new(), + ) +} + +pub fn music_attack() -> Unit { + @wasm4.tone_note_mode( + (@wasm4.Note::new(40, bend=5), None), + @wasm4.ADSR::new(15), + @wasm4.ADSRVolume::new(50), + @wasm4.ToneFlag::new(), + ) +} diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" index 467a263..ca29b3a 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/obstacle.mbt" @@ -6,9 +6,9 @@ enum Obstacle { fn get_obstacle_hitbox(self : Obstacle) -> Shape { match self { Jar(x, y) => - Rect(x.to_double(), y.to_double(), x.to_double() + 12, y.to_double() + 12) + Rect(x.to_float(), y.to_float(), x.to_float() + 12, y.to_float() + 12) Tombstone(x, y) => - Rect(x.to_double(), y.to_double(), x.to_double() + 7, y.to_double() + 13) + Rect(x.to_float(), y.to_float(), x.to_float() + 7, y.to_float() + 13) } } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" index 4bce130..0c58e48 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/player.mbt" @@ -26,38 +26,28 @@ fn Player::new(pos : Position) -> Player { // -------------- MOVE -------------- -let speed = 1 - fn apply(self : Player, pos : Position) -> Unit { - let hitbox = pos.get_hitbox_player() + let hitbox = pos.get_hitbox_f(5) if game.current_room.move_hitbox().shape_in_box(hitbox).not() { self.pos = pos } } -fn get_hitbox_player(self : Position) -> Shape { - Rect(self.x - 5, self.y - 5, self.x + 5, self.y + 5) -} - fn move_(self : Player, direction : Direction) -> Unit { match direction { - Up => self.apply({ x: self.pos.x, y: self.pos.y - speed.to_double() }) - Down => self.apply({ x: self.pos.x, y: self.pos.y + speed.to_double() }) - Left => self.apply({ x: self.pos.x - speed.to_double(), y: self.pos.y }) - Right => self.apply({ x: self.pos.x + speed.to_double(), y: self.pos.y }) + Up => self.apply({ x: self.pos.x, y: self.pos.y - 1 }) + Down => self.apply({ x: self.pos.x, y: self.pos.y + 1 }) + Left => self.apply({ x: self.pos.x - 1, y: self.pos.y }) + Right => self.apply({ x: self.pos.x + 1, y: self.pos.y }) } } -fn damage(self : Player, hp : Int) -> Unit { - self.hp -= hp -} - // -------------- RENDER -------------- fn render_player(player : Player) -> Unit { player_texture.render_texture( - (player.pos.x - 5).to_int(), - (player.pos.y - 5).to_int(), + float_to_int(player.pos.x - 5), + float_to_int(player.pos.y - 5), ) } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" index 31cd769..c55bc2e 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" @@ -1,19 +1,26 @@ +extern "wasm" fn float_to_int(f : Float) -> Int = + #| (func (param f32) (result i32) local.get 0 i32.trunc_f32_s) + struct Position { - x : Double - y : Double + x : Float + y : Float } fn to_wasm4_pos(self : Position) -> (Int, Int) { - (self.x.to_int(), self.y.to_int()) + (float_to_int(self.x), float_to_int(self.y)) } -fn distance(self : Position, other : Position) -> Double { +fn distance(self : Position, other : Position) -> Float { ((self.x - other.x) * (self.x - other.x) + (self.y - other.y) * (self.y - other.y)).sqrt() } -fn find_way(self : Position, to : Position, speed : Double) -> Position { - let x_diff = speed * (to.x - self.x).compare(0).to_double() - let y_diff = speed * (to.y - self.y).compare(0).to_double() +fn get_hitbox_f(self:Position,f:Float) -> Shape { + Rect(self.x - f, self.y - f, self.x + f, self.y + f) +} + +fn find_way(self : Position, to : Position, speed : Float) -> Position { + let x_diff = speed * (to.x - self.x).compare(0).to_float() + let y_diff = speed * (to.y - self.y).compare(0).to_float() { x: self.x + x_diff, y: self.y + y_diff } } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" index 887dc14..453b12e 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" @@ -4,7 +4,7 @@ fn render(room : Room, player : Player) -> Unit { set_main_color_with_transparent(LightBrown) render_upgrade_room() } - if room.start { + else if room.start { set_main_color_with_transparent(LightBrown) render_start_room() } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" index 781ff9c..970085a 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" @@ -23,23 +23,13 @@ fn Room::new(upgrade : Bool, start : Bool) -> Room { start, } } - -fn patch_out(direction : Direction) -> Unit { - set_main_color_with_transparent(LightBrown) - match direction { - Up => @wasm4.rect(71, 4, 15, 18) - Down => @wasm4.rect(72, 138, 15, 18) // need to fix - Left => @wasm4.rect(4, 72, 18, 15) - Right => @wasm4.rect(138, 72, 18, 15) - } -} - fn update_room(self : Room) -> Unit { if self.stop.not() { - patch_out(Up) - patch_out(Down) - patch_out(Left) - patch_out(Right) + set_main_color_with_transparent(LightBrown) + @wasm4.rect(72, 138, 15, 18) + @wasm4.rect(71, 4, 15, 18) + @wasm4.rect(4, 72, 18, 15) + @wasm4.rect(138, 72, 18, 15) self.frame = frame() } else { self.frame = HitBox::new() @@ -66,7 +56,7 @@ fn bind_style(self : Room, style : RoomStyle) -> Unit { } fn add_enemy(self : Room, enemy : Enemy) -> Unit { - self.enemys.set(enemy.get_id(), enemy) + self.enemys.set(enemy.id, enemy) } enum RoomStyle { @@ -112,28 +102,28 @@ fn generate_room(level : Int) -> Room { } else { let room = Room::new(false, false) room.bind_style(room_styles[random.next(0, room_style_upper_index)]) - let enemy_count = 3 + level / 2 + level / 10 + level / 20 + level / 40 - let enemy_level = 1 + level / 8 + level / 10 + level / 15 + let enemy_count = 3 + level / 3 + level / 10 + level / 20 + level / 40 + let enemy_level = 1 + level / 10 + level / 15 + level / 20 let mummy_count = random.next(0, enemy_count) let skeleton_count = random.next(0, enemy_count - mummy_count) let bug_count = enemy_count - mummy_count - skeleton_count for i = 1; i <= mummy_count; i = i + 1 { let id = id_pool.get_id() let pos = random.next_pos() - let mummy = Mummy::new(id, pos, enemy_level) - room.add_enemy(Mummy(mummy)) + let mummy = new_mummy(id, pos, enemy_level) + room.add_enemy(mummy) } for i = 1; i <= skeleton_count; i = i + 1 { let id = id_pool.get_id() let pos = random.next_pos() - let skeleton = Skeleton::new(id, pos, enemy_level) - room.add_enemy(Skeleton(skeleton)) + let skeleton = new_skeleton(id, pos, enemy_level) + room.add_enemy(skeleton) } for i = 1; i <= bug_count; i = i + 1 { let id = id_pool.get_id() let pos = random.next_pos() - let bug = Bug::new(id, pos, enemy_level) - room.add_enemy(Bug(bug)) + let bug = new_bug(id, pos, enemy_level) + room.add_enemy(bug) } room } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" index a4e6549..6a8c4e3 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/texture.mbt" @@ -76,6 +76,24 @@ let map_texture : Texture = Texture( (17, 17, 17, 72), (3, 22, 16, 38), (3, 42, 16, 58), + (87, 7, 87, 22), + (87, 17, 144, 17), + (87, 22, 139, 22), + (139, 22, 139, 73), + (144, 17, 144, 73), + (139, 73, 154, 73), + (7, 87, 22, 87), + (139, 87, 154, 87), + (87, 139, 87, 154), + (73, 139, 73, 154), + (139, 87, 139, 139), + (144, 87, 144, 144), + (87, 139, 139, 139), + (87, 144, 144, 144), + (22, 139, 73, 139), + (17, 144, 73, 144), + (17, 87, 17, 144), + (22, 87, 22, 139), ], [], ) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" index eb890e2..96a4509 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/weapon.mbt" @@ -48,14 +48,16 @@ struct Sword { damage : Int range : Int cd : CD + repel : Int } fn Sword::new(level : Int) -> Sword { { level, - damage: 10 + level * 10, - range: 5 + level / 4, + damage: 10 + level * 8, + range: 6 + level / 4, cd: CD::new(100, 10 + level / 5), + repel: 2 + level / 4, } } @@ -64,8 +66,8 @@ fn sword_determine_direction( mouse_y : Int, pos : Position ) -> Direction { - let dx = mouse_x.to_double() - pos.x - let dy = mouse_y.to_double() - pos.y + let dx = mouse_x.to_float() - pos.x + let dy = mouse_y.to_float() - pos.y if dy < 0 && dx.abs() < dy.abs() { Up } else if dy > 0 && dx.abs() < dy.abs() { @@ -82,7 +84,7 @@ fn sword_generate_attack_hitbox( sword : Sword, pos : Position ) -> Shape { - let range = sword.range.to_double() + let range = sword.range.to_float() match self { Left => Rect(pos.x - 5 - range, pos.y - 5, pos.x - 5, pos.y) Right => Rect(pos.x, pos.y - 5, pos.x + 5 + range, pos.y + 5) @@ -100,11 +102,12 @@ fn sword_attack( ) -> Unit { for _, enemy in room.enemys { let { damage, .. } = self - let hitbox = sword_determine_direction(mouse_x, mouse_y, pos).sword_generate_attack_hitbox( - self, pos, - ) - if hitbox.intersect(enemy.get_hitbox()) { - enemy.damage(damage) + let direction = sword_determine_direction(mouse_x, mouse_y, pos) + let hitbox = direction.sword_generate_attack_hitbox(self, pos) + if hitbox.intersect(get_hitbox_f(enemy.pos, 5)) { + enemy.hp -= damage + music_damage() + enemy.repel(direction, self.repel) } } self.cd.refersh() @@ -113,7 +116,7 @@ fn sword_attack( struct Slingshot { level : Int damage : Int - speed : Double + speed : Float cd : CD } @@ -121,7 +124,7 @@ fn Slingshot::new(level : Int) -> Slingshot { { level, damage: 8 + level * 2, - speed: 0.5 + 0.2 * level.to_double(), + speed: 0.5.to_float() + 0.2.to_float() * level.to_float(), cd: CD::new(100, 2 + level / 3 * 2), } } @@ -135,7 +138,7 @@ fn slingshot_attack( ) -> Unit { let (id, arrow) = generate_arrow( pos, - { x: mouse_x.to_double(), y: mouse_y.to_double() }, + { x: mouse_x.to_float(), y: mouse_y.to_float() }, self.speed, self.damage, false, diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" index 81ba666..c4a136e 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/xor_shift.mbt" @@ -14,7 +14,7 @@ fn next(self : RandomGenerator, range_l : Int, range_r : Int) -> Int { } fn next_pos(self : RandomGenerator) -> Position { - { x: self.next(40, 100).to_double(), y: self.next(40, 100).to_double() } + { x: self.next(40, 100).to_float(), y: self.next(40, 100).to_float() } } let random : RandomGenerator = RandomGenerator::new(114514) From 97b4932dca18e0e9815a11c5c214a1404829f6c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Thu, 21 Nov 2024 04:03:19 +0800 Subject: [PATCH 5/8] patch: cd --- .../code/src/game.mbt" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" index 4512ca2..da60cd5 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -48,7 +48,7 @@ fn update_level(self : Player) -> Unit { } } game.current_room = generate_room(game.level) - game.pause_cd = CD::new(50, 1) + game.pause_cd = CD::new(50 + game.level / 3 * 5, 1) } None => () } From e7dd611f83134442631affa781a1d37dd95fc7d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Thu, 21 Nov 2024 04:03:46 +0800 Subject: [PATCH 6/8] patch: fix --- .../code/src/game.mbt" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" index da60cd5..46b37f5 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -48,7 +48,7 @@ fn update_level(self : Player) -> Unit { } } game.current_room = generate_room(game.level) - game.pause_cd = CD::new(50 + game.level / 3 * 5, 1) + game.pause_cd = CD::new(50 + game.level / 5 * 5, 1) } None => () } From 6acd373ad7c6e94faf54e0149407c6f881c5712c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Thu, 21 Nov 2024 04:04:30 +0800 Subject: [PATCH 7/8] fix: patch cd --- .../code/src/game.mbt" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" index 46b37f5..938e675 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -48,7 +48,7 @@ fn update_level(self : Player) -> Unit { } } game.current_room = generate_room(game.level) - game.pause_cd = CD::new(50 + game.level / 5 * 5, 1) + game.pause_cd = CD::new(50 + game.level*2, 1) } None => () } From be291af05f01bb0e77430cf484621379e7a6b71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=81=AF?= Date: Thu, 21 Nov 2024 06:42:09 +0800 Subject: [PATCH 8/8] update: last --- .../code/src/arrow.mbt" | 4 ++-- .../code/src/game.mbt" | 2 +- .../code/src/hitbox.mbt" | 2 +- .../code/src/pos.mbt" | 2 +- .../code/src/render.mbt" | 5 ++--- .../code/src/room.mbt" | 1 + .../game.wasm" | Bin 50821 -> 23934 bytes 7 files changed, 8 insertions(+), 8 deletions(-) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" index 44ae4f3..287751a 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/arrow.mbt" @@ -57,7 +57,7 @@ fn generate_arrow( fn update_arrow(self : Room) -> Unit { let erase_list : Array[UInt] = [] for id, arrow in self.arrows { - let hitbox = get_hitbox_f(arrow.pos,2.5) + let hitbox = get_hitbox_f(arrow.pos, 2.5) let mut flag = false if game.current_room.arrow_walls.shape_in_box(hitbox) { erase_list.push(id) @@ -74,7 +74,7 @@ fn update_arrow(self : Room) -> Unit { flag = true } for _, enemy in self.enemys { - if get_hitbox_f(enemy.pos,5).intersect(hitbox) { + if get_hitbox_f(enemy.pos, 5).intersect(hitbox) { enemy.hp -= arrow.damage music_damage() erase_list.push(id) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" index 938e675..666f41a 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/game.mbt" @@ -48,7 +48,7 @@ fn update_level(self : Player) -> Unit { } } game.current_room = generate_room(game.level) - game.pause_cd = CD::new(50 + game.level*2, 1) + game.pause_cd = CD::new(50 + game.level * 2, 1) } None => () } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" index 85fa2ad..23db03e 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/hitbox.mbt" @@ -1,5 +1,5 @@ enum Shape { - Rect(Float,Float,Float,Float) + Rect(Float, Float, Float, Float) } struct HitBox { diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" index c55bc2e..976a65c 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/pos.mbt" @@ -15,7 +15,7 @@ fn distance(self : Position, other : Position) -> Float { (self.y - other.y) * (self.y - other.y)).sqrt() } -fn get_hitbox_f(self:Position,f:Float) -> Shape { +fn get_hitbox_f(self : Position, f : Float) -> Shape { Rect(self.x - f, self.y - f, self.x + f, self.y + f) } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" index 453b12e..dfd6f68 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/render.mbt" @@ -3,8 +3,7 @@ fn render(room : Room, player : Player) -> Unit { if room.upgrade { set_main_color_with_transparent(LightBrown) render_upgrade_room() - } - else if room.start { + } else if room.start { set_main_color_with_transparent(LightBrown) render_start_room() } @@ -51,5 +50,5 @@ fn render_background() -> Unit { set_draw_color(2, Brown) set_draw_color(3, Grey) set_draw_color(4, Black) - map_texture.render_texture(0,0) + map_texture.render_texture(0, 0) } diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" index 970085a..10c0e17 100644 --- "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" +++ "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/code/src/room.mbt" @@ -23,6 +23,7 @@ fn Room::new(upgrade : Bool, start : Bool) -> Room { start, } } + fn update_room(self : Room) -> Unit { if self.stop.not() { set_main_color_with_transparent(LightBrown) diff --git "a/teams/\346\261\252\346\261\252\347\253\213\345\212\237/game.wasm" "b/teams/\346\261\252\346\261\252\347\253\213\345\212\237/game.wasm" index aadbafceffc9716e696992997fb7c845cce8733a..59a715b7b061b8342f58f367cac15ef554a9681a 100644 GIT binary patch literal 23934 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 L30?ehbn*WHCPJ!V