AgentVerse commited on
Commit
670a607
·
1 Parent(s): 2782841

first commit

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. ui/.github/CODE_OF_CONDUCT.md +84 -0
  2. ui/.github/CONTRIBUTING.md +80 -0
  3. ui/.github/FUNDING.yml +5 -0
  4. ui/.github/no-response.yml +14 -0
  5. ui/.gitignore +13 -0
  6. ui/LICENSE +21 -0
  7. ui/README.md +1 -0
  8. ui/dist/assets/may.png +0 -0
  9. ui/dist/assets/sprites/archie.png +0 -0
  10. ui/dist/assets/sprites/birch.png +0 -0
  11. ui/dist/assets/sprites/brendan.png +0 -0
  12. ui/dist/assets/sprites/joseph.png +0 -0
  13. ui/dist/assets/sprites/maxie.png +0 -0
  14. ui/dist/assets/sprites/may.png +0 -0
  15. ui/dist/assets/sprites/npc1.png +0 -0
  16. ui/dist/assets/sprites/steven.png +0 -0
  17. ui/dist/assets/tilemaps/json/tmp.json +140 -0
  18. ui/dist/assets/tilemaps/json/town.json +0 -0
  19. ui/dist/assets/tilemaps/tiles/tileset.png +0 -0
  20. ui/dist/assets/tilemaps/tiles/tileset.tsx +4 -0
  21. ui/dist/assets/tilemaps/tiles/town.tsx +4 -0
  22. ui/dist/index.html +20 -0
  23. ui/package-lock.json +0 -0
  24. ui/package.json +38 -0
  25. ui/rollup.config.dev.mjs +75 -0
  26. ui/rollup.config.dist.mjs +65 -0
  27. ui/run.sh +4 -0
  28. ui/screenshot.png +0 -0
  29. ui/src/classes/actor.ts +54 -0
  30. ui/src/classes/event_center.ts +5 -0
  31. ui/src/classes/npc.ts +246 -0
  32. ui/src/classes/player.ts +66 -0
  33. ui/src/constants.ts +3 -0
  34. ui/src/index.ts +79 -0
  35. ui/src/phaser3-rex-plugins/plugins/alphamaskimage.d.ts +2 -0
  36. ui/src/phaser3-rex-plugins/plugins/anchor-plugin.d.ts +9 -0
  37. ui/src/phaser3-rex-plugins/plugins/anchor.d.ts +2 -0
  38. ui/src/phaser3-rex-plugins/plugins/arcadestepclock.js +2 -0
  39. ui/src/phaser3-rex-plugins/plugins/arcadetcrp-plugin.js +39 -0
  40. ui/src/phaser3-rex-plugins/plugins/arcadetcrp.js +11 -0
  41. ui/src/phaser3-rex-plugins/plugins/board-plugin.js +40 -0
  42. ui/src/phaser3-rex-plugins/plugins/boids-plugin.js +18 -0
  43. ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.d.ts +8 -0
  44. ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.js +18 -0
  45. ui/src/phaser3-rex-plugins/plugins/bracketparser2.js +2 -0
  46. ui/src/phaser3-rex-plugins/plugins/buffdata-plugin.js +24 -0
  47. ui/src/phaser3-rex-plugins/plugins/buildarcadeobject.d.ts +2 -0
  48. ui/src/phaser3-rex-plugins/plugins/canvas.d.ts +2 -0
  49. ui/src/phaser3-rex-plugins/plugins/canvasdata-plugin.js +34 -0
  50. ui/src/phaser3-rex-plugins/plugins/canvasdata.d.ts +10 -0
