diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore index d9f8319..0cb742b 100644 --- a/.gitignore +++ b/.gitignore @@ -159,6 +159,26 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +# Godot +.godot/ +*.x86_64 +*.pck + +# Godot-specific ignores +.import/ +export.cfg +export_presets.cfg + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ +mono_crash.*.json +.vs/ +*.import + # Mac bs .DS_Store diff --git a/LICENSE b/LICENSE deleted file mode 100644 index a612ad9..0000000 --- a/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md deleted file mode 100644 index 1f3049b..0000000 --- a/README.md +++ /dev/null @@ -1,46 +0,0 @@ - -# Pneuma: Reinforcement Learning Platform - -## Introduction - -Pneuma is a Reinforcement Learning platform created as part of a thesis project. It is developed using PyGame and offers a customizable environment for testing and implementing reinforcement learning algorithms. - -## Installation - -To install Pneuma, clone this repository and install the requirements (`requirements.txt`) - -After cloning, you can edit the agents, create your own, and modify pneuma.py (the main file). Additionally, consider editing player.setup_agent() for further customization. -Note - -- [] TODO: Separate the update logic from the network logic inside the player. - -## Usage - -To run Pneuma, use the command-line interface with the following options: - -- `--no_seed`: If set to True, runs the program without a seed. Default is False. -- `--seed [int]`: Specifies the seed for the random number generator. Default is 1. -- `--n_episodes [int]`: Defines the number of episodes. Default is 300. -- `--ep_length [int]`: Sets the length of each episode. Default is 5000. -- `--n_players [int]`: Number of players. Default is 1. -- `--chkpt_path [str]`: Path for saving/loading agent models. Default is "agents/saved_models". -- `--figure_path [str]`: Path for saving figures. Default is "figures". -- `--horizon [int]`: Number of steps per update. Default is 200. -- `--show_pg`: If True, opens a PyGame window on the desktop. Default is False. -- `--no_load`: If True, ignores saved models. Default is False. -- `--gamma [float]`: The gamma parameter for PPO. Default is 0.99. -- `--alpha [float]`: The alpha parameter for PPO. Default is 0.0003. -- `--policy_clip [float]`: The policy clip. Default is 0.2. -- `--batch_size [int]`: Size of each batch. Default is 64. -- `--n_epochs [int]`: Number of epochs. Default is 10. -- `--gae_lambda [float]`: The lambda parameter of the GAE. Default is 0.95. - -### Example Command - -```bash -$ python pneuma.py --seed 42 --n_episodes 300 --ep_length 5000 --n_players 2 --no_load -``` - -## License - -Pneuma is licensed under the Mozilla Public License 2.0. \ No newline at end of file diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/args.py b/args.py deleted file mode 100644 index 53fde64..0000000 --- a/args.py +++ /dev/null @@ -1,96 +0,0 @@ -import argparse -from utils.hyperparams import HPARAMS - - -def parse_args(): - - parser = argparse.ArgumentParser( - prog='Pneuma', - description='A Reinforcement Learning platform made with PyGame' - ) - - # Define seed - parser.add_argument('--no_seed', - default=False, - action="store_true", - help="Set to run without a seed.") - - parser.add_argument('--seed', - type=int, - default=1, - help="The seed for the RNG.") - - # Define episodes and agents - parser.add_argument('--n_episodes', - type=int, - default=12000, - help="Number of episodes.") - - parser.add_argument('--ep_length', - type=int, - default=700, - help="Length of each episode.") - - parser.add_argument('--n_agents', - type=int, - default=1, - help="Number of agents.") - - # Define hyperparameters - parser.add_argument('--horizon', - type=int, - default=HPARAMS["horizon"], - help="The number of steps per update") - - parser.add_argument('--gamma', - type=float, - default=HPARAMS["discount_factor"], - help="The discount factor for PPO") - - parser.add_argument('--entropy_coeff', - type=float, - default=HPARAMS["entropy_coeff"], - help="The entropy coefficient") - - parser.add_argument('--alpha', - type=float, - default=HPARAMS["learning_rate"], - help="The learning_rate for PPO") - - parser.add_argument('--policy_clip', - type=float, - default=HPARAMS["policy_clip"], - help="The policy clip for PPO") - - parser.add_argument('--batch_size', - type=int, - default=HPARAMS["batch_size"], - help="The size of each batch") - - parser.add_argument('--n_epochs', - type=int, - default=HPARAMS["num_epochs"], - help="The number of epochs") - - parser.add_argument('--gae_lambda', - type=float, - default=HPARAMS["GAE_lambda"], - help="The lambda parameter of the GAE") - - # Misc - parser.add_argument('--no_training', - default=False, - action="store_true", - help="Set flag to disable learning. Useful for viewing trained agents interact in the environment.") - - parser.add_argument('--load', - type=int, - default=None, - help="Run id to load within chkpt_path") - - parser.add_argument('--show_pg', - default=False, - action="store_true", - help="Set flag to open a PyGame window on desktop") - - return parser.parse_args() diff --git a/assets/font/joystix.ttf b/assets/font/joystix.ttf deleted file mode 100644 index 5fd36a5..0000000 Binary files a/assets/font/joystix.ttf and /dev/null differ diff --git a/assets/graphics/.DS_Store b/assets/graphics/.DS_Store deleted file mode 100644 index e2d53d3..0000000 Binary files a/assets/graphics/.DS_Store and /dev/null differ diff --git a/assets/graphics/grass/grass_1.png b/assets/graphics/grass/grass_1.png deleted file mode 100644 index e59c1d4..0000000 Binary files a/assets/graphics/grass/grass_1.png and /dev/null differ diff --git a/assets/graphics/grass/grass_2.png b/assets/graphics/grass/grass_2.png deleted file mode 100644 index 74c656a..0000000 Binary files a/assets/graphics/grass/grass_2.png and /dev/null differ diff --git a/assets/graphics/grass/grass_3.png b/assets/graphics/grass/grass_3.png deleted file mode 100644 index da65a05..0000000 Binary files a/assets/graphics/grass/grass_3.png and /dev/null differ diff --git a/assets/graphics/icon.png b/assets/graphics/icon.png deleted file mode 100644 index ad7de97..0000000 Binary files a/assets/graphics/icon.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/attack/0.png b/assets/graphics/monsters/bamboo/attack/0.png deleted file mode 100644 index c14d75b..0000000 Binary files a/assets/graphics/monsters/bamboo/attack/0.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/idle/0.png b/assets/graphics/monsters/bamboo/idle/0.png deleted file mode 100644 index c14d75b..0000000 Binary files a/assets/graphics/monsters/bamboo/idle/0.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/idle/1.png b/assets/graphics/monsters/bamboo/idle/1.png deleted file mode 100644 index 9dd1acc..0000000 Binary files a/assets/graphics/monsters/bamboo/idle/1.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/idle/2.png b/assets/graphics/monsters/bamboo/idle/2.png deleted file mode 100644 index c14d75b..0000000 Binary files a/assets/graphics/monsters/bamboo/idle/2.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/idle/3.png b/assets/graphics/monsters/bamboo/idle/3.png deleted file mode 100644 index 6411298..0000000 Binary files a/assets/graphics/monsters/bamboo/idle/3.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/move/0.png b/assets/graphics/monsters/bamboo/move/0.png deleted file mode 100644 index c14d75b..0000000 Binary files a/assets/graphics/monsters/bamboo/move/0.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/move/1.png b/assets/graphics/monsters/bamboo/move/1.png deleted file mode 100644 index 9dd1acc..0000000 Binary files a/assets/graphics/monsters/bamboo/move/1.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/move/2.png b/assets/graphics/monsters/bamboo/move/2.png deleted file mode 100644 index c14d75b..0000000 Binary files a/assets/graphics/monsters/bamboo/move/2.png and /dev/null differ diff --git a/assets/graphics/monsters/bamboo/move/3.png b/assets/graphics/monsters/bamboo/move/3.png deleted file mode 100644 index 6411298..0000000 Binary files a/assets/graphics/monsters/bamboo/move/3.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/attack/0.png b/assets/graphics/monsters/raccoon/attack/0.png deleted file mode 100644 index 2e53f25..0000000 Binary files a/assets/graphics/monsters/raccoon/attack/0.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/attack/1.png b/assets/graphics/monsters/raccoon/attack/1.png deleted file mode 100644 index 21c4d49..0000000 Binary files a/assets/graphics/monsters/raccoon/attack/1.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/attack/2.png b/assets/graphics/monsters/raccoon/attack/2.png deleted file mode 100644 index 3319c79..0000000 Binary files a/assets/graphics/monsters/raccoon/attack/2.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/attack/3.png b/assets/graphics/monsters/raccoon/attack/3.png deleted file mode 100644 index aa2d58f..0000000 Binary files a/assets/graphics/monsters/raccoon/attack/3.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/idle/0.png b/assets/graphics/monsters/raccoon/idle/0.png deleted file mode 100644 index cf0fb7f..0000000 Binary files a/assets/graphics/monsters/raccoon/idle/0.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/idle/1.png b/assets/graphics/monsters/raccoon/idle/1.png deleted file mode 100644 index cf0fb7f..0000000 Binary files a/assets/graphics/monsters/raccoon/idle/1.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/idle/2.png b/assets/graphics/monsters/raccoon/idle/2.png deleted file mode 100644 index 8d16e08..0000000 Binary files a/assets/graphics/monsters/raccoon/idle/2.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/idle/3.png b/assets/graphics/monsters/raccoon/idle/3.png deleted file mode 100644 index dc57a96..0000000 Binary files a/assets/graphics/monsters/raccoon/idle/3.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/idle/4.png b/assets/graphics/monsters/raccoon/idle/4.png deleted file mode 100644 index fb12e6c..0000000 Binary files a/assets/graphics/monsters/raccoon/idle/4.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/idle/5.png b/assets/graphics/monsters/raccoon/idle/5.png deleted file mode 100644 index c0ede56..0000000 Binary files a/assets/graphics/monsters/raccoon/idle/5.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/move/0.png b/assets/graphics/monsters/raccoon/move/0.png deleted file mode 100644 index a60b9d0..0000000 Binary files a/assets/graphics/monsters/raccoon/move/0.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/move/1.png b/assets/graphics/monsters/raccoon/move/1.png deleted file mode 100644 index 34410ca..0000000 Binary files a/assets/graphics/monsters/raccoon/move/1.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/move/2.png b/assets/graphics/monsters/raccoon/move/2.png deleted file mode 100644 index c299286..0000000 Binary files a/assets/graphics/monsters/raccoon/move/2.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/move/3.png b/assets/graphics/monsters/raccoon/move/3.png deleted file mode 100644 index 7d9ee77..0000000 Binary files a/assets/graphics/monsters/raccoon/move/3.png and /dev/null differ diff --git a/assets/graphics/monsters/raccoon/move/4.png b/assets/graphics/monsters/raccoon/move/4.png deleted file mode 100644 index 656981c..0000000 Binary files a/assets/graphics/monsters/raccoon/move/4.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/attack/0.png b/assets/graphics/monsters/spirit/attack/0.png deleted file mode 100644 index 0afa8f1..0000000 Binary files a/assets/graphics/monsters/spirit/attack/0.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/idle/0.png b/assets/graphics/monsters/spirit/idle/0.png deleted file mode 100644 index 0aee4b5..0000000 Binary files a/assets/graphics/monsters/spirit/idle/0.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/idle/1.png b/assets/graphics/monsters/spirit/idle/1.png deleted file mode 100644 index efe735c..0000000 Binary files a/assets/graphics/monsters/spirit/idle/1.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/idle/2.png b/assets/graphics/monsters/spirit/idle/2.png deleted file mode 100644 index a46d5e2..0000000 Binary files a/assets/graphics/monsters/spirit/idle/2.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/idle/3.png b/assets/graphics/monsters/spirit/idle/3.png deleted file mode 100644 index 15e5d4c..0000000 Binary files a/assets/graphics/monsters/spirit/idle/3.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/move/0.png b/assets/graphics/monsters/spirit/move/0.png deleted file mode 100644 index 0afa8f1..0000000 Binary files a/assets/graphics/monsters/spirit/move/0.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/move/1.png b/assets/graphics/monsters/spirit/move/1.png deleted file mode 100644 index bf8f85b..0000000 Binary files a/assets/graphics/monsters/spirit/move/1.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/move/2.png b/assets/graphics/monsters/spirit/move/2.png deleted file mode 100644 index 809ebc2..0000000 Binary files a/assets/graphics/monsters/spirit/move/2.png and /dev/null differ diff --git a/assets/graphics/monsters/spirit/move/3.png b/assets/graphics/monsters/spirit/move/3.png deleted file mode 100644 index 463875f..0000000 Binary files a/assets/graphics/monsters/spirit/move/3.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/attack/0 - Copy (2).png b/assets/graphics/monsters/squid/attack/0 - Copy (2).png deleted file mode 100644 index 644197e..0000000 Binary files a/assets/graphics/monsters/squid/attack/0 - Copy (2).png and /dev/null differ diff --git a/assets/graphics/monsters/squid/attack/0 - Copy (3).png b/assets/graphics/monsters/squid/attack/0 - Copy (3).png deleted file mode 100644 index 644197e..0000000 Binary files a/assets/graphics/monsters/squid/attack/0 - Copy (3).png and /dev/null differ diff --git a/assets/graphics/monsters/squid/attack/0 - Copy.png b/assets/graphics/monsters/squid/attack/0 - Copy.png deleted file mode 100644 index 644197e..0000000 Binary files a/assets/graphics/monsters/squid/attack/0 - Copy.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/attack/0.png b/assets/graphics/monsters/squid/attack/0.png deleted file mode 100644 index 644197e..0000000 Binary files a/assets/graphics/monsters/squid/attack/0.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/idle/0.png b/assets/graphics/monsters/squid/idle/0.png deleted file mode 100644 index a9beba8..0000000 Binary files a/assets/graphics/monsters/squid/idle/0.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/idle/1.png b/assets/graphics/monsters/squid/idle/1.png deleted file mode 100644 index f854919..0000000 Binary files a/assets/graphics/monsters/squid/idle/1.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/idle/2.png b/assets/graphics/monsters/squid/idle/2.png deleted file mode 100644 index a9beba8..0000000 Binary files a/assets/graphics/monsters/squid/idle/2.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/idle/3.png b/assets/graphics/monsters/squid/idle/3.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/assets/graphics/monsters/squid/idle/3.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/idle/4.png b/assets/graphics/monsters/squid/idle/4.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/assets/graphics/monsters/squid/idle/4.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/move/0.png b/assets/graphics/monsters/squid/move/0.png deleted file mode 100644 index a9beba8..0000000 Binary files a/assets/graphics/monsters/squid/move/0.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/move/1.png b/assets/graphics/monsters/squid/move/1.png deleted file mode 100644 index f854919..0000000 Binary files a/assets/graphics/monsters/squid/move/1.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/move/2.png b/assets/graphics/monsters/squid/move/2.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/assets/graphics/monsters/squid/move/2.png and /dev/null differ diff --git a/assets/graphics/monsters/squid/move/3.png b/assets/graphics/monsters/squid/move/3.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/assets/graphics/monsters/squid/move/3.png and /dev/null differ diff --git a/assets/graphics/objects/0.png b/assets/graphics/objects/0.png deleted file mode 100644 index 05fc485..0000000 Binary files a/assets/graphics/objects/0.png and /dev/null differ diff --git a/assets/graphics/objects/01.png b/assets/graphics/objects/01.png deleted file mode 100644 index 3fa3af9..0000000 Binary files a/assets/graphics/objects/01.png and /dev/null differ diff --git a/assets/graphics/objects/02.png b/assets/graphics/objects/02.png deleted file mode 100644 index c91ceec..0000000 Binary files a/assets/graphics/objects/02.png and /dev/null differ diff --git a/assets/graphics/objects/03.png b/assets/graphics/objects/03.png deleted file mode 100644 index 186ff45..0000000 Binary files a/assets/graphics/objects/03.png and /dev/null differ diff --git a/assets/graphics/objects/04.png b/assets/graphics/objects/04.png deleted file mode 100644 index f3a3e7a..0000000 Binary files a/assets/graphics/objects/04.png and /dev/null differ diff --git a/assets/graphics/objects/05.png b/assets/graphics/objects/05.png deleted file mode 100644 index eab8994..0000000 Binary files a/assets/graphics/objects/05.png and /dev/null differ diff --git a/assets/graphics/objects/06.png b/assets/graphics/objects/06.png deleted file mode 100644 index a7859b7..0000000 Binary files a/assets/graphics/objects/06.png and /dev/null differ diff --git a/assets/graphics/objects/07.png b/assets/graphics/objects/07.png deleted file mode 100644 index a436b83..0000000 Binary files a/assets/graphics/objects/07.png and /dev/null differ diff --git a/assets/graphics/objects/08.png b/assets/graphics/objects/08.png deleted file mode 100644 index 7fde04e..0000000 Binary files a/assets/graphics/objects/08.png and /dev/null differ diff --git a/assets/graphics/objects/09.png b/assets/graphics/objects/09.png deleted file mode 100644 index fbd0ebb..0000000 Binary files a/assets/graphics/objects/09.png and /dev/null differ diff --git a/assets/graphics/objects/10.png b/assets/graphics/objects/10.png deleted file mode 100644 index 067a503..0000000 Binary files a/assets/graphics/objects/10.png and /dev/null differ diff --git a/assets/graphics/objects/11.png b/assets/graphics/objects/11.png deleted file mode 100644 index 37edc1e..0000000 Binary files a/assets/graphics/objects/11.png and /dev/null differ diff --git a/assets/graphics/objects/12.png b/assets/graphics/objects/12.png deleted file mode 100644 index d1967c2..0000000 Binary files a/assets/graphics/objects/12.png and /dev/null differ diff --git a/assets/graphics/objects/13.png b/assets/graphics/objects/13.png deleted file mode 100644 index f01d839..0000000 Binary files a/assets/graphics/objects/13.png and /dev/null differ diff --git a/assets/graphics/objects/14.png b/assets/graphics/objects/14.png deleted file mode 100644 index 6a7b4bc..0000000 Binary files a/assets/graphics/objects/14.png and /dev/null differ diff --git a/assets/graphics/objects/15.png b/assets/graphics/objects/15.png deleted file mode 100644 index 783c417..0000000 Binary files a/assets/graphics/objects/15.png and /dev/null differ diff --git a/assets/graphics/objects/16.png b/assets/graphics/objects/16.png deleted file mode 100644 index 69b3119..0000000 Binary files a/assets/graphics/objects/16.png and /dev/null differ diff --git a/assets/graphics/objects/17.png b/assets/graphics/objects/17.png deleted file mode 100644 index 23cfa85..0000000 Binary files a/assets/graphics/objects/17.png and /dev/null differ diff --git a/assets/graphics/objects/18.png b/assets/graphics/objects/18.png deleted file mode 100644 index 8497695..0000000 Binary files a/assets/graphics/objects/18.png and /dev/null differ diff --git a/assets/graphics/objects/19.png b/assets/graphics/objects/19.png deleted file mode 100644 index 425d16f..0000000 Binary files a/assets/graphics/objects/19.png and /dev/null differ diff --git a/assets/graphics/objects/20.png b/assets/graphics/objects/20.png deleted file mode 100644 index 7028a89..0000000 Binary files a/assets/graphics/objects/20.png and /dev/null differ diff --git a/assets/graphics/observer.png b/assets/graphics/observer.png deleted file mode 100644 index 0c0702e..0000000 Binary files a/assets/graphics/observer.png and /dev/null differ diff --git a/assets/graphics/particles/.DS_Store b/assets/graphics/particles/.DS_Store deleted file mode 100644 index 847d9f0..0000000 Binary files a/assets/graphics/particles/.DS_Store and /dev/null differ diff --git a/assets/graphics/particles/aura/0.png b/assets/graphics/particles/aura/0.png deleted file mode 100644 index ca3080c..0000000 Binary files a/assets/graphics/particles/aura/0.png and /dev/null differ diff --git a/assets/graphics/particles/aura/1.png b/assets/graphics/particles/aura/1.png deleted file mode 100644 index 587df6e..0000000 Binary files a/assets/graphics/particles/aura/1.png and /dev/null differ diff --git a/assets/graphics/particles/aura/2.png b/assets/graphics/particles/aura/2.png deleted file mode 100644 index 345b25a..0000000 Binary files a/assets/graphics/particles/aura/2.png and /dev/null differ diff --git a/assets/graphics/particles/aura/3.png b/assets/graphics/particles/aura/3.png deleted file mode 100644 index f5aa4c5..0000000 Binary files a/assets/graphics/particles/aura/3.png and /dev/null differ diff --git a/assets/graphics/particles/bamboo/0.png b/assets/graphics/particles/bamboo/0.png deleted file mode 100644 index a28b25a..0000000 Binary files a/assets/graphics/particles/bamboo/0.png and /dev/null differ diff --git a/assets/graphics/particles/bamboo/1.png b/assets/graphics/particles/bamboo/1.png deleted file mode 100644 index 234355a..0000000 Binary files a/assets/graphics/particles/bamboo/1.png and /dev/null differ diff --git a/assets/graphics/particles/claw/0.png b/assets/graphics/particles/claw/0.png deleted file mode 100644 index b9af05a..0000000 Binary files a/assets/graphics/particles/claw/0.png and /dev/null differ diff --git a/assets/graphics/particles/claw/1.png b/assets/graphics/particles/claw/1.png deleted file mode 100644 index 60ab800..0000000 Binary files a/assets/graphics/particles/claw/1.png and /dev/null differ diff --git a/assets/graphics/particles/claw/2.png b/assets/graphics/particles/claw/2.png deleted file mode 100644 index e3c239b..0000000 Binary files a/assets/graphics/particles/claw/2.png and /dev/null differ diff --git a/assets/graphics/particles/claw/3.png b/assets/graphics/particles/claw/3.png deleted file mode 100644 index 2a579b7..0000000 Binary files a/assets/graphics/particles/claw/3.png and /dev/null differ diff --git a/assets/graphics/particles/flame/fire.png b/assets/graphics/particles/flame/fire.png deleted file mode 100644 index 2fb9ffc..0000000 Binary files a/assets/graphics/particles/flame/fire.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/0.png b/assets/graphics/particles/flame/frames/0.png deleted file mode 100644 index fe33ae5..0000000 Binary files a/assets/graphics/particles/flame/frames/0.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/01.png b/assets/graphics/particles/flame/frames/01.png deleted file mode 100644 index 734a74f..0000000 Binary files a/assets/graphics/particles/flame/frames/01.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/02.png b/assets/graphics/particles/flame/frames/02.png deleted file mode 100644 index 63536a7..0000000 Binary files a/assets/graphics/particles/flame/frames/02.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/03.png b/assets/graphics/particles/flame/frames/03.png deleted file mode 100644 index 49c4995..0000000 Binary files a/assets/graphics/particles/flame/frames/03.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/04.png b/assets/graphics/particles/flame/frames/04.png deleted file mode 100644 index 77e0474..0000000 Binary files a/assets/graphics/particles/flame/frames/04.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/05.png b/assets/graphics/particles/flame/frames/05.png deleted file mode 100644 index 04691a5..0000000 Binary files a/assets/graphics/particles/flame/frames/05.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/06.png b/assets/graphics/particles/flame/frames/06.png deleted file mode 100644 index 4738aa7..0000000 Binary files a/assets/graphics/particles/flame/frames/06.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/07.png b/assets/graphics/particles/flame/frames/07.png deleted file mode 100644 index 1faa1d3..0000000 Binary files a/assets/graphics/particles/flame/frames/07.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/08.png b/assets/graphics/particles/flame/frames/08.png deleted file mode 100644 index 44b7e28..0000000 Binary files a/assets/graphics/particles/flame/frames/08.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/09.png b/assets/graphics/particles/flame/frames/09.png deleted file mode 100644 index cd35c03..0000000 Binary files a/assets/graphics/particles/flame/frames/09.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/10.png b/assets/graphics/particles/flame/frames/10.png deleted file mode 100644 index 7164544..0000000 Binary files a/assets/graphics/particles/flame/frames/10.png and /dev/null differ diff --git a/assets/graphics/particles/flame/frames/11.png b/assets/graphics/particles/flame/frames/11.png deleted file mode 100644 index 5555377..0000000 Binary files a/assets/graphics/particles/flame/frames/11.png and /dev/null differ diff --git a/assets/graphics/particles/heal/frames/0.png b/assets/graphics/particles/heal/frames/0.png deleted file mode 100644 index cd93684..0000000 Binary files a/assets/graphics/particles/heal/frames/0.png and /dev/null differ diff --git a/assets/graphics/particles/heal/frames/1.png b/assets/graphics/particles/heal/frames/1.png deleted file mode 100644 index 83b4cf1..0000000 Binary files a/assets/graphics/particles/heal/frames/1.png and /dev/null differ diff --git a/assets/graphics/particles/heal/frames/2.png b/assets/graphics/particles/heal/frames/2.png deleted file mode 100644 index de0b9bd..0000000 Binary files a/assets/graphics/particles/heal/frames/2.png and /dev/null differ diff --git a/assets/graphics/particles/heal/frames/3.png b/assets/graphics/particles/heal/frames/3.png deleted file mode 100644 index d5ab576..0000000 Binary files a/assets/graphics/particles/heal/frames/3.png and /dev/null differ diff --git a/assets/graphics/particles/heal/frames/4.png b/assets/graphics/particles/heal/frames/4.png deleted file mode 100644 index e26afd3..0000000 Binary files a/assets/graphics/particles/heal/frames/4.png and /dev/null differ diff --git a/assets/graphics/particles/heal/heal.png b/assets/graphics/particles/heal/heal.png deleted file mode 100644 index ad7de97..0000000 Binary files a/assets/graphics/particles/heal/heal.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00000.png b/assets/graphics/particles/leaf1/leaf1_00000.png deleted file mode 100644 index b3d34ea..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00000.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00001.png b/assets/graphics/particles/leaf1/leaf1_00001.png deleted file mode 100644 index 22fce58..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00001.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00002.png b/assets/graphics/particles/leaf1/leaf1_00002.png deleted file mode 100644 index f8d2b65..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00002.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00003.png b/assets/graphics/particles/leaf1/leaf1_00003.png deleted file mode 100644 index e3e59b6..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00003.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00004.png b/assets/graphics/particles/leaf1/leaf1_00004.png deleted file mode 100644 index a703f36..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00004.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00005.png b/assets/graphics/particles/leaf1/leaf1_00005.png deleted file mode 100644 index 39e159a..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00005.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00006.png b/assets/graphics/particles/leaf1/leaf1_00006.png deleted file mode 100644 index a83b3d0..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00006.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00007.png b/assets/graphics/particles/leaf1/leaf1_00007.png deleted file mode 100644 index ed3fca8..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00007.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00008.png b/assets/graphics/particles/leaf1/leaf1_00008.png deleted file mode 100644 index f6bf4c9..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00008.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00009.png b/assets/graphics/particles/leaf1/leaf1_00009.png deleted file mode 100644 index 1e27176..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00009.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00010.png b/assets/graphics/particles/leaf1/leaf1_00010.png deleted file mode 100644 index 4be9658..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00010.png and /dev/null differ diff --git a/assets/graphics/particles/leaf1/leaf1_00011.png b/assets/graphics/particles/leaf1/leaf1_00011.png deleted file mode 100644 index 57f0d06..0000000 Binary files a/assets/graphics/particles/leaf1/leaf1_00011.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00000.png b/assets/graphics/particles/leaf2/leaf1_00000.png deleted file mode 100644 index bd43308..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00000.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00001.png b/assets/graphics/particles/leaf2/leaf1_00001.png deleted file mode 100644 index 3013b91..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00001.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00002.png b/assets/graphics/particles/leaf2/leaf1_00002.png deleted file mode 100644 index 30300af..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00002.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00003.png b/assets/graphics/particles/leaf2/leaf1_00003.png deleted file mode 100644 index 8f0b661..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00003.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00004.png b/assets/graphics/particles/leaf2/leaf1_00004.png deleted file mode 100644 index 8248fba..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00004.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00005.png b/assets/graphics/particles/leaf2/leaf1_00005.png deleted file mode 100644 index ecf4ffa..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00005.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00006.png b/assets/graphics/particles/leaf2/leaf1_00006.png deleted file mode 100644 index ece22b8..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00006.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00007.png b/assets/graphics/particles/leaf2/leaf1_00007.png deleted file mode 100644 index 1f1f7ee..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00007.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00008.png b/assets/graphics/particles/leaf2/leaf1_00008.png deleted file mode 100644 index 33f28bd..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00008.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00009.png b/assets/graphics/particles/leaf2/leaf1_00009.png deleted file mode 100644 index 6d6ff48..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00009.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00010.png b/assets/graphics/particles/leaf2/leaf1_00010.png deleted file mode 100644 index d1a770e..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00010.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00011.png b/assets/graphics/particles/leaf2/leaf1_00011.png deleted file mode 100644 index 0435cea..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00011.png and /dev/null differ diff --git a/assets/graphics/particles/leaf2/leaf1_00012.png b/assets/graphics/particles/leaf2/leaf1_00012.png deleted file mode 100644 index 3848e8d..0000000 Binary files a/assets/graphics/particles/leaf2/leaf1_00012.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00000.png b/assets/graphics/particles/leaf3/leaf1_00000.png deleted file mode 100644 index c31c69f..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00000.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00001.png b/assets/graphics/particles/leaf3/leaf1_00001.png deleted file mode 100644 index ad36fe5..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00001.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00002.png b/assets/graphics/particles/leaf3/leaf1_00002.png deleted file mode 100644 index 8338ffd..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00002.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00003.png b/assets/graphics/particles/leaf3/leaf1_00003.png deleted file mode 100644 index 444a0e1..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00003.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00004.png b/assets/graphics/particles/leaf3/leaf1_00004.png deleted file mode 100644 index 4f62188..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00004.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00005.png b/assets/graphics/particles/leaf3/leaf1_00005.png deleted file mode 100644 index 99dc366..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00005.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00006.png b/assets/graphics/particles/leaf3/leaf1_00006.png deleted file mode 100644 index 50c0d9a..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00006.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00007.png b/assets/graphics/particles/leaf3/leaf1_00007.png deleted file mode 100644 index d7a7a37..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00007.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00008.png b/assets/graphics/particles/leaf3/leaf1_00008.png deleted file mode 100644 index 8df60d4..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00008.png and /dev/null differ diff --git a/assets/graphics/particles/leaf3/leaf1_00009.png b/assets/graphics/particles/leaf3/leaf1_00009.png deleted file mode 100644 index d14ee99..0000000 Binary files a/assets/graphics/particles/leaf3/leaf1_00009.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00000.png b/assets/graphics/particles/leaf4/leaf1_00000.png deleted file mode 100644 index a6309fe..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00000.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00001.png b/assets/graphics/particles/leaf4/leaf1_00001.png deleted file mode 100644 index 3d31420..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00001.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00002.png b/assets/graphics/particles/leaf4/leaf1_00002.png deleted file mode 100644 index cfcc565..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00002.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00003.png b/assets/graphics/particles/leaf4/leaf1_00003.png deleted file mode 100644 index af077e3..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00003.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00004.png b/assets/graphics/particles/leaf4/leaf1_00004.png deleted file mode 100644 index 7b0be93..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00004.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00005.png b/assets/graphics/particles/leaf4/leaf1_00005.png deleted file mode 100644 index 7b5ac2a..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00005.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00006.png b/assets/graphics/particles/leaf4/leaf1_00006.png deleted file mode 100644 index 8229334..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00006.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00007.png b/assets/graphics/particles/leaf4/leaf1_00007.png deleted file mode 100644 index 1915fab..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00007.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00008.png b/assets/graphics/particles/leaf4/leaf1_00008.png deleted file mode 100644 index 157a04a..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00008.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00009.png b/assets/graphics/particles/leaf4/leaf1_00009.png deleted file mode 100644 index 27fb1fd..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00009.png and /dev/null differ diff --git a/assets/graphics/particles/leaf4/leaf1_00010.png b/assets/graphics/particles/leaf4/leaf1_00010.png deleted file mode 100644 index 5030b8c..0000000 Binary files a/assets/graphics/particles/leaf4/leaf1_00010.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00000.png b/assets/graphics/particles/leaf5/leaf1_00000.png deleted file mode 100644 index b0e81b0..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00000.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00001.png b/assets/graphics/particles/leaf5/leaf1_00001.png deleted file mode 100644 index b7828b6..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00001.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00002.png b/assets/graphics/particles/leaf5/leaf1_00002.png deleted file mode 100644 index ccc2714..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00002.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00003.png b/assets/graphics/particles/leaf5/leaf1_00003.png deleted file mode 100644 index f1fd9b1..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00003.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00004.png b/assets/graphics/particles/leaf5/leaf1_00004.png deleted file mode 100644 index de90457..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00004.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00005.png b/assets/graphics/particles/leaf5/leaf1_00005.png deleted file mode 100644 index 661a16a..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00005.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00006.png b/assets/graphics/particles/leaf5/leaf1_00006.png deleted file mode 100644 index 996ed74..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00006.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00007.png b/assets/graphics/particles/leaf5/leaf1_00007.png deleted file mode 100644 index bc0ab50..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00007.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00008.png b/assets/graphics/particles/leaf5/leaf1_00008.png deleted file mode 100644 index 9de760e..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00008.png and /dev/null differ diff --git a/assets/graphics/particles/leaf5/leaf1_00009.png b/assets/graphics/particles/leaf5/leaf1_00009.png deleted file mode 100644 index ec73497..0000000 Binary files a/assets/graphics/particles/leaf5/leaf1_00009.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00000.png b/assets/graphics/particles/leaf6/leaf1_00000.png deleted file mode 100644 index 4969977..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00000.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00001.png b/assets/graphics/particles/leaf6/leaf1_00001.png deleted file mode 100644 index 4212765..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00001.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00002.png b/assets/graphics/particles/leaf6/leaf1_00002.png deleted file mode 100644 index 7237076..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00002.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00003.png b/assets/graphics/particles/leaf6/leaf1_00003.png deleted file mode 100644 index a03d0fe..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00003.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00004.png b/assets/graphics/particles/leaf6/leaf1_00004.png deleted file mode 100644 index e585fb4..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00004.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00005.png b/assets/graphics/particles/leaf6/leaf1_00005.png deleted file mode 100644 index 13d8d55..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00005.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00006.png b/assets/graphics/particles/leaf6/leaf1_00006.png deleted file mode 100644 index 8b153dc..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00006.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00007.png b/assets/graphics/particles/leaf6/leaf1_00007.png deleted file mode 100644 index aab3b60..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00007.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00008.png b/assets/graphics/particles/leaf6/leaf1_00008.png deleted file mode 100644 index 9d32aa9..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00008.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00009.png b/assets/graphics/particles/leaf6/leaf1_00009.png deleted file mode 100644 index 1f87666..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00009.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00010.png b/assets/graphics/particles/leaf6/leaf1_00010.png deleted file mode 100644 index c54c793..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00010.png and /dev/null differ diff --git a/assets/graphics/particles/leaf6/leaf1_00011.png b/assets/graphics/particles/leaf6/leaf1_00011.png deleted file mode 100644 index 3659600..0000000 Binary files a/assets/graphics/particles/leaf6/leaf1_00011.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/0.png b/assets/graphics/particles/leaf_attack/0.png deleted file mode 100644 index a9dc64d..0000000 Binary files a/assets/graphics/particles/leaf_attack/0.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/1.png b/assets/graphics/particles/leaf_attack/1.png deleted file mode 100644 index 2cfe1a5..0000000 Binary files a/assets/graphics/particles/leaf_attack/1.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/2.png b/assets/graphics/particles/leaf_attack/2.png deleted file mode 100644 index 19eabbd..0000000 Binary files a/assets/graphics/particles/leaf_attack/2.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/3.png b/assets/graphics/particles/leaf_attack/3.png deleted file mode 100644 index b7c453f..0000000 Binary files a/assets/graphics/particles/leaf_attack/3.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/4.png b/assets/graphics/particles/leaf_attack/4.png deleted file mode 100644 index d26d38e..0000000 Binary files a/assets/graphics/particles/leaf_attack/4.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/5.png b/assets/graphics/particles/leaf_attack/5.png deleted file mode 100644 index 73c1f4f..0000000 Binary files a/assets/graphics/particles/leaf_attack/5.png and /dev/null differ diff --git a/assets/graphics/particles/leaf_attack/6.png b/assets/graphics/particles/leaf_attack/6.png deleted file mode 100644 index d68a09d..0000000 Binary files a/assets/graphics/particles/leaf_attack/6.png and /dev/null differ diff --git a/assets/graphics/particles/nova/0.png b/assets/graphics/particles/nova/0.png deleted file mode 100644 index fdcc423..0000000 Binary files a/assets/graphics/particles/nova/0.png and /dev/null differ diff --git a/assets/graphics/particles/nova/1.png b/assets/graphics/particles/nova/1.png deleted file mode 100644 index 320b930..0000000 Binary files a/assets/graphics/particles/nova/1.png and /dev/null differ diff --git a/assets/graphics/particles/nova/2.png b/assets/graphics/particles/nova/2.png deleted file mode 100644 index 91766d8..0000000 Binary files a/assets/graphics/particles/nova/2.png and /dev/null differ diff --git a/assets/graphics/particles/nova/3.png b/assets/graphics/particles/nova/3.png deleted file mode 100644 index 98371b1..0000000 Binary files a/assets/graphics/particles/nova/3.png and /dev/null differ diff --git a/assets/graphics/particles/nova/4.png b/assets/graphics/particles/nova/4.png deleted file mode 100644 index 26924ab..0000000 Binary files a/assets/graphics/particles/nova/4.png and /dev/null differ diff --git a/assets/graphics/particles/nova/5.png b/assets/graphics/particles/nova/5.png deleted file mode 100644 index f6aae60..0000000 Binary files a/assets/graphics/particles/nova/5.png and /dev/null differ diff --git a/assets/graphics/particles/raccoon/0.png b/assets/graphics/particles/raccoon/0.png deleted file mode 100644 index cc1a9eb..0000000 Binary files a/assets/graphics/particles/raccoon/0.png and /dev/null differ diff --git a/assets/graphics/particles/raccoon/1.png b/assets/graphics/particles/raccoon/1.png deleted file mode 100644 index 7385737..0000000 Binary files a/assets/graphics/particles/raccoon/1.png and /dev/null differ diff --git a/assets/graphics/particles/raccoon/2.png b/assets/graphics/particles/raccoon/2.png deleted file mode 100644 index 8b384be..0000000 Binary files a/assets/graphics/particles/raccoon/2.png and /dev/null differ diff --git a/assets/graphics/particles/raccoon/3.png b/assets/graphics/particles/raccoon/3.png deleted file mode 100644 index d6feaf3..0000000 Binary files a/assets/graphics/particles/raccoon/3.png and /dev/null differ diff --git a/assets/graphics/particles/raccoon/4.png b/assets/graphics/particles/raccoon/4.png deleted file mode 100644 index e550c15..0000000 Binary files a/assets/graphics/particles/raccoon/4.png and /dev/null differ diff --git a/assets/graphics/particles/raccoon/5.png b/assets/graphics/particles/raccoon/5.png deleted file mode 100644 index 13797ad..0000000 Binary files a/assets/graphics/particles/raccoon/5.png and /dev/null differ diff --git a/assets/graphics/particles/slash/0.png b/assets/graphics/particles/slash/0.png deleted file mode 100644 index 75b73d5..0000000 Binary files a/assets/graphics/particles/slash/0.png and /dev/null differ diff --git a/assets/graphics/particles/slash/1.png b/assets/graphics/particles/slash/1.png deleted file mode 100644 index 011e4a9..0000000 Binary files a/assets/graphics/particles/slash/1.png and /dev/null differ diff --git a/assets/graphics/particles/slash/2.png b/assets/graphics/particles/slash/2.png deleted file mode 100644 index 922e970..0000000 Binary files a/assets/graphics/particles/slash/2.png and /dev/null differ diff --git a/assets/graphics/particles/slash/3.png b/assets/graphics/particles/slash/3.png deleted file mode 100644 index 58821d9..0000000 Binary files a/assets/graphics/particles/slash/3.png and /dev/null differ diff --git a/assets/graphics/particles/smoke/0.png b/assets/graphics/particles/smoke/0.png deleted file mode 100644 index 73e9a59..0000000 Binary files a/assets/graphics/particles/smoke/0.png and /dev/null differ diff --git a/assets/graphics/particles/smoke/1.png b/assets/graphics/particles/smoke/1.png deleted file mode 100644 index f21e130..0000000 Binary files a/assets/graphics/particles/smoke/1.png and /dev/null differ diff --git a/assets/graphics/particles/smoke/2.png b/assets/graphics/particles/smoke/2.png deleted file mode 100644 index 8e2ecb9..0000000 Binary files a/assets/graphics/particles/smoke/2.png and /dev/null differ diff --git a/assets/graphics/particles/smoke/3.png b/assets/graphics/particles/smoke/3.png deleted file mode 100644 index 244b1a1..0000000 Binary files a/assets/graphics/particles/smoke/3.png and /dev/null differ diff --git a/assets/graphics/particles/smoke/4.png b/assets/graphics/particles/smoke/4.png deleted file mode 100644 index e60a29b..0000000 Binary files a/assets/graphics/particles/smoke/4.png and /dev/null differ diff --git a/assets/graphics/particles/smoke/5.png b/assets/graphics/particles/smoke/5.png deleted file mode 100644 index 6475ce3..0000000 Binary files a/assets/graphics/particles/smoke/5.png and /dev/null differ diff --git a/assets/graphics/particles/smoke2/0.png b/assets/graphics/particles/smoke2/0.png deleted file mode 100644 index c3267c0..0000000 Binary files a/assets/graphics/particles/smoke2/0.png and /dev/null differ diff --git a/assets/graphics/particles/smoke2/1.png b/assets/graphics/particles/smoke2/1.png deleted file mode 100644 index f392845..0000000 Binary files a/assets/graphics/particles/smoke2/1.png and /dev/null differ diff --git a/assets/graphics/particles/smoke2/2.png b/assets/graphics/particles/smoke2/2.png deleted file mode 100644 index d611b6f..0000000 Binary files a/assets/graphics/particles/smoke2/2.png and /dev/null differ diff --git a/assets/graphics/particles/smoke2/3.png b/assets/graphics/particles/smoke2/3.png deleted file mode 100644 index c817380..0000000 Binary files a/assets/graphics/particles/smoke2/3.png and /dev/null differ diff --git a/assets/graphics/particles/smoke2/4.png b/assets/graphics/particles/smoke2/4.png deleted file mode 100644 index abd4af8..0000000 Binary files a/assets/graphics/particles/smoke2/4.png and /dev/null differ diff --git a/assets/graphics/particles/smoke2/5.png b/assets/graphics/particles/smoke2/5.png deleted file mode 100644 index c89158a..0000000 Binary files a/assets/graphics/particles/smoke2/5.png and /dev/null differ diff --git a/assets/graphics/particles/smoke_orange/0.png b/assets/graphics/particles/smoke_orange/0.png deleted file mode 100644 index e4baa13..0000000 Binary files a/assets/graphics/particles/smoke_orange/0.png and /dev/null differ diff --git a/assets/graphics/particles/smoke_orange/1.png b/assets/graphics/particles/smoke_orange/1.png deleted file mode 100644 index 7cce227..0000000 Binary files a/assets/graphics/particles/smoke_orange/1.png and /dev/null differ diff --git a/assets/graphics/particles/smoke_orange/2.png b/assets/graphics/particles/smoke_orange/2.png deleted file mode 100644 index 4425e33..0000000 Binary files a/assets/graphics/particles/smoke_orange/2.png and /dev/null differ diff --git a/assets/graphics/particles/smoke_orange/3.png b/assets/graphics/particles/smoke_orange/3.png deleted file mode 100644 index a817e8d..0000000 Binary files a/assets/graphics/particles/smoke_orange/3.png and /dev/null differ diff --git a/assets/graphics/particles/smoke_orange/4.png b/assets/graphics/particles/smoke_orange/4.png deleted file mode 100644 index b6ff7a5..0000000 Binary files a/assets/graphics/particles/smoke_orange/4.png and /dev/null differ diff --git a/assets/graphics/particles/smoke_orange/5.png b/assets/graphics/particles/smoke_orange/5.png deleted file mode 100644 index 3dfab88..0000000 Binary files a/assets/graphics/particles/smoke_orange/5.png and /dev/null differ diff --git a/assets/graphics/particles/sparkle/0.png b/assets/graphics/particles/sparkle/0.png deleted file mode 100644 index 2bc0bf2..0000000 Binary files a/assets/graphics/particles/sparkle/0.png and /dev/null differ diff --git a/assets/graphics/particles/sparkle/1.png b/assets/graphics/particles/sparkle/1.png deleted file mode 100644 index 5b3a810..0000000 Binary files a/assets/graphics/particles/sparkle/1.png and /dev/null differ diff --git a/assets/graphics/particles/sparkle/2.png b/assets/graphics/particles/sparkle/2.png deleted file mode 100644 index d13930a..0000000 Binary files a/assets/graphics/particles/sparkle/2.png and /dev/null differ diff --git a/assets/graphics/particles/sparkle/3.png b/assets/graphics/particles/sparkle/3.png deleted file mode 100644 index 8384774..0000000 Binary files a/assets/graphics/particles/sparkle/3.png and /dev/null differ diff --git a/assets/graphics/particles/sparkle/4.png b/assets/graphics/particles/sparkle/4.png deleted file mode 100644 index b07148f..0000000 Binary files a/assets/graphics/particles/sparkle/4.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/0.png b/assets/graphics/particles/thunder/0.png deleted file mode 100644 index 781f52b..0000000 Binary files a/assets/graphics/particles/thunder/0.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/1.png b/assets/graphics/particles/thunder/1.png deleted file mode 100644 index ac1fa39..0000000 Binary files a/assets/graphics/particles/thunder/1.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/2.png b/assets/graphics/particles/thunder/2.png deleted file mode 100644 index c4bb34b..0000000 Binary files a/assets/graphics/particles/thunder/2.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/3.png b/assets/graphics/particles/thunder/3.png deleted file mode 100644 index 91c92a3..0000000 Binary files a/assets/graphics/particles/thunder/3.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/4.png b/assets/graphics/particles/thunder/4.png deleted file mode 100644 index 0d51893..0000000 Binary files a/assets/graphics/particles/thunder/4.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/5.png b/assets/graphics/particles/thunder/5.png deleted file mode 100644 index 55d2698..0000000 Binary files a/assets/graphics/particles/thunder/5.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/6.png b/assets/graphics/particles/thunder/6.png deleted file mode 100644 index 4d79092..0000000 Binary files a/assets/graphics/particles/thunder/6.png and /dev/null differ diff --git a/assets/graphics/particles/thunder/7.png b/assets/graphics/particles/thunder/7.png deleted file mode 100644 index 0b8b41c..0000000 Binary files a/assets/graphics/particles/thunder/7.png and /dev/null differ diff --git a/assets/graphics/player/down/down_0.png b/assets/graphics/player/down/down_0.png deleted file mode 100644 index dbbe852..0000000 Binary files a/assets/graphics/player/down/down_0.png and /dev/null differ diff --git a/assets/graphics/player/down/down_1.png b/assets/graphics/player/down/down_1.png deleted file mode 100644 index 8545561..0000000 Binary files a/assets/graphics/player/down/down_1.png and /dev/null differ diff --git a/assets/graphics/player/down/down_2.png b/assets/graphics/player/down/down_2.png deleted file mode 100644 index dbbe852..0000000 Binary files a/assets/graphics/player/down/down_2.png and /dev/null differ diff --git a/assets/graphics/player/down/down_3.png b/assets/graphics/player/down/down_3.png deleted file mode 100644 index eb692a2..0000000 Binary files a/assets/graphics/player/down/down_3.png and /dev/null differ diff --git a/assets/graphics/player/down_attack/attack_down.png b/assets/graphics/player/down_attack/attack_down.png deleted file mode 100644 index 0ecc144..0000000 Binary files a/assets/graphics/player/down_attack/attack_down.png and /dev/null differ diff --git a/assets/graphics/player/down_idle/idle_down.png b/assets/graphics/player/down_idle/idle_down.png deleted file mode 100644 index dbbe852..0000000 Binary files a/assets/graphics/player/down_idle/idle_down.png and /dev/null differ diff --git a/assets/graphics/player/left/left_0.png b/assets/graphics/player/left/left_0.png deleted file mode 100644 index dafb10b..0000000 Binary files a/assets/graphics/player/left/left_0.png and /dev/null differ diff --git a/assets/graphics/player/left/left_1.png b/assets/graphics/player/left/left_1.png deleted file mode 100644 index b84ec9c..0000000 Binary files a/assets/graphics/player/left/left_1.png and /dev/null differ diff --git a/assets/graphics/player/left/left_2.png b/assets/graphics/player/left/left_2.png deleted file mode 100644 index 0e22f2e..0000000 Binary files a/assets/graphics/player/left/left_2.png and /dev/null differ diff --git a/assets/graphics/player/left/left_3.png b/assets/graphics/player/left/left_3.png deleted file mode 100644 index b771463..0000000 Binary files a/assets/graphics/player/left/left_3.png and /dev/null differ diff --git a/assets/graphics/player/left_attack/attack_left.png b/assets/graphics/player/left_attack/attack_left.png deleted file mode 100644 index 0b6c05a..0000000 Binary files a/assets/graphics/player/left_attack/attack_left.png and /dev/null differ diff --git a/assets/graphics/player/left_idle/idle_left.png b/assets/graphics/player/left_idle/idle_left.png deleted file mode 100644 index dafb10b..0000000 Binary files a/assets/graphics/player/left_idle/idle_left.png and /dev/null differ diff --git a/assets/graphics/player/right/right_0.png b/assets/graphics/player/right/right_0.png deleted file mode 100644 index fe82409..0000000 Binary files a/assets/graphics/player/right/right_0.png and /dev/null differ diff --git a/assets/graphics/player/right/right_1.png b/assets/graphics/player/right/right_1.png deleted file mode 100644 index 983fbc9..0000000 Binary files a/assets/graphics/player/right/right_1.png and /dev/null differ diff --git a/assets/graphics/player/right/right_2.png b/assets/graphics/player/right/right_2.png deleted file mode 100644 index 8fcb491..0000000 Binary files a/assets/graphics/player/right/right_2.png and /dev/null differ diff --git a/assets/graphics/player/right/right_3.png b/assets/graphics/player/right/right_3.png deleted file mode 100644 index 0a7a454..0000000 Binary files a/assets/graphics/player/right/right_3.png and /dev/null differ diff --git a/assets/graphics/player/right_attack/attack_right.png b/assets/graphics/player/right_attack/attack_right.png deleted file mode 100644 index 9fa1657..0000000 Binary files a/assets/graphics/player/right_attack/attack_right.png and /dev/null differ diff --git a/assets/graphics/player/right_idle/idle_right.png b/assets/graphics/player/right_idle/idle_right.png deleted file mode 100644 index fe82409..0000000 Binary files a/assets/graphics/player/right_idle/idle_right.png and /dev/null differ diff --git a/assets/graphics/player/up/up_0.png b/assets/graphics/player/up/up_0.png deleted file mode 100644 index d0dae1c..0000000 Binary files a/assets/graphics/player/up/up_0.png and /dev/null differ diff --git a/assets/graphics/player/up/up_1.png b/assets/graphics/player/up/up_1.png deleted file mode 100644 index 2b0de88..0000000 Binary files a/assets/graphics/player/up/up_1.png and /dev/null differ diff --git a/assets/graphics/player/up/up_2.png b/assets/graphics/player/up/up_2.png deleted file mode 100644 index d0dae1c..0000000 Binary files a/assets/graphics/player/up/up_2.png and /dev/null differ diff --git a/assets/graphics/player/up/up_3.png b/assets/graphics/player/up/up_3.png deleted file mode 100644 index b6ebf56..0000000 Binary files a/assets/graphics/player/up/up_3.png and /dev/null differ diff --git a/assets/graphics/player/up_attack/attack_up.png b/assets/graphics/player/up_attack/attack_up.png deleted file mode 100644 index d165d7c..0000000 Binary files a/assets/graphics/player/up_attack/attack_up.png and /dev/null differ diff --git a/assets/graphics/player/up_idle/idle_up.png b/assets/graphics/player/up_idle/idle_up.png deleted file mode 100644 index d0dae1c..0000000 Binary files a/assets/graphics/player/up_idle/idle_up.png and /dev/null differ diff --git a/assets/graphics/tilemap/Floor.png b/assets/graphics/tilemap/Floor.png deleted file mode 100644 index 2971cdd..0000000 Binary files a/assets/graphics/tilemap/Floor.png and /dev/null differ diff --git a/assets/graphics/tilemap/details.png b/assets/graphics/tilemap/details.png deleted file mode 100644 index 8e43aaa..0000000 Binary files a/assets/graphics/tilemap/details.png and /dev/null differ diff --git a/assets/graphics/tilemap/ground.png b/assets/graphics/tilemap/ground.png deleted file mode 100644 index 548b57f..0000000 Binary files a/assets/graphics/tilemap/ground.png and /dev/null differ diff --git a/assets/graphics/weapons/axe/down.png b/assets/graphics/weapons/axe/down.png deleted file mode 100644 index 66761cd..0000000 Binary files a/assets/graphics/weapons/axe/down.png and /dev/null differ diff --git a/assets/graphics/weapons/axe/full.png b/assets/graphics/weapons/axe/full.png deleted file mode 100644 index 99f0318..0000000 Binary files a/assets/graphics/weapons/axe/full.png and /dev/null differ diff --git a/assets/graphics/weapons/axe/left.png b/assets/graphics/weapons/axe/left.png deleted file mode 100644 index fbd9b02..0000000 Binary files a/assets/graphics/weapons/axe/left.png and /dev/null differ diff --git a/assets/graphics/weapons/axe/right.png b/assets/graphics/weapons/axe/right.png deleted file mode 100644 index 72c1d42..0000000 Binary files a/assets/graphics/weapons/axe/right.png and /dev/null differ diff --git a/assets/graphics/weapons/axe/up.png b/assets/graphics/weapons/axe/up.png deleted file mode 100644 index 5f49b89..0000000 Binary files a/assets/graphics/weapons/axe/up.png and /dev/null differ diff --git a/assets/graphics/weapons/lance/down.png b/assets/graphics/weapons/lance/down.png deleted file mode 100644 index f58aeba..0000000 Binary files a/assets/graphics/weapons/lance/down.png and /dev/null differ diff --git a/assets/graphics/weapons/lance/full.png b/assets/graphics/weapons/lance/full.png deleted file mode 100644 index 76ce170..0000000 Binary files a/assets/graphics/weapons/lance/full.png and /dev/null differ diff --git a/assets/graphics/weapons/lance/left.png b/assets/graphics/weapons/lance/left.png deleted file mode 100644 index b961b43..0000000 Binary files a/assets/graphics/weapons/lance/left.png and /dev/null differ diff --git a/assets/graphics/weapons/lance/right.png b/assets/graphics/weapons/lance/right.png deleted file mode 100644 index af7fd12..0000000 Binary files a/assets/graphics/weapons/lance/right.png and /dev/null differ diff --git a/assets/graphics/weapons/lance/up.png b/assets/graphics/weapons/lance/up.png deleted file mode 100644 index 96040e5..0000000 Binary files a/assets/graphics/weapons/lance/up.png and /dev/null differ diff --git a/assets/graphics/weapons/rapier/down.png b/assets/graphics/weapons/rapier/down.png deleted file mode 100644 index dd103a5..0000000 Binary files a/assets/graphics/weapons/rapier/down.png and /dev/null differ diff --git a/assets/graphics/weapons/rapier/full.png b/assets/graphics/weapons/rapier/full.png deleted file mode 100644 index a5f2835..0000000 Binary files a/assets/graphics/weapons/rapier/full.png and /dev/null differ diff --git a/assets/graphics/weapons/rapier/left.png b/assets/graphics/weapons/rapier/left.png deleted file mode 100644 index 31f5b8b..0000000 Binary files a/assets/graphics/weapons/rapier/left.png and /dev/null differ diff --git a/assets/graphics/weapons/rapier/right.png b/assets/graphics/weapons/rapier/right.png deleted file mode 100644 index 30910a2..0000000 Binary files a/assets/graphics/weapons/rapier/right.png and /dev/null differ diff --git a/assets/graphics/weapons/rapier/up.png b/assets/graphics/weapons/rapier/up.png deleted file mode 100644 index 5839792..0000000 Binary files a/assets/graphics/weapons/rapier/up.png and /dev/null differ diff --git a/assets/graphics/weapons/sai/down.png b/assets/graphics/weapons/sai/down.png deleted file mode 100644 index bda7e15..0000000 Binary files a/assets/graphics/weapons/sai/down.png and /dev/null differ diff --git a/assets/graphics/weapons/sai/full.png b/assets/graphics/weapons/sai/full.png deleted file mode 100644 index 6f752d6..0000000 Binary files a/assets/graphics/weapons/sai/full.png and /dev/null differ diff --git a/assets/graphics/weapons/sai/left.png b/assets/graphics/weapons/sai/left.png deleted file mode 100644 index c9847e2..0000000 Binary files a/assets/graphics/weapons/sai/left.png and /dev/null differ diff --git a/assets/graphics/weapons/sai/right.png b/assets/graphics/weapons/sai/right.png deleted file mode 100644 index 0631803..0000000 Binary files a/assets/graphics/weapons/sai/right.png and /dev/null differ diff --git a/assets/graphics/weapons/sai/up.png b/assets/graphics/weapons/sai/up.png deleted file mode 100644 index 366e70b..0000000 Binary files a/assets/graphics/weapons/sai/up.png and /dev/null differ diff --git a/assets/graphics/weapons/sword/down.png b/assets/graphics/weapons/sword/down.png deleted file mode 100644 index ebcfa93..0000000 Binary files a/assets/graphics/weapons/sword/down.png and /dev/null differ diff --git a/assets/graphics/weapons/sword/full.png b/assets/graphics/weapons/sword/full.png deleted file mode 100644 index 3b395d8..0000000 Binary files a/assets/graphics/weapons/sword/full.png and /dev/null differ diff --git a/assets/graphics/weapons/sword/left.png b/assets/graphics/weapons/sword/left.png deleted file mode 100644 index 34abbfa..0000000 Binary files a/assets/graphics/weapons/sword/left.png and /dev/null differ diff --git a/assets/graphics/weapons/sword/right.png b/assets/graphics/weapons/sword/right.png deleted file mode 100644 index fd96c2c..0000000 Binary files a/assets/graphics/weapons/sword/right.png and /dev/null differ diff --git a/assets/graphics/weapons/sword/up.png b/assets/graphics/weapons/sword/up.png deleted file mode 100644 index 5cac8d4..0000000 Binary files a/assets/graphics/weapons/sword/up.png and /dev/null differ diff --git a/assets/map/Entities.csv b/assets/map/Entities.csv deleted file mode 100644 index 72b9f56..0000000 --- a/assets/map/Entities.csv +++ /dev/null @@ -1,50 +0,0 @@ --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,392,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,392,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 diff --git a/assets/map/FloorBlocks.csv b/assets/map/FloorBlocks.csv deleted file mode 100644 index 13fe485..0000000 --- a/assets/map/FloorBlocks.csv +++ /dev/null @@ -1,50 +0,0 @@ --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,395,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,395,395,395,395,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,395,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,395,-1,-1,-1 --1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,395,-1,-1,-1 --1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,700,-1,395,-1,-1,-1 --1,-1,-1,-1,-1,-1,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,395,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,395,395,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,395,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,395,395,395,395,395,395,395,395,-1,-1,395,395,395,395,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,395,-1,-1,395,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,395,395,395,395,395,395,395,395,395,395,395,395,395,-1,-1,395,395,395,395,395,395,395,395,395,395,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,395,395,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,395,395,395,395,-1,-1,-1,-1,395,395,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,395,-1,-1,395,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,395,-1,-1,395,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,395,-1,-1,395,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,395,395,395,-1,-1,395,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,395,395,395,395,395,395,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,395,395,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,395,-1,395,395,395,395,395,395,395,395,395,-1,395,395,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,395,395,395,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600 diff --git a/assets/map/Grass.csv b/assets/map/Grass.csv deleted file mode 100644 index 88630fc..0000000 --- a/assets/map/Grass.csv +++ /dev/null @@ -1,50 +0,0 @@ --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,10,8,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,9,9,8,10,10,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,8,10,9,10,10,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,8,-1,10,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,8,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,10,9,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,10,9,8,-1,9,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,9,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,10,-1,-1,8,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,10,9,9,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,8,10,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,9,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,9,-1,-1,10,9,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,8,-1,9,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,9,8,10,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,8,8,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,9,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,8,-1,10,9,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 diff --git a/assets/map/Objects.csv b/assets/map/Objects.csv deleted file mode 100644 index c98bb35..0000000 --- a/assets/map/Objects.csv +++ /dev/null @@ -1,50 +0,0 @@ --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,19,-1,-1,-1,-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,20,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,14,5,-1,-1,-1,-1,10,-1,-1,-1,-1,14,-1,2,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,4,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,2,-1,-1,-1,-1,2,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,12,8,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,15,-1,12,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,13,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 diff --git a/camera.py b/camera.py deleted file mode 100644 index 19999fa..0000000 --- a/camera.py +++ /dev/null @@ -1,67 +0,0 @@ -import os -import pygame - -from utils.resource_loader import import_assets - - -class Camera(pygame.sprite.Group): - - def __init__(self): - super().__init__() - - # General Setup - self.display_surface = pygame.display.get_surface() - self.display_size = self.display_surface.get_size() - - self.floor_surf = pygame.image.load( - import_assets( - os.path.join('graphics', - 'tilemap', - 'ground.png') - ) - ).convert() - - self.floor_rect = self.floor_surf.get_rect(topleft=(0, 0)) - - self.calculate_scale() - - def calculate_scale(self): - map_width, map_height = self.floor_rect.size - screen_width, screen_height = self.display_size - - # Calculating the scale to fit the map on the screen - self.scale = min(screen_width / map_width, screen_height / map_height) - self.scaled_floor_surf = pygame.transform.scale(self.floor_surf, - (int(map_width * self.scale), - int(map_height * self.scale))) - self.scaled_floor_rect = self.scaled_floor_surf.get_rect() - - def custom_draw(self): - # Drawing the scaled floor - self.display_surface.blit( - self.scaled_floor_surf, self.scaled_floor_rect.topleft) - - for sprite in sorted(self.sprites(), key=lambda sprite: sprite.rect.centery if not hasattr(sprite, 'animation') else sprite.animation.rect.centery): - # Check for sprites with 'animation' attribute - if hasattr(sprite, 'animation'): - scaled_sprite_image = pygame.transform.scale(sprite.animation.image, - (int(sprite.animation.rect.width * self.scale), - int(sprite.animation.rect.height * self.scale))) - scaled_position = (int(sprite.animation.rect.x * self.scale), - int(sprite.animation.rect.y * self.scale)) - for sprite in sorted(self.sprites(), key=lambda sprite: sprite.rect.centery if not hasattr(sprite, 'animation') else sprite.animation.rect.centery): - # Check for sprites with 'animation' attribute - if hasattr(sprite, 'animation'): - scaled_sprite_image = pygame.transform.scale(sprite.animation.image, - (int(sprite.animation.rect.width * self.scale), - int(sprite.animation.rect.height * self.scale))) - scaled_position = (int(sprite.animation.rect.x * self.scale), - int(sprite.animation.rect.y * self.scale)) - else: - scaled_sprite_image = pygame.transform.scale(sprite.image, - (int(sprite.rect.width * self.scale), - int(sprite.rect.height * self.scale))) - scaled_position = (int(sprite.rect.x * self.scale), - int(sprite.rect.y * self.scale)) - - self.display_surface.blit(scaled_sprite_image, scaled_position) diff --git a/config/__init__.py b/config/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/config/game/__init__.py b/config/game/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/config/game/monster_config.py b/config/game/monster_config.py deleted file mode 100644 index 56f5d37..0000000 --- a/config/game/monster_config.py +++ /dev/null @@ -1,41 +0,0 @@ -monster_data = { - 'squid': {'id': 1, - 'health': 1, - 'exp': 10, - 'attack': 2, - 'attack_type': 'slash', - 'speed': 3, - 'knockback': 20, - 'attack_radius': 100, - 'notice_radius': 200}, - - 'raccoon': {'id': 2, - 'health': 1, - 'exp': 25, - 'attack':5, - 'attack_type': 'claw', - 'speed': 2, - 'knockback': 10, - 'attack_radius': 100, - 'notice_radius': 180}, - - 'spirit': {'id': 3, - 'health': 1, - 'exp': 11, - 'attack': 2, - 'attack_type': 'thunder', - 'speed': 4, - 'knockback': 20, - 'attack_radius': 100, - 'notice_radius': 220}, - - 'bamboo': {'id': 4, - 'health': 1, - 'exp': 9, - 'attack': 1, - 'attack_type': 'leaf_attack', - 'speed': 3, - 'knockback': 20, - 'attack_radius': 100, - 'notice_radius': 300} -} diff --git a/config/game/player_config.py b/config/game/player_config.py deleted file mode 100644 index b7ccdea..0000000 --- a/config/game/player_config.py +++ /dev/null @@ -1,51 +0,0 @@ -tank_stats = { - 'role_id': 1, - 'health': 150, - 'energy': 70, - 'attack': 10, - 'magic': 5, - 'speed': 5 -} - -mage_stats = { - 'role_id': 2, - 'health': 70, - 'energy': 80, - 'attack': 7, - 'magic': 6, - 'speed': 5 -} - -warrior_stats = { - 'role_id': 3, - 'health': 100, - 'energy': 60, - 'attack': 12, - 'magic': 4, - 'speed': 5 -} - -base_stats = { - 'role_id': 0, - 'health': 150, - 'energy': 70, - 'attack': 10, - 'magic': 5, - 'speed': 5 -} - -max_stats = { - 'health': 300, - 'energy': 150, - 'attack': 20, - 'magic': 10, - 'speed': 10 -} - -upgrade_costs = { - 'health': 100, - 'energy': 100, - 'attack': 100, - 'magic': 100, - 'speed': 100 -} diff --git a/config/game/spell_config.py b/config/game/spell_config.py deleted file mode 100644 index 3f74a9d..0000000 --- a/config/game/spell_config.py +++ /dev/null @@ -1,22 +0,0 @@ -import os - -from utils.resource_loader import import_assets - - -magic_data = { - 'flame': {'strength': 5, 'cost': .020, 'graphic': import_assets( - os.path.join('graphics', - 'particles', - 'flame', - 'fire.png') - ) - }, - - 'heal': {'strength': 20, 'cost': .010, 'graphic': import_assets( - os.path.join('graphics', - 'particles', - 'heal', - 'heal.png') - ) - } -} diff --git a/config/game/weapon_config.py b/config/game/weapon_config.py deleted file mode 100644 index 3eb1b42..0000000 --- a/config/game/weapon_config.py +++ /dev/null @@ -1,43 +0,0 @@ -import os - -from utils.resource_loader import import_assets - - -weapon_data = { - 'sword': {'cooldown': 100, 'damage': 15, 'graphic': import_assets( - os.path.join('graphics', - 'weapons', - 'sword', - 'full.png') - ) - }, - - 'lance': {'cooldown': 400, 'damage': 30, 'graphic': import_assets( - os.path.join('graphics', - 'weapons', - 'lance', - 'full.png') - ) - }, - 'axe': {'cooldown': 300, 'damage': 20, 'graphic': import_assets( - os.path.join('graphics', - 'weapons', - 'axe', - 'full.png') - ) - }, - 'rapier': {'cooldown': 50, 'damage': 8, 'graphic': import_assets( - os.path.join('graphics', - 'weapons', - 'rapier', - 'full.png') - ) - }, - 'sai': {'cooldown': 80, 'damage': 10, 'graphic': import_assets( - os.path.join('graphics', - 'weapons', - 'sai', - 'full.png') - ) - }, -} diff --git a/config/system/window.py b/config/system/window.py deleted file mode 100644 index 5a59b22..0000000 --- a/config/system/window.py +++ /dev/null @@ -1,15 +0,0 @@ -# game setup -WIDTH = 1280 -HEIGHT = 720 -FPS = 1000 -TILESIZE = 64 -HITBOX_OFFSET = { - 'player': (-6, -26), - 'camera': (-50, -50), - 'object': (0, -40), - 'grass': (0, -10), - 'invisible': (0, 0) -} - -# general colors -WATER_COLOR = '#71ddee' diff --git a/effects/__init__.py b/effects/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/effects/magic_effects.py b/effects/magic_effects.py deleted file mode 100644 index a87a0ac..0000000 --- a/effects/magic_effects.py +++ /dev/null @@ -1,57 +0,0 @@ -import pygame -from random import randint - -from config.system.window import TILESIZE - - -class MagicPlayer: - def __init__(self, animation_player): - self.animation_player = animation_player - - def heal(self, player, strength, cost, groups): - if player.energy >= cost: - self.sounds['heal'].play() - player.health += strength - player.energy -= cost - if player.health >= player.stats['health']: - player.health = player.stats['health'] - self.animation_player.generate_particles( - 'aura', - player.rect.center, - groups) - - self.animation_player.generate_particles( - 'heal', - player.rect.center + pygame.math.Vector2(0, -50), - groups) - - def flame(self, player, cost, groups): - if player.energy >= cost: - player.energy -= cost - - if player.status.split('_')[0] == 'right': - direction = pygame.math.Vector2(1, 0) - elif player.status.split('_')[0] == 'left': - direction = pygame.math.Vector2(-1, 0) - elif player.status.split('_')[0] == 'up': - direction = pygame.math.Vector2(0, -1) - else: - direction = pygame.math.Vector2(0, 1) - - for i in range(1, 6): - if direction.x: - offset_x = direction.x * i * TILESIZE - x = player.rect.centerx + offset_x + \ - randint(-TILESIZE // 3, TILESIZE // 3) - y = player.rect.centery + \ - randint(-TILESIZE // 3, TILESIZE // 3) - self.animation_player.generate_particles( - 'flame', (x, y), groups) - else: - offset_y = direction.y * i * TILESIZE - x = player.rect.centerx + \ - randint(-TILESIZE // 3, TILESIZE // 3) - y = player.rect.centery + offset_y + \ - randint(-TILESIZE // 3, TILESIZE // 3) - self.animation_player.generate_particles( - 'flame', (x, y), groups) diff --git a/effects/particle_effects.py b/effects/particle_effects.py deleted file mode 100644 index 2faed8f..0000000 --- a/effects/particle_effects.py +++ /dev/null @@ -1,160 +0,0 @@ -import os -import pygame - -from utils.resource_loader import import_folder -from random import choice - - -class AnimationPlayer: - def __init__(self): - - self.frames = { - # Spells - 'flame': import_folder(os.path.join('graphics', - 'particles', - 'flame', - 'frames')), - - 'aura': import_folder(os.path.join('graphics', - 'particles', - 'aura')), - - 'heal': import_folder(os.path.join('graphics', - 'particles', - 'heal', - 'frames')), - - # Attacks - 'claw': import_folder(os.path.join('graphics', - 'particles', - 'claw')), - - 'slash': import_folder(os.path.join('graphics', - 'particles', - 'slash')), - - 'sparkle': import_folder(os.path.join('graphics', - 'particles', - 'sparkle')), - - 'leaf_attack': import_folder(os.path.join('graphics', - 'particles', - 'leaf_attack')), - 'thunder': import_folder(os.path.join('graphics', - 'particles', - 'thunder')), - - # Monster Deaths - 'squid': import_folder(os.path.join('graphics', - 'particles', - 'smoke_orange')), - - 'raccoon': import_folder(os.path.join('graphics', - 'particles', - 'raccoon')), - - 'spirit': import_folder(os.path.join('graphics', - 'particles', - 'nova')), - - 'bamboo': import_folder(os.path.join('graphics', - 'particles', - 'bamboo')), - - # Leafs - 'leaf': ( - import_folder(os.path.join('graphics', - 'particles', - 'leaf1')), - - import_folder(os.path.join('graphics', - 'particles', - 'leaf2')), - - import_folder(os.path.join('graphics', - 'particles', - 'leaf3')), - - import_folder(os.path.join('graphics', - 'particles', - 'leaf4')), - - import_folder(os.path.join('graphics', - 'particles', - 'leaf5')), - - import_folder(os.path.join('graphics', - 'particles', - 'leaf6')), - - self.reflect_images( - import_folder(os.path.join('graphics', - 'particles', - 'leaf1'))), - - self.reflect_images( - import_folder(os.path.join('graphics', - 'particles', - 'leaf2'))), - - self.reflect_images( - import_folder( - os.path.join('graphics', - 'particles', - 'leaf3'))), - - self.reflect_images( - import_folder( - os.path.join('graphics', - 'particles', - 'leaf4'))), - - self.reflect_images( - import_folder( - os.path.join('graphics', - 'particles', - 'leaf5'))), - - self.reflect_images( - import_folder( - os.path.join('graphics', - 'particles', - 'leaf6'))) - ) - } - - def reflect_images(self, frames): - new_frames = [] - for frame in frames: - flipped_frame = pygame.transform.flip(frame, True, False) - new_frames.append(flipped_frame) - return new_frames - - def create_grass_particles(self, position, groups): - animation_frames = choice(self.frames['leaf']) - ParticleEffect(position, animation_frames, groups) - - def generate_particles(self, animation_type, position, groups): - animation_frames = self.frames[animation_type] - ParticleEffect(position, animation_frames, groups) - - -class ParticleEffect(pygame.sprite.Sprite): - def __init__(self, position, animation_frames, groups): - super().__init__(groups) - self.frame_index = 0 - self.animation_speed = 0.15 - self.frames = animation_frames - self.image = self.frames[self.frame_index] - self.rect = self.image.get_rect(center=position) - self.sprite_type = 'magic' - - def animate(self): - self.frame_index += self.animation_speed - if self.frame_index >= len(self.frames): - self.kill() - else: - self.image = self.frames[int(self.frame_index)] - - def update(self): - self.animate() diff --git a/effects/weapon_effects.py b/effects/weapon_effects.py deleted file mode 100644 index f7febf2..0000000 --- a/effects/weapon_effects.py +++ /dev/null @@ -1,35 +0,0 @@ -import os -import pygame - -from utils.resource_loader import import_assets - - -class Weapon(pygame.sprite.Sprite): - - def __init__(self, player, groups): - super().__init__(groups) - - self.sprite_type = 'weapon' - direction = player.status.split('_')[0] - - # Graphic - self.image = pygame.image.load(import_assets(os.path.join( - 'graphics', - 'weapons', - player.weapon, - f"{direction}.png")) - ).convert_alpha() - - # Sprite Placement - if direction == 'right': - self.rect = self.image.get_rect( - midleft=player.rect.midright + pygame.math.Vector2(0, 16)) - elif direction == 'left': - self.rect = self.image.get_rect( - midright=player.rect.midleft + pygame.math.Vector2(0, 16)) - elif direction == 'down': - self.rect = self.image.get_rect( - midtop=player.rect.midbottom + pygame.math.Vector2(-10, 0)) - else: - self.rect = self.image.get_rect( - midbottom=player.rect.midtop + pygame.math.Vector2(-10, 0)) diff --git a/entities/__init__.py b/entities/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/entities/components/__init__.py b/entities/components/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/entities/components/_input.py b/entities/components/_input.py deleted file mode 100644 index 6f282c9..0000000 --- a/entities/components/_input.py +++ /dev/null @@ -1,173 +0,0 @@ -import pygame -from random import randint, choice - -from config.game.spell_config import magic_data -from config.game.weapon_config import weapon_data -# -from .movement import MovementHandler -from .combat import CombatHandler - - -class InputHandler(MovementHandler, CombatHandler): - - def __init__(self): - - MovementHandler.__init__(self) - CombatHandler.__init__(self) - - self.status = 'down' - - # Setup Movement - self.move_cooldown = 15 - self.can_move = True - self.move_time = None - - # Setup Combat - self.attacking = False - self.attack_cooldown = 400 - self.attack_time = None - - # Setup Special Actions - self.can_rotate_weapon = True - self.weapon_rotation_time = None - self.rotate_attack_cooldown = 600 - - self.can_swap_magic = True - self.magic_swap_time = None - - # Setup Action Space - self.possible_actions = [0, 1, 2, 3, 4] - self.action = 10 - - def check_input(self, - button, - speed, - hitbox, - obstacle_sprites, - rect - ): - - if not self.attacking and self.can_move: - - self.move_time = pygame.time.get_ticks() - - # Movement Input - if self.action == 0: # keys[pygame.K_w]: - self.direction.y = -1 - self.status = 'up' - self.can_move = False - self.action = 0 - - elif self.action == 1: # keys[pygame.K_s]: - self.direction.y = 1 - self.status = 'down' - self.can_move = False - self.action = 1 - - else: - self.direction.y = 0 - - if self.action == 2: # keys[pygame.K_a]: - self.direction.x = -1 - self.status = 'left' - self.can_move = False - self.action = 2 - - elif self.action == 3: # keys[pygame.K_d]: - self.direction.x = 1 - self.status = 'right' - self.can_move = False - self.action = 3 - - else: - self.direction.x = 0 - - self.move(speed, hitbox, obstacle_sprites, rect) - - # Combat Input - if self.action == 4 and not self.attacking: # keys[pygame.K_e] - self.attacking = True - self.attack_time = pygame.time.get_ticks() - self.create_attack_sprite() - self.action = 4 - - # Magic Input - if self.action == 5: - self.attacking = True - self.attack_time = pygame.time.get_ticks() - - self.magic = list(magic_data.keys())[ - self.magic_index] - - strength = list(magic_data.values())[ - self.magic_index]['strength'] + self.stats['magic'] - - cost = list(magic_data.values())[ - self.magic_index]['cost'] - self.create_magic_sprite( - self.magic, strength, cost) - self.action = 5 - - # Rotating Weapons - if self.action == 6 and self.can_rotate_weapon: - - self.can_rotate_weapon = False - self.weapon_rotation_time = pygame.time.get_ticks() - - if self.weapon_index\ - < len(list(weapon_data.keys())) - 1: - - self.weapon_index += 1 - else: - self.weapon_index = 0 - - self.weapon = list(weapon_data.keys())[ - self.weapon_index] - self.action = 6 - - # Swap Spells - if self.action == 7 and self.can_swap_magic: - self.can_swap_magic = False - self.magic_swap_time = pygame.time.get_ticks() - if self.magic_index < len(list(magic_data.keys())) - 1: - self.magic_index += 1 - else: - self.magic_index = 0 - self.action = 7 - - def cooldowns(self, vulnerable): - current_time = pygame.time.get_ticks() - self.vulnerable = vulnerable - - if self.attacking: - if current_time - self.attack_time\ - > self.attack_cooldown\ - + weapon_data[self.weapon]['cooldown']: - - self.attacking = False - if self.current_attack: - self.delete_attack_sprite() - - if not self.can_rotate_weapon: - if current_time - self.weapon_rotation_time\ - > self.rotate_attack_cooldown: - - self.can_rotate_weapon = True - - if not self.can_swap_magic: - if current_time - self.magic_swap_time\ - > self.rotate_attack_cooldown: - - self.can_swap_magic = True - - if not vulnerable: - if current_time - self.hurt_time\ - >= self.invulnerability_duration: - - self.vulnerable = True - - if not self.can_move: - if current_time - self.move_time\ - >= self.move_cooldown: - - self.can_move = True diff --git a/entities/components/animation.py b/entities/components/animation.py deleted file mode 100644 index d2dd0cf..0000000 --- a/entities/components/animation.py +++ /dev/null @@ -1,97 +0,0 @@ -import os -import pygame - -from math import sin - -from config.system.window import HITBOX_OFFSET - -from effects.particle_effects import AnimationPlayer - -from .stats import StatsHandler - -from utils.resource_loader import import_folder, import_assets - - -class AnimationHandler(StatsHandler): - - def __init__(self): - - self.frame_index = 0 - self.animation_speed = 0.15 - - def import_assets(self, position): - - # Import graphic assets - if self.sprite_type == 'player': - self.image = pygame.image.load( - import_assets(os.path.join('graphics', - 'player', - 'down', - 'down_0.png'))).convert_alpha() - - self.rect = self.image.get_rect(topleft=position) - self.hitbox = self.rect.inflate(HITBOX_OFFSET[self.sprite_type]) - - self.animations = { - 'up': [], 'down': [], - 'left': [], 'right': [], - 'up_idle': [], 'down_idle': [], - 'left_idle': [], 'right_idle': [], - 'up_attack': [], 'down_attack': [], - 'left_attack': [], 'right_attack': [] - } - - for animation in self.animations.keys(): - self.animations[animation]\ - = import_folder(os.path.join('graphics', - 'player', - animation - )) - - elif self.sprite_type == 'enemy': - - self.status = 'idle' - - self.animations = {'idle': [], 'move': [], 'attack': []} - - for animation in self.animations.keys(): - self.animations[animation]\ - = import_folder(os.path.join('graphics', - 'monsters', - self.name, - animation)) - - self.image = self.animations[self.status][self.frame_index] - self.rect = self.image.get_rect(topleft=position) - self.hitbox = self.rect.inflate(0, -10) - - def animate(self, status, vulnerable=True, can_attack=False): - - animation = self.animations[status] - self.frame_index += self.animation_speed - if self.frame_index >= len(animation): - if self.sprite_type == 'enemy': - if status == 'attack': - self.can_attack = False - self.frame_index = 0 - - # Set the image - self.image = animation[int(self.frame_index)] - self.rect = self.image.get_rect(center=self.hitbox.center) - - if not vulnerable: - alpha = self.wave_value() - self.image.set_alpha(alpha) - else: - self.image.set_alpha(255) - - def trigger_death_particles(self, position, particle_type, groups): - AnimationPlayer().generate_particles( - particle_type, position, groups) - - def wave_value(self): - value = sin(pygame.time.get_ticks()) - if value >= 0: - return 255 - else: - return 0 diff --git a/entities/components/combat.py b/entities/components/combat.py deleted file mode 100644 index c1baee4..0000000 --- a/entities/components/combat.py +++ /dev/null @@ -1,47 +0,0 @@ -from config.game.weapon_config import weapon_data -from config.game.spell_config import magic_data - -from effects.magic_effects import MagicPlayer -from effects.particle_effects import AnimationPlayer -from effects.weapon_effects import Weapon - - - - -class CombatHandler: - - def __init__(self): - - # Setup Combat - self.magic_player = MagicPlayer(AnimationPlayer()) - self.current_attack = None - - # Spell and Weapon Rotation - self.weapon_index = 0 - self.weapon = list(weapon_data.keys())[self.weapon_index] - - self.magic_index = 0 - self.magic = list(magic_data.keys())[self.magic_index] - - # Damage Timer - self.vulnerable = True - self.hurt_time = None - self.invulnerability_duration = 300 - - def create_attack_sprite(self): - self.current_attack = Weapon( - self, [self.visible_sprites, self.attack_sprites]) - - def delete_attack_sprite(self): - if self.current_attack: - self.current_attack.kill() - self.current_attack = None - - def create_magic_sprite(self, style, strength, cost): - if style == 'heal': - self.magic_player.heal(self, strength, cost, [ - self.visible_sprites]) - - if style == 'flame': - self.magic_player.flame( - self, cost, [self.visible_sprites, self.attack_sprites]) diff --git a/entities/components/movement.py b/entities/components/movement.py deleted file mode 100644 index e50190d..0000000 --- a/entities/components/movement.py +++ /dev/null @@ -1,40 +0,0 @@ -import pygame - - -class MovementHandler: - - def __init__(self): - self.direction = pygame.math.Vector2() - - def move(self, speed, hitbox, obstacle_sprites, rect): - if self.direction.magnitude() != 0: - self.direction = self.direction.normalize() - - hitbox.x += self.direction.x * speed - self.collision('horizontal', hitbox, obstacle_sprites) - hitbox.y += self.direction.y * speed - self.collision('vertical', hitbox, obstacle_sprites) - rect.center = hitbox.center - - def collision(self, direction, hitbox, obstacle_sprites): - if direction == 'horizontal': - for sprite in obstacle_sprites: - # The following works for static obstacles only - if sprite.hitbox.colliderect(hitbox): - # Moving Right - if self.direction.x > 0: - hitbox.right = sprite.hitbox.left - # Moving Left - if self.direction.x < 0: - hitbox.left = sprite.hitbox.right - - if direction == 'vertical': - for sprite in obstacle_sprites: - # The following works for static obstacles only - if sprite.hitbox.colliderect(hitbox): - # Moving Down - if self.direction.y > 0: - hitbox.bottom = sprite.hitbox.top - # Moving Up - if self.direction.y < 0: - hitbox.top = sprite.hitbox.bottom diff --git a/entities/components/stats.py b/entities/components/stats.py deleted file mode 100644 index a0b4f8d..0000000 --- a/entities/components/stats.py +++ /dev/null @@ -1,54 +0,0 @@ -from config.game.player_config import warrior_stats, mage_stats, tank_stats -from config.game.monster_config import monster_data - -class StatsHandler: - - def get_stats(self, sprite_type, role=None, monster_name=None): - - if sprite_type == 'player': - if role == 'warrior': - self.stats = warrior_stats - elif role == 'tank': - self.stats = tank_stats - elif role == 'mage': - self.stats = mage_stats - else: - self.stats = base_stats - - self.role_id = self.stats['role_id'] - self.health = self.stats['health'] - self.energy = self.stats['energy'] - self.attack = self.stats['attack'] - self.magic = self.stats['magic'] - self.speed = self.stats['speed'] - self.exp = 0 - - if sprite_type == 'enemy': - self.monster_info = monster_data[monster_name] - self.monster_id = self.monster_info['id'] - self.health = self.monster_info['health'] - self.attack = self.monster_info['attack'] - self.attack_type = self.monster_info['attack_type'] - self.attack_radius = self.monster_info['attack_radius'] - self.speed = self.monster_info['speed'] - self.knockback = self.monster_info['knockback'] - self.notice_radius = self.monster_info['notice_radius'] - self.exp = self.monster_info['exp'] - - def energy_recovery(self): - if self.energy < self.stats['energy']: - self.energy += 0.01 * self.magic - else: - self.energy = self.stats['energy'] - - def health_recovery(self): - if self.energy < self.stats['health']: - self.energy += 0.15 - else: - self.energy = self.stats['energy'] - - def get_value_by_index(self, index): - return list(self.stats.values())[index] - - def get_cost_by_index(self, index): - return list(self.upgrade_costs.values())[index] diff --git a/entities/enemy.py b/entities/enemy.py deleted file mode 100644 index d73773d..0000000 --- a/entities/enemy.py +++ /dev/null @@ -1,83 +0,0 @@ -import pygame - -from .entity import Entity - -from effects.particle_effects import AnimationPlayer - - -class Enemy(Entity): - - def __init__(self, - name, - position, - groups, - visible_sprites, - obstacle_sprites - ): - - super().__init__(groups=groups, - visible_sprites=visible_sprites, - obstacle_sprites=obstacle_sprites, - attack_sprites=None, - attackable_sprites=None) - - # Setup stats - self.sprite_type = 'enemy' - self.name = name - self.get_stats(self.sprite_type, monster_name=self.name) - - # Graphics Setup - self.animation_player = AnimationPlayer() - self.import_assets(position) - - self.distance_direction_from_player = None - - def get_action(self): - player_distance = sorted( - self.distance_direction_from_player, key=lambda x: x[0])[0] - - if player_distance[0] < self.notice_radius and player_distance[0] >= self.attack_radius: - self.direction = player_distance[1] - self.status = "move" - self.move( - self.speed, self.hitbox, self.obstacle_sprites, self.rect) - elif player_distance[0] <= self.attack_radius: - self.status = 'attack' - else: - self.status = 'idle' - - def add_exp(self, player): - player.exp += self.exp - - def check_death(self, player): - if self.health <= 0: - self.add_exp(player) - self.trigger_death_particles( - self.rect.center, self.name, self.visible_sprites) - self.kill() - - def get_damaged(self, player, attack_type): - if self.vulnerable: - for _, direction, attacking_player in self.distance_direction_from_player: - if attacking_player == player: - self.direction = -direction - self.move( - self.speed * self.knockback, self.hitbox, self.obstacle_sprites, self.rect) - break - if attack_type == 'weapon': - self.health -= player.get_full_weapon_damage() - else: - self.health -= player.get_full_magic_damage() - self.check_death(player) - self.hurt_time = pygame.time.get_ticks() - self.vulnerable = False - - def update(self): - - self.get_action() - - self.animate(self.status, self.vulnerable) - self.image = self.image - self.rect = self.rect - - self.cooldowns(self.vulnerable) diff --git a/entities/entity.py b/entities/entity.py deleted file mode 100644 index 852d011..0000000 --- a/entities/entity.py +++ /dev/null @@ -1,33 +0,0 @@ -import pygame -import numpy as np - -from random import randint - -from .components._input import InputHandler -from .components.animation import AnimationHandler - -from effects.particle_effects import AnimationPlayer - - -class Entity(pygame.sprite.Sprite, AnimationHandler, InputHandler): - def __init__( - self, - groups, - obstacle_sprites, - visible_sprites, - attack_sprites = None, - attackable_sprites = None - ): - - super().__init__(groups) - AnimationHandler.__init__(self) - InputHandler.__init__(self) - - # Sprite Setup - self.obstacle_sprites = obstacle_sprites - self.visible_sprites = visible_sprites - self.attack_sprites = attack_sprites - self.attackable_sprites = attackable_sprites - - - diff --git a/entities/observer.py b/entities/observer.py deleted file mode 100644 index ae53fae..0000000 --- a/entities/observer.py +++ /dev/null @@ -1,66 +0,0 @@ -import os -import pygame - -from configs.system.window_config import HITBOX_OFFSET - -from utils.resource_loader import import_assets - - -class Observer(pygame.sprite.Sprite): - - def __init__(self, position, groups): - super().__init__(groups) - - self.sprite_type = 'camera' - - self.image = pygame.image.load( - import_assets(os.path.join('graphics', - 'observer.png')) - ).convert_alpha() - - self.rect = self.image.get_rect(topleft=position) - self.hitbox = self.rect.inflate(HITBOX_OFFSET[self.sprite_type]) - - # Stats - self.exp = -1 # This prints OBSERVER in the UI - self.speed = 10 # Speed for moving around - - # Movement - self.direction = pygame.math.Vector2() - - def input(self): - keys = pygame.key.get_pressed() - - # Movement Input - if keys[pygame.K_w]: - self.direction.y = -1 - self.status = 'up' - self.can_move = False - elif keys[pygame.K_s]: - self.direction.y = 1 - self.status = 'down' - self.can_move = False - else: - self.direction.y = 0 - - if keys[pygame.K_a]: - self.direction.x = -1 - self.status = 'left' - self.can_move = False - elif keys[pygame.K_d]: - self.direction.x = 1 - self.status = 'right' - self.can_move = False - else: - self.direction.x = 0 - - def move(self, speed): - if self.direction.magnitude() != 0: - self.direction = self.direction.normalize() - self.hitbox.x += self.direction.x * speed - self.hitbox.y += self.direction.y * speed - self.rect.center = self.hitbox.center - - def update(self): - self.input() - self.move(self.speed) diff --git a/entities/player.py b/entities/player.py deleted file mode 100644 index e80b38e..0000000 --- a/entities/player.py +++ /dev/null @@ -1,232 +0,0 @@ -import pygame -import numpy as np -from random import randint - -from config.game.weapon_config import weapon_data -from config.game.spell_config import magic_data - -from .entity import Entity - -from effects.particle_effects import AnimationPlayer - -from ml.ppo.agent import Agent - - -class Player(Entity): - def __init__(self, - player_id, - role, - position, - map_edge, - groups, - obstacle_sprites, - visible_sprites, - attack_sprites, - attackable_sprites - ): - - super().__init__(groups=groups, - obstacle_sprites=obstacle_sprites, - visible_sprites=visible_sprites, - attack_sprites=attack_sprites, attackable_sprites=attackable_sprites) - - # Setup stats - self.sprite_type = 'player' - self.get_stats(self.sprite_type, role=role) - - # Graphics Setup - self.animation_player = AnimationPlayer() - self.import_assets(position) - - # Set misc - self.initial_position = position - self.map_edge = map_edge - self.player_id = player_id - self.distance_direction_from_enemy = None - - def setup_agent(self, - gamma, - alpha, - policy_clip, - batch_size, - n_epochs, - gae_lambda, - chkpt_dir, - entropy_coef, - load=None): - - self.max_num_enemies = len(self.distance_direction_from_enemy) - self.get_current_state() - self.num_features = len(self.state_features) - - self.agent = Agent( - input_dims=self.num_features, - n_actions=len(self.possible_actions), - gamma=gamma, - alpha=alpha, - policy_clip=policy_clip, - batch_size=batch_size, - n_epochs=n_epochs, - gae_lambda=gae_lambda, - entropy_coef=entropy_coef, - chkpt_dir=chkpt_dir - ) - print( - f"\nAgent initialized on player {self.player_id} using {self.agent.actor.device}.") - - if load: - print("Attempting to load models ...") - try: - self.agent.load_models( - actr_chkpt=f"{chkpt_dir}/../run{load}/A{self.player_id}", - crtc_chkpt=f"{chkpt_dir}/../run{load}/C{self.player_id}" - ) - print("Models loaded ...\n") - - except FileNotFoundError: - print( - f"FileNotFound for player {self.player_id}.\ - \nSkipping loading ...\n") - - def get_status(self): - if self.direction.x == 0\ - and self.direction.y == 0: - - if 'idle' not in self.status and 'attack' not in self.status: - self.status += '_idle' - - if self.attacking: - self.direction.x = 0 - self.direction.y = 0 - if 'attack' not in self.status: - if 'idle' in self.status: - self.status = self.status.replace( - 'idle', 'attack') - else: - self.status += '_attack' - else: - if 'attack' in self.status: - self.status = self.status.replace('_attack', '') - - def attack_logic(self): - if self.attack_sprites: - for attack_sprite in self.attack_sprites: - collision_sprites = pygame.sprite.spritecollide( - attack_sprite, self.attackable_sprites, False) - if collision_sprites: - for target_sprite in collision_sprites: - if target_sprite.sprite_type == 'grass': - pos = target_sprite.rect.center - offset = pygame.math.Vector2(0, 75) - for leaf in range(randint(3, 6)): - self.animation_player.create_grass_particles( - position=pos - offset, - groups=[self.visible_sprites]) - - target_sprite.kill() - else: - target_sprite.get_damaged( - self, attack_sprite.sprite_type) - - def get_full_weapon_damage(self): - base_damage = self.attack - weapon_damage = weapon_data[self.weapon]['damage'] - return (base_damage + weapon_damage) - - def get_full_magic_damage(self): - base_damage = self.stats['magic'] - spell_damage = magic_data[self.magic]['strength'] - return (base_damage + spell_damage) - - def get_current_state(self): - - if self.distance_direction_from_enemy != []: - sorted_distances = sorted( - self.distance_direction_from_enemy, key=lambda x: x[0]) - else: - sorted_distances = np.zeros(self.num_features) - - nearest_dist, nearest_en_dir, nearest_enemy = sorted_distances[0] - - self.action_features = [self.action] - - if hasattr(self, 'state_features'): - self.old_state_features = self.state_features - - self.reward = self.exp\ - + self.health/self.stats['health'] - # - nearest_dist/np.sqrt(np.sum(self.map_edge)) - - self.state_features = [ - self.rect.center[0]/self.map_edge[0], - self.rect.center[1]/self.map_edge[1], - self.direction.x, - self.direction.y, - self.health/self.stats['health'], - self.energy/self.stats['energy'], - ] - - for distance, direction, enemy in sorted_distances[:5]: - self.state_features.extend([ - - distance/np.sqrt(np.sum(self.map_edge)), - - direction[0], - - direction[1], - - enemy.health / - enemy.monster_info['health'], - - enemy.exp, - ]) - - if hasattr(self, 'num_features'): - while len(self.state_features) < self.num_features: - self.state_features.append(0) - - self.state_features = np.array(self.state_features) - - def is_dead(self): - if self.health <= 0: - self.health = 0 - self.import_assets((3264, 448)) - return True - else: - return False - - def agent_update(self): - - # Get the current state - self.get_current_state() - - # Choose action based on current state - self.action, probs, value\ - = self.agent.choose_action(self.state_features) - - # Apply chosen action - self.check_input(self.action, - self.speed, - self.hitbox, - self.obstacle_sprites, - self.rect - ) - - self.agent.remember(self.state_features, self.action, - probs, value, self.reward, self.is_dead()) - - self.get_current_state() - - def update(self): - - self.agent_update() - - # Cooldowns and Regen - self.health_recovery() - self.energy_recovery() - - # Refresh player based on input and animate - self.get_status() - self.animate( - self.status, self.vulnerable) - self.cooldowns(self.vulnerable) diff --git a/entities/terrain.py b/entities/terrain.py deleted file mode 100644 index 7cfb5cf..0000000 --- a/entities/terrain.py +++ /dev/null @@ -1,31 +0,0 @@ -import pygame - -from config.system.window import TILESIZE,\ - HITBOX_OFFSET - - -class Terrain(pygame.sprite.Sprite): - - def __init__(self, - position, - groups, - sprite_type, - surface=pygame.Surface((TILESIZE, TILESIZE)) - ): - - super().__init__(groups) - - self.sprite_type = sprite_type - - self.position = position - - self.image = surface - - if sprite_type == 'object': - # Offset - self.rect = self.image.get_rect( - topleft=(position[0], position[1] - TILESIZE)) - else: - self.rect = self.image.get_rect(topleft=position) - - self.hitbox = self.rect.inflate(HITBOX_OFFSET[sprite_type]) diff --git a/folder_struct.py b/folder_struct.py deleted file mode 100644 index 8db37af..0000000 --- a/folder_struct.py +++ /dev/null @@ -1,30 +0,0 @@ -import os - - -def set_directories(base_path): - - if not os.path.exists(base_path): - os.makedirs(base_path) - - trial_dirs = [directory for directory in os.listdir( - base_path) if os.path.isdir(os.path.join(base_path, directory))] - trial_nums = sorted([int(directory[-1]) - for directory in trial_dirs if directory.startswith("run") and directory[-1].isdigit()]) - next_trial_num = trial_nums[-1] + 1 if trial_nums else 1 - new_trial_path = os.path.join(base_path, f"run{next_trial_num}") - - os.makedirs(new_trial_path) - return new_trial_path - - -def setup_dirs(): - - home_folder = os.path.dirname(os.path.abspath(__file__)) - - chkpt_path = os.path.join(home_folder, 'chkpts') - chkpt_path = set_directories(chkpt_path) - - figure_path = os.path.join(home_folder, 'figures') - figure_path = set_directories(figure_path) - - return chkpt_path, figure_path diff --git a/game.py b/game.py deleted file mode 100644 index c2ad11f..0000000 --- a/game.py +++ /dev/null @@ -1,62 +0,0 @@ -import os -os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide" - -from config.system.window import WIDTH,\ - HEIGHT,\ - WATER_COLOR,\ - FPS -from level import Level -import pygame -import sys - - - - - -class Pneuma: - - def __init__(self, show_pg=False, n_players=1,): - print(f"Initializing Pneuma with {n_players} player(s).\ - \nShowing PyGame screen: {'True' if show_pg else 'False'}") - - pygame.init() - - if show_pg: - - self.screen = pygame.display.set_mode( - (WIDTH, HEIGHT) - ) - - else: - self.screen = pygame.display.set_mode( - (WIDTH, HEIGHT), - pygame.HIDDEN - ) - - pygame.display.set_caption("Pneuma") - - img = pygame.image.load(os.path.join('assets', - 'graphics', - 'icon.png')) - pygame.display.set_icon(img) - - self.level = Level(n_players) - - def run(self): - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - self.quit() - elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_m: - self.level.pause() - - self.screen.fill(WATER_COLOR) - - self.level.run() - - pygame.display.update() - - def quit(self): - pygame.quit() - sys.exit() diff --git a/interface/__init__.py b/interface/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/interface/ui.py b/interface/ui.py deleted file mode 100644 index ce3fb98..0000000 --- a/interface/ui.py +++ /dev/null @@ -1,112 +0,0 @@ -import pygame - -from config.game.weapon_config import weapon_data -from config.game.spell_config import magic_data - -from .ui_settings import UI_FONT,\ - UI_FONT_SIZE,\ - HEALTH_BAR_WIDTH,\ - HEALTH_COLOR,\ - ENERGY_BAR_WIDTH,\ - ENERGY_COLOR,\ - BAR_HEIGHT,\ - UI_BG_COLOR,\ - UI_BORDER_COLOR_ACTIVE,\ - UI_BORDER_COLOR,\ - TEXT_COLOR,\ - ITEM_BOX_SIZE - - -class UI: - def __init__(self): - - # General info - self.display_surface = pygame.display.get_surface() - self.font = pygame.font.Font(UI_FONT, UI_FONT_SIZE) - - # Bar setup - self.health_bar_rect = pygame.Rect( - 10, 10, HEALTH_BAR_WIDTH, BAR_HEIGHT) - self.energy_bar_rect = pygame.Rect( - 10, 34, ENERGY_BAR_WIDTH, BAR_HEIGHT) - - # Convert weapon dictionary - self.weapon_graphics = [] - for weapon in weapon_data.values(): - path = weapon['graphic'] - weapon = pygame.image.load(path).convert_alpha() - self.weapon_graphics.append(weapon) - - # Convert weapon dictionary - self.magic_graphics = [] - for spell in magic_data.values(): - path = spell['graphic'] - spell = pygame.image.load(path).convert_alpha() - self.magic_graphics.append(spell) - - def show_bar(self, current_amount, max_amount, bg_rect, color): - - # Draw background - pygame.draw.rect(self.display_surface, UI_BG_COLOR, bg_rect) - - # Convert stat amount to pixels - ratio = current_amount / max_amount - current_width = bg_rect.width * ratio - current_rect = bg_rect.copy() - current_rect.width = current_width - - # Draw stat bar - pygame.draw.rect(self.display_surface, color, current_rect) - pygame.draw.rect(self.display_surface, UI_BORDER_COLOR, bg_rect, 4) - - def show_exp(self, exp): - if exp >= 0: - text_surf = self.font.render( - f"EXP: {str(int(exp))}", False, TEXT_COLOR) - x = self.display_surface.get_size()[0] - 20 - y = self.display_surface.get_size()[1] - 20 - text_rect = text_surf.get_rect(bottomright=(x, y)) - - pygame.draw.rect(self.display_surface, UI_BG_COLOR, - text_rect.inflate(10, 10)) - self.display_surface.blit(text_surf, text_rect) - pygame.draw.rect(self.display_surface, - UI_BORDER_COLOR, text_rect.inflate(10, 10), 4) - else: - text_surf = self.font.render("OBSERVER", False, TEXT_COLOR) - x = self.display_surface.get_size()[0] - 20 - y = self.display_surface.get_size()[1] - 20 - text_rect = text_surf.get_rect(bottomright=(x, y)) - - pygame.draw.rect(self.display_surface, UI_BG_COLOR, - text_rect.inflate(10, 10)) - self.display_surface.blit(text_surf, text_rect) - pygame.draw.rect(self.display_surface, - UI_BORDER_COLOR, text_rect.inflate(10, 10), 4) - - def selection_box(self, left, top, has_rotated): - bg_rect = pygame.Rect(left, top, ITEM_BOX_SIZE, ITEM_BOX_SIZE) - pygame.draw.rect(self.display_surface, UI_BG_COLOR, bg_rect) - if not has_rotated: - pygame.draw.rect(self.display_surface, - UI_BORDER_COLOR_ACTIVE, bg_rect, 4) - else: - pygame.draw.rect(self.display_surface, UI_BORDER_COLOR, bg_rect, 4) - return bg_rect - - def weapon_overlay(self, weapon_index, has_rotated): - bg_rect = self.selection_box(10, 630, has_rotated) - weapon_surf = self.weapon_graphics[weapon_index] - weapon_rect = weapon_surf.get_rect(center=bg_rect.center) - - self.display_surface.blit(weapon_surf, weapon_rect) - - def magic_overlay(self, magic_index, has_swaped): - bg_rect = self.selection_box(100, 630, has_swaped) - magic_surf = self.magic_graphics[magic_index] - magic_rect = magic_surf.get_rect(center=bg_rect.center) - - self.display_surface.blit(magic_surf, magic_rect) - - def display(self): - self.show_exp(-1) diff --git a/interface/ui_settings.py b/interface/ui_settings.py deleted file mode 100644 index c45fe59..0000000 --- a/interface/ui_settings.py +++ /dev/null @@ -1,27 +0,0 @@ -import os -from utils.resource_loader import import_assets - -# UI -BAR_HEIGHT = 20 -HEALTH_BAR_WIDTH = 200 -ENERGY_BAR_WIDTH = 140 -ITEM_BOX_SIZE = 80 -UI_FONT = import_assets(path=os.path.join('font', 'joystix.ttf')) -UI_FONT_SIZE = 18 - -# General Colors -WATER_COLOR = '#71ddee' -UI_BG_COLOR = '#222222' -UI_BORDER_COLOR = '#111111' -TEXT_COLOR = '#EEEEEE' - -# UI Colors -HEALTH_COLOR = 'red' -ENERGY_COLOR = 'blue' -UI_BORDER_COLOR_ACTIVE = 'gold' - -# Upgrade Menu -TEXT_COLOR_SELECTED = '#111111' -BAR_COLOR = '#EEEEEE' -BAR_COLOR_SELECTED = '#111111' -UPGRADE_BG_COLOR_SELECTED = '#EEEEEE' diff --git a/interface/upgrade.py b/interface/upgrade.py deleted file mode 100644 index 17cf502..0000000 --- a/interface/upgrade.py +++ /dev/null @@ -1,156 +0,0 @@ -import pygame - -from .ui_settings import UI_FONT,\ - UI_FONT_SIZE,\ - TEXT_COLOR,\ - TEXT_COLOR_SELECTED,\ - UPGRADE_BG_COLOR_SELECTED,\ - UI_BORDER_COLOR,\ - UI_BG_COLOR,\ - BAR_COLOR_SELECTED,\ - BAR_COLOR - - -class Upgrade: - - def __init__(self, player): - - # General setup - self.display_surface = pygame.display.get_surface() - self.player = player - self.attribute_num = len(player.stats.stats) - self.attribute_names = list(player.stats.stats.keys()) - self.max_values = list(player.stats.max_stats.values()) - self.font = pygame.font.Font(UI_FONT, UI_FONT_SIZE) - - # Defining upgrade boxes - self.height = self.display_surface.get_size()[1] * 0.8 - self.width = self.display_surface.get_size()[ - 0] // (self.attribute_num + 1) - self.create_boxes() - - # Selection System - self.selection_index = 0 - self.selection_time = None - self.can_move = True - - def input(self): - keys = pygame.key.get_pressed() - - if self.can_move: - if keys[pygame.K_d]: - self.selection_index += 1 - if self.selection_index == self.attribute_num: - self.selection_index = 0 - self.can_move = False - self.selection_time = pygame.time.get_ticks() - elif keys[pygame.K_a]: - self.selection_index -= 1 - if self.selection_index == -1: - self.selection_index = self.attribute_num - 1 - self.can_move = False - self.selection_time = pygame.time.get_ticks() - - if keys[pygame.K_SPACE]: - self.can_move = False - self.selection_time = pygame.time.get_ticks() - self.box_list[self.selection_index].trigger(self.player) - - def selection_cooldown(self): - if not self.can_move: - current_time = pygame.time.get_ticks() - if current_time - self.selection_time >= 150: - self.can_move = True - - def create_boxes(self): - self.box_list = [] - - for box, index in enumerate(range(self.attribute_num)): - - # Horizontal position - full_width = self.display_surface.get_size()[0] - increment = full_width // self.attribute_num - left = (box * increment) + (increment - self.width) // 2 - - # Vertical position - top = self.display_surface.get_size()[1] * 0.1 - - box = Box(left, top, self.width, self.height, index, self.font) - self.box_list.append(box) - - def display(self): - - self.input() - self.selection_cooldown() - - for index, box in enumerate(self.box_list): - # Get attributes - name = self.attribute_names[index] - value = self.player.stats.get_value_by_index(index) - max_value = self.max_values[index] - cost = self.player.stats.get_cost_by_index(index) - box.display(self.display_surface, self.selection_index, - name, value, max_value, cost) - - -class Box: - def __init__(self, left, top, width, height, index, font): - self.rect = pygame.Rect(left, top, width, height) - self.index = index - self.font = font - - def display_names(self, surface, name, cost, selected): - color = TEXT_COLOR_SELECTED if selected else TEXT_COLOR - - # Title - title_surf = self.font.render(name, False, color) - title_rect = title_surf.get_rect( - midtop=self.rect.midtop + pygame.math.Vector2(0, 20)) - # Cost - cost_surf = self.font.render(f'Cost: {int(cost)}', False, color) - cost_rect = cost_surf.get_rect( - midbottom=self.rect.midbottom + - pygame.math.Vector2(0, 20)) - - # Draw - surface.blit(title_surf, title_rect) - surface.blit(cost_surf, cost_rect) - - def display_bar(self, surface, value, max_value, selected): - - # Line setup - top = self.rect.midtop + pygame.math.Vector2(0, 60) - bottom = self.rect.midbottom - pygame.math.Vector2(0, 60) - color = BAR_COLOR_SELECTED if selected else BAR_COLOR - - # Bar setup - full_height = bottom[1] - top[1] - relative_number = (value / max_value) * full_height - value_rect = pygame.Rect( - top[0] - 15, bottom[1] - relative_number, 30, 10) - - # Draw elements - pygame.draw.line(surface, color, top, bottom, 5) - pygame.draw.rect(surface, color, value_rect) - - def trigger(self, player): - upgrade_attribute = list(player.stats.stats.keys())[self.index] - - if player.stats.exp >= player.stats.upgrade_costs[upgrade_attribute] and player.stats.stats[upgrade_attribute] < player.stats.max_stats[upgrade_attribute]: - player.stats.exp -= player.stats.upgrade_costs[upgrade_attribute] - player.stats.stats[upgrade_attribute] *= 1.2 - player.stats.upgrade_costs[upgrade_attribute] *= 1.4 - - if player.stats.stats[upgrade_attribute] > player.stats.max_stats[upgrade_attribute]: - player.stats.stats[upgrade_attribute] = player.stats.max_stats[upgrade_attribute] - - def display(self, surface, selection_num, name, value, max_value, cost): - if self.index == selection_num: - pygame.draw.rect(surface, UPGRADE_BG_COLOR_SELECTED, self.rect) - pygame.draw.rect(surface, UI_BORDER_COLOR, self.rect, 4) - else: - pygame.draw.rect(surface, UI_BG_COLOR, self.rect) - pygame.draw.rect(surface, UI_BORDER_COLOR, self.rect, 4) - - self.display_names(surface, name, cost, self.index == selection_num) - self.display_bar(surface, value, max_value, - self.index == selection_num) diff --git a/level.py b/level.py deleted file mode 100644 index 02637a3..0000000 --- a/level.py +++ /dev/null @@ -1,297 +0,0 @@ -import os -import pygame -import numpy as np - -from random import choice - -from config.system.window import TILESIZE - -from utils.debug import debug -from utils.resource_loader import import_csv_layout, import_folder - -from interface.ui import UI - -from entities.player import Player -from entities.enemy import Enemy -from entities.terrain import Terrain - -from camera import Camera - - -class Level: - - def __init__(self, n_players): - - self.paused = False - self.done = False - - # Get display surface - self.display_surface = pygame.display.get_surface() - - # Setup Sprite groups - self.visible_sprites = Camera() - self.obstacle_sprites = pygame.sprite.Group() - self.attack_sprites = pygame.sprite.Group() - self.attackable_sprites = pygame.sprite.Group() - - # Map generation - self.n_players = n_players - self.generate_map() - - # Handle generated entities - self.get_entities() - self.get_distance_direction() - self.dead_players = np.zeros(self.n_players) - - # Setup UI - self.ui = UI() - - def generate_map(self): - - self.possible_player_locations = [] - - self.layouts = { - 'boundary': import_csv_layout(os.path.join('map', - 'FloorBlocks.csv')), - 'grass': import_csv_layout(os.path.join('map', - 'Grass.csv')), - 'objects': import_csv_layout(os.path.join('map', - 'Objects.csv')), - 'entities': import_csv_layout(os.path.join('map', - 'Entities.csv')) - } - - self.graphics = { - 'grass': import_folder(os.path.join('graphics', 'grass')), - 'objects': import_folder(os.path.join('graphics', 'objects')) - } - - for style, layout in self.layouts.items(): - for row_index, row in enumerate(layout): - for col_index, col in enumerate(row): - if int(col) != -1: - - x = col_index * TILESIZE - y = row_index * TILESIZE - - # Generate unpassable terrain - if style == 'boundary': - - if col == '600': - self.map_edge = (x, y) - - elif col != '700': - Terrain((x, y), - [self.obstacle_sprites], - 'invisible') - elif col == '700' and self.n_players > 1: - print(f"Prison set at:{(x, y)}") - # # Generate grass - # if style == 'grass': - # random_grass_image = choice(self.graphics['grass']) - # - # Terrain((x, y), [ - # self.visible_sprites, - # self.obstacle_sprites, - # self.attackable_sprites - # ], - # 'grass', - # random_grass_image) - # - # # Generate objects like trees and statues - # if style == 'objects': - # surface = self.graphics['objects'][int(col)] - # Terrain((x, y), [ - # self.visible_sprites, - # self.obstacle_sprites - # ], - # 'object', - # surface) - - # Generate observer, players and monsters - if style == 'entities': - - # Generate player(s) - if col == '400': - self.possible_player_locations.append((x, y)) - - # Monster generation - elif col in ['390', '391', '392', '393']: - if col == '390': - monster_name = 'bamboo' - elif col == '391': - monster_name = 'spirit' - elif col == '392': - monster_name = 'raccoon' - elif col == '393': - monster_name = 'squid' - Enemy(name=monster_name, - position=(x, y), - groups=[self.visible_sprites, - self.attackable_sprites], - visible_sprites=self.visible_sprites, - obstacle_sprites=self.obstacle_sprites) - - for player_id in range(self.n_players): - Player( - player_id, - 'tank', - choice(self.possible_player_locations), - self.map_edge, - [self.visible_sprites], - self.obstacle_sprites, - self.visible_sprites, - self.attack_sprites, - self.attackable_sprites - ) - - def reset(self): - - for grass in self.grass_sprites: - grass.kill() - - for enemy in self.enemy_sprites: - enemy.kill() - - for style, layout in self.layouts.items(): - for row_index, row in enumerate(layout): - for col_index, col in enumerate(row): - if int(col) != -1: - x = col_index * TILESIZE - y = row_index * TILESIZE - # # Regenerate grass - # if style == 'grass': - # random_grass_image = choice( - # self.graphics['grass']) - # - # Terrain((x, y), [ - # self.visible_sprites, - # self.obstacle_sprites, - # self.attackable_sprites - # ], - # 'grass', - # random_grass_image) - - if style == 'entities': - - if col in ['390', '391', '392', '393']: - if col == '390': - monster_name = 'bamboo' - elif col == '391': - monster_name = 'spirit' - elif col == '392': - monster_name = 'raccoon' - elif col == '393': - monster_name = 'squid' - - Enemy(monster_name, - (x, y), - [self.visible_sprites, - self.attackable_sprites], - self.visible_sprites, - self.obstacle_sprites) - - for player in self.player_sprites: - - player.import_assets( - choice(self.possible_player_locations)) - - player.health\ - = player.stats['health'] - - player.energy\ - = player.stats['energy'] - - player.exp = 0 - - self.get_entities() - self.get_distance_direction() - self.dead_players = np.zeros(self.n_players) - self.done = False - - def get_entities(self): - - self.player_sprites = [sprite - for sprite in self.visible_sprites.sprites() - if sprite.sprite_type == 'player'] - - self.enemy_sprites = [sprite - for sprite in self.visible_sprites.sprites() - if sprite.sprite_type == 'enemy'] - - self.grass_sprites = [sprite - for sprite in self.visible_sprites.sprites() - if sprite.sprite_type == 'grass'] - - def get_distance_direction(self): - for player in self.player_sprites: - player.distance_direction_from_enemy = [] - - for enemy in self.enemy_sprites: - enemy.distance_direction_from_player = [] - - for player in self.player_sprites: - if not player.is_dead(): - player_vector = pygame.math.Vector2( - player.rect.center - ) - - for enemy in self.enemy_sprites: - enemy_vector = pygame.math.Vector2( - enemy.rect.center - ) - distance\ - = (player_vector - enemy_vector).magnitude() - - if distance > 0: - direction\ - = (player_vector - enemy_vector).normalize() - else: - direction\ - = pygame.math.Vector2() - - enemy.distance_direction_from_player.append( - (distance, direction, player)) - player.distance_direction_from_enemy.append( - (distance, -direction, enemy)) - - def apply_damage_to_player(self): - for enemy in self.enemy_sprites: - for distance, _, player in enemy.distance_direction_from_player: - - if (distance < enemy.attack_radius - and player.vulnerable): - - player.health -= enemy.attack - player.vulnerable = False - player.hurt_time = pygame.time.get_ticks() - - def toggle_pause(self): - self.paused = not self.paused - - def run(self): - # Draw the game - self.visible_sprites.custom_draw() - self.ui.display() - - if not self.paused: - # Update the game - for player in self.player_sprites: - if player.health > 0: - player.attack_logic() - - self.get_entities() - self.get_distance_direction() - self.visible_sprites.update() - self.apply_damage_to_player() - - else: - debug('PAUSED') - - for player in self.player_sprites: - if player.is_dead(): - print(f"\nPlayer {player.player_id} is dead\n") - self.dead_players[player.player_id] = player.is_dead() - - self.done = True if (self.dead_players.all() == 1 - or self.enemy_sprites == []) else False diff --git a/main.py b/main.py deleted file mode 100644 index fef7969..0000000 --- a/main.py +++ /dev/null @@ -1,217 +0,0 @@ -import os -import random -import torch as T -import numpy as np -import matplotlib.pyplot as plt - -from tqdm import tqdm - -import args -import folder_struct - -import utils.seeds as seeds -import utils.metrics as metrics - -from game import Pneuma - -def main(): - - parsed_args = args.parse_args() - - if not parsed_args.no_seed: - seeds.set_seeds(parsed_args.seed) - print(f"Seed set as {parsed_args.seed}") - else: - print("No seed set") - - chkpt_path, figure_path = folder_struct.setup_dirs() - - # Setup AI params - n_episodes = parsed_args.n_episodes - episode_length = parsed_args.ep_length - n_agents = parsed_args.n_agents - - horizon = parsed_args.horizon - no_training = parsed_args.no_training - - learnings_per_episode = int(episode_length/horizon) - learn_iters = 0 - - show_pygame = parsed_args.show_pg - - # Setup parameter monitoring - score_history = np.zeros( - shape=(parsed_args.n_agents, parsed_args.n_episodes)) - - best_score = np.zeros(parsed_args.n_agents) - - actor_loss = np.zeros(shape=(parsed_args.n_agents, - parsed_args.n_episodes)) - - critic_loss = np.zeros(shape=(parsed_args.n_agents, - parsed_args.n_episodes)) - - total_loss = np.zeros(shape=(parsed_args.n_agents, - parsed_args.n_episodes)) - - entropy = np.zeros(shape=(parsed_args.n_agents, - parsed_args.n_episodes)) - - advantage = np.zeros(shape=(parsed_args.n_agents, - parsed_args.n_episodes)) - - time_alive = np.zeros(shape=(parsed_args.n_agents, - parsed_args.n_episodes)) - game = Pneuma(show_pg=show_pygame, n_players=parsed_args.n_agents) - - print("Initializing agents ...") - for player in tqdm(game.level.player_sprites, - dynamic_ncols=True): - player.setup_agent( - gamma=parsed_args.gamma, - alpha=parsed_args.alpha, - policy_clip=parsed_args.policy_clip, - batch_size=parsed_args.batch_size, - n_epochs=parsed_args.n_epochs, - gae_lambda=parsed_args.gae_lambda, - entropy_coef=parsed_args.entropy_coeff, - chkpt_dir=chkpt_path, - load=parsed_args.load - ) - - # Episodes start - for episode in tqdm(range(n_episodes), - dynamic_ncols=True): - - game.level.reset() - - episode_reward = np.zeros( - shape=(n_agents, episode_length)) - - episode_actor_loss = np.zeros( - shape=(n_agents, learnings_per_episode)) - - episode_critic_loss = np.zeros( - shape=(n_agents, learnings_per_episode)) - - episode_total_loss = np.zeros( - shape=(n_agents, learnings_per_episode)) - - episode_entropy = np.zeros( - shape=(n_agents, learnings_per_episode)) - - episode_advantage = np.zeros( - shape=(n_agents, learnings_per_episode)) - - # Main game loop - for step in tqdm(range(episode_length), - leave=False, - ascii=True, - dynamic_ncols=True): - - if not game.level.done: - game.run() - - for player in game.level.player_sprites: - - episode_reward[player.player_id][step] = player.reward - - if not no_training and (step % horizon == 0 and step != 0): - - player.agent.learn() - - episode_actor_loss[player.player_id][learn_iters % learnings_per_episode]\ - = player.agent.actor_loss - - episode_critic_loss[player.player_id][learn_iters % learnings_per_episode]\ - = player.agent.critic_loss - - episode_total_loss[player.player_id][learn_iters % learnings_per_episode]\ - = player.agent.total_loss - - episode_entropy[player.player_id][learn_iters % learnings_per_episode]\ - = player.agent.entropy - - episode_advantage[player.player_id][learn_iters % learnings_per_episode]\ - = player.agent.gae - - learn_iters += 1 - - - - # Gather information about the episode - for player in game.level.player_sprites: - - score = np.mean(episode_reward[player.player_id]) - - # Update score - score_history[player.player_id][episode] = score - - # Update actor/critic loss - actor_loss[player.player_id][episode] = np.mean( - episode_actor_loss) - - critic_loss[player.player_id][episode] = np.mean( - episode_critic_loss) - - total_loss[player.player_id][episode] = np.mean( - episode_total_loss) - - time_alive[player.player_id][episode] = step - - entropy[player.player_id][episode] = np.mean( - episode_entropy) - - advantage[player.player_id][episode] = np.mean( - episode_advantage) - - # Check for new best score - if score > best_score[player.player_id]: - print(f"\nEpisode:\ - {episode}\ - \nNew best score for player {player.player_id}:\ - {score}\ - \nOld best score for player {player.player_id}: \ - {best_score[player.player_id]}") - - best_score[player.player_id] = score - - print(f"Saving models for player {player.player_id}...") - - # Save models - player.agent.save_models( - os.path.join(chkpt_path, f"A{player.player_id}"), - os.path.join(chkpt_path, f"C{player.player_id}") - ) - - print(f"Models saved to {chkpt_path}") - - metrics.plot_learning_curve(score_history, parsed_args.n_agents, figure_path, n_episodes) - - metrics.plot_score(score_history, parsed_args.n_agents, figure_path) - - metrics.plot_loss('actor', actor_loss, parsed_args.n_agents, figure_path, n_episodes) - - metrics.plot_loss('critic', critic_loss, parsed_args.n_agents, figure_path, n_episodes) - - metrics.plot_parameter('entropy', entropy, parsed_args.n_agents, figure_path, n_episodes) - - metrics.plot_parameter('advantage', advantage, parsed_args.n_agents, figure_path, n_episodes) - - metrics.plot_avg_time(time_alive, parsed_args.n_agents, figure_path) - - # End of training session - print("End of episodes.\ - \n Saving models and exiting game...") - - # Save models - player.agent.save_models( - f"A{player.player_id}_end", - f"C{player.player_id}_end") - - print(f"Models saved to {chkpt_path}") - - game.quit() - -if __name__ == '__main__': - main() diff --git a/ml/ppo/__init__.py b/ml/ppo/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ml/ppo/agent.py b/ml/ppo/agent.py deleted file mode 100644 index f9d8ed3..0000000 --- a/ml/ppo/agent.py +++ /dev/null @@ -1,122 +0,0 @@ -import numpy as np -import torch as T - -from tqdm import tqdm - -from .brain import ActorNetwork, CriticNetwork, PPOMemory - - -class Agent: - - def __init__(self, input_dims, n_actions, gamma=0.99, alpha=0.0003, - policy_clip=0.2, batch_size=64, n_epochs=10, - gae_lambda=0.95, entropy_coef=0.001, chkpt_dir='tmp/ppo'): - - self.gamma = gamma - self.policy_clip = policy_clip - self.n_epochs = n_epochs - self.gae_lambda = gae_lambda - self.entropy_coef = entropy_coef - - self.actor = ActorNetwork( - input_dims, n_actions, alpha, chkpt_dir=chkpt_dir) - - self.critic = CriticNetwork( - input_dims, alpha, chkpt_dir=chkpt_dir) - - self.memory = PPOMemory(batch_size) - - def remember(self, state, action, probs, vals, reward, done): - self.memory.store_memory(state, action, probs, vals, reward, done) - - def save_models(self, actr_chkpt='actor_ppo', crtc_chkpt='critic_ppo'): - self.actor.save_checkpoint(actr_chkpt) - self.critic.save_checkpoint(crtc_chkpt) - - def load_models(self, actr_chkpt='actor_ppo', crtc_chkpt='critic_ppo'): - self.actor.load_checkpoint(actr_chkpt) - self.critic.load_checkpoint(crtc_chkpt) - - def choose_action(self, observation): - state = T.tensor(observation, dtype=T.float).to(self.actor.device) - dist = self.actor(state) - value = self.critic(state) - action = dist.sample() - - probs = T.squeeze(dist.log_prob(action)).item() - action = T.squeeze(action).item() - value = T.squeeze(value).item() - - self.entropy = dist.entropy().mean().item() - - return action, probs, value - - def learn(self): - for _ in tqdm(range(self.n_epochs), - desc='Learning...', - dynamic_ncols=True, - leave=False, - ascii=True): - - state_arr, action_arr, old_probs_arr, vals_arr, reward_arr, dones_arr, batches = self.memory.generate_batches() - - values = vals_arr - advantage = np.zeros(len(reward_arr), dtype=np.float64) - - for t in range(len(reward_arr)-1): - discount = 1 - a_t = 0 - for k in range(t, len(reward_arr)-1): - a_t += discount * \ - (reward_arr[k] + self.gamma*values[k+1] - * (1-int(dones_arr[k])) - values[k]) - discount *= self.gamma * self.gae_lambda - advantage[t] = a_t - self.gae = np.sum(advantage) - advantage = T.tensor(advantage).to(self.actor.device) - - values = T.tensor(values).to(self.actor.device) - - for batch in batches: - states = T.tensor(state_arr[batch], dtype=T.float).to( - self.actor.device) - old_probs = T.tensor(old_probs_arr[batch]).to( - self.actor.device) - actions = T.tensor(action_arr[batch]).to(self.actor.device) - - dist = self.actor(states) - critic_value = self.critic(states) - - critic_value = T.squeeze(critic_value) - - new_probs = dist.log_prob(actions) - prob_ratio = new_probs.exp() / old_probs.exp() - weighted_probs = advantage[batch] * prob_ratio - - weighted_clipped_probs = T.clamp( - prob_ratio, 1-self.policy_clip, 1+self.policy_clip)*advantage[batch] - - self.actor_loss = -T.min(weighted_probs, - weighted_clipped_probs).mean() - - returns = advantage[batch] + values[batch] - self.critic_loss = (returns - critic_value)**2 - self.critic_loss = self.critic_loss.mean() - - self.total_loss = self.actor_loss + 0.5 * \ - self.critic_loss - self.entropy_coef*self.entropy - - self.actor.optimizer.zero_grad() - self.critic.optimizer.zero_grad() - self.total_loss.backward() - - T.nn.utils.clip_grad_norm_( - self.actor.parameters(), max_norm=2) - - T.nn.utils.clip_grad_norm_( - self.critic.parameters(), max_norm=2) - - self.actor.optimizer.step() - self.critic.optimizer.step() - - self.memory.clear_memory() diff --git a/ml/ppo/brain.py b/ml/ppo/brain.py deleted file mode 100644 index 3e8ddf7..0000000 --- a/ml/ppo/brain.py +++ /dev/null @@ -1,135 +0,0 @@ -import os -import numpy as np -import torch as T -import torch.nn as nn -import torch.optim as optim -from torch.distributions.categorical import Categorical - - -class PPOMemory: - def __init__(self, batch_size): - self.states = [] - self.probs = [] - self.vals = [] - self.actions = [] - self.rewards = [] - self.dones = [] - - self.batch_size = batch_size - - def generate_batches(self): - - n_states = len(self.states) - batch_start = np.arange(0, n_states, self.batch_size) - indices = np.arange(n_states, dtype=np.int64) - np.random.shuffle(indices) - batches = [indices[i:i+self.batch_size] for i in batch_start] - - return np.array(self.states),\ - np.array(self.actions),\ - np.array(self.probs),\ - np.array(self.vals),\ - np.array(self.rewards),\ - np.array(self.dones),\ - batches - - def store_memory(self, state, action, probs, vals, reward, done): - self.states.append(state) - self.actions.append(action) - self.probs.append(probs) - self.vals.append(vals) - self.rewards.append(reward) - self.dones.append(done) - - def clear_memory(self): - self.states = [] - self.probs = [] - self.vals = [] - self.actions = [] - self.rewards = [] - self.dones = [] - - -class ActorNetwork(nn.Module): - - def __init__(self, input_dim, output_dim, alpha, fc1_dims=1024, fc2_dims=1024, chkpt_dir='tmp'): - super(ActorNetwork, self).__init__() - - self.chkpt_dir = chkpt_dir - - self.actor = nn.Sequential( - nn.Linear(input_dim, fc1_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc2_dims, output_dim), - nn.Softmax(dim=-1) - ) - - self.optimizer = optim.Adam(self.parameters(), lr=alpha, betas=(0.9, 0.9), eps=1e-5) - - self.device = T.device('cuda' if T.cuda.is_available() else 'cpu') - - self.to(self.device) - - def forward(self, state): - dist = self.actor(state) - dist = Categorical(dist) - - return dist - - def save_checkpoint(self, filename): - T.save(self.state_dict(), os.path.join(filename)) - - def load_checkpoint(self, filename): - print(filename) - self.load_state_dict( - T.load(os.path.join(filename), - map_location=self.device)) - - -class CriticNetwork(nn.Module): - - def __init__(self, input_dims, alpha, fc1_dims=4096, fc2_dims=4096, chkpt_dir='tmp'): - super(CriticNetwork, self).__init__() - - self.chkpt_dir = chkpt_dir - - self.critic = nn.Sequential( - nn.Linear(input_dims, fc1_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc1_dims, fc2_dims), - nn.Tanh(), - nn.Linear(fc2_dims, 1) - ) - - self.optimizer = optim.Adam(self.parameters(), lr=alpha, betas=(0.9, 0.9), eps=1e-5) - - self.device = T.device('cuda' if T.cuda.is_available() else 'cpu') - - self.to(self.device) - - def forward(self, state): - value = self.critic(state) - return value - - def save_checkpoint(self, filename): - T.save(self.state_dict(), os.path.join(filename)) - - def load_checkpoint(self, filename): - print(filename) - self.load_state_dict( - T.load(os.path.join(filename), - map_location=self.device)) diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 52fe68b..0000000 --- a/poetry.lock +++ /dev/null @@ -1,1190 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "contourpy" -version = "1.2.1" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.9" -files = [ - {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, - {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, - {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, - {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, - {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, - {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, - {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, - {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, - {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, - {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, - {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, - {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, - {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, - {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, - {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, - {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, - {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, - {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, - {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, - {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, - {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, - {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, - {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, - {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, - {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, - {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, - {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, - {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, -] - -[package.dependencies] -numpy = ">=1.20" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] - -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "docstring-to-markdown" -version = "0.13" -description = "On the fly conversion of Python docstrings to markdown" -optional = false -python-versions = ">=3.6" -files = [ - {file = "docstring-to-markdown-0.13.tar.gz", hash = "sha256:3025c428638ececae920d6d26054546a20335af3504a145327e657e7ad7ce1ce"}, - {file = "docstring_to_markdown-0.13-py3-none-any.whl", hash = "sha256:aa487059d0883e70e54da25c7b230e918d9e4d40f23d6dfaa2b73e4225b2d7dd"}, -] - -[[package]] -name = "filelock" -version = "3.13.4" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, - {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "fonttools" -version = "4.51.0" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, - {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, - {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, - {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, - {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, - {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, - {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, - {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, - {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, - {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, - {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, - {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, - {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] - -[[package]] -name = "fsspec" -version = "2023.12.2" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fsspec-2023.12.2-py3-none-any.whl", hash = "sha256:d800d87f72189a745fa3d6b033b9dc4a34ad069f60ca60b943a63599f5501960"}, - {file = "fsspec-2023.12.2.tar.gz", hash = "sha256:8548d39e8810b59c38014934f6b31e57f40c1b20f911f4cc2b85389c7e9bf0cb"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] - -[[package]] -name = "jedi" -version = "0.19.1" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, -] - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jinja2" -version = "3.1.3" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "kiwisolver" -version = "1.4.5" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, -] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - -[[package]] -name = "matplotlib" -version = "3.8.4" -description = "Python plotting package" -optional = false -python-versions = ">=3.9" -files = [ - {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, - {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, - {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, - {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, - {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, - {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, - {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, - {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, - {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, - {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, - {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.3.1" -numpy = ">=1.21" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "networkx" -version = "3.3" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.10" -files = [ - {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, - {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, -] - -[package.extras] -default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "numpy" -version = "1.26.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, -] - -[[package]] -name = "nvidia-cublas-cu12" -version = "12.1.3.1" -description = "CUBLAS native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, - {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, -] - -[[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.1.105" -description = "CUDA profiling tools runtime libs." -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, - {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, -] - -[[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.1.105" -description = "NVRTC native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, - {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, -] - -[[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.1.105" -description = "CUDA Runtime native Libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, - {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, -] - -[[package]] -name = "nvidia-cudnn-cu12" -version = "8.9.2.26" -description = "cuDNN runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, -] - -[package.dependencies] -nvidia-cublas-cu12 = "*" - -[[package]] -name = "nvidia-cufft-cu12" -version = "11.0.2.54" -description = "CUFFT native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, - {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, -] - -[[package]] -name = "nvidia-curand-cu12" -version = "10.3.2.106" -description = "CURAND native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, - {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, -] - -[[package]] -name = "nvidia-cusolver-cu12" -version = "11.4.5.107" -description = "CUDA solver native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, - {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, -] - -[package.dependencies] -nvidia-cublas-cu12 = "*" -nvidia-cusparse-cu12 = "*" -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-cusparse-cu12" -version = "12.1.0.106" -description = "CUSPARSE native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, - {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, -] - -[package.dependencies] -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-nccl-cu12" -version = "2.19.3" -description = "NVIDIA Collective Communication Library (NCCL) Runtime" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl", hash = "sha256:a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d"}, -] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.4.127" -description = "Nvidia JIT LTO Library" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.1.105" -description = "NVIDIA Tools Extension" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, - {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, -] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - -[[package]] -name = "parso" -version = "0.8.4" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, - {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, -] - -[package.extras] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["docopt", "pytest"] - -[[package]] -name = "pillow" -version = "10.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, - {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, - {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, - {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, - {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, - {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, - {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, - {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, - {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, - {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, - {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, - {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, - {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, - {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, - {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, - {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, - {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] -typing = ["typing-extensions"] -xmp = ["defusedxml"] - -[[package]] -name = "pluggy" -version = "1.4.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pygame" -version = "2.5.2" -description = "Python Game Development" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pygame-2.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a0769eb628c818761755eb0a0ca8216b95270ea8cbcbc82227e39ac9644643da"}, - {file = "pygame-2.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed9a3d98adafa0805ccbaaff5d2996a2b5795381285d8437a4a5d248dbd12b4a"}, - {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30d1618672a55e8c6669281ba264464b3ab563158e40d89e8c8b3faa0febebd"}, - {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39690e9be9baf58b7359d1f3b2336e1fd6f92fedbbce42987be5df27f8d30718"}, - {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03879ec299c9f4ba23901b2649a96b2143f0a5d787f0b6c39469989e2320caf1"}, - {file = "pygame-2.5.2-cp310-cp310-win32.whl", hash = "sha256:74e1d6284100e294f445832e6f6343be4fe4748decc4f8a51131ae197dae8584"}, - {file = "pygame-2.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:485239c7d32265fd35b76ae8f64f34b0637ae11e69d76de15710c4b9edcc7c8d"}, - {file = "pygame-2.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34646ca20e163dc6f6cf8170f1e12a2e41726780112594ac061fa448cf7ccd75"}, - {file = "pygame-2.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b8a6e351665ed26ea791f0e1fd649d3f483e8681892caef9d471f488f9ea5ee"}, - {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc346965847aef00013fa2364f41a64f068cd096dcc7778fc306ca3735f0eedf"}, - {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35632035fd81261f2d797fa810ea8c46111bd78ceb6089d52b61ed7dc3c5d05f"}, - {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e24d05184e4195fe5ebcdce8b18ecb086f00182b9ae460a86682d312ce8d31f"}, - {file = "pygame-2.5.2-cp311-cp311-win32.whl", hash = "sha256:f02c1c7505af18d426d355ac9872bd5c916b27f7b0fe224749930662bea47a50"}, - {file = "pygame-2.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6d58c8cf937815d3b7cdc0fa9590c5129cb2c9658b72d00e8a4568dea2ff1d42"}, - {file = "pygame-2.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1a2a43802bb5e89ce2b3b775744e78db4f9a201bf8d059b946c61722840ceea8"}, - {file = "pygame-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1c289f2613c44fe70a1e40769de4a49c5ab5a29b9376f1692bb1a15c9c1c9bfa"}, - {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:074aa6c6e110c925f7f27f00c7733c6303407edc61d738882985091d1eb2ef17"}, - {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe0228501ec616779a0b9c4299e837877783e18df294dd690b9ab0eed3d8aaab"}, - {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31648d38ecdc2335ffc0e38fb18a84b3339730521505dac68514f83a1092e3f4"}, - {file = "pygame-2.5.2-cp312-cp312-win32.whl", hash = "sha256:224c308856334bc792f696e9278e50d099a87c116f7fc314cd6aa3ff99d21592"}, - {file = "pygame-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:dd2d2650faf54f9a0f5bd0db8409f79609319725f8f08af6507a0609deadcad4"}, - {file = "pygame-2.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b30bc1220c457169571aac998e54b013aaeb732d2fd8744966cb1cfab1f61d1"}, - {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78fcd7643358b886a44127ff7dec9041c056c212b3a98977674f83f99e9b12d3"}, - {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cf093a51cb294ede56c29d4acf41538c00f297fcf78a9b186fb7d23c0577b6"}, - {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe323acbf53a0195c8c98b1b941eba7ac24e3e2b28ae48e8cda566f15fc4945"}, - {file = "pygame-2.5.2-cp36-cp36m-win32.whl", hash = "sha256:5697528266b4716d9cdd44a5a1d210f4d86ef801d0f64ca5da5d0816704009d9"}, - {file = "pygame-2.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edda1f7cff4806a4fa39e0e8ccd75f38d1d340fa5fc52d8582ade87aca247d92"}, - {file = "pygame-2.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9bd738fd4ecc224769d0b4a719f96900a86578e26e0105193658a32966df2aae"}, - {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30a8d7cf12363b4140bf2f93b5eec4028376ca1d0fe4b550588f836279485308"}, - {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc12e4dea3e88ea8a553de6d56a37b704dbe2aed95105889f6afeb4b96e62097"}, - {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b34c73cb328024f8db3cb6487a37e54000148988275d8d6e5adf99d9323c937"}, - {file = "pygame-2.5.2-cp37-cp37m-win32.whl", hash = "sha256:7d0a2794649defa57ef50b096a99f7113d3d0c2e32d1426cafa7d618eadce4c7"}, - {file = "pygame-2.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:41f8779f52e0f6e6e6ccb8f0b5536e432bf386ee29c721a1c22cada7767b0cef"}, - {file = "pygame-2.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:677e37bc0ea7afd89dde5a88ced4458aa8656159c70a576eea68b5622ee1997b"}, - {file = "pygame-2.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47a8415d2bd60e6909823b5643a1d4ef5cc29417d817f2a214b255f6fa3a1e4c"}, - {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ff21201df6278b8ca2e948fb148ffe88f5481fd03760f381dd61e45954c7dff"}, - {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29a84b2e02814b9ba925357fd2e1df78efe5e1aa64dc3051eaed95d2b96eafd"}, - {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d78485c4d21133d6b2fbb504cd544ca655e50b6eb551d2995b3aa6035928adda"}, - {file = "pygame-2.5.2-cp38-cp38-win32.whl", hash = "sha256:d851247239548aa357c4a6840fb67adc2d570ce7cb56988d036a723d26b48bff"}, - {file = "pygame-2.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:88d1cdacc2d3471eceab98bf0c93c14d3a8461f93e58e3d926f20d4de3a75554"}, - {file = "pygame-2.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4f1559e7efe4efb9dc19d2d811d702f325d9605f9f6f9ececa39ee6890c798f5"}, - {file = "pygame-2.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf2191b756ceb0e8458a761d0c665b0c70b538570449e0d39b75a5ba94ac5cf0"}, - {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cf2257447ce7f2d6de37e5fb019d2bbe32ed05a5721ace8bc78c2d9beaf3aee"}, - {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cbbfaba2b81434d62631d0b08b85fab16cf4a36e40b80298d3868927e1299"}, - {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daca456d5b9f52e088e06a127dec182b3638a775684fb2260f25d664351cf1ae"}, - {file = "pygame-2.5.2-cp39-cp39-win32.whl", hash = "sha256:3b3e619e33d11c297d7a57a82db40681f9c2c3ae1d5bf06003520b4fe30c435d"}, - {file = "pygame-2.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:1822d534bb7fe756804647b6da2c9ea5d7a62d8796b2e15d172d3be085de28c6"}, - {file = "pygame-2.5.2-pp36-pypy36_pp73-win32.whl", hash = "sha256:e708fc8f709a0fe1d1876489345f2e443d47f3976d33455e2e1e937f972f8677"}, - {file = "pygame-2.5.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c13edebc43c240fb0532969e914f0ccefff5ae7e50b0b788d08ad2c15ef793e4"}, - {file = "pygame-2.5.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:263b4a7cbfc9fe2055abc21b0251cc17dea6dff750f0e1c598919ff350cdbffe"}, - {file = "pygame-2.5.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e58e2b0c791041e4bccafa5bd7650623ba1592b8fe62ae0a276b7d0ecb314b6c"}, - {file = "pygame-2.5.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0bd67426c02ffe6c9827fc4bcbda9442fbc451d29b17c83a3c088c56fef2c90"}, - {file = "pygame-2.5.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dcff6cbba1584cf7732ce1dbdd044406cd4f6e296d13bcb7fba963fb4aeefc9"}, - {file = "pygame-2.5.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce4b6c0bfe44d00bb0998a6517bd0cf9455f642f30f91bc671ad41c05bf6f6ae"}, - {file = "pygame-2.5.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68c4e8e60b725ffc7a6c6ecd9bb5fcc5ed2d6e0e2a2c4a29a8454856ef16ad63"}, - {file = "pygame-2.5.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f3849f97372a3381c66955f99a0d58485ccd513c3d00c030b869094ce6997a6"}, - {file = "pygame-2.5.2.tar.gz", hash = "sha256:c1b89eb5d539e7ac5cf75513125fb5f2f0a2d918b1fd6e981f23bf0ac1b1c24a"}, -] - -[[package]] -name = "pyparsing" -version = "3.1.2" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, - {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-lsp-jsonrpc" -version = "1.1.2" -description = "JSON RPC 2.0 server library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-lsp-jsonrpc-1.1.2.tar.gz", hash = "sha256:4688e453eef55cd952bff762c705cedefa12055c0aec17a06f595bcc002cc912"}, - {file = "python_lsp_jsonrpc-1.1.2-py3-none-any.whl", hash = "sha256:7339c2e9630ae98903fdaea1ace8c47fba0484983794d6aafd0bd8989be2b03c"}, -] - -[package.dependencies] -ujson = ">=3.0.0" - -[package.extras] -test = ["coverage", "pycodestyle", "pyflakes", "pylint", "pytest", "pytest-cov"] - -[[package]] -name = "python-lsp-server" -version = "1.11.0" -description = "Python Language Server for the Language Server Protocol" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-lsp-server-1.11.0.tar.gz", hash = "sha256:89edd6fb3f7852e4bf5a3d1d95ea41484d1a28fa94b6e3cbff12b9db123b8e86"}, - {file = "python_lsp_server-1.11.0-py3-none-any.whl", hash = "sha256:278cb41ea69ca9f84ec99d4edc96ff5f2f9e795d240771dc46dc1653f56ddfe3"}, -] - -[package.dependencies] -docstring-to-markdown = "*" -jedi = ">=0.17.2,<0.20.0" -pluggy = ">=1.0.0" -python-lsp-jsonrpc = ">=1.1.0,<2.0.0" -ujson = ">=3.0.0" - -[package.extras] -all = ["autopep8 (>=2.0.4,<2.1.0)", "flake8 (>=7,<8)", "mccabe (>=0.7.0,<0.8.0)", "pycodestyle (>=2.11.0,<2.12.0)", "pydocstyle (>=6.3.0,<6.4.0)", "pyflakes (>=3.2.0,<3.3.0)", "pylint (>=3.1,<4)", "rope (>=1.11.0)", "whatthepatch (>=1.0.2,<2.0.0)", "yapf (>=0.33.0)"] -autopep8 = ["autopep8 (>=2.0.4,<2.1.0)"] -flake8 = ["flake8 (>=7,<8)"] -mccabe = ["mccabe (>=0.7.0,<0.8.0)"] -pycodestyle = ["pycodestyle (>=2.11.0,<2.12.0)"] -pydocstyle = ["pydocstyle (>=6.3.0,<6.4.0)"] -pyflakes = ["pyflakes (>=3.2.0,<3.3.0)"] -pylint = ["pylint (>=3.1,<4)"] -rope = ["rope (>=1.11.0)"] -test = ["coverage", "flaky", "matplotlib", "numpy", "pandas", "pylint (>=3.1,<4)", "pyqt5", "pytest", "pytest-cov"] -websockets = ["websockets (>=10.3)"] -yapf = ["whatthepatch (>=1.0.2,<2.0.0)", "yapf (>=0.33.0)"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sympy" -version = "1.12" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, -] - -[package.dependencies] -mpmath = ">=0.19" - -[[package]] -name = "torch" -version = "2.2.2" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:bc889d311a855dd2dfd164daf8cc903a6b7273a747189cebafdd89106e4ad585"}, - {file = "torch-2.2.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:15dffa4cc3261fa73d02f0ed25f5fa49ecc9e12bf1ae0a4c1e7a88bbfaad9030"}, - {file = "torch-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:11e8fe261233aeabd67696d6b993eeb0896faa175c6b41b9a6c9f0334bdad1c5"}, - {file = "torch-2.2.2-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b2e2200b245bd9f263a0d41b6a2dab69c4aca635a01b30cca78064b0ef5b109e"}, - {file = "torch-2.2.2-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:877b3e6593b5e00b35bbe111b7057464e76a7dd186a287280d941b564b0563c2"}, - {file = "torch-2.2.2-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:ad4c03b786e074f46606f4151c0a1e3740268bcf29fbd2fdf6666d66341c1dcb"}, - {file = "torch-2.2.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:32827fa1fbe5da8851686256b4cd94cc7b11be962862c2293811c94eea9457bf"}, - {file = "torch-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:f9ef0a648310435511e76905f9b89612e45ef2c8b023bee294f5e6f7e73a3e7c"}, - {file = "torch-2.2.2-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:95b9b44f3bcebd8b6cd8d37ec802048c872d9c567ba52c894bba90863a439059"}, - {file = "torch-2.2.2-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:49aa4126ede714c5aeef7ae92969b4b0bbe67f19665106463c39f22e0a1860d1"}, - {file = "torch-2.2.2-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:cf12cdb66c9c940227ad647bc9cf5dba7e8640772ae10dfe7569a0c1e2a28aca"}, - {file = "torch-2.2.2-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:89ddac2a8c1fb6569b90890955de0c34e1724f87431cacff4c1979b5f769203c"}, - {file = "torch-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:451331406b760f4b1ab298ddd536486ab3cfb1312614cfe0532133535be60bea"}, - {file = "torch-2.2.2-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:eb4d6e9d3663e26cd27dc3ad266b34445a16b54908e74725adb241aa56987533"}, - {file = "torch-2.2.2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:bf9558da7d2bf7463390b3b2a61a6a3dbb0b45b161ee1dd5ec640bf579d479fc"}, - {file = "torch-2.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd2bf7697c9e95fb5d97cc1d525486d8cf11a084c6af1345c2c2c22a6b0029d0"}, - {file = "torch-2.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b421448d194496e1114d87a8b8d6506bce949544e513742b097e2ab8f7efef32"}, - {file = "torch-2.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:3dbcd563a9b792161640c0cffe17e3270d85e8f4243b1f1ed19cca43d28d235b"}, - {file = "torch-2.2.2-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:31f4310210e7dda49f1fb52b0ec9e59382cfcb938693f6d5378f25b43d7c1d29"}, - {file = "torch-2.2.2-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c795feb7e8ce2e0ef63f75f8e1ab52e7fd5e1a4d7d0c31367ade1e3de35c9e95"}, - {file = "torch-2.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a6e5770d68158d07456bfcb5318b173886f579fdfbf747543901ce718ea94782"}, - {file = "torch-2.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:67dcd726edff108e2cd6c51ff0e416fd260c869904de95750e80051358680d24"}, - {file = "torch-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:539d5ef6c4ce15bd3bd47a7b4a6e7c10d49d4d21c0baaa87c7d2ef8698632dfb"}, - {file = "torch-2.2.2-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:dff696de90d6f6d1e8200e9892861fd4677306d0ef604cb18f2134186f719f82"}, - {file = "torch-2.2.2-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:3a4dd910663fd7a124c056c878a52c2b0be4a5a424188058fe97109d4436ee42"}, -] - -[package.dependencies] -filelock = "*" -fsspec = "*" -jinja2 = "*" -networkx = "*" -nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nccl-cu12 = {version = "2.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -sympy = "*" -triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} -typing-extensions = ">=4.8.0" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] -optree = ["optree (>=0.9.1)"] - -[[package]] -name = "tqdm" -version = "4.66.2" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "triton" -version = "2.2.0" -description = "A language and compiler for custom Deep Learning operations" -optional = false -python-versions = "*" -files = [ - {file = "triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2294514340cfe4e8f4f9e5c66c702744c4a117d25e618bd08469d0bfed1e2e5"}, - {file = "triton-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da58a152bddb62cafa9a857dd2bc1f886dbf9f9c90a2b5da82157cd2b34392b0"}, - {file = "triton-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af58716e721460a61886668b205963dc4d1e4ac20508cc3f623aef0d70283d5"}, - {file = "triton-2.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8fe46d3ab94a8103e291bd44c741cc294b91d1d81c1a2888254cbf7ff846dab"}, - {file = "triton-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ce26093e539d727e7cf6f6f0d932b1ab0574dc02567e684377630d86723ace"}, - {file = "triton-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:227cc6f357c5efcb357f3867ac2a8e7ecea2298cd4606a8ba1e931d1d5a947df"}, -] - -[package.dependencies] -filelock = "*" - -[package.extras] -build = ["cmake (>=3.20)", "lit"] -tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"] -tutorials = ["matplotlib", "pandas", "tabulate", "torch"] - -[[package]] -name = "typing-extensions" -version = "4.11.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, -] - -[[package]] -name = "ujson" -version = "5.9.0" -description = "Ultra fast JSON encoder and decoder for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, - {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, - {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, - {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, - {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, - {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, - {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, - {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, - {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, - {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, - {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, - {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, - {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, - {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, - {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, - {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, - {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, - {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, - {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, - {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, - {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "f1ac9f8912b4e220c40bd29453219d15897f96ae13f070641ba8dedc36e86957" diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 886840c..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,45 +0,0 @@ -[tool.poetry] -name = "thesis" -version = "0.8.1" -description = "A training environment for MARL" -authors = ["Vasilis Valatsos "] -license = "MPL-2.0" -readme = "README.md" -package-mode = false - -[tool.poetry.dependencies] -python = "^3.11" -contourpy = "^1.2.0" -cycler = "^0.12.1" -docstring-to-markdown = "^0.13" -filelock = "^3.13.1" -fonttools = "^4.45.1" -fsspec = "^2023.10.0" -jedi = "^0.19.1" -jinja2 = "^3.1.2" -kiwisolver = "^1.4.5" -markupsafe = "^2.1.3" -matplotlib = "^3.8.2" -mpmath = "^1.3.0" -networkx = "^3.2.1" -numpy = "^1.26.2" -packaging = "^23.2" -parso = "^0.8.3" -pillow = "^10.1.0" -pluggy = "^1.3.0" -pygame = "^2.5.2" -pyparsing = "^3.1.1" -python-dateutil = "^2.8.2" -python-lsp-jsonrpc = "^1.1.2" -python-lsp-server = "^1.9.0" -six = "^1.16.0" -sympy = "^1.12" -torch = "^2.1.0" -tqdm = "^4.66.1" -typing-extensions = "^4.8.0" -ujson = "^5.8.0" - - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/utils/__init__.py b/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/utils/debug.py b/utils/debug.py deleted file mode 100644 index 6cdc42c..0000000 --- a/utils/debug.py +++ /dev/null @@ -1,13 +0,0 @@ -import pygame - -pygame.init() - -font = pygame.font.Font(None, 30) - - -def debug(info, y=10, x=10): - display_surface = pygame.display.get_surface() - debug_surf = font.render(str(info), True, 'White') - debug_rect = debug_surf.get_rect(topleft=(x, y)) - pygame.draw.rect(display_surface, 'Black', debug_rect) - display_surface.blit(debug_surf, debug_rect) diff --git a/utils/hyperparams.py b/utils/hyperparams.py deleted file mode 100644 index 0cd7274..0000000 --- a/utils/hyperparams.py +++ /dev/null @@ -1,16 +0,0 @@ -HPARAMS = { - - "horizon": 256, - "num_epochs": 10, - "batch_size": 15, - - "policy_clip": 0.1, - "discount_factor": 0.99, - "GAE_lambda": 0.95, - - "entropy_coeff": 0.01, - "value_coeff": 0.5, - - "learning_rate": 0.0003, - -} diff --git a/utils/metrics.py b/utils/metrics.py deleted file mode 100644 index 318ccc9..0000000 --- a/utils/metrics.py +++ /dev/null @@ -1,75 +0,0 @@ -import os -import numpy as np -import matplotlib.pyplot as plt - - -def plot_learning_curve(scores, num_players, figure_path, n_episodes): - - plt.figure() - plt.title("Running Average - Score") - plt.xlabel("Episode") - plt.ylabel("Score") - plt.legend([f"Agent {num}" for num in range(num_players)]) - for score in scores: - running_avg = np.zeros(len(score)) - for i in range(len(score)): - if score[i] != 0: - running_avg[i] = np.mean(score[max(0, i-int(n_episodes/10)):i+1]) - plt.plot(running_avg) - plt.savefig(os.path.join(figure_path, "avg_score.png")) - plt.close() - -def plot_avg_time(time_steps, num_players, fig_path): - - plt.figure() - plt.title("Average Time Steps per Episode") - for player in time_steps: - plt.plot(player) - plt.savefig(os.path.join(fig_path, 'avg_time.png')) - plt.close() - -def plot_score(scores, num_players, figure_path): - - plt.figure() - plt.title("Agent Rewards - No Averaging") - plt.xlabel("Episode") - plt.ylabel("Score") - plt.legend([f"Agent {num}" for num in range(num_players)]) - for player_score in scores: - plt.plot(player_score) - plt.savefig(os.path.join(figure_path, 'score.png')) - plt.close() - - -def plot_loss(nn_type, losses, num_players, figure_path, n_episodes): - - plt.figure() - plt.title(f"Running Average - {nn_type.capitalize()} Loss") - plt.xlabel("Learning Iterations") - plt.ylabel("Loss") - plt.legend([f"Agent {num}" for num in range(num_players)]) - for loss in losses: - running_avg = np.zeros(len(loss)) - for i in range(len(loss)): - if loss[i] != 0: - running_avg[i] = np.mean(loss[max(0, i-int(n_episodes/10)):(i+1)]) - plt.plot(running_avg) - plt.savefig(os.path.join(figure_path, f"{nn_type}_loss.png")) - plt.close() - - -def plot_parameter(name, parameter, num_players, figure_path, n_episodes): - - plt.figure() - plt.title(f"Running Average - {name.capitalize()}") - plt.xlabel("Learning Iterations") - plt.ylabel(f"{name.capitalize()}") - plt.legend([f"Agent {num}" for num in range(num_players)]) - for param in parameter: - running_avg = np.zeros(len(param)) - for i in range(len(param)): - if param[i] != 0: - running_avg[i] = np.mean(param[max(0, i-int(n_episodes/10)):(i+1)]) - plt.plot(running_avg) - plt.savefig(os.path.join(figure_path, f"{name}.png")) - plt.close() diff --git a/utils/resource_loader.py b/utils/resource_loader.py deleted file mode 100644 index 21c406f..0000000 --- a/utils/resource_loader.py +++ /dev/null @@ -1,42 +0,0 @@ -import pygame -from csv import reader -import os - - -def import_csv_layout(path): - script_dir = os.path.dirname(os.path.abspath(__file__)) - path = os.path.join(script_dir, - '..', - 'assets', - path) - terrain_map = [] - with open(path) as level_map: - layout = reader(level_map, delimiter=',') - for row in layout: - terrain_map.append(list(row)) - return terrain_map - - -def import_folder(path): - script_dir = os.path.dirname(os.path.abspath(__file__)) - - path = os.path.join(script_dir, - '..', - 'assets', - path) - surface_list = [] - - for _, __, img_files in os.walk(path): - for image in img_files: - full_path = os.path.join(path, image) - image_surf = pygame.image.load(full_path).convert_alpha() - - surface_list.append(image_surf) - return surface_list - - -def import_assets(path): - script_dir = os.path.dirname(os.path.abspath(__file__)) - return os.path.join(script_dir, - '..', - 'assets', path) diff --git a/utils/seeds.py b/utils/seeds.py deleted file mode 100644 index 5787159..0000000 --- a/utils/seeds.py +++ /dev/null @@ -1,11 +0,0 @@ -import random -import torch as T -import numpy as np - - -def set_seeds(value): - - random.seed(value) - np.random.seed(value) - T.manual_seed(value) - T.cuda.manual_seed_all(value)