ui/.github/CODE_OF_CONDUCT.md ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Code of Conduct
2
+
3
+ ## 1. Purpose
4
+
5
+ A primary goal of Phaser is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof).
6
+
7
+ This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior.
8
+
9
+ We invite all those who participate in Phaser to help us create safe and positive experiences for everyone.
10
+
11
+ ## 2. Open Source Citizenship
12
+
13
+ A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community.
14
+
15
+ Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society.
16
+
17
+ If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know.
18
+
19
+ ## 3. Expected Behavior
20
+
21
+ The following behaviors are expected and requested of all community members:
22
+
23
+ * Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community.
24
+ * Exercise consideration and respect in your speech and actions.
25
+ * Attempt collaboration before conflict.
26
+ * Refrain from demeaning, discriminatory, or harassing behavior and speech.
27
+ * Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential.
28
+ * Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations.
29
+
30
+ ## 4. Unacceptable Behavior
31
+
32
+ The following behaviors are considered harassment and are unacceptable within our community:
33
+
34
+ * Violence, threats of violence or violent language directed against another person.
35
+ * Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language.
36
+ * Posting or displaying sexually explicit or violent material.
37
+ * Posting or threatening to post other people’s personally identifying information ("doxing").
38
+ * Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability.
39
+ * Inappropriate photography or recording.
40
+ * Inappropriate physical contact. You should have someone’s consent before touching them.
41
+ * Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances.
42
+ * Deliberate intimidation, stalking or following (online or in person).
43
+ * Advocating for, or encouraging, any of the above behavior.
44
+ * Sustained disruption of community events, including talks and presentations.
45
+
46
+ ## 5. Consequences of Unacceptable Behavior
47
+
48
+ Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated.
49
+
50
+ Anyone asked to stop unacceptable behavior is expected to comply immediately.
51
+
52
+ If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event).
53
+
54
+ ## 6. Reporting Guidelines
55
+
56
+ If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. [email protected].
57
+
58
+
59
+
60
+ Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress.
61
+
62
+ ## 7. Addressing Grievances
63
+
64
+ If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify Photon Storm Ltd with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies.
65
+
66
+
67
+
68
+ ## 8. Scope
69
+
70
+ We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business.
71
+
72
+ This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members.
73
+
74
+ ## 9. Contact info
75
+
76
77
+
78
+ ## 10. License and attribution
79
+
80
+ This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/).
81
+
82
+ Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy).
83
+
84
+ Retrieved on November 22, 2016 from [http://citizencodeofconduct.org/](http://citizencodeofconduct.org/)
ui/.github/CONTRIBUTING.md ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # How to contribute
2
+
3
+ It's important to us that you feel you can contribute towards the evolution of Phaser. This can take many forms: from helping to fix bugs or improve the docs, to adding in new features to the source. This guide should help you in making that process as smooth as possible.
4
+
5
+ Before contributing, please read the [code of conduct](https://github.com/photonstorm/phaser/blob/master/.github/CODE_OF_CONDUCT.md).
6
+
7
+ ## Reporting issues
8
+
9
+ [GitHub Issues][0] is the place to report bugs you may have found. When submitting a bug please do the following:
10
+
11
+ **1. Search for existing issues.** Your bug may have already been fixed, or cannot, or will not, be fixed. So be sure to search the issues first before putting in a duplicate issue.
12
+
13
+ **2. Not sure if it's a bug?.** Please ask on the [forum][4]. If something is blatantly wrong then post it to GitHub. But if you feel it might just be because you're not sure of expected behavior, then it might save us time, and get you a response faster, if you post it to the Phaser forum instead.
14
+
15
+ **3. Create an isolated and reproducible test case.** If you are reporting a bug, make sure you also have a minimal, runnable, code example that reproduces the problem you have.
16
+
17
+ **4. Include a live example.** After narrowing your code down to only the problem areas, make use of [jsFiddle][1], [jsBin][2], [CodePen][5], or a link to your live site so that we can view a live example of the problem.
18
+
19
+ **5. Share as much information as possible.** Include browser version affected, your OS, version of the library, steps to reproduce, etc. "X isn't working!!!1!" will probably just be closed.
20
+
21
+ ## Support Forum
22
+
23
+ We have a very active [Phaser Support Forum][4]. If you need general support, or are struggling to understand how to do something or need your code checked over, then we would urge you to post it to our forum. There are a lot of friendly devs in there who can help, as well as the core Phaser team, so it's a great place to get support. You're welcome to report bugs directly on GitHub, but for general support we'd always recommend using the forum first.
24
+
25
+ ## Making Changes
26
+
27
+ I'm assuming you already have a recent version of [Node](https://nodejs.org) installed locally and can run `npm`. This guide is tested and works on both Windows 10 and OS X.
28
+
29
+ ### 1. Checkout the repos
30
+
31
+ Check-out both the [Phaser repo](https://github.com/photonstorm/phaser) and the [Phaser 3 Examples Repo](https://github.com/photonstorm/phaser3-examples). Make sure the Phaser 3 Examples repo is saved locally in a folder called `phaser3-examples`, which will be the default for most Git clients.
32
+
33
+ ### 2. Matching Directory Levels
34
+
35
+ Ensure that both repos live at the same depth in your directory structure. For example: `/usr/home/web/phaser` and `/usr/home/web/phaser3-examples`. This is so the dev build scripts in the Phaser repo can safely copy files to `../phaser3-examples` and have them end up in the correct place.
36
+
37
+ ### 3. Install dependencies
38
+
39
+ Using your console, run `npm install` or `yarn install` as we've configs for both. This process will install a local copy of webpack and a handful of small support scripts. Note that Yarn on Windows seems to have issues making some packages global, so stick with npm if this is the case.
40
+
41
+ ### 4. Webpack
42
+
43
+ Making sure you've got both repos checked out, and at the same directory level in your filesystem, issue the command `webpack`. If you can't issue the command then webpack may need [installing globally](https://webpack.js.org/guides/installation/). Webpack will build Phaser and if there are any path errors in the code they'll be flagged during the build process.
44
+
45
+ What you need is the ability to issue the command `webpack` within the v3 folder and have it work.
46
+
47
+ ### 5. ESLint
48
+
49
+ There is an ESLint configuration and an Editor Configuration in the v3 folder. **Please adhere to them!** Although not enforced in the build process yet, I will be adding that at a later point. There are lots of tools you can install so your editor of choice will check the ESLint config during development.
50
+
51
+ To test if your code passes our lint config issue the command `npm run lint`.
52
+
53
+ ## Coding style preferences are not contributions
54
+
55
+ If your PR is doing little more than changing the Phaser source code into a format / coding style that you prefer then we will automatically close it. All PRs must adhere to the coding style already set-out across the thousands of lines of code in Phaser. Your personal preferences for how things should "look" or be structured do not apply here, sorry. PRs should fix bugs, fix documentation or add features. No changes for the sake of change.
56
+
57
+ ## I don't really like git / node.js, but I can fix this bug
58
+
59
+ That is fine too. While Pull Requests are the best thing in the world for us, they are not the only way to help. You're welcome to post fixes to our forum or even just email them to us. All we ask is that you still adhere to the guidelines presented here re: ESLint, etc.
60
+
61
+ ## Code Style Guide
62
+
63
+ We provide an .editorconfig and eslint config for you to use, but generally:
64
+
65
+ - Use 4 spaces for tabs, never tab characters.
66
+
67
+ - No trailing whitespace, blank lines should have no whitespace.
68
+
69
+ - Always favor strict equals `===` unless you *need* to use type coercion.
70
+
71
+ - Follow conventions already in the code, and listen to eslint. Our config is set-up for a reason.
72
+
73
+ Thanks to Chad for creating the original Pixi.js Contributing file which we adapted for Phaser.
74
+
75
+ [0]: https://github.com/photonstorm/phaser/issues
76
+ [1]: http://jsfiddle.net
77
+ [2]: http://jsbin.com/
78
+ [3]: http://nodejs.org
79
+ [4]: https://phaser.discourse.group/
80
+ [5]: https://codepen.io/pen?template=YeEWom "Phaser 3 game template"
ui/.github/FUNDING.yml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # These are supported funding model platforms
2
+
3
+ github: photonstorm
4
+ patreon: photonstorm
5
+ custom: https://phaser.io/community/donate
ui/.github/no-response.yml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Configuration for no-response - https://github.com/probot/no-response
2
+
3
+ # Number of days of inactivity before an Issue is closed for lack of response
4
+ daysUntilClose: 30
5
+ # Label requiring a response
6
+ # TODO: also close `needs-reproduction` issues (blocked by https://github.com/probot/no-response/issues/11)
7
+ responseRequiredLabel: 🤷‍♂️ More info needed
8
+ # Comment to post when closing an issue due to lack of response.
9
+ closeComment: >
10
+ Thank you for taking time to open this issue.
11
+
12
+ We haven’t gotten a response to our questions above. With the details currently given in the issue we don’t have enough information to take action.
13
+
14
+ So we’re going to close this issue. We can re-open it if you find the time to provide the information we need.
ui/.gitignore ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # System and IDE files
2
+ Thumbs.db
3
+ .DS_Store
4
+ .idea
5
+ *.suo
6
+ *.sublime-project
7
+ *.sublime-workspace
8
+
9
+ # Vendors
10
+ node_modules/
11
+
12
+ # Build
13
+ /npm-debug.log
ui/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2017 Richard Davey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
ui/README.md ADDED
@@ -0,0 +1 @@
 
 
1
+ # Work in progress
ui/dist/assets/may.png ADDED
ui/dist/assets/sprites/archie.png ADDED
ui/dist/assets/sprites/birch.png ADDED
ui/dist/assets/sprites/brendan.png ADDED
ui/dist/assets/sprites/joseph.png ADDED
ui/dist/assets/sprites/maxie.png ADDED
ui/dist/assets/sprites/may.png ADDED
ui/dist/assets/sprites/npc1.png ADDED
ui/dist/assets/sprites/steven.png ADDED
ui/dist/assets/tilemaps/json/tmp.json ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ { "compressionlevel":-1,
2
+ "height":100,
3
+ "infinite":false,
4
+ "layers":[
5
+ {
6
+ "data":[4, 1, 3, 3, 3, 2, 4, 3, 2, 2, 2, 4, 3, 3, 3, 4, 1, 1, 1, 1, 2, 1, 3, 4, 2, 3, 4, 2, 2, 3, 2, 4, 4, 4, 4, 3, 3, 2, 4, 2, 1, 4, 1, 2, 4, 3, 2, 3, 1, 2, 2, 1, 3, 2, 2, 3, 1, 2, 3, 3, 1, 3, 4, 4, 3, 2, 1, 1, 1, 1, 4, 1, 1, 2, 2, 3, 1, 1, 4, 1, 2, 4, 4, 1, 1, 2, 3, 3, 3, 4, 1, 4, 4, 3, 2, 4, 3, 3, 2, 1,
7
+ 2, 1, 3, 1, 4, 3, 4, 2, 1, 4, 3, 1, 2, 1, 2, 1, 1, 2, 2, 3, 2, 4, 4, 4, 2, 1, 4, 1, 2, 1, 1, 2, 3, 1, 2, 1, 4, 3, 3, 1, 2, 1, 2, 2, 1, 2, 1, 4, 3, 3, 4, 4, 3, 1, 3, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 2, 2, 3, 3, 3, 4, 1, 1, 2, 3, 3, 3, 4, 1, 4, 1, 2, 2, 1, 3, 4, 3, 4, 3, 3, 2, 3, 3, 4, 4, 3, 2, 1, 1, 3,
8
+ 2, 2, 3, 4, 3, 4, 2, 4, 1, 1, 3, 1, 1, 2, 3, 3, 4, 3, 4, 3, 1, 3, 3, 2, 3, 3, 3, 2, 1, 3, 2, 2, 4, 2, 4, 2, 2, 1, 4, 4, 3, 2, 1, 1, 1, 1, 1, 4, 3, 2, 2, 3, 3, 2, 4, 1, 1, 2, 4, 2, 1, 2, 1, 2, 4, 2, 1, 3, 1, 4, 4, 2, 1, 4, 4, 2, 1, 2, 3, 3, 1, 4, 3, 3, 4, 2, 1, 4, 4, 2, 2, 1, 2, 3, 3, 3, 3, 1, 1, 3,
9
+ 4, 1, 1, 1, 4, 1, 4, 4, 4, 2, 1, 2, 2, 2, 4, 1, 2, 4, 2, 4, 1, 2, 1, 4, 4, 4, 2, 1, 1, 4, 2, 2, 2, 4, 3, 3, 3, 4, 2, 4, 2, 2, 4, 1, 3, 1, 2, 4, 3, 3, 1, 1, 4, 1, 3, 2, 2, 3, 1, 1, 1, 3, 2, 2, 2, 1, 2, 1, 4, 4, 3, 3, 3, 2, 2, 3, 3, 4, 2, 2, 1, 1, 1, 4, 4, 4, 4, 3, 3, 2, 3, 3, 2, 2, 3, 3, 3, 1, 1, 4,
10
+ 1, 3, 1, 4, 1, 1, 4, 3, 3, 3, 1, 2, 4, 3, 4, 4, 3, 3, 4, 4, 2, 3, 3, 4, 4, 2, 1, 4, 1, 2, 2, 4, 1, 2, 1, 3, 1, 2, 1, 2, 1, 3, 4, 3, 3, 1, 1, 2, 4, 3, 1, 3, 2, 1, 1, 2, 2, 2, 4, 1, 2, 1, 2, 3, 4, 1, 3, 4, 4, 1, 3, 1, 2, 2, 1, 1, 3, 3, 4, 2, 2, 3, 1, 2, 1, 2, 4, 4, 1, 3, 2, 2, 4, 2, 2, 3, 4, 4, 2, 3,
11
+ 3, 3, 2, 4, 4, 1, 3, 2, 3, 2, 2, 2, 3, 4, 3, 4, 3, 1, 2, 3, 2, 2, 4, 3, 4, 2, 1, 3, 1, 1, 4, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 3, 3, 1, 1, 2, 4, 3, 1, 1, 3, 1, 1, 3, 3, 1, 3, 1, 4, 3, 4, 2, 3, 1, 3, 2, 2, 4, 1, 1, 2, 2, 4, 2, 3, 4, 2, 3, 4, 2, 2, 4, 3, 3, 2, 3, 3, 3, 4, 4, 3,
12
+ 1, 4, 2, 2, 4, 4, 1, 3, 4, 1, 3, 4, 2, 2, 3, 3, 1, 2, 3, 3, 1, 3, 3, 2, 1, 2, 4, 2, 1, 4, 3, 3, 2, 1, 3, 2, 2, 4, 2, 1, 1, 2, 4, 1, 1, 1, 1, 4, 3, 1, 3, 4, 2, 2, 2, 3, 2, 3, 4, 3, 3, 2, 2, 4, 4, 3, 2, 1, 2, 3, 4, 1, 3, 3, 4, 3, 1, 4, 3, 2, 1, 4, 3, 4, 1, 4, 2, 3, 1, 2, 4, 1, 4, 3, 4, 2, 4, 1, 4, 4,
13
+ 4, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 2, 1, 1, 3, 1, 3, 4, 2, 3, 2, 4, 2, 3, 1, 1, 3, 3, 1, 3, 2, 3, 1, 3, 1, 2, 2, 2, 4, 4, 4, 4, 2, 2, 1, 4, 4, 4, 4, 3, 3, 2, 3, 3, 4, 2, 2, 3, 1, 2, 4, 4, 2, 4, 1, 1, 4, 3, 2, 3, 3, 4, 1, 1, 3, 3, 1, 1, 4, 3, 3, 1, 4, 2, 4, 2, 1, 4, 3, 2, 1, 4, 1, 3, 2, 3, 4, 2, 2, 4,
14
+ 3, 1, 2, 3, 2, 2, 1, 2, 1, 1, 3, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 4, 3, 2, 4, 2, 4, 2, 1, 3, 4, 2, 2, 3, 3, 4, 3, 2, 1, 3, 1, 3, 4, 3, 4, 1, 4, 3, 2, 2, 3, 3, 1, 2, 2, 2, 1, 4, 1, 2, 4, 2, 2, 2, 1, 2, 1, 3, 4, 3, 1, 2, 3, 3, 4, 4, 4, 1, 4, 4, 3, 3, 3, 2, 4, 4, 1, 3, 1, 2, 2, 4, 4, 2, 1, 3, 1, 4,
15
+ 3, 3, 4, 3, 3, 2, 3, 1, 3, 3, 3, 4, 2, 4, 1, 3, 2, 2, 1, 3, 2, 2, 4, 2, 3, 4, 4, 3, 3, 3, 2, 2, 3, 2, 2, 1, 3, 4, 1, 3, 4, 1, 1, 3, 4, 1, 1, 2, 2, 4, 2, 2, 1, 4, 1, 1, 3, 3, 2, 2, 1, 2, 4, 1, 1, 3, 3, 4, 2, 2, 4, 4, 2, 4, 2, 4, 1, 2, 2, 3, 4, 2, 2, 1, 2, 4, 3, 3, 2, 2, 1, 3, 2, 4, 1, 3, 1, 2, 4, 4,
16
+ 3, 4, 1, 3, 2, 3, 1, 2, 3, 3, 2, 3, 4, 3, 3, 1, 3, 4, 3, 3, 2, 1, 2, 3, 1, 1, 4, 1, 2, 3, 3, 1, 3, 3, 1, 3, 2, 3, 3, 3, 3, 2, 2, 3, 1, 2, 3, 3, 1, 3, 2, 2, 2, 3, 2, 2, 4, 2, 1, 1, 1, 1, 2, 2, 2, 1, 3, 1, 1, 4, 2, 4, 1, 3, 4, 2, 1, 4, 2, 2, 4, 4, 2, 4, 3, 4, 4, 2, 3, 3, 2, 3, 2, 4, 2, 4, 2, 3, 3, 3,
17
+ 1, 3, 2, 1, 2, 2, 3, 2, 4, 1, 2, 2, 2, 4, 2, 2, 4, 1, 3, 3, 3, 3, 4, 1, 2, 2, 1, 1, 2, 3, 3, 2, 2, 1, 1, 4, 2, 2, 2, 2, 4, 2, 1, 4, 4, 1, 2, 2, 1, 4, 3, 4, 4, 4, 4, 2, 2, 2, 4, 2, 3, 1, 2, 3, 3, 2, 2, 2, 2, 4, 1, 4, 3, 3, 4, 1, 2, 1, 1, 3, 4, 3, 1, 1, 1, 4, 3, 1, 1, 1, 4, 4, 1, 3, 2, 2, 1, 1, 1, 3,
18
+ 1, 3, 1, 1, 3, 1, 3, 3, 2, 1, 1, 1, 1, 3, 4, 2, 1, 3, 2, 4, 1, 2, 1, 4, 1, 1, 4, 4, 2, 2, 3, 4, 1, 2, 1, 1, 2, 3, 2, 3, 1, 1, 3, 3, 4, 4, 3, 3, 4, 3, 2, 3, 3, 1, 4, 3, 4, 2, 1, 3, 1, 1, 1, 4, 3, 2, 4, 4, 1, 2, 4, 4, 1, 2, 1, 1, 3, 1, 3, 2, 1, 2, 4, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 2, 2, 2, 1, 3, 3, 3,
19
+ 4, 2, 3, 1, 4, 3, 3, 3, 3, 3, 4, 1, 3, 1, 2, 1, 4, 3, 1, 4, 4, 2, 1, 1, 4, 2, 1, 2, 4, 2, 1, 4, 4, 3, 2, 2, 1, 2, 4, 2, 4, 3, 4, 3, 2, 4, 4, 2, 2, 1, 1, 3, 4, 3, 1, 3, 3, 2, 3, 1, 1, 4, 1, 4, 2, 4, 1, 4, 3, 2, 3, 1, 4, 2, 2, 2, 3, 3, 2, 4, 1, 3, 2, 1, 3, 2, 4, 1, 3, 2, 4, 4, 4, 3, 1, 3, 1, 3, 2, 3,
20
+ 1, 2, 3, 1, 3, 2, 2, 3, 4, 4, 1, 3, 4, 1, 1, 1, 1, 4, 1, 3, 1, 4, 3, 2, 1, 4, 1, 2, 3, 1, 4, 4, 4, 4, 4, 3, 4, 4, 1, 2, 2, 4, 2, 4, 3, 4, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 2, 2, 3, 1, 4, 1, 2, 3, 1, 3, 3, 1, 3, 4, 2, 3, 4, 1, 1, 4, 4, 4, 1, 1, 4, 4, 1, 2, 4, 2, 3, 2, 4, 3, 3, 4, 4, 1, 4, 2, 2, 1, 3, 4,
21
+ 1, 3, 1, 4, 2, 1, 2, 2, 2, 3, 2, 3, 2, 4, 3, 4, 3, 4, 3, 4, 1, 3, 2, 4, 4, 3, 3, 2, 3, 4, 1, 2, 3, 3, 2, 1, 2, 4, 2, 1, 4, 4, 1, 2, 3, 1, 4, 4, 1, 4, 2, 4, 4, 3, 2, 3, 1, 2, 2, 3, 2, 3, 2, 2, 1, 4, 2, 2, 3, 2, 3, 4, 3, 3, 2, 1, 1, 3, 3, 3, 3, 2, 2, 4, 1, 4, 2, 3, 1, 4, 3, 3, 3, 3, 2, 4, 3, 4, 3, 3,
22
+ 3, 4, 3, 4, 3, 2, 4, 1, 1, 2, 4, 3, 4, 4, 1, 1, 2, 1, 2, 3, 4, 4, 4, 3, 2, 3, 2, 3, 3, 1, 4, 4, 1, 3, 1, 2, 4, 4, 1, 2, 4, 4, 2, 3, 3, 2, 2, 1, 2, 1, 2, 2, 2, 2, 3, 4, 2, 4, 4, 3, 4, 4, 1, 3, 2, 1, 1, 3, 4, 1, 3, 2, 4, 4, 4, 4, 3, 3, 3, 4, 2, 4, 3, 2, 3, 2, 2, 3, 4, 4, 4, 4, 4, 3, 4, 3, 2, 2, 4, 4,
23
+ 2, 1, 4, 1, 2, 2, 4, 1, 1, 4, 1, 4, 1, 1, 3, 1, 4, 4, 4, 2, 2, 3, 4, 3, 4, 4, 3, 1, 4, 3, 4, 3, 2, 3, 4, 2, 4, 3, 3, 1, 3, 3, 3, 2, 1, 3, 4, 1, 1, 1, 2, 1, 2, 3, 1, 3, 1, 1, 1, 4, 2, 3, 4, 1, 2, 3, 2, 2, 2, 1, 3, 4, 4, 2, 4, 4, 1, 4, 3, 3, 4, 3, 4, 4, 2, 1, 1, 4, 1, 1, 3, 1, 3, 1, 2, 1, 4, 3, 4, 3,
24
+ 3, 2, 3, 1, 4, 3, 2, 4, 4, 3, 1, 4, 3, 2, 3, 2, 1, 2, 3, 4, 1, 1, 1, 3, 1, 3, 3, 4, 3, 4, 2, 3, 1, 2, 4, 4, 1, 3, 2, 1, 2, 2, 1, 1, 3, 1, 1, 2, 2, 2, 4, 4, 2, 1, 2, 3, 4, 3, 1, 3, 1, 3, 2, 3, 3, 2, 2, 3, 2, 2, 4, 2, 3, 4, 3, 3, 4, 3, 4, 2, 3, 1, 1, 1, 4, 1, 1, 3, 2, 4, 1, 2, 3, 1, 1, 4, 3, 3, 3, 4,
25
+ 4, 1, 4, 3, 2, 2, 2, 4, 1, 1, 3, 3, 1, 3, 4, 3, 2, 2, 1, 2, 4, 3, 1, 4, 4, 1, 3, 3, 1, 2, 3, 1, 2, 4, 3, 2, 4, 1, 1, 3, 3, 3, 4, 1, 3, 3, 3, 2, 4, 4, 2, 1, 2, 1, 3, 1, 2, 1, 3, 4, 1, 1, 4, 3, 2, 1, 4, 2, 1, 1, 2, 4, 4, 2, 4, 3, 2, 1, 3, 1, 3, 1, 4, 3, 3, 3, 3, 1, 1, 3, 1, 2, 4, 1, 4, 2, 2, 1, 1, 2,
26
+ 4, 4, 1, 2, 4, 3, 4, 3, 4, 1, 4, 3, 3, 1, 1, 1, 2, 3, 2, 3, 1, 4, 4, 4, 2, 4, 3, 4, 2, 1, 2, 4, 2, 2, 4, 3, 2, 3, 2, 4, 1, 1, 2, 2, 1, 1, 4, 4, 3, 1, 4, 4, 4, 3, 2, 4, 1, 2, 3, 3, 1, 2, 3, 1, 1, 2, 1, 4, 4, 2, 2, 4, 2, 3, 4, 4, 2, 3, 2, 3, 2, 1, 3, 3, 4, 4, 3, 2, 4, 2, 2, 3, 1, 3, 2, 4, 4, 1, 3, 3,
27
+ 1, 2, 1, 3, 1, 4, 1, 4, 3, 3, 4, 3, 1, 2, 2, 1, 2, 1, 1, 4, 1, 2, 2, 3, 1, 3, 3, 4, 1, 2, 1, 1, 4, 3, 3, 3, 4, 2, 3, 1, 1, 3, 3, 4, 4, 2, 1, 1, 3, 1, 2, 1, 4, 2, 2, 1, 4, 2, 1, 3, 3, 2, 4, 2, 3, 2, 2, 1, 1, 4, 3, 4, 2, 4, 1, 3, 1, 3, 4, 3, 3, 2, 3, 2, 4, 4, 1, 4, 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3,
28
+ 2, 1, 2, 2, 4, 1, 3, 1, 2, 4, 1, 1, 4, 3, 2, 4, 4, 3, 1, 1, 1, 2, 1, 3, 1, 4, 2, 3, 1, 3, 2, 4, 2, 2, 3, 3, 3, 2, 3, 4, 2, 1, 1, 2, 3, 4, 2, 1, 2, 4, 4, 2, 4, 3, 4, 4, 1, 1, 1, 2, 3, 4, 4, 2, 2, 4, 4, 3, 3, 4, 2, 4, 3, 4, 4, 2, 4, 3, 3, 4, 1, 1, 4, 4, 1, 4, 4, 2, 2, 3, 3, 1, 1, 3, 3, 1, 3, 2, 4, 2,
29
+ 4, 4, 1, 3, 1, 3, 3, 4, 3, 3, 4, 4, 2, 2, 4, 2, 3, 3, 4, 2, 1, 1, 4, 3, 4, 4, 4, 1, 1, 3, 3, 2, 4, 4, 1, 4, 1, 2, 4, 2, 1, 4, 1, 2, 1, 3, 3, 1, 1, 4, 4, 1, 2, 4, 1, 2, 4, 4, 2, 1, 3, 3, 2, 2, 1, 3, 3, 1, 3, 3, 4, 2, 1, 4, 3, 4, 3, 4, 4, 1, 1, 1, 4, 1, 4, 2, 4, 1, 2, 3, 3, 4, 3, 4, 4, 3, 1, 2, 4, 3,
30
+ 3, 4, 1, 1, 4, 3, 4, 2, 4, 1, 3, 2, 3, 1, 4, 2, 4, 3, 4, 4, 2, 2, 3, 2, 3, 1, 2, 2, 4, 2, 1, 3, 3, 1, 4, 3, 2, 4, 1, 1, 2, 4, 4, 1, 2, 2, 1, 2, 1, 3, 1, 3, 2, 2, 2, 2, 3, 3, 4, 3, 3, 1, 2, 1, 3, 4, 3, 3, 1, 2, 2, 1, 1, 3, 4, 3, 4, 3, 4, 1, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 4, 4, 1, 2, 1, 4, 4, 1, 1, 3,
31
+ 3, 1, 4, 1, 1, 3, 1, 2, 3, 1, 3, 2, 3, 4, 3, 4, 2, 2, 3, 4, 2, 1, 4, 3, 2, 2, 3, 3, 2, 2, 4, 4, 3, 4, 1, 1, 4, 3, 1, 2, 4, 2, 4, 3, 2, 2, 2, 3, 1, 3, 3, 2, 4, 4, 2, 1, 2, 2, 2, 1, 4, 1, 2, 1, 1, 2, 4, 3, 1, 1, 2, 2, 1, 1, 3, 3, 4, 2, 1, 3, 1, 4, 4, 4, 4, 1, 4, 3, 3, 2, 1, 1, 4, 4, 3, 2, 1, 4, 2, 4,
32
+ 1, 4, 2, 4, 4, 3, 3, 3, 1, 3, 3, 1, 2, 3, 4, 2, 2, 2, 1, 3, 4, 2, 4, 3, 4, 1, 1, 1, 3, 3, 1, 2, 4, 4, 3, 2, 4, 4, 4, 1, 4, 3, 4, 3, 3, 3, 4, 1, 4, 4, 2, 3, 1, 1, 3, 4, 4, 3, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 4, 2, 3, 4, 3, 4, 4, 3, 3, 1, 2, 3, 3, 1, 1, 4, 3, 4, 4, 4, 1, 1, 2, 2, 2, 2, 3, 4, 4, 3, 3,
33
+ 2, 2, 3, 1, 1, 2, 2, 1, 4, 4, 3, 3, 4, 4, 2, 3, 4, 1, 2, 4, 4, 2, 2, 1, 2, 4, 4, 2, 1, 1, 3, 2, 1, 2, 2, 1, 4, 2, 3, 2, 3, 3, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 3, 3, 1, 3, 4, 2, 4, 2, 3, 2, 2, 4, 1, 1, 3, 2, 1, 3, 3, 1, 1, 3, 2, 3, 2, 4, 2, 3, 4, 4, 1, 2, 1, 1, 4, 2, 2, 1, 3, 3, 4, 1, 3, 4, 2, 3, 3,
34
+ 3, 3, 2, 1, 2, 3, 4, 2, 1, 4, 4, 2, 3, 4, 3, 2, 2, 4, 1, 4, 1, 2, 4, 1, 1, 3, 3, 4, 4, 2, 2, 3, 1, 2, 4, 1, 2, 1, 2, 2, 1, 3, 4, 3, 4, 2, 4, 1, 3, 4, 1, 3, 2, 1, 4, 2, 3, 2, 3, 2, 2, 4, 1, 3, 2, 4, 2, 2, 2, 2, 3, 4, 3, 2, 3, 1, 3, 2, 3, 2, 2, 4, 4, 1, 4, 4, 3, 3, 2, 3, 1, 4, 4, 4, 3, 1, 2, 4, 3, 4,
35
+ 3, 3, 1, 3, 3, 4, 4, 3, 3, 2, 4, 2, 1, 2, 4, 4, 3, 4, 2, 2, 2, 4, 1, 1, 2, 3, 1, 2, 3, 3, 1, 3, 1, 2, 1, 1, 1, 2, 3, 3, 2, 2, 3, 1, 4, 3, 3, 4, 3, 3, 4, 1, 4, 2, 2, 1, 1, 1, 2, 3, 4, 2, 2, 3, 1, 2, 1, 3, 2, 1, 3, 1, 3, 1, 1, 1, 2, 4, 2, 1, 3, 4, 2, 4, 4, 3, 4, 3, 4, 4, 3, 3, 3, 3, 2, 2, 3, 1, 2, 2,
36
+ 2, 4, 1, 1, 2, 4, 2, 1, 3, 2, 1, 2, 2, 4, 2, 4, 4, 1, 4, 4, 2, 3, 4, 2, 2, 2, 2, 1, 4, 4, 3, 1, 3, 2, 1, 4, 1, 3, 4, 3, 3, 4, 3, 4, 4, 1, 1, 1, 4, 2, 1, 1, 4, 3, 2, 2, 1, 2, 4, 1, 4, 3, 3, 3, 2, 3, 2, 4, 2, 2, 4, 1, 4, 3, 1, 1, 3, 2, 4, 1, 4, 3, 3, 4, 2, 2, 2, 2, 4, 4, 3, 1, 1, 4, 4, 1, 3, 3, 1, 4,
37
+ 1, 1, 4, 2, 3, 3, 3, 2, 4, 1, 4, 1, 2, 1, 4, 4, 3, 2, 3, 3, 3, 1, 4, 4, 4, 1, 1, 4, 3, 2, 3, 2, 3, 2, 2, 4, 1, 3, 2, 1, 4, 2, 2, 4, 3, 1, 4, 1, 2, 2, 3, 3, 4, 2, 2, 4, 1, 3, 1, 2, 1, 1, 3, 2, 1, 1, 4, 1, 2, 3, 1, 2, 2, 1, 3, 3, 1, 1, 1, 1, 2, 2, 3, 2, 1, 3, 2, 2, 1, 4, 1, 3, 4, 2, 1, 2, 1, 4, 1, 3,
38
+ 4, 1, 4, 2, 1, 2, 3, 3, 3, 2, 3, 3, 1, 3, 1, 4, 3, 1, 2, 2, 1, 1, 3, 1, 2, 4, 4, 2, 3, 1, 3, 3, 4, 1, 3, 4, 3, 2, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 1, 1, 1, 2, 4, 3, 4, 3, 1, 4, 2, 1, 1, 3, 2, 4, 2, 2, 4, 2, 1, 3, 4, 1, 2, 4, 4, 4, 4, 1, 2, 4, 2, 2, 2, 4, 4, 3, 1, 3, 3, 3, 3, 2, 1, 2, 2, 3, 3, 4, 3, 3,
39
+ 3, 4, 3, 2, 2, 4, 3, 4, 2, 4, 3, 3, 4, 1, 2, 2, 4, 1, 4, 3, 4, 4, 3, 3, 4, 3, 2, 2, 2, 1, 4, 3, 3, 3, 3, 1, 2, 4, 3, 1, 4, 2, 1, 2, 3, 3, 2, 2, 1, 3, 1, 3, 1, 2, 3, 4, 2, 4, 2, 4, 1, 4, 4, 3, 3, 4, 1, 2, 2, 2, 2, 1, 2, 3, 2, 4, 2, 2, 1, 4, 3, 1, 2, 4, 2, 1, 4, 2, 2, 1, 1, 2, 1, 2, 4, 2, 2, 3, 4, 3,
40
+ 2, 2, 4, 4, 1, 1, 3, 1, 1, 2, 1, 1, 4, 3, 4, 4, 2, 3, 2, 4, 1, 4, 4, 3, 4, 1, 1, 1, 1, 1, 2, 1, 4, 3, 3, 3, 1, 2, 4, 2, 2, 3, 2, 1, 3, 2, 1, 3, 4, 3, 4, 3, 4, 1, 4, 1, 4, 2, 2, 1, 4, 3, 4, 3, 2, 2, 1, 2, 3, 4, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 4, 2, 2, 2, 4, 2, 3, 3, 2, 1, 2, 3, 4, 4, 2, 4, 4, 3, 2, 1,
41
+ 4, 2, 3, 1, 4, 1, 2, 3, 3, 1, 2, 3, 1, 4, 4, 4, 1, 3, 1, 3, 1, 4, 2, 1, 2, 1, 3, 1, 4, 4, 4, 2, 1, 1, 4, 4, 2, 2, 1, 4, 3, 4, 3, 3, 3, 3, 4, 2, 2, 1, 3, 1, 1, 4, 3, 1, 3, 4, 2, 4, 3, 4, 3, 2, 3, 4, 1, 4, 2, 3, 3, 3, 2, 3, 3, 1, 2, 1, 4, 1, 2, 1, 3, 4, 3, 4, 3, 3, 4, 1, 3, 2, 4, 2, 2, 3, 3, 1, 4, 3,
42
+ 2, 4, 3, 3, 1, 4, 1, 3, 2, 4, 3, 4, 3, 1, 4, 2, 2, 4, 3, 3, 4, 3, 4, 3, 4, 4, 1, 2, 4, 3, 2, 3, 4, 1, 2, 2, 1, 1, 4, 3, 3, 2, 2, 1, 3, 4, 3, 1, 4, 2, 2, 1, 2, 3, 2, 1, 3, 1, 1, 4, 2, 2, 1, 4, 2, 3, 2, 2, 4, 3, 4, 3, 4, 2, 2, 4, 1, 3, 2, 3, 4, 2, 1, 1, 3, 1, 1, 1, 4, 1, 4, 1, 3, 1, 4, 3, 4, 4, 3, 3,
43
+ 4, 3, 3, 2, 2, 2, 3, 2, 2, 4, 3, 1, 2, 3, 2, 4, 1, 3, 2, 1, 4, 4, 2, 1, 3, 3, 3, 2, 2, 1, 2, 1, 3, 2, 2, 1, 4, 3, 3, 3, 2, 1, 1, 4, 4, 1, 1, 1, 1, 2, 3, 2, 2, 1, 3, 4, 2, 4, 4, 1, 2, 3, 2, 4, 1, 2, 2, 3, 3, 1, 2, 1, 2, 3, 3, 1, 3, 2, 4, 4, 4, 3, 3, 4, 4, 4, 4, 1, 4, 1, 3, 1, 1, 4, 3, 2, 3, 3, 4, 1,
44
+ 3, 3, 1, 3, 3, 1, 1, 1, 4, 3, 3, 1, 3, 4, 2, 3, 4, 2, 4, 2, 1, 3, 1, 1, 2, 2, 3, 3, 3, 4, 4, 3, 3, 2, 3, 2, 1, 2, 3, 3, 4, 3, 2, 3, 3, 3, 4, 1, 3, 1, 3, 2, 3, 2, 3, 4, 1, 1, 1, 2, 4, 1, 1, 4, 2, 3, 1, 2, 3, 4, 3, 3, 4, 1, 1, 2, 3, 4, 2, 3, 3, 2, 1, 2, 2, 2, 2, 4, 2, 3, 1, 2, 1, 3, 4, 1, 1, 2, 2, 1,
45
+ 4, 1, 4, 4, 1, 4, 1, 2, 4, 4, 3, 2, 3, 1, 3, 4, 2, 2, 3, 2, 2, 2, 4, 1, 1, 1, 1, 3, 3, 4, 3, 1, 3, 3, 3, 4, 4, 1, 1, 2, 2, 2, 3, 1, 4, 1, 3, 3, 3, 3, 3, 4, 4, 1, 3, 4, 4, 4, 3, 1, 3, 1, 1, 1, 3, 2, 3, 4, 3, 2, 1, 1, 1, 4, 4, 1, 3, 2, 4, 2, 3, 4, 1, 3, 1, 4, 2, 4, 1, 3, 1, 4, 3, 2, 2, 2, 3, 2, 2, 3,
46
+ 2, 2, 4, 1, 2, 1, 3, 2, 4, 2, 2, 1, 2, 2, 1, 2, 4, 3, 4, 2, 3, 3, 4, 3, 2, 2, 4, 3, 2, 2, 2, 1, 2, 1, 3, 4, 2, 1, 2, 1, 1, 3, 2, 2, 3, 1, 3, 4, 1, 2, 4, 3, 3, 4, 4, 4, 4, 3, 2, 3, 4, 3, 3, 3, 2, 1, 2, 3, 4, 4, 2, 4, 4, 3, 2, 1, 4, 1, 4, 4, 4, 4, 2, 3, 2, 3, 1, 4, 3, 2, 3, 4, 1, 2, 3, 4, 2, 4, 1, 3,
47
+ 1, 1, 3, 1, 4, 3, 2, 3, 3, 3, 2, 2, 1, 3, 4, 3, 2, 1, 4, 4, 4, 2, 4, 4, 2, 3, 4, 1, 4, 2, 2, 1, 1, 3, 4, 3, 4, 2, 2, 4, 4, 2, 3, 4, 4, 2, 3, 2, 2, 1, 1, 1, 4, 1, 2, 2, 4, 2, 3, 4, 2, 4, 1, 2, 3, 4, 2, 1, 3, 4, 2, 2, 3, 3, 1, 3, 3, 3, 3, 1, 4, 3, 1, 4, 1, 4, 1, 4, 3, 2, 1, 2, 1, 3, 3, 3, 1, 1, 4, 4,
48
+ 4, 2, 1, 2, 4, 3, 2, 4, 3, 1, 2, 2, 2, 1, 2, 3, 2, 1, 2, 1, 1, 2, 4, 2, 4, 2, 4, 2, 2, 1, 3, 3, 3, 2, 1, 4, 3, 2, 4, 4, 4, 1, 1, 4, 4, 3, 2, 1, 3, 1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 4, 4, 1, 4, 1, 4, 4, 2, 1, 1, 4, 4, 2, 2, 3, 1, 2, 4, 4, 2, 4, 3, 1, 3, 3, 4, 1, 2, 2, 2, 2, 2, 4, 4, 3, 3, 1, 3, 1, 4, 2,
49
+ 3, 1, 4, 2, 1, 3, 4, 4, 3, 1, 3, 3, 1, 1, 1, 4, 4, 2, 2, 3, 3, 4, 2, 1, 1, 1, 4, 2, 4, 1, 2, 1, 4, 4, 2, 4, 2, 2, 4, 3, 1, 4, 3, 3, 3, 3, 2, 3, 2, 2, 3, 3, 1, 4, 3, 1, 3, 4, 3, 2, 4, 2, 1, 2, 3, 2, 1, 4, 3, 4, 3, 1, 3, 1, 1, 3, 4, 2, 4, 2, 1, 2, 2, 2, 1, 3, 2, 1, 3, 3, 2, 1, 3, 3, 3, 3, 1, 3, 1, 1,
50
+ 3, 1, 4, 3, 2, 4, 4, 2, 2, 4, 3, 2, 2, 3, 2, 3, 2, 2, 2, 2, 4, 2, 1, 2, 1, 4, 1, 3, 4, 3, 1, 1, 2, 4, 3, 1, 1, 1, 4, 1, 2, 3, 2, 2, 2, 3, 4, 1, 2, 1, 2, 1, 2, 3, 4, 1, 2, 2, 2, 4, 4, 2, 2, 1, 4, 4, 3, 4, 4, 3, 4, 2, 3, 4, 3, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 3, 2, 4, 2, 3, 4, 1, 1, 2, 4, 1, 2, 2, 3, 3,
51
+ 3, 3, 2, 4, 4, 1, 3, 1, 4, 3, 1, 3, 4, 4, 1, 4, 4, 1, 2, 4, 4, 3, 2, 2, 3, 2, 1, 2, 2, 3, 1, 1, 2, 4, 4, 3, 2, 2, 1, 2, 4, 3, 3, 1, 1, 3, 3, 2, 4, 1, 3, 1, 4, 1, 2, 2, 4, 2, 3, 1, 2, 3, 1, 4, 3, 4, 4, 4, 2, 4, 4, 4, 1, 4, 1, 1, 1, 4, 1, 4, 2, 3, 3, 3, 2, 2, 1, 2, 2, 1, 1, 3, 3, 3, 1, 1, 2, 1, 2, 4,
52
+ 2, 4, 2, 4, 1, 3, 4, 3, 3, 3, 2, 4, 2, 3, 4, 4, 3, 2, 1, 4, 2, 1, 4, 2, 4, 3, 1, 2, 3, 3, 4, 1, 3, 3, 4, 3, 2, 1, 4, 2, 1, 4, 1, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 3, 4, 1, 3, 4, 1, 4, 4, 4, 2, 2, 3, 1, 1, 2, 4, 4, 4, 2, 3, 4, 4, 3, 4, 1, 4, 4, 3, 3, 4, 4, 4, 2, 3, 2, 2, 1, 4, 4, 1, 1, 4, 3, 1, 2, 4, 1,
53
+ 2, 3, 2, 2, 3, 3, 3, 1, 2, 1, 3, 2, 3, 2, 1, 3, 1, 4, 2, 4, 3, 1, 1, 2, 1, 2, 3, 1, 4, 2, 3, 4, 3, 3, 2, 3, 3, 1, 2, 4, 2, 1, 3, 4, 4, 3, 4, 1, 1, 3, 2, 2, 4, 4, 4, 2, 4, 3, 1, 1, 4, 2, 2, 2, 1, 3, 2, 3, 3, 3, 4, 3, 2, 1, 4, 4, 3, 3, 1, 2, 1, 1, 1, 3, 2, 4, 4, 4, 4, 3, 4, 1, 4, 1, 4, 4, 4, 2, 3, 4,
54
+ 3, 1, 2, 4, 2, 2, 2, 4, 1, 1, 3, 2, 4, 3, 1, 2, 2, 2, 4, 4, 3, 3, 1, 1, 1, 1, 2, 3, 3, 2, 1, 3, 1, 3, 4, 3, 3, 1, 3, 4, 1, 1, 2, 1, 4, 2, 1, 4, 1, 4, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 4, 4, 3, 4, 4, 1, 3, 1, 1, 3, 2, 3, 1, 1, 3, 2, 4, 4, 4, 4, 2, 4, 1, 2, 2, 2, 1, 3, 1, 2, 4, 1, 1, 2, 2, 3, 2, 4,
55
+ 3, 3, 1, 4, 2, 1, 3, 4, 2, 2, 2, 2, 1, 1, 3, 4, 2, 2, 1, 4, 1, 4, 3, 1, 4, 4, 4, 1, 2, 2, 3, 4, 3, 4, 2, 1, 2, 3, 3, 4, 1, 1, 2, 4, 1, 3, 2, 3, 4, 3, 2, 2, 3, 4, 4, 4, 1, 1, 3, 1, 3, 2, 1, 4, 2, 4, 3, 3, 1, 1, 4, 3, 3, 3, 3, 1, 1, 1, 1, 3, 4, 1, 1, 2, 4, 3, 1, 1, 3, 2, 4, 1, 3, 2, 4, 2, 1, 2, 2, 2,
56
+ 4, 3, 3, 1, 1, 1, 2, 3, 2, 4, 1, 2, 4, 4, 2, 4, 1, 1, 2, 2, 1, 3, 3, 3, 3, 1, 4, 2, 4, 3, 3, 2, 4, 3, 1, 1, 1, 2, 4, 2, 3, 3, 1, 2, 2, 4, 3, 1, 3, 4, 3, 4, 4, 3, 3, 2, 1, 1, 1, 3, 4, 1, 4, 3, 3, 4, 2, 4, 2, 3, 3, 4, 2, 1, 1, 3, 3, 4, 4, 3, 1, 4, 3, 2, 1, 2, 3, 3, 1, 4, 1, 4, 4, 2, 2, 4, 1, 1, 3, 4,
57
+ 3, 2, 2, 1, 2, 4, 3, 2, 3, 4, 2, 2, 3, 2, 1, 1, 3, 2, 3, 1, 4, 3, 3, 3, 2, 3, 4, 2, 1, 4, 4, 4, 3, 4, 2, 1, 3, 2, 2, 3, 4, 3, 3, 2, 1, 2, 2, 1, 1, 2, 1, 4, 2, 2, 3, 1, 3, 2, 2, 2, 2, 3, 4, 1, 3, 4, 4, 2, 4, 3, 3, 4, 3, 4, 4, 1, 2, 4, 4, 3, 4, 4, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 3, 1, 2, 2, 2, 3, 1, 1,
58
+ 1, 3, 1, 4, 1, 1, 4, 4, 2, 4, 2, 2, 3, 2, 1, 2, 4, 1, 4, 2, 2, 4, 1, 1, 1, 4, 4, 4, 4, 1, 2, 3, 1, 4, 3, 3, 3, 4, 2, 2, 3, 1, 1, 2, 2, 1, 3, 4, 4, 4, 1, 4, 2, 4, 1, 1, 1, 1, 3, 2, 1, 4, 3, 3, 1, 1, 2, 4, 3, 3, 3, 1, 2, 4, 2, 1, 3, 2, 3, 3, 3, 3, 1, 2, 3, 2, 4, 2, 4, 4, 2, 3, 2, 3, 3, 2, 4, 2, 1, 3,
59
+ 4, 3, 4, 2, 4, 3, 4, 2, 2, 2, 1, 2, 4, 4, 4, 2, 2, 3, 1, 4, 3, 4, 1, 2, 3, 3, 4, 4, 4, 4, 3, 1, 1, 1, 1, 3, 1, 4, 3, 3, 4, 3, 2, 1, 2, 2, 3, 4, 4, 4, 3, 1, 2, 4, 3, 4, 4, 1, 3, 4, 2, 4, 4, 2, 4, 1, 4, 4, 3, 1, 4, 2, 1, 4, 4, 2, 4, 3, 4, 1, 2, 3, 4, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 3, 4, 3, 2, 4,
60
+ 4, 1, 1, 2, 3, 4, 2, 3, 1, 2, 3, 4, 3, 2, 2, 1, 3, 1, 4, 4, 4, 2, 1, 4, 2, 4, 3, 3, 4, 1, 2, 2, 1, 4, 3, 4, 4, 3, 2, 1, 2, 2, 3, 2, 3, 4, 2, 4, 4, 4, 4, 3, 1, 4, 4, 1, 1, 4, 2, 2, 2, 4, 3, 2, 4, 3, 1, 3, 4, 2, 2, 4, 3, 2, 4, 2, 4, 3, 2, 2, 4, 2, 3, 4, 1, 2, 3, 2, 4, 2, 4, 4, 4, 4, 3, 1, 4, 4, 1, 4,
61
+ 3, 1, 2, 1, 3, 2, 4, 1, 2, 1, 2, 2, 2, 1, 3, 3, 3, 4, 2, 2, 1, 3, 1, 4, 3, 4, 4, 1, 3, 1, 2, 4, 1, 4, 3, 1, 4, 3, 2, 1, 3, 1, 3, 2, 1, 1, 3, 2, 4, 4, 2, 1, 1, 2, 4, 4, 3, 2, 3, 2, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 3, 3, 2, 4, 2, 4, 4, 3, 1, 4, 1, 4, 4, 4, 3, 1, 3, 1, 3, 2, 4, 2, 4, 1, 1, 4, 3, 2, 1, 4,
62
+ 2, 3, 1, 3, 3, 1, 2, 3, 3, 3, 3, 1, 2, 4, 3, 3, 3, 4, 2, 3, 4, 2, 2, 4, 2, 3, 3, 1, 1, 3, 2, 3, 3, 4, 1, 3, 2, 3, 3, 2, 2, 1, 2, 1, 4, 3, 4, 1, 3, 4, 1, 1, 2, 1, 1, 1, 4, 4, 2, 2, 3, 1, 2, 2, 4, 1, 1, 1, 2, 4, 2, 4, 4, 3, 2, 4, 4, 3, 3, 4, 1, 2, 4, 1, 3, 1, 1, 4, 4, 3, 4, 1, 3, 1, 1, 1, 3, 1, 4, 2,
63
+ 2, 1, 4, 1, 3, 2, 1, 2, 3, 1, 4, 2, 3, 4, 2, 2, 4, 2, 3, 4, 4, 1, 3, 2, 4, 1, 4, 3, 1, 1, 1, 2, 2, 1, 3, 2, 1, 4, 2, 4, 2, 1, 1, 2, 4, 3, 2, 2, 1, 2, 1, 4, 3, 1, 3, 4, 1, 2, 2, 2, 1, 1, 4, 4, 4, 3, 3, 1, 2, 1, 4, 4, 1, 1, 1, 3, 1, 1, 3, 3, 4, 1, 2, 1, 3, 4, 3, 3, 3, 1, 4, 4, 3, 4, 2, 4, 1, 4, 2, 1,
64
+ 4, 3, 3, 1, 3, 3, 3, 3, 3, 1, 4, 4, 4, 3, 2, 1, 1, 2, 2, 4, 1, 1, 2, 3, 1, 3, 2, 1, 2, 4, 3, 4, 3, 3, 1, 1, 3, 4, 3, 1, 2, 3, 4, 3, 2, 3, 2, 3, 1, 2, 1, 1, 3, 1, 3, 3, 4, 2, 4, 2, 1, 4, 2, 1, 4, 3, 1, 4, 3, 4, 3, 1, 4, 3, 3, 3, 1, 4, 2, 2, 4, 3, 1, 4, 1, 1, 2, 4, 4, 3, 2, 3, 1, 3, 2, 4, 4, 4, 3, 1,
65
+ 3, 3, 3, 3, 3, 4, 1, 2, 1, 4, 3, 1, 4, 3, 4, 4, 3, 1, 1, 1, 1, 1, 4, 1, 3, 1, 3, 1, 3, 2, 1, 3, 2, 2, 1, 1, 1, 3, 3, 3, 2, 3, 4, 3, 1, 4, 4, 4, 2, 4, 3, 3, 4, 1, 2, 3, 4, 3, 3, 3, 1, 3, 4, 4, 4, 3, 4, 3, 2, 3, 3, 1, 2, 3, 4, 4, 1, 4, 3, 4, 4, 2, 3, 4, 2, 3, 1, 4, 1, 1, 2, 2, 1, 2, 4, 4, 3, 1, 2, 4,
66
+ 1, 1, 4, 2, 3, 1, 4, 2, 1, 1, 2, 3, 3, 3, 1, 4, 4, 3, 1, 4, 4, 4, 2, 3, 4, 4, 2, 3, 2, 4, 4, 2, 3, 2, 4, 1, 2, 4, 1, 1, 1, 3, 1, 1, 1, 2, 3, 4, 2, 4, 1, 2, 3, 4, 1, 2, 2, 3, 1, 1, 1, 4, 2, 1, 2, 3, 1, 3, 3, 2, 4, 3, 2, 1, 3, 2, 1, 3, 4, 4, 3, 3, 2, 4, 3, 1, 3, 1, 1, 3, 3, 1, 2, 2, 4, 1, 4, 3, 1, 2,
67
+ 4, 2, 2, 4, 1, 1, 1, 1, 2, 3, 4, 3, 4, 1, 2, 2, 1, 3, 2, 2, 3, 1, 2, 3, 1, 2, 2, 3, 3, 1, 4, 3, 2, 2, 4, 2, 2, 1, 1, 3, 4, 2, 1, 1, 3, 2, 3, 1, 2, 2, 4, 1, 3, 3, 3, 4, 2, 2, 4, 4, 3, 1, 2, 2, 3, 3, 1, 2, 1, 2, 2, 3, 4, 1, 4, 3, 4, 3, 1, 2, 2, 2, 1, 1, 2, 1, 2, 3, 2, 4, 4, 1, 3, 2, 4, 4, 3, 1, 1, 1,
68
+ 3, 2, 1, 3, 2, 1, 4, 2, 1, 3, 1, 2, 2, 4, 1, 1, 3, 3, 4, 3, 4, 2, 3, 2, 2, 1, 2, 1, 3, 2, 4, 2, 3, 4, 4, 3, 2, 4, 3, 2, 3, 4, 4, 1, 1, 4, 4, 4, 1, 1, 1, 3, 3, 3, 1, 2, 2, 1, 1, 4, 1, 2, 3, 2, 3, 4, 1, 2, 1, 2, 1, 1, 2, 3, 1, 4, 4, 1, 3, 2, 2, 4, 4, 3, 4, 4, 3, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 4, 3, 4,
69
+ 1, 2, 4, 4, 3, 1, 4, 2, 4, 3, 4, 2, 1, 1, 1, 3, 1, 2, 1, 4, 2, 1, 4, 3, 3, 4, 4, 4, 1, 3, 2, 1, 2, 2, 1, 2, 3, 1, 3, 3, 3, 3, 2, 1, 1, 2, 4, 4, 2, 3, 3, 3, 3, 4, 4, 4, 4, 1, 3, 3, 3, 2, 1, 1, 3, 4, 2, 3, 4, 2, 4, 1, 3, 4, 1, 3, 2, 1, 3, 2, 2, 4, 2, 3, 2, 3, 3, 4, 1, 3, 3, 2, 2, 3, 1, 2, 3, 2, 3, 1,
70
+ 3, 4, 2, 3, 4, 1, 2, 4, 4, 4, 1, 2, 1, 4, 2, 3, 4, 3, 2, 2, 3, 1, 2, 1, 2, 4, 3, 4, 2, 2, 3, 4, 3, 4, 4, 1, 4, 1, 4, 3, 3, 1, 2, 1, 2, 2, 2, 4, 4, 1, 1, 4, 3, 1, 2, 2, 3, 1, 4, 1, 1, 1, 2, 2, 1, 4, 3, 4, 1, 4, 2, 1, 2, 1, 4, 1, 2, 1, 3, 2, 3, 3, 4, 4, 4, 3, 4, 1, 4, 4, 1, 4, 3, 3, 3, 1, 1, 3, 1, 1,
71
+ 2, 3, 2, 4, 3, 4, 4, 1, 4, 2, 4, 2, 1, 3, 4, 1, 2, 2, 3, 3, 2, 1, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 2, 1, 4, 4, 3, 3, 3, 1, 1, 3, 2, 2, 2, 2, 2, 3, 2, 1, 1, 1, 4, 4, 2, 2, 4, 3, 4, 4, 3, 4, 1, 4, 4, 3, 4, 4, 1, 1, 2, 1, 3, 1, 2, 4, 3, 1, 4, 3, 1, 3, 4, 1, 2, 3, 3, 2, 4, 3, 1, 4, 2, 4, 1, 3, 1, 1, 2,
72
+ 3, 1, 4, 4, 4, 1, 1, 2, 1, 3, 2, 3, 3, 1, 1, 4, 1, 2, 1, 2, 1, 3, 3, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 4, 1, 2, 4, 3, 2, 2, 1, 4, 4, 2, 2, 4, 4, 4, 1, 3, 4, 4, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 4, 3, 3, 4, 2, 3, 4, 3, 4, 2, 1, 1, 1, 4, 3, 2, 4, 1, 2, 2, 4, 1, 1, 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 1, 1, 4,
73
+ 1, 4, 4, 1, 3, 4, 4, 4, 3, 2, 3, 1, 1, 3, 4, 2, 3, 1, 3, 4, 2, 1, 1, 3, 1, 2, 4, 3, 2, 4, 3, 4, 1, 1, 2, 4, 1, 4, 1, 1, 3, 3, 2, 1, 3, 1, 4, 1, 4, 1, 1, 1, 2, 2, 4, 2, 2, 3, 2, 4, 1, 3, 4, 4, 1, 2, 2, 1, 2, 3, 1, 4, 4, 1, 4, 3, 2, 4, 2, 4, 3, 1, 2, 4, 3, 2, 3, 3, 4, 4, 3, 4, 4, 2, 2, 3, 1, 3, 2, 2,
74
+ 4, 1, 1, 1, 3, 1, 1, 1, 1, 2, 3, 1, 4, 3, 4, 3, 2, 4, 1, 1, 4, 2, 1, 2, 1, 2, 1, 2, 1, 3, 2, 1, 1, 2, 4, 2, 1, 1, 4, 1, 4, 1, 1, 4, 1, 1, 1, 4, 3, 1, 4, 3, 1, 4, 1, 4, 1, 2, 3, 3, 4, 1, 3, 3, 4, 1, 2, 1, 2, 2, 3, 2, 4, 3, 1, 3, 2, 2, 3, 3, 3, 4, 1, 2, 3, 4, 2, 1, 1, 3, 4, 3, 4, 1, 3, 2, 4, 4, 1, 3,
75
+ 4, 2, 3, 4, 1, 2, 1, 4, 4, 1, 3, 4, 4, 4, 3, 4, 4, 1, 3, 1, 4, 1, 2, 4, 2, 2, 2, 4, 1, 2, 2, 1, 2, 4, 2, 4, 3, 4, 2, 4, 3, 1, 3, 1, 3, 2, 1, 2, 4, 4, 2, 2, 4, 4, 4, 4, 1, 2, 1, 4, 2, 3, 2, 1, 3, 4, 1, 4, 1, 3, 4, 1, 4, 3, 1, 1, 3, 2, 1, 3, 1, 1, 4, 3, 4, 2, 3, 4, 2, 4, 2, 2, 2, 4, 2, 3, 3, 1, 2, 2,
76
+ 3, 4, 2, 4, 1, 4, 4, 2, 2, 4, 2, 4, 2, 3, 3, 2, 4, 4, 2, 1, 2, 4, 2, 2, 1, 3, 2, 1, 2, 4, 2, 1, 2, 2, 1, 4, 3, 1, 2, 2, 2, 3, 2, 3, 3, 1, 4, 4, 2, 2, 3, 2, 3, 4, 1, 3, 3, 1, 2, 2, 4, 2, 4, 3, 3, 4, 4, 1, 1, 1, 2, 3, 3, 4, 1, 3, 3, 3, 1, 1, 4, 3, 3, 1, 2, 1, 2, 1, 1, 3, 1, 4, 4, 3, 3, 4, 4, 2, 2, 4,
77
+ 3, 4, 1, 2, 2, 4, 1, 1, 3, 4, 3, 1, 1, 1, 1, 2, 2, 4, 3, 3, 2, 3, 1, 1, 3, 2, 4, 4, 2, 3, 2, 1, 1, 1, 1, 2, 2, 4, 3, 1, 1, 4, 3, 1, 1, 3, 1, 2, 3, 4, 4, 3, 2, 2, 4, 4, 4, 3, 1, 1, 1, 3, 1, 4, 3, 4, 2, 4, 2, 3, 4, 1, 4, 3, 1, 3, 3, 2, 4, 4, 1, 3, 2, 3, 2, 2, 2, 3, 2, 2, 2, 1, 2, 2, 4, 2, 4, 3, 2, 1,
78
+ 4, 3, 3, 1, 2, 4, 4, 2, 2, 3, 1, 3, 1, 2, 4, 3, 3, 1, 1, 2, 2, 2, 1, 4, 4, 4, 4, 1, 3, 4, 2, 3, 1, 1, 2, 4, 2, 1, 2, 3, 2, 1, 1, 3, 3, 2, 3, 2, 3, 3, 3, 4, 1, 1, 3, 4, 3, 2, 4, 1, 1, 2, 4, 1, 2, 3, 1, 2, 3, 1, 4, 2, 1, 2, 1, 4, 1, 3, 2, 4, 2, 2, 1, 3, 2, 4, 4, 2, 2, 1, 4, 4, 4, 1, 3, 4, 1, 1, 2, 1,
79
+ 2, 4, 3, 1, 4, 4, 2, 2, 1, 4, 1, 1, 2, 3, 4, 3, 4, 1, 4, 3, 1, 1, 4, 3, 1, 4, 4, 2, 2, 3, 1, 3, 1, 2, 4, 3, 3, 4, 4, 4, 3, 4, 3, 3, 2, 2, 4, 1, 3, 3, 2, 2, 3, 1, 3, 3, 2, 4, 3, 2, 3, 4, 3, 1, 2, 2, 4, 2, 4, 3, 4, 1, 1, 3, 3, 1, 1, 1, 2, 1, 4, 4, 1, 3, 1, 2, 4, 4, 1, 2, 2, 2, 4, 2, 3, 1, 2, 1, 3, 1,
80
+ 4, 4, 3, 3, 2, 4, 3, 1, 2, 2, 2, 4, 4, 2, 3, 3, 4, 2, 3, 4, 1, 4, 2, 3, 1, 2, 2, 2, 4, 4, 4, 3, 1, 1, 2, 4, 1, 3, 4, 4, 1, 3, 4, 2, 4, 4, 1, 1, 4, 4, 1, 3, 1, 3, 2, 2, 1, 4, 2, 2, 3, 4, 4, 4, 2, 3, 3, 2, 3, 4, 3, 4, 2, 3, 3, 1, 3, 2, 3, 3, 4, 2, 4, 3, 3, 4, 2, 3, 4, 1, 4, 3, 2, 3, 1, 1, 4, 2, 2, 2,
81
+ 2, 1, 3, 4, 4, 3, 4, 2, 4, 1, 1, 3, 3, 4, 4, 3, 1, 4, 1, 1, 4, 2, 1, 4, 2, 3, 2, 2, 2, 1, 1, 2, 2, 4, 1, 1, 3, 4, 4, 1, 4, 2, 4, 1, 2, 2, 1, 2, 1, 1, 4, 1, 3, 3, 1, 2, 1, 3, 1, 4, 1, 3, 2, 3, 2, 3, 4, 1, 2, 1, 2, 2, 4, 2, 2, 2, 2, 3, 4, 1, 3, 4, 1, 2, 4, 4, 4, 3, 3, 2, 1, 1, 2, 2, 4, 4, 1, 4, 2, 1,
82
+ 4, 1, 2, 3, 3, 3, 4, 4, 2, 1, 1, 4, 4, 2, 3, 1, 4, 2, 3, 2, 4, 4, 4, 4, 2, 4, 1, 4, 3, 3, 4, 1, 2, 1, 3, 4, 4, 3, 3, 2, 1, 3, 3, 2, 3, 4, 1, 4, 4, 1, 3, 3, 1, 2, 4, 1, 2, 4, 3, 2, 1, 2, 1, 1, 2, 2, 3, 1, 3, 3, 2, 1, 3, 4, 4, 1, 2, 3, 3, 3, 2, 4, 3, 1, 3, 2, 3, 4, 1, 2, 2, 4, 2, 1, 2, 2, 2, 1, 4, 2,
83
+ 1, 1, 1, 1, 4, 2, 4, 1, 4, 2, 2, 3, 4, 3, 1, 2, 2, 3, 3, 2, 1, 1, 4, 4, 4, 1, 1, 1, 3, 3, 2, 1, 4, 3, 2, 2, 3, 4, 3, 1, 1, 4, 4, 4, 1, 2, 1, 1, 4, 3, 4, 1, 4, 2, 3, 1, 1, 4, 3, 4, 2, 4, 3, 2, 2, 3, 1, 3, 2, 2, 2, 3, 4, 2, 2, 4, 3, 3, 1, 4, 4, 1, 1, 2, 3, 1, 2, 4, 4, 4, 4, 3, 1, 2, 1, 1, 4, 2, 2, 4,
84
+ 1, 2, 4, 4, 4, 3, 1, 1, 4, 1, 3, 1, 4, 3, 1, 2, 1, 1, 1, 3, 4, 2, 2, 4, 3, 2, 4, 4, 2, 4, 2, 3, 1, 3, 1, 2, 2, 1, 2, 1, 3, 4, 2, 4, 3, 3, 2, 3, 1, 3, 2, 3, 4, 4, 4, 3, 4, 2, 4, 1, 4, 4, 3, 1, 3, 2, 1, 4, 2, 1, 3, 3, 1, 4, 1, 3, 4, 4, 3, 4, 4, 1, 4, 4, 1, 2, 4, 4, 3, 3, 4, 1, 2, 1, 4, 3, 4, 4, 1, 2,
85
+ 2, 4, 2, 2, 2, 4, 3, 1, 1, 2, 4, 1, 1, 3, 4, 3, 3, 4, 3, 3, 2, 3, 4, 3, 2, 3, 4, 3, 2, 3, 2, 2, 1, 1, 3, 4, 3, 2, 4, 4, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 3, 2, 2, 4, 1, 4, 4, 2, 3, 4, 4, 4, 1, 1, 2, 1, 1, 3, 2, 4, 2, 4, 1, 2, 4, 3, 1, 4, 1, 4, 1, 2, 1, 3, 3, 1, 3, 1, 2, 2, 1, 2, 1, 3, 4, 3, 2, 2,
86
+ 3, 3, 3, 1, 4, 3, 2, 3, 4, 2, 4, 1, 2, 4, 3, 1, 4, 4, 1, 4, 4, 4, 4, 1, 4, 2, 3, 1, 3, 2, 1, 1, 3, 2, 1, 2, 4, 1, 4, 1, 2, 1, 4, 1, 1, 1, 3, 1, 1, 1, 1, 3, 2, 3, 2, 2, 2, 3, 1, 3, 2, 1, 3, 1, 3, 4, 4, 4, 1, 2, 1, 3, 1, 3, 1, 3, 2, 4, 3, 4, 2, 4, 4, 1, 4, 2, 1, 4, 1, 3, 1, 3, 4, 1, 3, 1, 1, 1, 3, 1,
87
+ 4, 3, 4, 1, 1, 3, 3, 4, 2, 4, 1, 4, 2, 3, 3, 2, 1, 3, 3, 4, 4, 4, 3, 2, 1, 2, 1, 2, 3, 1, 4, 1, 2, 4, 4, 4, 1, 2, 4, 1, 3, 3, 3, 4, 2, 1, 4, 2, 2, 1, 2, 3, 2, 1, 2, 1, 3, 3, 1, 1, 4, 2, 1, 4, 2, 2, 2, 4, 1, 2, 2, 2, 1, 4, 4, 2, 2, 4, 3, 4, 1, 4, 2, 4, 4, 4, 4, 2, 3, 2, 3, 1, 1, 2, 2, 2, 1, 4, 3, 4,
88
+ 2, 2, 2, 2, 4, 4, 2, 4, 4, 1, 3, 3, 4, 4, 1, 4, 4, 1, 1, 3, 4, 1, 4, 1, 3, 4, 3, 2, 3, 3, 1, 4, 3, 2, 1, 3, 4, 2, 4, 2, 2, 3, 1, 2, 2, 4, 1, 4, 3, 2, 4, 4, 4, 3, 4, 3, 3, 1, 4, 3, 1, 3, 2, 4, 4, 1, 3, 4, 3, 4, 2, 4, 1, 4, 3, 2, 4, 4, 2, 1, 2, 1, 3, 1, 4, 2, 1, 4, 3, 2, 1, 1, 1, 2, 3, 1, 4, 1, 1, 1,
89
+ 1, 4, 4, 2, 2, 1, 4, 2, 1, 3, 1, 1, 2, 3, 2, 4, 1, 2, 4, 3, 2, 1, 1, 1, 1, 3, 4, 3, 3, 2, 1, 1, 1, 3, 1, 1, 2, 3, 4, 1, 2, 1, 1, 2, 3, 4, 2, 1, 1, 1, 4, 4, 2, 3, 4, 4, 2, 1, 1, 3, 3, 2, 3, 4, 3, 2, 3, 2, 3, 4, 4, 3, 3, 3, 2, 4, 4, 1, 1, 2, 1, 2, 2, 3, 4, 4, 4, 1, 1, 2, 1, 4, 1, 1, 2, 3, 1, 3, 2, 2,
90
+ 3, 1, 4, 4, 2, 1, 4, 1, 4, 4, 3, 4, 1, 2, 3, 1, 4, 3, 4, 4, 2, 3, 2, 2, 3, 2, 4, 1, 1, 4, 3, 2, 3, 4, 1, 2, 1, 2, 1, 4, 1, 1, 1, 4, 2, 3, 4, 1, 3, 3, 2, 2, 1, 3, 2, 3, 4, 4, 3, 2, 3, 1, 2, 4, 1, 2, 3, 1, 2, 3, 2, 3, 2, 2, 1, 4, 1, 4, 4, 3, 3, 4, 3, 3, 3, 4, 1, 2, 3, 2, 1, 1, 2, 1, 2, 4, 3, 3, 2, 1,
91
+ 3, 3, 1, 3, 3, 3, 2, 2, 3, 3, 4, 1, 3, 2, 1, 3, 1, 1, 1, 4, 4, 1, 1, 1, 2, 1, 2, 2, 3, 1, 4, 2, 1, 4, 3, 2, 3, 4, 1, 4, 2, 1, 1, 4, 1, 1, 1, 1, 3, 1, 4, 1, 2, 4, 3, 1, 3, 2, 3, 1, 3, 3, 2, 4, 4, 3, 3, 2, 4, 1, 1, 2, 1, 3, 2, 3, 2, 2, 1, 4, 1, 2, 4, 2, 3, 3, 2, 2, 1, 3, 2, 2, 1, 2, 3, 1, 3, 1, 2, 1,
92
+ 2, 1, 1, 4, 4, 3, 2, 2, 2, 3, 2, 4, 3, 1, 4, 1, 1, 2, 2, 2, 4, 4, 3, 2, 2, 1, 3, 2, 3, 2, 2, 4, 1, 4, 3, 1, 3, 3, 1, 1, 4, 1, 3, 4, 2, 2, 2, 3, 2, 3, 2, 4, 4, 4, 2, 4, 2, 4, 3, 3, 4, 3, 3, 2, 1, 4, 1, 4, 1, 4, 3, 2, 2, 2, 4, 1, 2, 4, 3, 1, 1, 2, 4, 3, 2, 4, 1, 1, 3, 2, 1, 3, 1, 3, 3, 4, 1, 2, 4, 1,
93
+ 2, 2, 1, 3, 3, 4, 3, 4, 3, 3, 1, 1, 4, 4, 2, 1, 1, 2, 4, 4, 2, 3, 4, 2, 1, 4, 3, 3, 1, 4, 1, 2, 4, 2, 2, 3, 3, 3, 4, 4, 4, 1, 3, 4, 4, 4, 4, 2, 1, 4, 1, 2, 3, 4, 3, 1, 4, 2, 4, 4, 3, 3, 2, 3, 2, 4, 2, 1, 3, 2, 4, 2, 2, 2, 2, 3, 2, 2, 3, 3, 4, 3, 4, 2, 1, 3, 3, 4, 4, 3, 1, 2, 1, 1, 3, 3, 1, 2, 2, 3,
94
+ 2, 3, 4, 4, 4, 3, 4, 3, 3, 3, 2, 2, 1, 2, 4, 1, 2, 4, 4, 2, 4, 4, 1, 1, 3, 2, 2, 2, 4, 4, 3, 4, 4, 2, 1, 1, 3, 2, 1, 3, 3, 1, 3, 2, 2, 1, 1, 1, 3, 2, 2, 3, 2, 3, 2, 3, 1, 4, 2, 1, 1, 2, 2, 3, 2, 1, 3, 4, 2, 3, 2, 3, 4, 1, 4, 3, 1, 4, 3, 4, 4, 4, 1, 3, 1, 1, 2, 2, 3, 3, 1, 4, 3, 1, 3, 3, 1, 2, 1, 3,
95
+ 2, 3, 1, 4, 3, 1, 1, 3, 3, 2, 2, 1, 3, 2, 1, 2, 1, 1, 1, 2, 4, 1, 3, 3, 4, 1, 4, 3, 1, 2, 3, 3, 2, 2, 2, 3, 3, 4, 3, 2, 4, 2, 4, 3, 4, 2, 4, 1, 1, 1, 3, 4, 4, 3, 2, 2, 1, 2, 2, 4, 3, 2, 1, 2, 2, 4, 4, 4, 3, 1, 2, 4, 3, 1, 1, 4, 3, 1, 2, 3, 1, 4, 4, 3, 1, 4, 1, 4, 3, 2, 2, 2, 1, 2, 1, 3, 2, 3, 3, 4,
96
+ 1, 2, 3, 3, 2, 1, 3, 1, 2, 3, 4, 2, 1, 3, 3, 4, 4, 2, 2, 3, 1, 2, 4, 3, 1, 4, 4, 1, 3, 4, 3, 4, 3, 3, 3, 4, 2, 3, 1, 2, 2, 1, 1, 4, 4, 4, 1, 3, 1, 1, 1, 4, 4, 2, 1, 2, 3, 4, 3, 1, 2, 3, 3, 4, 1, 1, 4, 1, 1, 3, 4, 3, 2, 2, 3, 4, 2, 3, 3, 3, 1, 4, 3, 3, 4, 3, 3, 3, 1, 4, 1, 4, 4, 4, 2, 2, 1, 1, 1, 2,
97
+ 3, 3, 3, 1, 1, 2, 1, 1, 3, 2, 3, 4, 3, 2, 3, 1, 2, 4, 4, 1, 3, 4, 3, 3, 4, 3, 1, 4, 2, 3, 4, 1, 3, 3, 4, 1, 4, 2, 1, 4, 2, 2, 1, 2, 1, 3, 3, 4, 2, 2, 1, 2, 1, 1, 3, 1, 3, 3, 1, 3, 1, 2, 1, 3, 4, 2, 2, 3, 4, 4, 1, 1, 1, 3, 2, 2, 3, 1, 1, 3, 1, 1, 3, 3, 4, 2, 1, 3, 3, 2, 1, 4, 2, 2, 1, 4, 4, 2, 4, 3,
98
+ 3, 4, 1, 2, 2, 4, 4, 4, 3, 1, 2, 4, 2, 4, 3, 2, 4, 3, 1, 3, 3, 3, 3, 2, 1, 1, 1, 4, 2, 3, 4, 4, 3, 4, 3, 3, 1, 1, 4, 1, 1, 1, 1, 4, 2, 1, 2, 1, 2, 4, 3, 4, 4, 4, 2, 2, 1, 1, 4, 4, 3, 4, 4, 3, 1, 3, 2, 2, 3, 3, 1, 4, 2, 1, 3, 1, 3, 1, 3, 1, 4, 4, 4, 2, 4, 4, 2, 2, 4, 4, 4, 4, 3, 2, 2, 1, 4, 4, 4, 3,
99
+ 4, 4, 1, 1, 4, 2, 2, 4, 4, 3, 1, 3, 1, 4, 4, 4, 4, 4, 1, 3, 1, 4, 4, 4, 1, 1, 4, 3, 1, 3, 4, 2, 1, 4, 1, 2, 2, 4, 4, 1, 1, 4, 4, 1, 1, 4, 4, 2, 2, 4, 3, 1, 2, 2, 1, 2, 4, 2, 4, 1, 4, 4, 3, 1, 1, 2, 3, 2, 4, 3, 4, 1, 3, 2, 4, 3, 1, 1, 4, 3, 3, 4, 3, 1, 1, 2, 4, 1, 1, 3, 1, 2, 4, 1, 4, 1, 3, 1, 2, 3,
100
+ 3, 2, 4, 2, 1, 3, 3, 3, 4, 3, 3, 2, 4, 4, 1, 1, 2, 2, 2, 3, 2, 1, 2, 4, 3, 3, 3, 1, 4, 2, 2, 1, 1, 3, 2, 1, 3, 3, 2, 2, 3, 1, 1, 3, 2, 3, 1, 2, 4, 4, 1, 2, 4, 1, 4, 3, 3, 4, 4, 2, 4, 3, 4, 4, 4, 2, 3, 2, 3, 4, 3, 2, 3, 3, 4, 1, 2, 4, 1, 1, 3, 2, 4, 4, 4, 4, 2, 4, 3, 4, 1, 4, 1, 1, 3, 2, 4, 2, 1, 2,
101
+ 4, 2, 2, 4, 3, 3, 4, 2, 2, 1, 2, 4, 2, 1, 1, 4, 2, 3, 2, 1, 1, 1, 3, 4, 2, 3, 4, 3, 1, 4, 2, 1, 3, 2, 2, 2, 2, 3, 2, 4, 1, 1, 1, 3, 3, 2, 2, 4, 4, 4, 4, 1, 1, 1, 3, 3, 3, 3, 1, 3, 1, 3, 2, 1, 2, 1, 2, 3, 3, 3, 3, 1, 3, 3, 4, 2, 1, 3, 3, 2, 1, 1, 4, 3, 3, 1, 1, 4, 1, 4, 4, 2, 2, 1, 1, 2, 2, 4, 4, 3,
102
+ 1, 4, 1, 1, 1, 3, 3, 1, 2, 3, 1, 3, 4, 4, 1, 4, 2, 2, 2, 2, 1, 4, 3, 4, 4, 3, 2, 1, 4, 1, 4, 4, 2, 3, 4, 1, 2, 3, 2, 1, 3, 4, 3, 3, 3, 3, 4, 2, 2, 4, 1, 3, 1, 1, 3, 1, 1, 2, 3, 1, 2, 3, 4, 1, 4, 2, 2, 2, 2, 2, 4, 3, 3, 2, 1, 2, 1, 4, 3, 2, 3, 2, 4, 2, 2, 2, 1, 4, 4, 4, 1, 3, 2, 3, 3, 4, 3, 3, 1, 3,
103
+ 1, 4, 4, 3, 2, 1, 2, 3, 1, 2, 1, 3, 4, 4, 2, 4, 4, 4, 1, 1, 2, 1, 1, 2, 4, 3, 3, 1, 4, 2, 2, 2, 2, 1, 4, 1, 1, 3, 4, 1, 2, 3, 4, 2, 4, 3, 4, 2, 1, 1, 2, 3, 2, 3, 4, 4, 2, 1, 4, 3, 1, 2, 2, 1, 3, 2, 2, 4, 3, 2, 1, 4, 4, 2, 4, 3, 4, 3, 4, 2, 2, 2, 3, 4, 2, 2, 2, 4, 2, 2, 4, 3, 4, 4, 4, 4, 2, 4, 2, 3,
104
+ 4, 2, 4, 2, 2, 3, 2, 1, 3, 1, 2, 3, 3, 1, 2, 1, 1, 1, 2, 4, 4, 3, 2, 4, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, 3, 2, 1, 4, 4, 3, 3, 4, 1, 1, 4, 1, 3, 3, 4, 4, 1, 4, 4, 4, 1, 3, 3, 3, 2, 4, 2, 3, 4, 1, 4, 1, 4, 4, 2, 4, 2, 4, 3, 2, 3, 3, 2, 1, 1, 4, 1, 1, 1, 3, 4, 2, 1, 3, 3, 3, 1, 3, 1, 1, 2, 3, 2, 4, 4, 4,
105
+ 4, 1, 4, 4, 4, 4, 1, 4, 4, 4, 1, 2, 4, 1, 1, 3, 3, 4, 2, 3, 2, 1, 1, 2, 1, 1, 3, 4, 2, 1, 2, 3, 3, 4, 4, 1, 3, 2, 2, 2, 2, 4, 2, 3, 2, 2, 4, 1, 1, 4, 1, 4, 4, 3, 2, 3, 3, 4, 3, 2, 2, 2, 3, 1, 2, 1, 4, 4, 4, 4, 4, 1, 1, 3, 1, 4, 1, 4, 4, 1, 3, 4, 1, 2, 1, 4, 2, 1, 1, 4, 1, 3, 2, 2, 4, 3, 4, 2, 3, 1],
106
+ "height":100,
107
+ "id":1,
108
+ "name":"background",
109
+ "opacity":1,
110
+ "type":"tilelayer",
111
+ "visible":true,
112
+ "width":100,
113
+ "x":0,
114
+ "y":0
115
+ }],
116
+ "nextlayerid":2,
117
+ "nextobjectid":1,
118
+ "orientation":"orthogonal",
119
+ "renderorder":"right-down",
120
+ "tiledversion":"1.10.1",
121
+ "tileheight":16,
122
+ "tilesets":[
123
+ {
124
+ "columns":8,
125
+ "firstgid":1,
126
+ "image":"..\/tiles\/tileset.png",
127
+ "imageheight":15968,
128
+ "imagewidth":128,
129
+ "margin":0,
130
+ "name":"pokemon",
131
+ "spacing":0,
132
+ "tilecount":7984,
133
+ "tileheight":16,
134
+ "tilewidth":16
135
+ }],
136
+ "tilewidth":16,
137
+ "type":"map",
138
+ "version":"1.10",
139
+ "width":100
140
+ }
ui/dist/assets/tilemaps/json/town.json ADDED
The diff for this file is too large to render. See raw diff
 
ui/dist/assets/tilemaps/tiles/tileset.png ADDED
ui/dist/assets/tilemaps/tiles/tileset.tsx ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tileset version="1.10" tiledversion="1.10.1" name="tileset" tilewidth="16" tileheight="16" tilecount="7984" columns="8">
3
+ <image source="tileset.png" width="128" height="15968"/>
4
+ </tileset>
ui/dist/assets/tilemaps/tiles/town.tsx ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tileset version="1.10" tiledversion="1.10.1" name="tileset" tilewidth="16" tileheight="16" tilecount="7984" columns="8">
3
+ <image source="tileset.png" width="128" height="15968"/>
4
+ </tileset>
ui/dist/index.html ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0">
7
+ <style>
8
+ html,
9
+ body {
10
+ margin: 0;
11
+ padding: 0;
12
+ }
13
+ </style>
14
+ </head>
15
+
16
+ <body>
17
+ <div id="game"></div>
18
+ <script src="bundle.js"></script>
19
+ </body>
20
+ </html>
ui/package-lock.json ADDED
The diff for this file is too large to render. See raw diff
 
ui/package.json ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "phaser3-typescript-project-template",
3
+ "version": "1.2.0",
4
+ "description": "A Phaser 3 Project Template using Rollup and TypeScript",
5
+ "main": "src/index.ts",
6
+ "scripts": {
7
+ "dev": "rollup --config rollup.config.dev.mjs",
8
+ "build": "rollup --config rollup.config.dist.mjs",
9
+ "watch": "rollup --watch --config rollup.config.dev.mjs"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/photonstorm/phaser3-typescript-project-template.git"
14
+ },
15
+ "author": "Richard Davey <[email protected]> (http://www.photonstorm.com)",
16
+ "license": "MIT",
17
+ "bugs": {
18
+ "url": "https://github.com/photonstorm/phaser3-typescript-project-template/issues"
19
+ },
20
+ "homepage": "https://github.com/photonstorm/phaser3-typescript-project-template#readme",
21
+ "devDependencies": {
22
+ "@rollup/plugin-commonjs": "^24.0.1",
23
+ "@rollup/plugin-node-resolve": "^15.0.2",
24
+ "@rollup/plugin-replace": "^5.0.2",
25
+ "@rollup/plugin-terser": "^0.4.0",
26
+ "@rollup/plugin-typescript": "^11.1.0",
27
+ "phaser": "^3.60.0",
28
+ "rollup": "^3.20.2",
29
+ "rollup-plugin-commonjs": "^10.1.0",
30
+ "rollup-plugin-serve": "^2.0.2",
31
+ "typescript": "^5.0.3",
32
+ "vite-plugin-static-copy": "^0.15.0",
33
+ "tslib": "^2.5.0"
34
+ },
35
+ "dependencies": {
36
+ "phaser3-rex-plugins": "^1.60.1"
37
+ }
38
+ }
ui/rollup.config.dev.mjs ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import commonjs from '@rollup/plugin-commonjs';
2
+ import { nodeResolve } from '@rollup/plugin-node-resolve';
3
+ import replace from '@rollup/plugin-replace';
4
+ import serve from 'rollup-plugin-serve';
5
+ import typescript from '@rollup/plugin-typescript';
6
+
7
+
8
+ export default {
9
+
10
+ // Our game entry point (edit as required)
11
+ input: [
12
+ './src/index.ts'
13
+ ],
14
+
15
+ // Where the build file is to be generated.
16
+ // Most games being built for distribution can use iife as the module type.
17
+ // You can also use 'umd' if you need to ingest your game into another system.
18
+ // If using Phaser 3.21 or **below**, add: `intro: 'var global = window;'` to the output object.
19
+ output: {
20
+ file: './dist/bundle.js',
21
+ name: 'MyGame',
22
+ format: 'iife',
23
+ sourcemap: true
24
+ },
25
+
26
+ plugins: [
27
+
28
+ // Toggle the booleans here to enable / disable Phaser 3 features:
29
+ replace({
30
+ preventAssignment: true,
31
+ 'typeof CANVAS_RENDERER': JSON.stringify(true),
32
+ 'typeof WEBGL_RENDERER': JSON.stringify(true),
33
+ 'typeof WEBGL_DEBUG': JSON.stringify(true),
34
+ 'typeof EXPERIMENTAL': JSON.stringify(true),
35
+ 'typeof PLUGIN_CAMERA3D': JSON.stringify(false),
36
+ 'typeof PLUGIN_FBINSTANT': JSON.stringify(false),
37
+ 'typeof FEATURE_SOUND': JSON.stringify(true)
38
+ }),
39
+
40
+ // Parse our .ts source files
41
+ nodeResolve({
42
+ browser: true,
43
+ extensions: [ '.ts', '.tsx' ]
44
+ }),
45
+
46
+ // We need to convert the Phaser 3 CJS modules into a format Rollup can use:
47
+ commonjs({
48
+ include: [
49
+ 'node_modules/eventemitter3/**',
50
+ 'node_modules/phaser/**'
51
+ ],
52
+ exclude: [
53
+ 'node_modules/phaser/src/polyfills/requestAnimationFrame.js',
54
+ 'node_modules/phaser/src/phaser-esm.js'
55
+ ],
56
+ sourceMap: true,
57
+ ignoreGlobal: true
58
+ }),
59
+
60
+ // See https://github.com/rollup/plugins/tree/master/packages/typescript for config options
61
+ typescript(),
62
+
63
+ // See https://www.npmjs.com/package/rollup-plugin-serve for config options
64
+ serve({
65
+ open: true,
66
+ contentBase: 'dist',
67
+ host: '127.0.0.1',
68
+ port: 10001,
69
+ headers: {
70
+ 'Access-Control-Allow-Origin': '*'
71
+ }
72
+ })
73
+
74
+ ]
75
+ };
ui/rollup.config.dist.mjs ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { nodeResolve } from '@rollup/plugin-node-resolve';
2
+ import commonjs from '@rollup/plugin-commonjs';
3
+ import replace from '@rollup/plugin-replace';
4
+ import terser from '@rollup/plugin-terser';
5
+ import typescript from '@rollup/plugin-typescript';
6
+
7
+ export default {
8
+
9
+ // Our games entry point (edit as required)
10
+ input: [
11
+ './src/index.ts'
12
+ ],
13
+
14
+ // Where the build file is to be generated.
15
+ // Most games being built for distribution can use iife as the module type.
16
+ // You can also use 'umd' if you need to ingest your game into another system.
17
+ // If using Phaser 3.21 or **below**, add: `intro: 'var global = window;'` to the output object.
18
+ output: {
19
+ file: './dist/index.js',
20
+ name: 'MyGame',
21
+ format: 'iife',
22
+ sourcemap: false
23
+ },
24
+
25
+ plugins: [
26
+
27
+ // Toggle the booleans here to enable / disable Phaser 3 features:
28
+ replace({
29
+ preventAssignment: true,
30
+ 'typeof CANVAS_RENDERER': JSON.stringify(true),
31
+ 'typeof WEBGL_RENDERER': JSON.stringify(true),
32
+ 'typeof WEBGL_DEBUG': JSON.stringify(false),
33
+ 'typeof EXPERIMENTAL': JSON.stringify(true),
34
+ 'typeof PLUGIN_CAMERA3D': JSON.stringify(false),
35
+ 'typeof PLUGIN_FBINSTANT': JSON.stringify(false),
36
+ 'typeof FEATURE_SOUND': JSON.stringify(true)
37
+ }),
38
+
39
+ // Parse our .ts source files
40
+ nodeResolve({
41
+ extensions: [ '.ts', '.tsx' ]
42
+ }),
43
+
44
+ // We need to convert the Phaser 3 CJS modules into a format Rollup can use:
45
+ commonjs({
46
+ include: [
47
+ 'node_modules/eventemitter3/**',
48
+ 'node_modules/phaser/**'
49
+ ],
50
+ exclude: [
51
+ 'node_modules/phaser/src/polyfills/requestAnimationFrame.js',
52
+ 'node_modules/phaser/src/phaser-esm.js'
53
+ ],
54
+ sourceMap: false,
55
+ ignoreGlobal: true
56
+ }),
57
+
58
+ // See https://github.com/rollup/plugins/tree/master/packages/typescript for config options
59
+ typescript(),
60
+
61
+ // See https://github.com/rollup/plugins/tree/master/packages/terser for config options
62
+ terser()
63
+
64
+ ]
65
+ };
ui/run.sh ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ #npm install
2
+ npm run watch
3
+ #npm run dev
4
+ #npm run build
ui/screenshot.png ADDED
ui/src/classes/actor.ts ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Physics } from "phaser";
2
+ export class Actor extends Physics.Arcade.Sprite {
3
+ constructor(
4
+ scene: Phaser.Scene,
5
+ x: number,
6
+ y: number,
7
+ texture: string,
8
+ frame?: string | number
9
+ ) {
10
+ super(scene, x, y, texture, frame);
11
+ scene.add.existing(this);
12
+ scene.physics.add.existing(this);
13
+ this.getBody().setCollideWorldBounds(true);
14
+ }
15
+
16
+ protected getBody(): Physics.Arcade.Body {
17
+ return this.body as Physics.Arcade.Body;
18
+ }
19
+
20
+ initAnimations(): void {
21
+ this.scene.anims.create({
22
+ key: this.name + "-walk-down",
23
+ frames: this.scene.anims.generateFrameNumbers(this.name, {
24
+ start: 0,
25
+ end: 2,
26
+ }),
27
+ frameRate: 6,
28
+ });
29
+ this.scene.anims.create({
30
+ key: this.name + "-walk-up",
31
+ frames: this.scene.anims.generateFrameNumbers(this.name, {
32
+ start: 3,
33
+ end: 5,
34
+ }),
35
+ frameRate: 6,
36
+ });
37
+ this.scene.anims.create({
38
+ key: this.name + "-walk-left",
39
+ frames: this.scene.anims.generateFrameNumbers(this.name, {
40
+ start: 6,
41
+ end: 8,
42
+ }),
43
+ frameRate: 6,
44
+ });
45
+ this.scene.anims.create({
46
+ key: this.name + "-walk-right",
47
+ frames: this.scene.anims.generateFrameNumbers(this.name, {
48
+ start: 9,
49
+ end: 11,
50
+ }),
51
+ frameRate: 6,
52
+ });
53
+ }
54
+ }
ui/src/classes/event_center.ts ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ import { Events } from "phaser";
2
+
3
+ const eventsCenter = new Events.EventEmitter();
4
+
5
+ export default eventsCenter;
ui/src/classes/npc.ts ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Actor } from "./actor";
2
+ import { DIRECTION } from "../utils";
3
+ import {
4
+ MoveTo,
5
+ PathFinder,
6
+ Board,
7
+ } from "../phaser3-rex-plugins/plugins/board-components";
8
+ import { Label } from "../phaser3-rex-plugins/templates/ui/ui-components";
9
+ import { COLOR_DARK, COLOR_LIGHT, COLOR_PRIMARY } from "../constants";
10
+ import { TownScene } from "../scenes";
11
+ import eventsCenter from "./event_center";
12
+
13
+ export class NPC extends Actor {
14
+ private moveTo: MoveTo;
15
+ private board: Board;
16
+ private canMove: boolean = true;
17
+ private talkWithPlayer: boolean = false;
18
+ private path: PathFinder.NodeType[] = [];
19
+ private finalDirection: number = undefined;
20
+ private targetLocation: string = undefined;
21
+ private targetNPC: NPC = undefined;
22
+ private textBox: Label = undefined;
23
+
24
+ public id: number;
25
+ public direction: number = DIRECTION.DOWN;
26
+
27
+ constructor(
28
+ scene: Phaser.Scene,
29
+ board: Board,
30
+ x: number,
31
+ y: number,
32
+ name: string,
33
+ id: number
34
+ ) {
35
+ super(scene, x, y, name);
36
+
37
+ this.setName(name);
38
+ this.board = board;
39
+ this.id = id;
40
+ // PHYSICS
41
+ this.getBody().setSize(14, 16);
42
+ this.getBody().setOffset(0, 4);
43
+ this.getBody().setImmovable(true);
44
+ this.setOrigin(0, 0.2);
45
+
46
+ this.initAnimations();
47
+ this.moveTo = this.scene.rexBoard.add.moveTo(this, {
48
+ speed: 55,
49
+ sneak: true,
50
+ });
51
+ this.listenToDirectionEvent();
52
+ }
53
+
54
+ update(): void {
55
+ if (this.path.length > 0 && !this.moveTo.isRunning && this.canMove) {
56
+ var tileXY = this.board.worldXYToTileXY(this.x, this.y);
57
+ if (tileXY.x == this.path[0].x) {
58
+ if (tileXY.y < this.path[0].y) this.changeDirection(DIRECTION.DOWN);
59
+ else if (tileXY.y > this.path[0].y) this.changeDirection(DIRECTION.UP);
60
+ } else if (tileXY.y == this.path[0].y) {
61
+ if (tileXY.x < this.path[0].x) this.changeDirection(DIRECTION.RIGHT);
62
+ else if (tileXY.x > this.path[0].x)
63
+ this.changeDirection(DIRECTION.LEFT);
64
+ }
65
+ var move = this.moveTo.moveTo(this.path.shift());
66
+ move.removeAllListeners("complete");
67
+ move.on("complete", () => {
68
+ if (this.path.length == 0) {
69
+ this.changeDirection(this.finalDirection);
70
+ this.emitTurnEvent();
71
+ if (this.targetLocation != undefined) {
72
+ fetch("http://127.0.0.1:10002/update_location", {
73
+ method: "POST",
74
+ headers: {
75
+ "Content-Type": "application/json",
76
+ },
77
+ credentials: "same-origin",
78
+ body: JSON.stringify({
79
+ agent_locations: {
80
+ [this.name]: this.targetLocation,
81
+ },
82
+ }),
83
+ });
84
+ }
85
+ }
86
+ });
87
+ }
88
+
89
+ var text = "";
90
+ switch (this.direction) {
91
+ case DIRECTION.UP:
92
+ text = "up";
93
+ break;
94
+ case DIRECTION.DOWN:
95
+ text = "down";
96
+ break;
97
+ case DIRECTION.LEFT:
98
+ text = "left";
99
+ break;
100
+ case DIRECTION.RIGHT:
101
+ text = "right";
102
+ break;
103
+ }
104
+ this.anims.play(this.name + "-walk-" + text, true);
105
+ if (this.anims.isPlaying && !this.moveTo.isRunning)
106
+ this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]);
107
+ this.updateTextBox();
108
+ this.depth = this.y + this.height * 0.8;
109
+ }
110
+
111
+ listenToDirectionEvent(): void {
112
+ eventsCenter.on(this.name + "-up", () => {
113
+ this.changeDirection(DIRECTION.UP);
114
+ });
115
+ eventsCenter.on(this.name + "-down", () => {
116
+ this.changeDirection(DIRECTION.DOWN);
117
+ });
118
+ eventsCenter.on(this.name + "-left", () => {
119
+ this.changeDirection(DIRECTION.LEFT);
120
+ });
121
+ eventsCenter.on(this.name + "-right", () => {
122
+ this.changeDirection(DIRECTION.RIGHT);
123
+ });
124
+ }
125
+
126
+ emitTurnEvent(): void {
127
+ // Make the listener NPC turn to the speaker NPC.
128
+ if (this.targetNPC == undefined) return;
129
+ var direction = "";
130
+ switch (this.finalDirection) {
131
+ case DIRECTION.UP:
132
+ direction = "down";
133
+ break;
134
+ case DIRECTION.DOWN:
135
+ direction = "up";
136
+ break;
137
+ case DIRECTION.LEFT:
138
+ direction = "right";
139
+ break;
140
+ case DIRECTION.RIGHT:
141
+ direction = "left";
142
+ break;
143
+ }
144
+ eventsCenter.emit(this.targetNPC.name + "-" + direction);
145
+ this.setTargetNPC();
146
+ }
147
+
148
+ updateTextBox(): void {
149
+ if (this.textBox == undefined) return;
150
+ this.textBox.setOrigin(0.5, 1.0);
151
+ var scale = this.scene.cameras.main.zoom;
152
+ this.textBox.setX(this.x + this.width / 2);
153
+ this.textBox.setY(this.y - this.height * 0.2);
154
+ this.textBox.depth = this.y + this.height * 0.8;
155
+ this.textBox.getChildren().forEach((child) => {
156
+ child.setDepth(this.y + this.height * 0.8);
157
+ });
158
+ }
159
+
160
+ public setTextBox(text: string): void {
161
+ this.destroyTextBox();
162
+ var scale = this.scene.cameras.main.zoom;
163
+ var scene = this.scene as TownScene;
164
+ this.textBox = scene.rexUI.add
165
+ .label({
166
+ x: this.x + this.width / 2,
167
+ y: this.y - this.height * 0.2,
168
+ width: 24 * scale,
169
+ orientation: "x",
170
+ background: scene.rexUI.add.roundRectangle(
171
+ 0,
172
+ 0,
173
+ 2,
174
+ 2,
175
+ 20,
176
+ COLOR_PRIMARY,
177
+ 0.7
178
+ ),
179
+ text: scene.rexUI.wrapExpandText(
180
+ scene.add.text(0, 0, text, {
181
+ fontSize: 10,
182
+ })
183
+ ),
184
+ expandTextWidth: true,
185
+ space: {
186
+ left: 10,
187
+ right: 10,
188
+ top: 10,
189
+ bottom: 10,
190
+ },
191
+ })
192
+ .setOrigin(0.5, 1.0)
193
+ .setScale(1 / scale, 1 / scale)
194
+ .setDepth(this.y + this.height * 0.8)
195
+ .layout();
196
+ }
197
+
198
+ public destroyTextBox(): void {
199
+ if (this.textBox != undefined) this.textBox.destroy();
200
+ this.textBox = undefined;
201
+ }
202
+
203
+ public changeDirection(direction: number): void {
204
+ if (direction == undefined) return;
205
+ this.direction = direction;
206
+ }
207
+
208
+ public moveAlongPath(
209
+ path: PathFinder.NodeType[],
210
+ finalDirection: number = undefined,
211
+ targetLocation: string = undefined
212
+ ): void {
213
+ if (path.length == 0) return;
214
+ if (this.moveTo.isRunning) return;
215
+ if (this.path.length > 0) return;
216
+ this.path = path;
217
+ this.finalDirection = finalDirection;
218
+ this.targetLocation = targetLocation;
219
+ }
220
+
221
+ public pauseMoving(): void {
222
+ this.moveTo.stop();
223
+ this.canMove = false;
224
+ }
225
+
226
+ public resumeMoving(): void {
227
+ this.moveTo.resume();
228
+ this.canMove = true;
229
+ }
230
+
231
+ public isMoving(): boolean {
232
+ return this.moveTo.isRunning || this.path.length > 0;
233
+ }
234
+
235
+ public isTalking(): boolean {
236
+ return this.talkWithPlayer;
237
+ }
238
+
239
+ public setTalking(talking: boolean): void {
240
+ this.talkWithPlayer = talking;
241
+ }
242
+
243
+ public setTargetNPC(targetNPC: NPC = undefined): void {
244
+ this.targetNPC = targetNPC;
245
+ }
246
+ }
ui/src/classes/player.ts ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Actor } from "./actor";
2
+ export class Player extends Actor {
3
+ private keyW: Phaser.Input.Keyboard.Key;
4
+ private keyA: Phaser.Input.Keyboard.Key;
5
+ private keyS: Phaser.Input.Keyboard.Key;
6
+ private keyD: Phaser.Input.Keyboard.Key;
7
+
8
+ constructor(scene: Phaser.Scene, x: number, y: number) {
9
+ super(scene, x, y, "Brendan");
10
+
11
+ this.setName("Brendan");
12
+
13
+ // Keys
14
+ this.initKeyboard();
15
+
16
+ // PHYSICS
17
+ this.getBody().setSize(14, 16);
18
+ this.getBody().setOffset(0, 5);
19
+
20
+ // ANIMATIONS
21
+ this.initAnimations();
22
+ }
23
+
24
+ update(): void {
25
+ this.getBody().setVelocity(0);
26
+
27
+ var pressed_flag = false;
28
+ if (this.keyW.enabled && this.keyW?.isDown) {
29
+ this.getBody().setVelocityY(-110);
30
+ this.anims.play(this.name + "-walk-up", true);
31
+ pressed_flag = true;
32
+ }
33
+
34
+ if (this.keyA.enabled && this.keyA?.isDown) {
35
+ // this.getBody().setOffset(48, 15);
36
+ this.getBody().setVelocityX(-110);
37
+ this.anims.play(this.name + "-walk-left", true);
38
+ pressed_flag = true;
39
+ }
40
+
41
+ if (this.keyS.enabled && this.keyS?.isDown) {
42
+ this.getBody().setVelocityY(110);
43
+ this.anims.play(this.name + "-walk-down", true);
44
+ pressed_flag = true;
45
+ }
46
+
47
+ if (this.keyD.enabled && this.keyD?.isDown) {
48
+ this.getBody().setVelocityX(110);
49
+ this.anims.play(this.name + "-walk-right", true);
50
+ // this.getBody().setOffset(15, 15);
51
+ pressed_flag = true;
52
+ }
53
+
54
+ if (!pressed_flag && this.anims.isPlaying) {
55
+ this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]);
56
+ }
57
+ this.depth = this.y + 0.5 * this.height;
58
+ }
59
+
60
+ initKeyboard(): void {
61
+ this.keyW = this.scene.input.keyboard!.addKey("W");
62
+ this.keyA = this.scene.input.keyboard!.addKey("A");
63
+ this.keyS = this.scene.input.keyboard!.addKey("S");
64
+ this.keyD = this.scene.input.keyboard!.addKey("D");
65
+ }
66
+ }
ui/src/constants.ts ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ export const COLOR_PRIMARY = 0x4e342e;
2
+ export const COLOR_LIGHT = 0x7b5e57;
3
+ export const COLOR_DARK = 0x260e04;
ui/src/index.ts ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Game, Scale, Types, WEBGL } from "phaser";
2
+
3
+ import { TownScene, LoadingScene } from "./scenes";
4
+ import UIPlugin from "./phaser3-rex-plugins/templates/ui/ui-plugin";
5
+ import BoardPlugin from "./phaser3-rex-plugins/plugins/board-plugin";
6
+
7
+ declare global {
8
+ interface Window {
9
+ sizeChanged: () => void;
10
+ game: Game;
11
+ }
12
+ }
13
+
14
+ export const gameConfig: Types.Core.GameConfig = {
15
+ title: "Phaser game tutorial",
16
+ type: WEBGL,
17
+ parent: "game",
18
+ // backgroundColor: '#351f1b',
19
+ scale: {
20
+ mode: Scale.ScaleModes.NONE,
21
+ width: window.innerWidth,
22
+ height: window.innerHeight,
23
+ },
24
+ physics: {
25
+ default: "arcade",
26
+ arcade: {
27
+ debug: false,
28
+ },
29
+ },
30
+ render: {
31
+ antialiasGL: false,
32
+ pixelArt: true,
33
+ },
34
+ callbacks: {
35
+ postBoot: () => {
36
+ window.sizeChanged();
37
+ },
38
+ },
39
+ canvasStyle: `display: block; width: 100%; height: 100%;`,
40
+ autoFocus: true,
41
+ audio: {
42
+ disableWebAudio: false,
43
+ },
44
+ scene: [LoadingScene, TownScene],
45
+ dom: {
46
+ createContainer: true,
47
+ },
48
+ plugins: {
49
+ scene: [
50
+ {
51
+ key: "rexUI",
52
+ plugin: UIPlugin,
53
+ mapping: "rexUI",
54
+ },
55
+ {
56
+ key: "rexBoard",
57
+ plugin: BoardPlugin,
58
+ mapping: "rexBoard",
59
+ },
60
+ ],
61
+ },
62
+ };
63
+
64
+ window.sizeChanged = () => {
65
+ if (window.game.isBooted) {
66
+ setTimeout(() => {
67
+ window.game.scale.resize(window.innerWidth, window.innerHeight);
68
+
69
+ window.game.canvas.setAttribute(
70
+ "style",
71
+ `display: block; width: ${window.innerWidth}px; height: ${window.innerHeight}px;`
72
+ );
73
+ }, 100);
74
+ }
75
+ };
76
+
77
+ window.onresize = () => window.sizeChanged();
78
+
79
+ window.game = new Game(gameConfig);
ui/src/phaser3-rex-plugins/plugins/alphamaskimage.d.ts ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import AlphaMaskImage from './gameobjects/canvas/alphamaskimage/AlphaMaskImage';
2
+ export default AlphaMaskImage;
ui/src/phaser3-rex-plugins/plugins/anchor-plugin.d.ts ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import Anchor from './anchor'
2
+
3
+ export default class AnchorPlugin extends Phaser.Plugins.BasePlugin {
4
+ add(
5
+ gameObject: Phaser.GameObjects.GameObject,
6
+ config?: Anchor.IConfig
7
+ ): Anchor;
8
+
9
+ }
ui/src/phaser3-rex-plugins/plugins/anchor.d.ts ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import Anchor from './behaviors/anchor/Anchor';
2
+ export default Anchor;
ui/src/phaser3-rex-plugins/plugins/arcadestepclock.js ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import ArcadeStepClock from './time/clock/ArcadeStepClock.js';
2
+ export default ArcadeStepClock;
ui/src/phaser3-rex-plugins/plugins/arcadetcrp-plugin.js ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import TCRP from './arcadetcrp.js';
2
+
3
+ const Recorder = TCRP.Recorder;
4
+ const Player = TCRP.Player;
5
+ const StepRunner = TCRP.StepRunner;
6
+
7
+ class ArcadeTCRPPlugin extends Phaser.Plugins.BasePlugin {
8
+ constructor(pluginManager) {
9
+ super(pluginManager);
10
+ }
11
+
12
+ start() {
13
+ var eventEmitter = this.game.events;
14
+ eventEmitter.on('destroy', this.destroy, this);
15
+ }
16
+
17
+ addRecorder(parent, config) {
18
+ return new Recorder(parent, config);
19
+ }
20
+
21
+ addPlayer(parent, config) {
22
+ return new Player(parent, config);
23
+ }
24
+
25
+ addStepRunner(parent) {
26
+ return new StepRunner(parent);
27
+ }
28
+ }
29
+
30
+ var methods = {
31
+ runCommands: TCRP.RunCommands
32
+ }
33
+
34
+ Object.assign(
35
+ ArcadeTCRPPlugin.prototype,
36
+ methods
37
+ );
38
+
39
+ export default ArcadeTCRPPlugin;
ui/src/phaser3-rex-plugins/plugins/arcadetcrp.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Recorder from './logic/runcommands/arcadetcrp/Recorder.js';
2
+ import Player from './logic/runcommands/arcadetcrp/Player.js';
3
+ import StepRunner from './logic/runcommands/arcadetcrp/StepRunner.js';
4
+ import RunCommands from './logic/runcommands/RunCommands.js';
5
+
6
+ export default {
7
+ Recorder: Recorder,
8
+ Player: Player,
9
+ StepRunner: StepRunner,
10
+ RunCommands: RunCommands
11
+ };
ui/src/phaser3-rex-plugins/plugins/board-plugin.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import ObjectFactory from './board/ObjectFactory.js';
2
+
3
+ import BoardFactory from './board/board/Factory.js';
4
+ import HexagonFactory from './board/grid/hexagon/Factory.js';
5
+ import QuadFactory from './board/grid/quad/Factory.js';
6
+ import ShapeFactory from './board/shape/Factory.js';
7
+
8
+ import MoveToFactory from './board/moveto/Factory.js';
9
+ import MatchFactory from './board/match/Factory.js';
10
+ import PathFinderFactory from './board/pathfinder/Factory.js';
11
+ import FieldOfViewFactory from './board/fieldofview/Factory.js';
12
+ import MonopolyFactory from './board/monopoly/Factory.js';
13
+
14
+ import MiniBoardFactory from './board/miniboard/Factory.js';
15
+
16
+ import HexagonMap from './board/hexagonmap/index.js';
17
+
18
+ import CreateTileTexture from './board/texture/CreateTileTexture.js';
19
+
20
+ import CreateBoardFromTilemap from './board/tilemap/CreateBoardFromTilemap.js';
21
+
22
+ class BoardPlugin extends Phaser.Plugins.ScenePlugin {
23
+ constructor(scene, pluginManager) {
24
+ super(scene, pluginManager);
25
+
26
+ this.add = new ObjectFactory(scene);
27
+
28
+ // Helper functions
29
+ this.hexagonMap = HexagonMap;
30
+ this.createTileTexture = CreateTileTexture;
31
+ this.createBoardFromTilemap = CreateBoardFromTilemap;
32
+ }
33
+
34
+ start() {
35
+ var eventEmitter = this.scene.sys.events;
36
+ eventEmitter.on('destroy', this.destroy, this);
37
+ }
38
+ }
39
+
40
+ export default BoardPlugin;
ui/src/phaser3-rex-plugins/plugins/boids-plugin.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Boids from './boids.js';
2
+
3
+ class BoidsPlugin extends Phaser.Plugins.BasePlugin {
4
+
5
+ constructor(pluginManager) {
6
+ super(pluginManager);
7
+ }
8
+
9
+ start() {
10
+ var eventEmitter = this.game.events;
11
+ eventEmitter.on('destroy', this.destroy, this);
12
+ }
13
+
14
+ add(gameObject, config) {
15
+ return new Boids(gameObject, config);
16
+ }
17
+ }
18
+ export default BoidsPlugin;
ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.d.ts ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ import BracketParser from './bracketparser2';
2
+
3
+ export default class BracketParserPlugin extends Phaser.Plugins.BasePlugin {
4
+ add(
5
+ config?: BracketParser.IConfig
6
+ ): BracketParser;
7
+
8
+ }
ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import BracketParser from './bracketparser2.js';
2
+
3
+ class BracketParserPlugin extends Phaser.Plugins.BasePlugin {
4
+ constructor(pluginManager) {
5
+ super(pluginManager);
6
+ }
7
+
8
+ start() {
9
+ var eventEmitter = this.game.events;
10
+ eventEmitter.on('destroy', this.destroy, this);
11
+ }
12
+
13
+ add(config) {
14
+ return new BracketParser(config);
15
+ }
16
+ }
17
+
18
+ export default BracketParserPlugin;
ui/src/phaser3-rex-plugins/plugins/bracketparser2.js ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import BracketParser from './logic/bracketparser/bracketparser2/BracketParser.js';
2
+ export default BracketParser;
ui/src/phaser3-rex-plugins/plugins/buffdata-plugin.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import DataManager from './data/buff/DataManager.js';
2
+ import Extend from './data/buff/Extend.js';
3
+
4
+ class DataManagerPlugin extends Phaser.Plugins.BasePlugin {
5
+
6
+ constructor(pluginManager) {
7
+ super(pluginManager);
8
+ }
9
+
10
+ start() {
11
+ var eventEmitter = this.game.events;
12
+ eventEmitter.on('destroy', this.destroy, this);
13
+ }
14
+
15
+ add(parent, eventEmitter) {
16
+ return new DataManager(parent, eventEmitter);
17
+ }
18
+
19
+ extend(dataManager) {
20
+ return Extend(dataManager);
21
+ }
22
+ }
23
+
24
+ export default DataManagerPlugin;
ui/src/phaser3-rex-plugins/plugins/buildarcadeobject.d.ts ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import BuildArcadeObject from './utils/arcade/BuildArcadeObject';
2
+ export default BuildArcadeObject;
ui/src/phaser3-rex-plugins/plugins/canvas.d.ts ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import Canvas from './gameobjects/canvas/canvas/Canvas';
2
+ export default Canvas;
ui/src/phaser3-rex-plugins/plugins/canvasdata-plugin.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Methods from './canvasdata.js';
2
+
3
+ const CanvasPool = Phaser.Display.Canvas.CanvasPool;
4
+
5
+ class CanvasDataPlugin extends Phaser.Plugins.BasePlugin {
6
+
7
+ constructor(pluginManager) {
8
+ super(pluginManager);
9
+ }
10
+
11
+ start() {
12
+ var eventEmitter = this.game.events;
13
+ eventEmitter.on('destroy', this.destroy, this);
14
+
15
+ this._tmpCanvas = CanvasPool.create2D(this);
16
+ }
17
+
18
+ destroy() {
19
+ CanvasPool.remove(this._tmpCanvas);
20
+ this._tmpCanvas = undefined;
21
+ super.destroy();
22
+ }
23
+
24
+ get textureManager() {
25
+ return this.game.textures;
26
+ }
27
+ }
28
+
29
+ Object.assign(
30
+ CanvasDataPlugin.prototype,
31
+ Methods
32
+ );
33
+
34
+ export default CanvasDataPlugin;
ui/src/phaser3-rex-plugins/plugins/canvasdata.d.ts ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import CanvasObjectToBitmap from './data/canvasdata/CanvasObjectToBitmap';
2
+ import TextureTColorMap from './data/canvasdata/TextureToColormap';
3
+
4
+ declare var Methods: {
5
+ textObjectToBitmap: typeof CanvasObjectToBitmap,
6
+ canvasObjectToBitmap: typeof CanvasObjectToBitmap,
7
+ textureTColorMap: typeof TextureTColorMap,
8
+ }
9
+
10
+ export default Methods;