diff --git a/' b/' new file mode 100644 index 0000000..e6eda89 --- /dev/null +++ b/' @@ -0,0 +1,58 @@ +@tool +class_name TreasureChest extends Node2D + +@export var item_data: ItemData : + set = set_item_data +@export var quantity: int = 1 : + set = set_quantity + +@onready var item_sprite: Sprite2D = $ItemSprite +@onready var label: Label = $ItemSprite/Label +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var area: Area2D = $Area2D + +var is_open := false + +func _ready() -> void: + update_texture() + update_label() + if Engine.is_editor_hint(): + return + + area.area_entered.connect(on_area_entered) + area.area_exited.connect(on_area_exited) + +func set_item_data(new_item_data: ItemData) -> void: + item_data = new_item_data + update_texture() + +func set_quantity(new_quantity: int) -> void: + quantity = new_quantity + update_label() + +func on_area_entered(_body: Area2D) -> void: + PlayerManager.interact_pressed.connect(on_player_interaction) + +func on_area_exited(_body: Area2D) -> void: + PlayerManager.interact_pressed.disconnect(on_player_interaction) + +func on_player_interaction() -> void: + if is_open: + return + is_open = true + animation_player.play("open_chest") + if item_data and quantity > 0: + PlayerManager.INVENTORY_DATA.add_item(item_data, quantity) + else: + printerr("Chest has not items") + push_error("Chest has not items") + +func update_texture() -> void: + if !item_data or !sprite: + return + sprite.texture = item_data.texture + +func update_label() -> void: + if !label: + return + label.text = "x%d" % quantity if quantity > 0 else "" diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 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 new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/addons/godot-git-plugin/LICENSE b/addons/godot-git-plugin/LICENSE new file mode 100644 index 0000000..f153fb8 --- /dev/null +++ b/addons/godot-git-plugin/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2023 The Godot Engine community + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/addons/godot-git-plugin/THIRDPARTY.md b/addons/godot-git-plugin/THIRDPARTY.md new file mode 100644 index 0000000..7b72b27 --- /dev/null +++ b/addons/godot-git-plugin/THIRDPARTY.md @@ -0,0 +1,1346 @@ +# Third-Party Notices + +The Godot Git Plugin source code uses the following third-party source code: + +1. godotengine/godot-cpp - MIT License - https://github.com/godotengine/godot-cpp/tree/02336831735fd6affbe0a6fa252ec98d3e78120c +2. libgit2/libgit2 - GPLv2 with a special Linking Exception - https://github.com/libgit2/libgit2/tree/b7bad55e4bb0a285b073ba5e02b01d3f522fc95d +3. libssh2/libssh2 - BSD-3-Clause License - https://github.com/libssh2/libssh2/tree/635caa90787220ac3773c1d5ba11f1236c22eae8 +4. openssl - OpenSSL License - https://github.com/openssl/openssl/tree/26baecb28ce461696966dac9ac889629db0b3b96 + +## License Texts + +### godotengine/godot-cpp + +``` +# MIT License + +Copyright (c) 2017-2022 Godot Engine contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +### libgit2/libgit2 + +``` + libgit2 is Copyright (C) the libgit2 contributors, + unless otherwise stated. See the AUTHORS file for details. + + Note that the only valid version of the GPL as far as this project + is concerned is _this_ particular version of the license (ie v2, not + v2.2 or v3.x or whatever), unless explicitly otherwise stated. + +---------------------------------------------------------------------- + + LINKING EXCEPTION + + In addition to the permissions in the GNU General Public License, + the authors give you unlimited permission to link the compiled + version of this library into combinations with other programs, + and to distribute those combinations without any restriction + coming from the use of this file. (The General Public License + restrictions do apply in other respects; for example, they cover + modification of the file, and distribution when not linked into + a combined executable.) + +---------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +---------------------------------------------------------------------- + +The bundled ZLib code is licensed under the ZLib license: + +Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +---------------------------------------------------------------------- + +The Clar framework is licensed under the ISC license: + +Copyright (c) 2011-2015 Vicent Marti + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------------------------------------- + +The regex library (deps/regex/) is licensed under the GNU LGPL +(available at the end of this file). + +Definitions for data structures and routines for the regular +expression library. + +Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006,2008 +Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, write to the Free +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +---------------------------------------------------------------------- + +The bundled winhttp definition files (deps/winhttp/) are licensed under +the GNU LGPL (available at the end of this file). + +Copyright (C) 2007 Francois Gouget + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +---------------------------------------------------------------------- + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +---------------------------------------------------------------------- + +The bundled SHA1 collision detection code is licensed under the MIT license: + +MIT License + +Copyright (c) 2017: + Marc Stevens + Cryptology Group + Centrum Wiskunde & Informatica + P.O. Box 94079, 1090 GB Amsterdam, Netherlands + marc@marc-stevens.nl + + Dan Shumow + Microsoft Research + danshu@microsoft.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +---------------------------------------------------------------------- + +The bundled wildmatch code is licensed under the BSD license: + +Copyright Rich Salz. +All rights reserved. + +Redistribution and use in any form are permitted provided that the +following restrictions are are met: + +1. Source distributions must retain this entire copyright notice + and comment. +2. Binary distributions must include the acknowledgement ``This + product includes software developed by Rich Salz'' in the + documentation or other materials provided with the + distribution. This must not be represented as an endorsement + or promotion without specific prior written permission. +3. The origin of this software must not be misrepresented, either + by explicit claim or by omission. Credits must appear in the + source and documentation. +4. Altered versions must be plainly marked as such in the source + and documentation and must not be misrepresented as being the + original software. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +---------------------------------------------------------------------- + +Portions of the OpenSSL headers are included under the OpenSSL license: + +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] + +==================================================================== +Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +### libssh2/libssh2 + +``` +/* Copyright (c) 2004-2007 Sara Golemon + * Copyright (c) 2005,2006 Mikhail Gusarov + * Copyright (c) 2006-2007 The Written Word, Inc. + * Copyright (c) 2007 Eli Fant + * Copyright (c) 2009-2021 Daniel Stenberg + * Copyright (C) 2008, 2009 Simon Josefsson + * Copyright (c) 2000 Markus Friedl + * Copyright (c) 2015 Microsoft Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + */ +``` + +### OpenSSL + +``` + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +``` diff --git a/addons/godot-git-plugin/git_plugin.gdextension b/addons/godot-git-plugin/git_plugin.gdextension new file mode 100644 index 0000000..62cf890 --- /dev/null +++ b/addons/godot-git-plugin/git_plugin.gdextension @@ -0,0 +1,10 @@ +[configuration] + +entry_symbol = "git_plugin_init" +compatibility_minimum = "4.2.0" + +[libraries] + +linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so" +macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib" +windows.editor.x86_64 = "windows/libgit_plugin.windows.editor.x86_64.dll" diff --git a/addons/godot-git-plugin/git_plugin.gdextension.uid b/addons/godot-git-plugin/git_plugin.gdextension.uid new file mode 100644 index 0000000..6d2cfde --- /dev/null +++ b/addons/godot-git-plugin/git_plugin.gdextension.uid @@ -0,0 +1 @@ +uid://c5omy6f07poep diff --git a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.x86_64.so b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.x86_64.so new file mode 100644 index 0000000..0acaa28 Binary files /dev/null and b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.x86_64.so differ diff --git a/addons/godot-git-plugin/macos/libgit_plugin.macos.editor.universal.dylib b/addons/godot-git-plugin/macos/libgit_plugin.macos.editor.universal.dylib new file mode 100644 index 0000000..8e30951 Binary files /dev/null and b/addons/godot-git-plugin/macos/libgit_plugin.macos.editor.universal.dylib differ diff --git a/addons/godot-git-plugin/windows/libgit_plugin.windows.editor.x86_64.dll b/addons/godot-git-plugin/windows/libgit_plugin.windows.editor.x86_64.dll new file mode 100644 index 0000000..1102afc Binary files /dev/null and b/addons/godot-git-plugin/windows/libgit_plugin.windows.editor.x86_64.dll differ diff --git a/enemies/goblin/goblin.png b/enemies/goblin/goblin.png new file mode 100644 index 0000000..23fecae Binary files /dev/null and b/enemies/goblin/goblin.png differ diff --git a/enemies/goblin/goblin.png.import b/enemies/goblin/goblin.png.import new file mode 100644 index 0000000..91b993f --- /dev/null +++ b/enemies/goblin/goblin.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bvl5x6dfc8nr4" +path="res://.godot/imported/goblin.png-143728cb27735b6eb63f3f95b60fd4e9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://enemies/goblin/goblin.png" +dest_files=["res://.godot/imported/goblin.png-143728cb27735b6eb63f3f95b60fd4e9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/enemies/goblin/goblin.tscn b/enemies/goblin/goblin.tscn new file mode 100644 index 0000000..da8f038 --- /dev/null +++ b/enemies/goblin/goblin.tscn @@ -0,0 +1,832 @@ +[gd_scene format=3 uid="uid://cksw7i4wuuald"] + +[ext_resource type="Script" uid="uid://cmfpf1k80hvh7" path="res://enemies/scripts/enemy.gd" id="1_fn8x2"] +[ext_resource type="Texture2D" uid="uid://bxqdnnk4dqnu5" path="res://player/sprites/Shadow.png" id="2_gyubk"] +[ext_resource type="Texture2D" uid="uid://bvl5x6dfc8nr4" path="res://enemies/goblin/goblin.png" id="3_a1dmc"] +[ext_resource type="AudioStream" uid="uid://dcbm4phywpbji" path="res://enemies/slime/hit_01.wav" id="4_tpgwk"] +[ext_resource type="AudioStream" uid="uid://b0cm6n01nff3w" path="res://enemies/slime/hit_00.wav" id="5_hljvr"] +[ext_resource type="Script" uid="uid://bvjx5c5xd3rhw" path="res://enemies/scripts/enemy_state_machine.gd" id="6_v7wfw"] +[ext_resource type="Script" uid="uid://t2wl0iif703e" path="res://enemies/scripts/states/enemy_state_idle.gd" id="7_hssmb"] +[ext_resource type="Script" uid="uid://dqiqly265lt0u" path="res://enemies/scripts/states/enemy_state_wander.gd" id="8_erdao"] +[ext_resource type="Script" uid="uid://b6sf2nm67yulk" path="res://enemies/scripts/states/enemy_state_stun.gd" id="9_adllb"] +[ext_resource type="Script" uid="uid://qn1vn11fqgui" path="res://enemies/scripts/states/enemy_state_destroy.gd" id="10_a7klv"] +[ext_resource type="Script" uid="uid://cqeos77b55w5x" path="res://enemies/scripts/drop_data.gd" id="11_mr2i6"] +[ext_resource type="Resource" uid="uid://bc4mt6ldpoq18" path="res://items/gem.tres" id="12_qfsop"] +[ext_resource type="Resource" uid="uid://wif1wqrr83k0" path="res://items/apple.tres" id="13_ksuod"] +[ext_resource type="PackedScene" uid="uid://mwyvk4gke34" path="res://general/hurtbox/hurtbox.tscn" id="14_b2jpe"] +[ext_resource type="Texture2D" uid="uid://cvcxdarfsvvp" path="res://enemies/slime/DestroySmoke.png" id="15_qb7la"] +[ext_resource type="Script" uid="uid://dmcmplui6od1k" path="res://enemies/scripts/states/enemy_state_chase.gd" id="16_7cl5y"] +[ext_resource type="PackedScene" uid="uid://cda6fr5vhb4ty" path="res://general/hitbox/hitbox.tscn" id="16_mmp0q"] +[ext_resource type="PackedScene" uid="uid://4bv0pi2yn5es" path="res://enemies/vision_area.tscn" id="17_2fgol"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5ctnu"] +radius = 13.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_klbxu"] +radius = 13.0 + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_j284o"] +radius = 5.0 +height = 22.0 + +[sub_resource type="Animation" id="Animation_j284o"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("shadow_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("main_sprite/SpearHurtbox:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 14)] +} + +[sub_resource type="Animation" id="Animation_a1dmc"] +resource_name = "chase_down" +length = 0.6 +loop_mode = 1 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.15, 0.3, 0.45), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [12, 13, 14, 15] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite/SpearHurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.15, 0.3, 0.45000002), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [Vector2(0, 11), Vector2(0, 11), Vector2(0, 17), Vector2(0, 11)] +} + +[sub_resource type="Animation" id="Animation_2fgol"] +resource_name = "chase_side" +length = 0.6 +loop_mode = 1 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.15, 0.3, 0.45), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [20, 21, 22, 23] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite/SpearHurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.15, 0.3, 0.45000002), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [Vector2(4, 14), Vector2(2, 14), Vector2(9, 14), Vector2(4, 14)] +} + +[sub_resource type="Animation" id="Animation_7cl5y"] +resource_name = "chase_up" +length = 0.6 +loop_mode = 1 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.15, 0.3, 0.45), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [16, 17, 18, 19] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite/SpearHurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.15, 0.3, 0.45000002), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [Vector2(0, 0), Vector2(0, 0), Vector2(0, -2), Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_klbxu"] +resource_name = "destroy_down" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(-2), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020354, 0, 1), Color(1, 1, 1, 1), Color(0.91764706, 0.07058824, 0, 0)] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("audio") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_tpgwk") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("5_hljvr") +}], +"times": PackedFloat32Array(0.05) +} +tracks/3/use_blend = true +tracks/4/type = "animation" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("destroy_effect_sprite/AnimationPlayer") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"clips": PackedStringArray("destroy"), +"times": PackedFloat32Array(0) +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("shadow_sprite:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216), Color(0.6156863, 0.36862746, 0.12156863, 0)] +} + +[sub_resource type="Animation" id="Animation_im24l"] +resource_name = "destroy_side" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(-2), +"update": 1, +"values": [8] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1), Color(0.91764706, 0.07058824, 0, 0)] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("audio") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_tpgwk") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("5_hljvr") +}], +"times": PackedFloat32Array(0.05) +} +tracks/3/use_blend = true +tracks/4/type = "animation" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("destroy_effect_sprite/AnimationPlayer") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"clips": PackedStringArray("destroy"), +"times": PackedFloat32Array(0) +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("shadow_sprite:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216), Color(0.6156863, 0.36862746, 0.12156863, 0)] +} + +[sub_resource type="Animation" id="Animation_mwtj1"] +resource_name = "destroy_up" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(-2), +"update": 1, +"values": [4] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1), Color(0.91764706, 0.07058824, 0, 0)] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("audio") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_tpgwk") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("5_hljvr") +}], +"times": PackedFloat32Array(0.05) +} +tracks/3/use_blend = true +tracks/4/type = "animation" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("destroy_effect_sprite/AnimationPlayer") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"clips": PackedStringArray("destroy"), +"times": PackedFloat32Array(0) +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("shadow_sprite:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216), Color(0.6156863, 0.36862746, 0.12156863, 0)] +} + +[sub_resource type="Animation" id="Animation_6326o"] +resource_name = "idle_down" +length = 0.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_57eei"] +resource_name = "idle_side" +length = 0.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [8] +} + +[sub_resource type="Animation" id="Animation_u2l51"] +resource_name = "idle_up" +length = 0.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [4] +} + +[sub_resource type="Animation" id="Animation_kag0e"] +resource_name = "stun_down" +length = 0.3 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(-2), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1)] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("audio") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_tpgwk") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true + +[sub_resource type="Animation" id="Animation_knvw0"] +resource_name = "stun_side" +length = 0.3 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(-2), +"update": 1, +"values": [8] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1)] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("audio") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_tpgwk") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true + +[sub_resource type="Animation" id="Animation_yuirh"] +resource_name = "stun_up" +length = 0.3 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(-2), +"update": 1, +"values": [4] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1)] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("audio") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_tpgwk") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true + +[sub_resource type="Animation" id="Animation_2ui2u"] +resource_name = "walk_down" +length = 0.8 +loop_mode = 1 +step = 0.2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3] +} + +[sub_resource type="Animation" id="Animation_bkm6f"] +resource_name = "walk_side" +length = 0.8 +loop_mode = 1 +step = 0.2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11] +} + +[sub_resource type="Animation" id="Animation_5ctnu"] +resource_name = "walk_up" +length = 0.7 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1.035265, 1, 1), +"update": 1, +"values": [4, 5, 6, 7] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_kag0e"] +_data = { +&"RESET": SubResource("Animation_j284o"), +&"chase_down": SubResource("Animation_a1dmc"), +&"chase_side": SubResource("Animation_2fgol"), +&"chase_up": SubResource("Animation_7cl5y"), +&"destroy_down": SubResource("Animation_klbxu"), +&"destroy_side": SubResource("Animation_im24l"), +&"destroy_up": SubResource("Animation_mwtj1"), +&"idle_down": SubResource("Animation_6326o"), +&"idle_side": SubResource("Animation_57eei"), +&"idle_up": SubResource("Animation_u2l51"), +&"stun_down": SubResource("Animation_kag0e"), +&"stun_side": SubResource("Animation_knvw0"), +&"stun_up": SubResource("Animation_yuirh"), +&"walk_down": SubResource("Animation_2ui2u"), +&"walk_side": SubResource("Animation_bkm6f"), +&"walk_up": SubResource("Animation_5ctnu") +} + +[sub_resource type="Resource" id="Resource_yu3x6"] +script = ExtResource("11_mr2i6") +item = ExtResource("12_qfsop") +max_amount = 4 +metadata/_custom_type_script = "uid://cqeos77b55w5x" + +[sub_resource type="Resource" id="Resource_okhmd"] +script = ExtResource("11_mr2i6") +item = ExtResource("13_ksuod") +drop_rate = 33.0 +metadata/_custom_type_script = "uid://cqeos77b55w5x" + +[sub_resource type="Animation" id="Animation_v3fw7"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_0oddt"] +resource_name = "destroy" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.2, 0.3, 0.4, 0.5), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3, 4, 5] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_klbxu"] +_data = { +&"RESET": SubResource("Animation_v3fw7"), +&"destroy": SubResource("Animation_0oddt") +} + +[node name="Goblin" type="CharacterBody2D" unique_id=2039155988] +collision_layer = 256 +collision_mask = 16 +script = ExtResource("1_fn8x2") + +[node name="Hurtbox" parent="." unique_id=38213362 instance=ExtResource("14_b2jpe")] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox" unique_id=378145594] +position = Vector2(0, -7) +shape = SubResource("CircleShape2D_5ctnu") +debug_color = Color(0.6581531, 0.51457477, 0.100101404, 0.41960785) + +[node name="Hitbox" parent="." unique_id=1876591880 instance=ExtResource("16_mmp0q")] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox" unique_id=708724179] +position = Vector2(0, -7) +shape = SubResource("CircleShape2D_klbxu") +debug_color = Color(0.99824387, 0, 0.15809265, 0.41960785) + +[node name="shadow_sprite" type="Sprite2D" parent="." unique_id=41851023] +modulate = Color(0.61505616, 0.3702431, 0.12079669, 0.8039216) +position = Vector2(0, 2) +scale = Vector2(0.75, 0.75) +texture = ExtResource("2_gyubk") + +[node name="main_sprite" type="Sprite2D" parent="." unique_id=2116964596] +position = Vector2(0, -14) +texture = ExtResource("3_a1dmc") +hframes = 8 +vframes = 3 + +[node name="SpearHurtbox" parent="main_sprite" unique_id=426932876 instance=ExtResource("14_b2jpe")] +position = Vector2(0, 14) +monitoring = false +damage = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="main_sprite/SpearHurtbox" unique_id=1604105915] +position = Vector2(0, -7) +shape = SubResource("CircleShape2D_5ctnu") +debug_color = Color(0.5251133, 0.34901688, 0.016019357, 0.41960785) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=189927216] +rotation = 1.5707964 +shape = SubResource("CapsuleShape2D_j284o") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1867521179] +libraries/ = SubResource("AnimationLibrary_kag0e") + +[node name="enemy_state_machine" type="Node2D" parent="." unique_id=208543397] +script = ExtResource("6_v7wfw") + +[node name="idle" type="Node2D" parent="enemy_state_machine" unique_id=1109025638 node_paths=PackedStringArray("next_state")] +script = ExtResource("7_hssmb") +next_state = NodePath("../wander") + +[node name="wander" type="Node2D" parent="enemy_state_machine" unique_id=1566208588 node_paths=PackedStringArray("next_state")] +script = ExtResource("8_erdao") +next_state = NodePath("../idle") + +[node name="stun" type="Node2D" parent="enemy_state_machine" unique_id=1564475499 node_paths=PackedStringArray("next_state")] +script = ExtResource("9_adllb") +next_state = NodePath("../chase") + +[node name="destroy" type="Node2D" parent="enemy_state_machine" unique_id=569812721] +script = ExtResource("10_a7klv") +drops = Array[ExtResource("11_mr2i6")]([SubResource("Resource_yu3x6"), SubResource("Resource_okhmd")]) + +[node name="chase" type="Node2D" parent="enemy_state_machine" unique_id=287992996 node_paths=PackedStringArray("vision_area", "attack_area", "next_state")] +script = ExtResource("16_7cl5y") +vision_area = NodePath("../../VisionArea") +attack_area = NodePath("../../main_sprite/SpearHurtbox") +next_state = NodePath("../idle") + +[node name="audio" type="AudioStreamPlayer2D" parent="." unique_id=1148905292] +max_polyphony = 4 + +[node name="destroy_effect_sprite" type="Sprite2D" parent="." unique_id=837975864] +visible = false +position = Vector2(0, -9) +texture = ExtResource("15_qb7la") +hframes = 6 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="destroy_effect_sprite" unique_id=1538706478] +libraries/ = SubResource("AnimationLibrary_klbxu") + +[node name="VisionArea" parent="." unique_id=2078416065 instance=ExtResource("17_2fgol")] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="VisionArea" unique_id=1816798882] +position = Vector2(0, -7) +polygon = PackedVector2Array(-16, 0, 16, 0, 128, 128, -128, 128) diff --git a/enemies/scripts/drop_data.gd b/enemies/scripts/drop_data.gd new file mode 100644 index 0000000..50f0dc2 --- /dev/null +++ b/enemies/scripts/drop_data.gd @@ -0,0 +1,15 @@ +class_name DropData extends Resource + +@export +var item: ItemData +@export_range(0, 100, 1, "suffix:%") +var drop_rate: float = 100 +@export_range(1, 10, 1, "suffix:items") +var min_amount := 1 +@export_range(1, 10, 1, "suffix:items") +var max_amount := 1 + +func get_drop_count() -> int: + if randf_range(0, 100) >= drop_rate: + return 0 + return randi_range(min_amount, max_amount) diff --git a/enemies/scripts/drop_data.gd.uid b/enemies/scripts/drop_data.gd.uid new file mode 100644 index 0000000..bc41831 --- /dev/null +++ b/enemies/scripts/drop_data.gd.uid @@ -0,0 +1 @@ +uid://cqeos77b55w5x diff --git a/enemies/scripts/enemy.gd b/enemies/scripts/enemy.gd new file mode 100644 index 0000000..c69c301 --- /dev/null +++ b/enemies/scripts/enemy.gd @@ -0,0 +1,67 @@ +class_name Enemy extends CharacterBody2D + +const DIR_4 = [ + Vector2.RIGHT, + Vector2.DOWN, + Vector2.LEFT, + Vector2.UP, +] + +signal direction_changed(new_direction: Vector2) +signal enemy_damaged(hurtbox: Hurtbox) +signal enemy_destroyed(hurtbox: Hurtbox) + +@export var hp: int = 3 + +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var main_sprite: Sprite2D = $main_sprite +@onready var hitbox: Hitbox = $Hitbox +@onready var state_machine: EnemyStateMachine = $enemy_state_machine + +var cardinal_direction : Vector2 = Vector2.DOWN +var direction : Vector2 = Vector2.ZERO +var invulnerable: bool = false + +func _ready() -> void: + state_machine.initialize(self) + hitbox.damaged.connect(on_damage) + +func _process(_delta: float) -> void: + pass + +func _physics_process(_delta: float) -> void: + move_and_slide() + +func set_direction(new_direction: Vector2) -> bool: + if new_direction == Vector2.ZERO: + return false + + var refreshed_direction = DIR_4[int(round((new_direction + cardinal_direction * 0.1).angle() / TAU * DIR_4.size()))] + + if refreshed_direction == cardinal_direction: + return false + cardinal_direction = refreshed_direction + direction_changed.emit(refreshed_direction) + main_sprite.scale.x = -1 if cardinal_direction == Vector2.LEFT else 1 + return true + +func update_animation(state: String) -> void: + animation_player.play(state + "_" + get_animation_direction()) + +func get_animation_direction() -> String: + var newAnimDirection: String = "side" + if cardinal_direction == Vector2.DOWN: + newAnimDirection = "down" + elif cardinal_direction == Vector2.UP: + newAnimDirection = "up" + return newAnimDirection + +func on_damage(hurtbox: Hurtbox) -> void: + if invulnerable: + return + hp -= hurtbox.damage + if hp > 0: + enemy_damaged.emit(hurtbox) + else: + enemy_destroyed.emit(hurtbox) + diff --git a/enemies/scripts/enemy.gd.uid b/enemies/scripts/enemy.gd.uid new file mode 100644 index 0000000..eb7931b --- /dev/null +++ b/enemies/scripts/enemy.gd.uid @@ -0,0 +1 @@ +uid://cmfpf1k80hvh7 diff --git a/enemies/scripts/enemy_state_machine.gd b/enemies/scripts/enemy_state_machine.gd new file mode 100644 index 0000000..25e73c7 --- /dev/null +++ b/enemies/scripts/enemy_state_machine.gd @@ -0,0 +1,40 @@ +class_name EnemyStateMachine extends Node + +var states: Array[EnemyState] +var previous_state: EnemyState +var current_state: EnemyState + +func _ready() -> void: + process_mode = Node.PROCESS_MODE_DISABLED + +func _process(delta: float) -> void: + change_state(current_state.process(delta)) + +func _physics_process(delta: float) -> void: + change_state(current_state.physics(delta)) + +func initialize(enemy: Enemy) -> void: + states = [] + for child in get_children(): + if child is EnemyState: + states.append(child) + + for state in states: + state.enemy = enemy + state.state_machine = self + state.init() + + if !states.is_empty(): + change_state(states[0]) + process_mode = Node.PROCESS_MODE_INHERIT + +func change_state(new_state: EnemyState) -> void: + if new_state == null or new_state == current_state: + return + + if current_state: + current_state.exit() + + previous_state = current_state + current_state = new_state + current_state.enter() diff --git a/enemies/scripts/enemy_state_machine.gd.uid b/enemies/scripts/enemy_state_machine.gd.uid new file mode 100644 index 0000000..dd9382c --- /dev/null +++ b/enemies/scripts/enemy_state_machine.gd.uid @@ -0,0 +1 @@ +uid://bvjx5c5xd3rhw diff --git a/enemies/scripts/states/enemy_state.gd b/enemies/scripts/states/enemy_state.gd new file mode 100644 index 0000000..741543f --- /dev/null +++ b/enemies/scripts/states/enemy_state.gd @@ -0,0 +1,20 @@ +class_name EnemyState extends Node + +var enemy: Enemy +var state_machine: EnemyStateMachine + +func init() -> void: + pass + +func enter() -> void: + pass + +func exit() -> void: + pass + +func process(_delta : float) -> EnemyState: + return null + +func physics(_delta : float) -> EnemyState: + return null + diff --git a/enemies/scripts/states/enemy_state.gd.uid b/enemies/scripts/states/enemy_state.gd.uid new file mode 100644 index 0000000..f05346d --- /dev/null +++ b/enemies/scripts/states/enemy_state.gd.uid @@ -0,0 +1 @@ +uid://u7qy2i6rutqr diff --git a/enemies/scripts/states/enemy_state_chase.gd b/enemies/scripts/states/enemy_state_chase.gd new file mode 100644 index 0000000..3b783a5 --- /dev/null +++ b/enemies/scripts/states/enemy_state_chase.gd @@ -0,0 +1,58 @@ +class_name EnemyChaseWander extends EnemyState + +@export var animation_name: String = "chase" +@export var chase_speed: float = 20.0 +@export var turn_rate: float = 0.25 + +@export_category("AI") +@export var vision_area: VisionArea +@export var attack_area: Hurtbox +@export var state_aggro_duration: float = 0.5 +@export var next_state: EnemyState + +var timer: float = 0.0 +var direction: Vector2 +var can_see_player := false + +func init() -> void: + if vision_area: + vision_area.player_entered.connect(on_player_entered) + vision_area.player_exited.connect(on_player_exited) + +func enter() -> void: + timer = state_aggro_duration + enemy.update_animation(animation_name) + if attack_area: + attack_area.monitoring = true + +func exit() -> void: + if attack_area: + attack_area.monitoring = true + can_see_player = false + +func process(delta : float) -> EnemyState: + var new_dir: Vector2 = enemy.global_position.direction_to(PlayerManager.player.global_position) + direction = lerp(direction, new_dir, turn_rate) + enemy.velocity = direction * chase_speed + if enemy.set_direction(direction): + enemy.update_animation(animation_name) + if !can_see_player: + timer -= delta + if timer <= 0: + return next_state + else: + timer = state_aggro_duration + return null + + +func physics(_delta : float) -> EnemyState: + return null + +func on_player_entered() -> void: + can_see_player = true + if state_machine.current_state is EnemyStateStun: + return + state_machine.change_state(self) + +func on_player_exited() -> void: + can_see_player = false diff --git a/enemies/scripts/states/enemy_state_chase.gd.uid b/enemies/scripts/states/enemy_state_chase.gd.uid new file mode 100644 index 0000000..e59d9dc --- /dev/null +++ b/enemies/scripts/states/enemy_state_chase.gd.uid @@ -0,0 +1 @@ +uid://dmcmplui6od1k diff --git a/enemies/scripts/states/enemy_state_destroy.gd b/enemies/scripts/states/enemy_state_destroy.gd new file mode 100644 index 0000000..1ff6403 --- /dev/null +++ b/enemies/scripts/states/enemy_state_destroy.gd @@ -0,0 +1,64 @@ + +class_name EnemyStateDestroy extends EnemyState + +const PICKUP: Resource = preload("res://items/item_pickup/item_pickup.tscn") + +@export var animation_name: String = "destroy" +@export var knockback_speed: float = 200.0 +@export var decelerate_speed: float = 10.0 +@export_category("Item drops") +@export var drops: Array[DropData] + +var direction: Vector2 +var damage_position: Vector2 + +func init() -> void: + enemy.enemy_destroyed.connect(on_destroyed) + +func enter() -> void: + enemy.invulnerable = true + enemy.animation_player.animation_finished.connect(on_animation_finished) + direction = enemy.global_position.direction_to(damage_position) + enemy.update_animation(animation_name) + enemy.set_direction(direction) + enemy.velocity = direction * -knockback_speed + disable_hurtbox() + drop_items() + +func exit() -> void: + enemy.invulnerable = false + enemy.animation_player.animation_finished.disconnect(on_animation_finished) + +func process(delta : float) -> EnemyState: + enemy.velocity -= enemy.velocity * decelerate_speed * delta + return null + +func physics(_delta : float) -> EnemyState: + return null + +func on_destroyed(hurtbox: Hurtbox) -> void: + state_machine.change_state(self) + damage_position = hurtbox.global_position + +func on_animation_finished(_name: String) -> void: + print("destroyed") + enemy.queue_free() + +func disable_hurtbox() -> void: + var hurtbox: Hurtbox = enemy.get_node_or_null("Hurtbox") + if hurtbox: + hurtbox.monitoring = false + +func drop_items() -> void: + if drops.is_empty(): + return + for drops_index in drops.size(): + var drop_item := drops[drops_index] + if drop_item and drop_item.item: + var drop_count := drop_item.get_drop_count() + for drop_index in drop_count: + var item_pickup := PICKUP.instantiate() as ItemPickup + item_pickup.item_data = drop_item.item + enemy.get_parent().call_deferred("add_child", item_pickup) + item_pickup.global_position = enemy.global_position + item_pickup.velocity = enemy.velocity.rotated(randf_range(-1.5, 1.5)) * randf_range(0.9, 1.5) diff --git a/enemies/scripts/states/enemy_state_destroy.gd.uid b/enemies/scripts/states/enemy_state_destroy.gd.uid new file mode 100644 index 0000000..cb0cc6f --- /dev/null +++ b/enemies/scripts/states/enemy_state_destroy.gd.uid @@ -0,0 +1 @@ +uid://qn1vn11fqgui diff --git a/enemies/scripts/states/enemy_state_idle.gd b/enemies/scripts/states/enemy_state_idle.gd new file mode 100644 index 0000000..c18c943 --- /dev/null +++ b/enemies/scripts/states/enemy_state_idle.gd @@ -0,0 +1,30 @@ +class_name EnemyStateIdle extends EnemyState + +@export var animation_name: String = "idle" + +@export_category("AI") +@export var state_duration_min: float = 0.5 +@export var state_duration_max: float = 1.5 +@export var next_state: EnemyState + +var timer: float = 0.0 + +func init() -> void: + pass + +func enter() -> void: + enemy.velocity = Vector2.ZERO + timer = randf_range(state_duration_min, state_duration_max) + enemy.update_animation(animation_name) + +func exit() -> void: + pass + +func process(delta : float) -> EnemyState: + timer -= delta + if timer <= 0: + return next_state + return null + +func physics(_delta : float) -> EnemyState: + return null diff --git a/enemies/scripts/states/enemy_state_idle.gd.uid b/enemies/scripts/states/enemy_state_idle.gd.uid new file mode 100644 index 0000000..6cec636 --- /dev/null +++ b/enemies/scripts/states/enemy_state_idle.gd.uid @@ -0,0 +1 @@ +uid://t2wl0iif703e diff --git a/enemies/scripts/states/enemy_state_stun.gd b/enemies/scripts/states/enemy_state_stun.gd new file mode 100644 index 0000000..bc2b52b --- /dev/null +++ b/enemies/scripts/states/enemy_state_stun.gd @@ -0,0 +1,44 @@ +class_name EnemyStateStun extends EnemyState + +@export var animation_name: String = "stun" +@export var knockback_speed: float = 200.0 +@export var decelerate_speed: float = 10.0 + +@export_category("AI") +@export var next_state: EnemyState + +var direction: Vector2 +var damage_position: Vector2 +var animation_finished: bool = false + +func init() -> void: + enemy.enemy_damaged.connect(on_damaged) + +func enter() -> void: + enemy.animation_player.animation_finished.connect(on_animation_finished) + enemy.invulnerable = true + animation_finished = false + direction = enemy.global_position.direction_to(damage_position) + enemy.update_animation(animation_name) + enemy.set_direction(direction) + enemy.velocity = direction * -knockback_speed + +func exit() -> void: + enemy.invulnerable = false + enemy.animation_player.animation_finished.disconnect(on_animation_finished) + +func process(delta : float) -> EnemyState: + if animation_finished: + return next_state + enemy.velocity -= enemy.velocity * decelerate_speed * delta + return null + +func physics(_delta : float) -> EnemyState: + return null + +func on_damaged(hurtbox: Hurtbox) -> void: + damage_position = hurtbox.global_position + state_machine.change_state(self) + +func on_animation_finished(_name: String) -> void: + animation_finished = true diff --git a/enemies/scripts/states/enemy_state_stun.gd.uid b/enemies/scripts/states/enemy_state_stun.gd.uid new file mode 100644 index 0000000..7f49bb7 --- /dev/null +++ b/enemies/scripts/states/enemy_state_stun.gd.uid @@ -0,0 +1 @@ +uid://b6sf2nm67yulk diff --git a/enemies/scripts/states/enemy_state_wander.gd b/enemies/scripts/states/enemy_state_wander.gd new file mode 100644 index 0000000..5f64bc2 --- /dev/null +++ b/enemies/scripts/states/enemy_state_wander.gd @@ -0,0 +1,38 @@ +class_name EnemyStateWander extends EnemyState + +@export var animation_name: String = "walk" +@export var wander_speed: float = 20.0 + +@export_category("AI") +@export var state_animation_duration: float = 0.7 +@export var state_cycles_min: int = 1 +@export var state_cycles_max: int = 3 +@export var next_state: EnemyState + +var timer: float = 0.0 +var direction: Vector2 + +func init() -> void: + pass + +func enter() -> void: + timer = randi_range(state_cycles_min, state_cycles_max) * state_animation_duration + var random_direction = randi_range(0, 3) + direction = enemy.DIR_4[random_direction] + enemy.velocity = direction * wander_speed + enemy.set_direction(direction) + enemy.update_animation(animation_name) + +func exit() -> void: + pass + +func process(delta : float) -> EnemyState: + timer -= delta + if timer <= 0: + return next_state + return null + + +func physics(_delta : float) -> EnemyState: + return null + diff --git a/enemies/scripts/states/enemy_state_wander.gd.uid b/enemies/scripts/states/enemy_state_wander.gd.uid new file mode 100644 index 0000000..c58e843 --- /dev/null +++ b/enemies/scripts/states/enemy_state_wander.gd.uid @@ -0,0 +1 @@ +uid://dqiqly265lt0u diff --git a/enemies/scripts/vision_area.gd b/enemies/scripts/vision_area.gd new file mode 100644 index 0000000..f4c3e70 --- /dev/null +++ b/enemies/scripts/vision_area.gd @@ -0,0 +1,33 @@ +class_name VisionArea extends Area2D + +signal player_entered +signal player_exited + +func _ready() -> void: + body_entered.connect(on_body_entered) + body_exited.connect(on_body_exited) + var parent = get_parent() + if parent is Enemy: + parent.direction_changed.connect(on_direction_changed) + +func on_body_entered(body: Node2D) -> void: + if body is Player: + player_entered.emit() + +func on_body_exited(body: Node2D) -> void: + if body is Player: + player_exited.emit() + +func on_direction_changed(new_direction: Vector2) -> void: + match new_direction: + Vector2.DOWN: + rotation_degrees = 0 + Vector2.UP: + rotation_degrees = 180 + Vector2.LEFT: + rotation_degrees = 90 + Vector2.RIGHT: + rotation_degrees = -90 + _: + rotation_degrees = 0 + diff --git a/enemies/scripts/vision_area.gd.uid b/enemies/scripts/vision_area.gd.uid new file mode 100644 index 0000000..2d758a7 --- /dev/null +++ b/enemies/scripts/vision_area.gd.uid @@ -0,0 +1 @@ +uid://dumobb6c7eybb diff --git a/enemies/slime/DestroySmoke.png b/enemies/slime/DestroySmoke.png new file mode 100644 index 0000000..5b62efc Binary files /dev/null and b/enemies/slime/DestroySmoke.png differ diff --git a/enemies/slime/DestroySmoke.png.import b/enemies/slime/DestroySmoke.png.import new file mode 100644 index 0000000..5c4d540 --- /dev/null +++ b/enemies/slime/DestroySmoke.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cvcxdarfsvvp" +path="res://.godot/imported/DestroySmoke.png-3d9ca38dff7bb76c066af857f8439d71.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://enemies/slime/DestroySmoke.png" +dest_files=["res://.godot/imported/DestroySmoke.png-3d9ca38dff7bb76c066af857f8439d71.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/enemies/slime/Slime.png b/enemies/slime/Slime.png new file mode 100644 index 0000000..b56f711 Binary files /dev/null and b/enemies/slime/Slime.png differ diff --git a/enemies/slime/Slime.png.import b/enemies/slime/Slime.png.import new file mode 100644 index 0000000..a1f3c99 --- /dev/null +++ b/enemies/slime/Slime.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0cktmx7bdi6" +path="res://.godot/imported/Slime.png-2c32aef4516f36b26731b93e78638e8f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://enemies/slime/Slime.png" +dest_files=["res://.godot/imported/Slime.png-2c32aef4516f36b26731b93e78638e8f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/enemies/slime/hit_00.wav b/enemies/slime/hit_00.wav new file mode 100644 index 0000000..f844f8b Binary files /dev/null and b/enemies/slime/hit_00.wav differ diff --git a/enemies/slime/hit_00.wav.import b/enemies/slime/hit_00.wav.import new file mode 100644 index 0000000..51051da --- /dev/null +++ b/enemies/slime/hit_00.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b0cm6n01nff3w" +path="res://.godot/imported/hit_00.wav-7d3408cea68163c28d377ef9ea817108.sample" + +[deps] + +source_file="res://enemies/slime/hit_00.wav" +dest_files=["res://.godot/imported/hit_00.wav-7d3408cea68163c28d377ef9ea817108.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/enemies/slime/hit_01.wav b/enemies/slime/hit_01.wav new file mode 100644 index 0000000..12cb777 Binary files /dev/null and b/enemies/slime/hit_01.wav differ diff --git a/enemies/slime/hit_01.wav.import b/enemies/slime/hit_01.wav.import new file mode 100644 index 0000000..b77bebd --- /dev/null +++ b/enemies/slime/hit_01.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dcbm4phywpbji" +path="res://.godot/imported/hit_01.wav-5741b8fa9d470a638cb59f9b3641df34.sample" + +[deps] + +source_file="res://enemies/slime/hit_01.wav" +dest_files=["res://.godot/imported/hit_01.wav-5741b8fa9d470a638cb59f9b3641df34.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/enemies/slime/slime.tscn b/enemies/slime/slime.tscn new file mode 100644 index 0000000..086719c --- /dev/null +++ b/enemies/slime/slime.tscn @@ -0,0 +1,859 @@ +[gd_scene format=3 uid="uid://dv2hjei167q68"] + +[ext_resource type="Script" uid="uid://cmfpf1k80hvh7" path="res://enemies/scripts/enemy.gd" id="1_6326o"] +[ext_resource type="Texture2D" uid="uid://bxqdnnk4dqnu5" path="res://player/sprites/Shadow.png" id="1_j284o"] +[ext_resource type="Texture2D" uid="uid://0cktmx7bdi6" path="res://enemies/slime/Slime.png" id="2_6326o"] +[ext_resource type="AudioStream" uid="uid://dcbm4phywpbji" path="res://enemies/slime/hit_01.wav" id="4_5ctnu"] +[ext_resource type="Script" uid="uid://bvjx5c5xd3rhw" path="res://enemies/scripts/enemy_state_machine.gd" id="4_57eei"] +[ext_resource type="AudioStream" uid="uid://b0cm6n01nff3w" path="res://enemies/slime/hit_00.wav" id="5_knvw0"] +[ext_resource type="Script" uid="uid://t2wl0iif703e" path="res://enemies/scripts/states/enemy_state_idle.gd" id="5_u2l51"] +[ext_resource type="Script" uid="uid://dqiqly265lt0u" path="res://enemies/scripts/states/enemy_state_wander.gd" id="6_2ui2u"] +[ext_resource type="PackedScene" uid="uid://mwyvk4gke34" path="res://general/hurtbox/hurtbox.tscn" id="7_bkm6f"] +[ext_resource type="Texture2D" uid="uid://cvcxdarfsvvp" path="res://enemies/slime/DestroySmoke.png" id="9_kag0e"] +[ext_resource type="Script" uid="uid://b6sf2nm67yulk" path="res://enemies/scripts/states/enemy_state_stun.gd" id="9_v3fw7"] +[ext_resource type="Script" uid="uid://qn1vn11fqgui" path="res://enemies/scripts/states/enemy_state_destroy.gd" id="10_0oddt"] +[ext_resource type="Script" uid="uid://cqeos77b55w5x" path="res://enemies/scripts/drop_data.gd" id="11_mwtj1"] +[ext_resource type="PackedScene" uid="uid://cda6fr5vhb4ty" path="res://general/hitbox/hitbox.tscn" id="12_0oddt"] +[ext_resource type="Resource" uid="uid://bc4mt6ldpoq18" path="res://items/gem.tres" id="12_im24l"] +[ext_resource type="Resource" uid="uid://wif1wqrr83k0" path="res://items/apple.tres" id="13_im24l"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_j284o"] +radius = 5.0 +height = 22.0 + +[sub_resource type="Animation" id="Animation_j284o"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("shadow_sprite:modulate") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216)] +} + +[sub_resource type="Animation" id="Animation_klbxu"] +resource_name = "destroy_down" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.049999997, 0.099999994, 0.15, 0.2, 0.25), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2), +"update": 1, +"values": [18, 19, 20, 11, 9, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -22), Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020354, 0, 1), Color(1, 1, 1, 1), Color(0.91764706, 0.07058824, 0, 0)] +} +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_5ctnu") +}], +"times": PackedFloat32Array(0) +} +tracks/3/use_blend = true +tracks/4/type = "audio" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("audio") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("5_knvw0") +}], +"times": PackedFloat32Array(0.05) +} +tracks/4/use_blend = true +tracks/5/type = "animation" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("destroy_effect_sprite/AnimationPlayer") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"clips": PackedStringArray("destroy"), +"times": PackedFloat32Array(0) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("shadow_sprite:modulate") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216), Color(0.6156863, 0.36862746, 0.12156863, 0)] +} + +[sub_resource type="Animation" id="Animation_im24l"] +resource_name = "destroy_side" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.049999997, 0.099999994, 0.15, 0.2, 0.25), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2), +"update": 1, +"values": [24, 25, 26, 17, 15, 24] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -22), Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1), Color(0.91764706, 0.07058824, 0, 0)] +} +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_5ctnu") +}], +"times": PackedFloat32Array(0) +} +tracks/3/use_blend = true +tracks/4/type = "audio" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("audio") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("5_knvw0") +}], +"times": PackedFloat32Array(0.05) +} +tracks/4/use_blend = true +tracks/5/type = "animation" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("destroy_effect_sprite/AnimationPlayer") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"clips": PackedStringArray("destroy"), +"times": PackedFloat32Array(0) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("shadow_sprite:modulate") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216), Color(0.6156863, 0.36862746, 0.12156863, 0)] +} + +[sub_resource type="Animation" id="Animation_mwtj1"] +resource_name = "destroy_up" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.049999997, 0.099999994, 0.15, 0.2, 0.25), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2), +"update": 1, +"values": [21, 22, 23, 14, 12, 21] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -22), Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1), Color(0.91764706, 0.07058824, 0, 0)] +} +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_5ctnu") +}], +"times": PackedFloat32Array(0) +} +tracks/3/use_blend = true +tracks/4/type = "audio" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("audio") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("5_knvw0") +}], +"times": PackedFloat32Array(0.05) +} +tracks/4/use_blend = true +tracks/5/type = "animation" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("destroy_effect_sprite/AnimationPlayer") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"clips": PackedStringArray("destroy"), +"times": PackedFloat32Array(0) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("shadow_sprite:modulate") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.61505616, 0.3702431, 0.12079669, 0.8039216), Color(0.6156863, 0.36862746, 0.12156863, 0)] +} + +[sub_resource type="Animation" id="Animation_6326o"] +resource_name = "idle_down" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 1, 2] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -19)] +} + +[sub_resource type="Animation" id="Animation_57eei"] +resource_name = "idle_side" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [6, 7, 8] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -19)] +} + +[sub_resource type="Animation" id="Animation_u2l51"] +resource_name = "idle_up" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [3, 4, 5] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -19)] +} + +[sub_resource type="Animation" id="Animation_kag0e"] +resource_name = "stun_down" +length = 0.3 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.049999997, 0.099999994, 0.15, 0.2, 0.25), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2), +"update": 1, +"values": [18, 19, 20, 11, 9, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -22), Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1)] +} +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_5ctnu") +}], +"times": PackedFloat32Array(0) +} +tracks/3/use_blend = true + +[sub_resource type="Animation" id="Animation_knvw0"] +resource_name = "stun_side" +length = 0.3 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.049999997, 0.099999994, 0.15, 0.2, 0.25), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2), +"update": 1, +"values": [24, 25, 26, 17, 15, 24] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -22), Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1)] +} +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_5ctnu") +}], +"times": PackedFloat32Array(0) +} +tracks/3/use_blend = true + +[sub_resource type="Animation" id="Animation_yuirh"] +resource_name = "stun_up" +length = 0.3 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.049999997, 0.099999994, 0.15, 0.2, 0.25), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2), +"update": 1, +"values": [21, 22, 23, 14, 12, 21] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -22), Vector2(0, -19)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("main_sprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.9182674, 0.07020355, 0, 1), Color(1, 1, 1, 1)] +} +tracks/3/type = "audio" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("audio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_5ctnu") +}], +"times": PackedFloat32Array(0) +} +tracks/3/use_blend = true + +[sub_resource type="Animation" id="Animation_2ui2u"] +resource_name = "walk_down" +length = 0.7 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6666667), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [9, 10, 11, 9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.5, 0.6666667), +"transitions": PackedFloat32Array(-2, -2, -2, -2), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -19), Vector2(0, -23), Vector2(0, -19)] +} + +[sub_resource type="Animation" id="Animation_bkm6f"] +resource_name = "walk_side" +length = 0.7 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6666667), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [15, 16, 17, 15] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.5, 0.6666667), +"transitions": PackedFloat32Array(-2, -2, -2, -2), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -19), Vector2(0, -23), Vector2(0, -19)] +} + +[sub_resource type="Animation" id="Animation_5ctnu"] +resource_name = "walk_up" +length = 0.7 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("main_sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6666667), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [12, 13, 14, 12] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("main_sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.5, 0.6666667), +"transitions": PackedFloat32Array(-2, -2, -2, -2), +"update": 0, +"values": [Vector2(0, -19), Vector2(0, -19), Vector2(0, -23), Vector2(0, -19)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_kag0e"] +_data = { +&"RESET": SubResource("Animation_j284o"), +&"destroy_down": SubResource("Animation_klbxu"), +&"destroy_side": SubResource("Animation_im24l"), +&"destroy_up": SubResource("Animation_mwtj1"), +&"idle_down": SubResource("Animation_6326o"), +&"idle_side": SubResource("Animation_57eei"), +&"idle_up": SubResource("Animation_u2l51"), +&"stun_down": SubResource("Animation_kag0e"), +&"stun_side": SubResource("Animation_knvw0"), +&"stun_up": SubResource("Animation_yuirh"), +&"walk_down": SubResource("Animation_2ui2u"), +&"walk_side": SubResource("Animation_bkm6f"), +&"walk_up": SubResource("Animation_5ctnu") +} + +[sub_resource type="Resource" id="Resource_yu3x6"] +script = ExtResource("11_mwtj1") +item = ExtResource("12_im24l") +max_amount = 4 +metadata/_custom_type_script = "uid://cqeos77b55w5x" + +[sub_resource type="Resource" id="Resource_okhmd"] +script = ExtResource("11_mwtj1") +item = ExtResource("13_im24l") +drop_rate = 33.0 +metadata/_custom_type_script = "uid://cqeos77b55w5x" + +[sub_resource type="CircleShape2D" id="CircleShape2D_5ctnu"] +radius = 13.0 + +[sub_resource type="Animation" id="Animation_v3fw7"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_0oddt"] +resource_name = "destroy" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.2, 0.3, 0.4, 0.5), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3, 4, 5] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_klbxu"] +_data = { +&"RESET": SubResource("Animation_v3fw7"), +&"destroy": SubResource("Animation_0oddt") +} + +[sub_resource type="CircleShape2D" id="CircleShape2D_klbxu"] +radius = 13.0 + +[node name="Slime" type="CharacterBody2D" unique_id=2039155988] +collision_layer = 256 +collision_mask = 16 +script = ExtResource("1_6326o") + +[node name="shadow_sprite" type="Sprite2D" parent="." unique_id=41851023] +modulate = Color(0.61505616, 0.3702431, 0.12079669, 0.8039216) +position = Vector2(0, 2) +texture = ExtResource("1_j284o") + +[node name="main_sprite" type="Sprite2D" parent="." unique_id=2116964596] +position = Vector2(0, -19) +texture = ExtResource("2_6326o") +hframes = 16 +vframes = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=189927216] +rotation = 1.5707964 +shape = SubResource("CapsuleShape2D_j284o") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1867521179] +libraries/ = SubResource("AnimationLibrary_kag0e") + +[node name="enemy_state_machine" type="Node2D" parent="." unique_id=208543397] +script = ExtResource("4_57eei") + +[node name="idle" type="Node2D" parent="enemy_state_machine" unique_id=1109025638 node_paths=PackedStringArray("next_state")] +script = ExtResource("5_u2l51") +next_state = NodePath("../wander") + +[node name="wander" type="Node2D" parent="enemy_state_machine" unique_id=1566208588 node_paths=PackedStringArray("next_state")] +script = ExtResource("6_2ui2u") +next_state = NodePath("../idle") + +[node name="stun" type="Node2D" parent="enemy_state_machine" unique_id=1564475499 node_paths=PackedStringArray("next_state")] +script = ExtResource("9_v3fw7") +next_state = NodePath("../idle") + +[node name="destroy" type="Node2D" parent="enemy_state_machine" unique_id=569812721] +script = ExtResource("10_0oddt") +drops = Array[ExtResource("11_mwtj1")]([SubResource("Resource_yu3x6"), SubResource("Resource_okhmd")]) + +[node name="Hurtbox" parent="." unique_id=38213362 instance=ExtResource("7_bkm6f")] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox" unique_id=378145594] +position = Vector2(0, -7) +shape = SubResource("CircleShape2D_5ctnu") +debug_color = Color(0.6581531, 0.51457477, 0.100101404, 0.41960785) + +[node name="audio" type="AudioStreamPlayer2D" parent="." unique_id=1148905292] +max_polyphony = 4 + +[node name="destroy_effect_sprite" type="Sprite2D" parent="." unique_id=837975864] +visible = false +position = Vector2(0, -9) +texture = ExtResource("9_kag0e") +hframes = 6 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="destroy_effect_sprite" unique_id=1538706478] +libraries/ = SubResource("AnimationLibrary_klbxu") + +[node name="Hitbox" parent="." unique_id=1876591880 instance=ExtResource("12_0oddt")] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox" unique_id=708724179] +position = Vector2(0, -7) +shape = SubResource("CircleShape2D_klbxu") +debug_color = Color(0.84817815, 0.37813845, 0, 0.41960785) diff --git a/enemies/vision_area.tscn b/enemies/vision_area.tscn new file mode 100644 index 0000000..40a9a49 --- /dev/null +++ b/enemies/vision_area.tscn @@ -0,0 +1,8 @@ +[gd_scene format=3 uid="uid://4bv0pi2yn5es"] + +[ext_resource type="Script" uid="uid://dumobb6c7eybb" path="res://enemies/scripts/vision_area.gd" id="1_t1srl"] + +[node name="VisionArea" type="Area2D" unique_id=2078416065] +collision_layer = 0 +monitorable = false +script = ExtResource("1_t1srl") diff --git a/general/enemy_counter/enemy_counter.gd b/general/enemy_counter/enemy_counter.gd new file mode 100644 index 0000000..3317896 --- /dev/null +++ b/general/enemy_counter/enemy_counter.gd @@ -0,0 +1,20 @@ +class_name EnemyCounter extends Node2D + +signal enemies_defeated + +func _ready() -> void: + child_exiting_tree.connect(on_enemy_destroyed) + pass + +func on_enemy_destroyed(node: Node2D) -> void: + if node is Enemy and enemy_count() <= 1: + enemies_defeated.emit() + print("ENEMIES DEFEATED") + +func enemy_count() -> int: + var count := 0 + for child in get_children(): + if child is Enemy: + count += 1 + return count + diff --git a/general/enemy_counter/enemy_counter.gd.uid b/general/enemy_counter/enemy_counter.gd.uid new file mode 100644 index 0000000..146f443 --- /dev/null +++ b/general/enemy_counter/enemy_counter.gd.uid @@ -0,0 +1 @@ +uid://bxyv7orhs7xw2 diff --git a/general/enemy_counter/enemy_counter.tscn b/general/enemy_counter/enemy_counter.tscn new file mode 100644 index 0000000..4b2151b --- /dev/null +++ b/general/enemy_counter/enemy_counter.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://s54xni3yvek5"] + +[ext_resource type="Script" uid="uid://bxyv7orhs7xw2" path="res://general/enemy_counter/enemy_counter.gd" id="1_6ymjw"] + +[node name="EnemyCounter" type="Node2D" unique_id=1225445185] +script = ExtResource("1_6ymjw") diff --git a/general/hitbox/hitbox.gd b/general/hitbox/hitbox.gd new file mode 100644 index 0000000..f9d9b4f --- /dev/null +++ b/general/hitbox/hitbox.gd @@ -0,0 +1,13 @@ +class_name Hitbox extends Area2D + +signal damaged(hurtbox: Hurtbox) + +func _ready() -> void: + pass # Replace with function body. + + +func _process(_delta: float) -> void: + pass + +func take_damage(hurtbox: Hurtbox) -> void: + damaged.emit(hurtbox) diff --git a/general/hitbox/hitbox.gd.uid b/general/hitbox/hitbox.gd.uid new file mode 100644 index 0000000..f394c44 --- /dev/null +++ b/general/hitbox/hitbox.gd.uid @@ -0,0 +1 @@ +uid://cmdjqh873unve diff --git a/general/hitbox/hitbox.tscn b/general/hitbox/hitbox.tscn new file mode 100644 index 0000000..c12b788 --- /dev/null +++ b/general/hitbox/hitbox.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://cda6fr5vhb4ty"] + +[ext_resource type="Script" uid="uid://cmdjqh873unve" path="res://general/hitbox/hitbox.gd" id="1_4tnmp"] + +[node name="Hitbox" type="Area2D" unique_id=1876591880] +collision_layer = 256 +collision_mask = 0 +monitoring = false +script = ExtResource("1_4tnmp") diff --git a/general/hurtbox/hurtbox.gd b/general/hurtbox/hurtbox.gd new file mode 100644 index 0000000..21e97e5 --- /dev/null +++ b/general/hurtbox/hurtbox.gd @@ -0,0 +1,13 @@ +class_name Hurtbox extends Area2D + +@export var damage: int = 1 + +func _ready() -> void: + area_entered.connect(hurtbox_entered) + +func _process(_delta: float) -> void: + pass + +func hurtbox_entered(area: Area2D) -> void: + if area is Hitbox: + area.take_damage(self) diff --git a/general/hurtbox/hurtbox.gd.uid b/general/hurtbox/hurtbox.gd.uid new file mode 100644 index 0000000..44e06d9 --- /dev/null +++ b/general/hurtbox/hurtbox.gd.uid @@ -0,0 +1 @@ +uid://c0fmav64y2rrk diff --git a/general/hurtbox/hurtbox.tscn b/general/hurtbox/hurtbox.tscn new file mode 100644 index 0000000..7bf70ec --- /dev/null +++ b/general/hurtbox/hurtbox.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://mwyvk4gke34"] + +[ext_resource type="Script" uid="uid://c0fmav64y2rrk" path="res://general/hurtbox/hurtbox.gd" id="1_85hd5"] + +[node name="Hurtbox" type="Area2D" unique_id=38213362] +collision_layer = 0 +collision_mask = 2 +monitorable = false +script = ExtResource("1_85hd5") diff --git a/general/item-dropper/dungeon_discovery.wav b/general/item-dropper/dungeon_discovery.wav new file mode 100644 index 0000000..3b3c1ad Binary files /dev/null and b/general/item-dropper/dungeon_discovery.wav differ diff --git a/general/item-dropper/dungeon_discovery.wav.import b/general/item-dropper/dungeon_discovery.wav.import new file mode 100644 index 0000000..f2e36c4 --- /dev/null +++ b/general/item-dropper/dungeon_discovery.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b7nup12qxtlh" +path="res://.godot/imported/dungeon_discovery.wav-41484ca4e230435a886c5306ceaade95.sample" + +[deps] + +source_file="res://general/item-dropper/dungeon_discovery.wav" +dest_files=["res://.godot/imported/dungeon_discovery.wav-41484ca4e230435a886c5306ceaade95.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/general/item-dropper/item_dropper.gd b/general/item-dropper/item_dropper.gd new file mode 100644 index 0000000..2e2ca2d --- /dev/null +++ b/general/item-dropper/item_dropper.gd @@ -0,0 +1,46 @@ +@tool +class_name ItemDropper extends Node2D + +const PICKUP = preload("res://items/item_pickup/item_pickup.tscn") + +@export var item: ItemData : set = set_item_data + +@onready var sprite: Sprite2D = $Sprite2D +@onready var dropped_data: PersistentDataHandler = $PersistentDataHandler +@onready var audio: AudioStreamPlayer = $AudioStreamPlayer + +var dropped := false + +func _ready() -> void: + if Engine.is_editor_hint(): + update_texture() + return + sprite.visible = false + dropped_data.data_loaded.connect(on_data_loaded) + on_data_loaded() + +func set_item_data(new_item: ItemData) -> void: + item = new_item + update_texture() + +func update_texture() -> void: + if !Engine.is_editor_hint(): + return + if item and sprite: + sprite.texture = item.texture + +func on_data_loaded() -> void: + dropped = dropped_data.value + +func drop_item() -> void: + if dropped: + return + dropped = true + var drop = PICKUP.instantiate() as ItemPickup + drop.item_data = item + add_child(drop) + drop.picked_up.connect(on_item_picked_up) + audio.play() + +func on_item_picked_up() -> void: + dropped_data.set_value() diff --git a/general/item-dropper/item_dropper.gd.uid b/general/item-dropper/item_dropper.gd.uid new file mode 100644 index 0000000..a63de5b --- /dev/null +++ b/general/item-dropper/item_dropper.gd.uid @@ -0,0 +1 @@ +uid://ce3vhcig6dc4p diff --git a/general/item-dropper/item_dropper.tscn b/general/item-dropper/item_dropper.tscn new file mode 100644 index 0000000..2c124ac --- /dev/null +++ b/general/item-dropper/item_dropper.tscn @@ -0,0 +1,26 @@ +[gd_scene format=3 uid="uid://q756h6ku2kjn"] + +[ext_resource type="Script" uid="uid://ce3vhcig6dc4p" path="res://general/item-dropper/item_dropper.gd" id="1_yo2da"] +[ext_resource type="Script" uid="uid://bej7822ail7o" path="res://general/persistent_data/persistent_data_handler.gd" id="2_syr8l"] +[ext_resource type="AudioStream" uid="uid://b7nup12qxtlh" path="res://general/item-dropper/dungeon_discovery.wav" id="2_u0i1k"] + +[node name="ItemDropper" type="Node2D" unique_id=1807553228] +script = ExtResource("1_yo2da") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1635927483] + +[node name="Label" type="Label" parent="Sprite2D" unique_id=423753573] +offset_left = -40.0 +offset_top = -24.0 +offset_right = 43.0 +offset_bottom = -1.0 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 6 +text = "Item Drop " + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=855210117] +stream = ExtResource("2_u0i1k") + +[node name="PersistentDataHandler" type="Node" parent="." unique_id=213983155] +script = ExtResource("2_syr8l") +metadata/_custom_type_script = "uid://bej7822ail7o" diff --git a/general/persistent_data/persistent_data_handler.gd b/general/persistent_data/persistent_data_handler.gd new file mode 100644 index 0000000..89ac4d0 --- /dev/null +++ b/general/persistent_data/persistent_data_handler.gd @@ -0,0 +1,18 @@ +class_name PersistentDataHandler extends Node + +signal data_loaded + +var value := false + +func _ready() -> void: + get_value() + +func set_value() -> void: + SaveManager.add_persistent_value(get_data_name()) + +func get_value() -> void: + value = SaveManager.check_persistent_value(get_data_name()) + data_loaded.emit() + +func get_data_name() -> String: + return "%s/%s/%s" % [get_tree().current_scene.scene_file_path, get_parent().name, name] diff --git a/general/persistent_data/persistent_data_handler.gd.uid b/general/persistent_data/persistent_data_handler.gd.uid new file mode 100644 index 0000000..497462f --- /dev/null +++ b/general/persistent_data/persistent_data_handler.gd.uid @@ -0,0 +1 @@ +uid://bej7822ail7o diff --git a/general/persistent_data/persistent_data_handler.tscn b/general/persistent_data/persistent_data_handler.tscn new file mode 100644 index 0000000..7acbb4e --- /dev/null +++ b/general/persistent_data/persistent_data_handler.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://dqwuowiyehr7d"] + +[ext_resource type="Script" uid="uid://bej7822ail7o" path="res://general/persistent_data/persistent_data_handler.gd" id="1_72b1k"] + +[node name="PersistentDataHandler" type="Node" unique_id=843808896] +script = ExtResource("1_72b1k") diff --git a/globals/global_level_manager.gd b/globals/global_level_manager.gd new file mode 100644 index 0000000..d1186ef --- /dev/null +++ b/globals/global_level_manager.gd @@ -0,0 +1,34 @@ +extends Node + +signal level_load_started +signal level_loaded +signal Tilemap_boudns_change(bounds: Array[Vector2]) +var current_tilemap_bounds: Array[Vector2] +var target_transition: String +var position_offset: Vector2 + +func _ready() -> void: + await get_tree().process_frame + level_loaded.emit() + +func change_tilemap_bounds(bounds: Array[Vector2]) -> void: + current_tilemap_bounds = bounds + Tilemap_boudns_change.emit(bounds) + +func load_new_level( + level_path: String, + new_target_transition: String, + new_position_offset: Vector2 +) -> void: + get_tree().paused = true + target_transition = new_target_transition + position_offset = new_position_offset + var tree = get_tree() + await SceneTransition.fade_out() + level_load_started.emit() + await SceneTransition.fade_in() + tree.change_scene_to_file(level_path) + await tree.process_frame + tree.paused = false + await tree.process_frame + level_loaded.emit() diff --git a/globals/global_level_manager.gd.uid b/globals/global_level_manager.gd.uid new file mode 100644 index 0000000..1e0e44b --- /dev/null +++ b/globals/global_level_manager.gd.uid @@ -0,0 +1 @@ +uid://d1yritt1yngf1 diff --git a/globals/global_player_manager.gd b/globals/global_player_manager.gd new file mode 100644 index 0000000..dc74c82 --- /dev/null +++ b/globals/global_player_manager.gd @@ -0,0 +1,35 @@ +extends Node + +const PLAYER = preload("res://player/player.tscn") +const INVENTORY_DATA: InventoryData = preload("res://gui/pause/inventory/player_inventory.tres") + +signal interact_pressed + +var player: Player +var player_spawned: bool = false + +func _ready() -> void: + add_player_instance() + await get_tree().create_timer(0.2).timeout + player_spawned = true + +func add_player_instance() -> void: + player = PLAYER.instantiate() + add_child(player) + +func set_player_position(new_pos: Vector2) -> void: + player.global_position = new_pos + +func set_as_parent(node: Node2D) -> void: + var players_parent = player.get_parent() + if players_parent: + players_parent.remove_child(player) + node.add_child(player) + +func unparent_player(node: Node2D) -> void: + node.remove_child(player) + +func set_health(hp: int, max_hp: int) -> void: + PlayerManager.player.maxHp = max_hp + PlayerManager.player.hp = hp + PlayerManager.player.update_hp(0) diff --git a/globals/global_player_manager.gd.uid b/globals/global_player_manager.gd.uid new file mode 100644 index 0000000..f597632 --- /dev/null +++ b/globals/global_player_manager.gd.uid @@ -0,0 +1 @@ +uid://dcqwe4meucgrn diff --git a/globals/global_save_manager.gd b/globals/global_save_manager.gd new file mode 100644 index 0000000..618e1a2 --- /dev/null +++ b/globals/global_save_manager.gd @@ -0,0 +1,74 @@ +extends Node + +const SAVE_PATH := "user://" + +signal game_loaded +signal game_saved + +var current_save := { + scene_path = "", + player = { + hp = 1, + max_hp = 1, + pos_x = 0, + pos_y = 0 + }, + items = [], + persistence = [], + quests = [], +} + +func save_game() -> void: + update_player_data() + update_scene_path() + update_item_data() + write_save(JSON.stringify(current_save)) + game_saved.emit() + +func load_game() -> void: + current_save = read_save() + + LevelManager.load_new_level(current_save.scene_path, "", Vector2.ZERO) + await LevelManager.level_load_started + PlayerManager.set_player_position(Vector2(current_save.player.pos_x, current_save.player.pos_y)) + PlayerManager.set_health(current_save.player.hp, current_save.player.max_hp) + PlayerManager.INVENTORY_DATA.load_save_date(current_save.items) + await LevelManager.level_loaded + game_loaded.emit() + + +func update_player_data() -> void: + var player := PlayerManager.player + current_save.player.hp = player.hp + current_save.player.max_hp = player.maxHp + current_save.player.pos_x = player.global_position.x + current_save.player.pos_y = player.global_position.y + +func update_scene_path() -> void: + var path := "" + for child in get_tree().root.get_children(): + if child is Level: + path = child.scene_file_path + current_save.scene_path = path + +func write_save(content: String) -> void: + var file := FileAccess.open(SAVE_PATH + "save.sav", FileAccess.WRITE) + file.store_line(content) + +func read_save() -> Dictionary: + var file := FileAccess.open(SAVE_PATH + "save.sav", FileAccess.READ) + var json = JSON.new() + json.parse(file.get_line()) + return json.get_data() as Dictionary + +func update_item_data() -> void: + current_save.items = PlayerManager.INVENTORY_DATA.get_save_data() + +func add_persistent_value(value: String) -> void: + if check_persistent_value(value): + return + current_save.persistence.append(value) + +func check_persistent_value(value: String) -> bool: + var persistent_data := current_save.persistence as Array + return persistent_data.has(value) diff --git a/globals/global_save_manager.gd.uid b/globals/global_save_manager.gd.uid new file mode 100644 index 0000000..0284556 --- /dev/null +++ b/globals/global_save_manager.gd.uid @@ -0,0 +1 @@ +uid://c547xrdujao7w diff --git a/gui/hud/gui-health.png b/gui/hud/gui-health.png new file mode 100644 index 0000000..43cc832 Binary files /dev/null and b/gui/hud/gui-health.png differ diff --git a/gui/hud/gui-health.png.import b/gui/hud/gui-health.png.import new file mode 100644 index 0000000..56aecf8 --- /dev/null +++ b/gui/hud/gui-health.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csf8yqiq5fs5n" +path="res://.godot/imported/gui-health.png-d93a49566652243a8143d8e668d232ff.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://gui/hud/gui-health.png" +dest_files=["res://.godot/imported/gui-health.png-d93a49566652243a8143d8e668d232ff.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/gui/hud/heart.gd b/gui/hud/heart.gd new file mode 100644 index 0000000..83240bd --- /dev/null +++ b/gui/hud/heart.gd @@ -0,0 +1,11 @@ +class_name HeartGUI extends Control + +@onready var sprite: Sprite2D = $HeartSprite + +var value: int = 2 : + set(_value): + value = _value + update_sprite() + +func update_sprite() -> void: + sprite.frame = value diff --git a/gui/hud/heart.gd.uid b/gui/hud/heart.gd.uid new file mode 100644 index 0000000..011a537 --- /dev/null +++ b/gui/hud/heart.gd.uid @@ -0,0 +1 @@ +uid://bacc4v8q6cvlb diff --git a/gui/hud/heart.tscn b/gui/hud/heart.tscn new file mode 100644 index 0000000..1bb9e30 --- /dev/null +++ b/gui/hud/heart.tscn @@ -0,0 +1,17 @@ +[gd_scene format=3 uid="uid://bpe1y2o6gsmlv"] + +[ext_resource type="Script" uid="uid://bacc4v8q6cvlb" path="res://gui/hud/heart.gd" id="1_5rmhy"] +[ext_resource type="Texture2D" uid="uid://csf8yqiq5fs5n" path="res://gui/hud/gui-health.png" id="1_7gnmf"] + +[node name="Heart" type="Control" unique_id=1010364190] +visible = false +custom_minimum_size = Vector2(9, 0) +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_5rmhy") + +[node name="HeartSprite" type="Sprite2D" parent="." unique_id=424664538] +texture = ExtResource("1_7gnmf") +centered = false +hframes = 7 +vframes = 2 diff --git a/gui/hud/hud.gd b/gui/hud/hud.gd new file mode 100644 index 0000000..88ea529 --- /dev/null +++ b/gui/hud/hud.gd @@ -0,0 +1,22 @@ +extends CanvasLayer + +var hearts: Array[HeartGUI] = [] + +func _ready() -> void: + for child in $control/HFlowContainer.get_children(): + if child is HeartGUI: + hearts.append(child) + child.visible = false + +func update_hp(hp: int, max_hp: int) -> void: + update_max_hp(max_hp) + for i in max_hp: + update_heart(i, hp) + +func update_heart(index: int, hp: int) -> void: + hearts[index].value = clampi(hp - index * 2, 0, 2) + +func update_max_hp(max_hp: int) -> void: + var heart_count: int = roundi(max_hp * 0.5) + for i in hearts.size(): + hearts[i].visible = i < heart_count diff --git a/gui/hud/hud.gd.uid b/gui/hud/hud.gd.uid new file mode 100644 index 0000000..3c08b61 --- /dev/null +++ b/gui/hud/hud.gd.uid @@ -0,0 +1 @@ +uid://cvupqrfocd635 diff --git a/gui/hud/hud.tscn b/gui/hud/hud.tscn new file mode 100644 index 0000000..2e16513 --- /dev/null +++ b/gui/hud/hud.tscn @@ -0,0 +1,94 @@ +[gd_scene format=3 uid="uid://dwon5dsqxao56"] + +[ext_resource type="Texture2D" uid="uid://csf8yqiq5fs5n" path="res://gui/hud/gui-health.png" id="1_4w87a"] +[ext_resource type="Script" uid="uid://cvupqrfocd635" path="res://gui/hud/hud.gd" id="1_rllpj"] +[ext_resource type="PackedScene" uid="uid://bpe1y2o6gsmlv" path="res://gui/hud/heart.tscn" id="2_rllpj"] + +[node name="hud" type="CanvasLayer" unique_id=256487066] +layer = 2 +script = ExtResource("1_rllpj") + +[node name="control" type="Control" parent="." unique_id=1112650233] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="health_sprite" type="Sprite2D" parent="control" unique_id=1001694164] +position = Vector2(387, 9) +texture = ExtResource("1_4w87a") +region_enabled = true +region_rect = Rect2(30, 0, 33, 8) + +[node name="HFlowContainer" type="HFlowContainer" parent="control" unique_id=1403418063] +layout_mode = 0 +offset_left = 322.0 +offset_top = 17.0 +offset_right = 452.0 +offset_bottom = 50.0 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 2 +alignment = 1 + +[node name="Heart" parent="control/HFlowContainer" unique_id=1010364190 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart2" parent="control/HFlowContainer" unique_id=1093190859 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart3" parent="control/HFlowContainer" unique_id=2139127460 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart4" parent="control/HFlowContainer" unique_id=2098524055 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart5" parent="control/HFlowContainer" unique_id=784572064 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart6" parent="control/HFlowContainer" unique_id=1170384884 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart7" parent="control/HFlowContainer" unique_id=488907353 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart8" parent="control/HFlowContainer" unique_id=2092404839 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart9" parent="control/HFlowContainer" unique_id=642254142 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart10" parent="control/HFlowContainer" unique_id=1150287437 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart11" parent="control/HFlowContainer" unique_id=1332044652 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart12" parent="control/HFlowContainer" unique_id=1873062161 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart13" parent="control/HFlowContainer" unique_id=809306772 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart14" parent="control/HFlowContainer" unique_id=1383244089 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart15" parent="control/HFlowContainer" unique_id=749427884 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart16" parent="control/HFlowContainer" unique_id=1553915001 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart17" parent="control/HFlowContainer" unique_id=432065662 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart18" parent="control/HFlowContainer" unique_id=21663377 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart19" parent="control/HFlowContainer" unique_id=1650662833 instance=ExtResource("2_rllpj")] +layout_mode = 2 + +[node name="Heart20" parent="control/HFlowContainer" unique_id=705981093 instance=ExtResource("2_rllpj")] +layout_mode = 2 diff --git a/gui/pause/inventory/inventory_slot.tscn b/gui/pause/inventory/inventory_slot.tscn new file mode 100644 index 0000000..9352a4c --- /dev/null +++ b/gui/pause/inventory/inventory_slot.tscn @@ -0,0 +1,29 @@ +[gd_scene format=3 uid="uid://b2r6mp7h13pak"] + +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="1_gwc7x"] +[ext_resource type="Script" uid="uid://cvbri6j1mbq07" path="res://gui/pause/inventory/scripts/inventory_slot_ui.gd" id="1_s0lov"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_s0lov"] +atlas = ExtResource("1_gwc7x") +region = Rect2(0, 0, 32, 32) + +[node name="InventorySlot" type="Button" unique_id=823052233] +custom_minimum_size = Vector2(32, 32) +offset_right = 32.0 +offset_bottom = 32.0 +script = ExtResource("1_s0lov") + +[node name="TextureRect" type="TextureRect" parent="." unique_id=469228245] +layout_mode = 0 +offset_right = 32.0 +offset_bottom = 32.0 +texture = SubResource("AtlasTexture_s0lov") +stretch_mode = 3 + +[node name="Label" type="Label" parent="." unique_id=385106309] +layout_mode = 0 +offset_right = 32.0 +offset_bottom = 16.0 +theme_override_font_sizes/font_size = 8 +text = "99" +horizontal_alignment = 2 diff --git a/gui/pause/inventory/player_inventory.tres b/gui/pause/inventory/player_inventory.tres new file mode 100644 index 0000000..087cfeb --- /dev/null +++ b/gui/pause/inventory/player_inventory.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="InventoryData" format=3 uid="uid://8eo5dhh10mag"] + +[ext_resource type="Script" uid="uid://b6ol0ja8441tv" path="res://gui/pause/inventory/scripts/inventory_data.gd" id="1_i443n"] +[ext_resource type="Script" uid="uid://d0boqgd4kawwt" path="res://gui/pause/inventory/scripts/slot_data.gd" id="2_pk4bu"] + +[resource] +script = ExtResource("1_i443n") +slots = Array[ExtResource("2_pk4bu")]([null, null, null, null, null, null, null, null, null, null]) +metadata/_custom_type_script = "uid://b6ol0ja8441tv" diff --git a/gui/pause/inventory/scripts/inventory_data.gd b/gui/pause/inventory/scripts/inventory_data.gd new file mode 100644 index 0000000..62e6fac --- /dev/null +++ b/gui/pause/inventory/scripts/inventory_data.gd @@ -0,0 +1,88 @@ +class_name InventoryData extends Resource + +@export var slots: Array[SlotData] + +func _init() -> void: + connect_slots() + +func add_item(item: ItemData, count := 1) -> bool: + var slot = get_slot_by_item(item) + if slot: + slot.quantity += count + return true + var empty_slot_index = get_empty_slot_index() + if empty_slot_index > -1: + var new_slot = SlotData.new() + new_slot.item_data = item + new_slot.quantity = count + slots[empty_slot_index] = new_slot + new_slot.changed.connect(on_slot_changed) + return true + print("inventory full") + return false + +func get_slot_by_item(item: ItemData) -> SlotData: + var index = slots.find_custom(func(slot: SlotData): return slot != null and slot.item_data == item) + if index > -1: + return slots[index] + return null + +func get_empty_slot_index() -> int: + return slots.find_custom(func(slot: SlotData): return !slot) + +func get_valid_slots() -> Array[SlotData]: + return slots.filter(func(slot: SlotData): return slot); + +func connect_slots() -> void: + for slot: SlotData in get_valid_slots(): + slot.changed.connect(on_slot_changed) + +func on_slot_changed() -> void: + for slot_index in slots.size(): + var slot: SlotData = slots[slot_index] + if slot and slot.quantity < 1: + slot.changed.disconnect(on_slot_changed) + slots[slot_index] = null + emit_changed() + +func get_save_data() -> Array: + var item_save := [] + for slot in slots: + item_save.append(item_to_save(slot)) + return item_save + +func item_to_save(slot: SlotData) -> Dictionary: + var result := { + item = "", + quantity = 0 + } + if !slot: + return result + result.quantity = slot.quantity + if !slot.item_data: + return result + result.item = slot.item_data.resource_path + return result + +func load_save_date(save_data: Array) -> void: + var slots_size = slots.size() + slots.clear() + slots.resize(slots_size) + for save_index in save_data.size(): + slots[save_index] = save_to_item(save_data[save_index]) + connect_slots() + +func save_to_item(save_item: Dictionary) -> SlotData: + if save_item.item == "": + return null + var new_slot := SlotData.new() + new_slot.item_data = load(save_item.item) + new_slot.quantity = int(save_item.quantity) + return new_slot + +func use_item(item: ItemData, count := 1) -> bool: + for slot in slots: + if slot and slot.item_data == item and slot.quantity >= count: + slot.quantity -= count + return true + return false diff --git a/gui/pause/inventory/scripts/inventory_data.gd.uid b/gui/pause/inventory/scripts/inventory_data.gd.uid new file mode 100644 index 0000000..d6fcafb --- /dev/null +++ b/gui/pause/inventory/scripts/inventory_data.gd.uid @@ -0,0 +1 @@ +uid://b6ol0ja8441tv diff --git a/gui/pause/inventory/scripts/inventory_slot_ui.gd b/gui/pause/inventory/scripts/inventory_slot_ui.gd new file mode 100644 index 0000000..658655d --- /dev/null +++ b/gui/pause/inventory/scripts/inventory_slot_ui.gd @@ -0,0 +1,38 @@ +class_name InventorySlotUi extends Button + +var slot_data: SlotData : + set = set_slot_data + +@onready var texture_rect: TextureRect = $TextureRect +@onready var label: Label = $Label + +func _ready() -> void: + texture_rect.texture = null + label.text = "" + focus_entered.connect(on_item_focus) + focus_exited.connect(on_item_unfocus) + pressed.connect(item_pressed) + +func set_slot_data(value: SlotData) -> void: + slot_data = value + if slot_data == null: + return + texture_rect.texture = slot_data.item_data.texture + label.text = str(slot_data.quantity) + +func on_item_focus() -> void: + if slot_data == null or slot_data.item_data == null: + return + PauseMenu.update_item_description(slot_data.item_data.description) + +func on_item_unfocus() -> void: + PauseMenu.update_item_description("") + pass + +func item_pressed() -> void: + if !slot_data or !slot_data.item_data: + return + if !slot_data.item_data.use(): + return + slot_data.quantity -= 1 + label.text = str(slot_data.quantity) diff --git a/gui/pause/inventory/scripts/inventory_slot_ui.gd.uid b/gui/pause/inventory/scripts/inventory_slot_ui.gd.uid new file mode 100644 index 0000000..006e843 --- /dev/null +++ b/gui/pause/inventory/scripts/inventory_slot_ui.gd.uid @@ -0,0 +1 @@ +uid://cvbri6j1mbq07 diff --git a/gui/pause/inventory/scripts/inventory_ui.gd b/gui/pause/inventory/scripts/inventory_ui.gd new file mode 100644 index 0000000..46752fe --- /dev/null +++ b/gui/pause/inventory/scripts/inventory_ui.gd @@ -0,0 +1,37 @@ +class_name InventoryUi extends Control + +const INVENTORY_SLOT = preload("res://gui/pause/inventory/inventory_slot.tscn") + +@export var data: InventoryData + +var focus_index := 1 + +func _ready() -> void: + PauseMenu.shown.connect(update) + PauseMenu.hidden.connect(clear) + clear() + data.changed.connect(on_inventory_changed) + +func clear() -> void: + for child in get_children(): + child.queue_free() + +func update() -> void: + for slot in data.slots: + var new_slot = INVENTORY_SLOT.instantiate() + add_child(new_slot) + new_slot.slot_data = slot + new_slot.focus_entered.connect(on_item_focused) + if !data.slots.is_empty(): + await get_tree().process_frame + get_child(focus_index).grab_focus() + +func on_inventory_changed() -> void: + clear() + update() + +func on_item_focused() -> void: + for child_index in get_child_count(): + if get_child(child_index).has_focus(): + focus_index = child_index + return diff --git a/gui/pause/inventory/scripts/inventory_ui.gd.uid b/gui/pause/inventory/scripts/inventory_ui.gd.uid new file mode 100644 index 0000000..0581204 --- /dev/null +++ b/gui/pause/inventory/scripts/inventory_ui.gd.uid @@ -0,0 +1 @@ +uid://b7a5u5kcishd4 diff --git a/gui/pause/inventory/scripts/slot_data.gd b/gui/pause/inventory/scripts/slot_data.gd new file mode 100644 index 0000000..48b3c2a --- /dev/null +++ b/gui/pause/inventory/scripts/slot_data.gd @@ -0,0 +1,9 @@ +class_name SlotData extends Resource + +@export var item_data: ItemData +@export var quantity := 0 : set = set_quantity + +func set_quantity(new_quantity: int) -> void: + quantity = new_quantity + if quantity < 1: + emit_changed() diff --git a/gui/pause/inventory/scripts/slot_data.gd.uid b/gui/pause/inventory/scripts/slot_data.gd.uid new file mode 100644 index 0000000..add0699 --- /dev/null +++ b/gui/pause/inventory/scripts/slot_data.gd.uid @@ -0,0 +1 @@ +uid://d0boqgd4kawwt diff --git a/gui/pause/pause.gd b/gui/pause/pause.gd new file mode 100644 index 0000000..a75f1c3 --- /dev/null +++ b/gui/pause/pause.gd @@ -0,0 +1,56 @@ +extends CanvasLayer + +signal shown +signal hidden + +@onready var save_button: Button = $Control/HBoxContainer/Save +@onready var load_button: Button = $Control/HBoxContainer/Load +@onready var item_description: Label = $Control/ItemDescription +@onready var audio_player: AudioStreamPlayer = $Control/AudioStreamPlayer + +var is_paused := false + +func _ready() -> void: + hide_pause() + save_button.pressed.connect(on_save) + load_button.pressed.connect(on_load) + +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed("pause"): + if !is_paused: + show_pause() + else: + hide_pause() + get_viewport().set_input_as_handled() + +func show_pause() -> void: + get_tree().paused = true + visible = true + is_paused = true + shown.emit() + +func hide_pause() -> void: + get_tree().paused = false + visible = false + is_paused = false + hidden.emit() + +func on_save() -> void: + if !is_paused: + return + SaveManager.save_game() + hide_pause() + +func on_load() -> void: + if !is_paused: + return + SaveManager.load_game() + await LevelManager.level_load_started + hide_pause() + +func update_item_description(new_description: String) -> void: + item_description.text = new_description + +func play_audio(audio: AudioStream) -> void: + audio_player.stream = audio + audio_player.play() diff --git a/gui/pause/pause.gd.uid b/gui/pause/pause.gd.uid new file mode 100644 index 0000000..0ef9ea4 --- /dev/null +++ b/gui/pause/pause.gd.uid @@ -0,0 +1 @@ +uid://dg1igfflunr7n diff --git a/gui/pause/pause.tscn b/gui/pause/pause.tscn new file mode 100644 index 0000000..6a0d0fb --- /dev/null +++ b/gui/pause/pause.tscn @@ -0,0 +1,116 @@ +[gd_scene format=3 uid="uid://dr37gne0tsx3h"] + +[ext_resource type="Script" uid="uid://dg1igfflunr7n" path="res://gui/pause/pause.gd" id="1_syqp4"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="2_3oqg8"] +[ext_resource type="PackedScene" uid="uid://b2r6mp7h13pak" path="res://gui/pause/inventory/inventory_slot.tscn" id="3_ev3e7"] +[ext_resource type="Script" uid="uid://b7a5u5kcishd4" path="res://gui/pause/inventory/scripts/inventory_ui.gd" id="3_g4auy"] +[ext_resource type="Resource" uid="uid://8eo5dhh10mag" path="res://gui/pause/inventory/player_inventory.tres" id="4_nr23h"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_ev3e7"] +atlas = ExtResource("2_3oqg8") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_g4auy"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +texture = SubResource("AtlasTexture_ev3e7") +texture_margin_left = 14.0 +texture_margin_top = 14.0 +texture_margin_right = 14.0 +texture_margin_bottom = 14.0 + +[node name="Pause" type="CanvasLayer" unique_id=61680245] +process_mode = 3 +script = ExtResource("1_syqp4") + +[node name="Control" type="Control" parent="." unique_id=220122734] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="Control" unique_id=131716919] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.23392546, 0.23392546, 0.2339254, 0.61960787) + +[node name="HBoxContainer" type="HBoxContainer" parent="Control" unique_id=1624860206] +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -31.0 +offset_right = 154.0 +grow_vertical = 0 +size_flags_horizontal = 0 +size_flags_vertical = 8 + +[node name="Save" type="Button" parent="Control/HBoxContainer" unique_id=1562812412] +custom_minimum_size = Vector2(75, 0) +layout_mode = 2 +text = "Save" + +[node name="Load" type="Button" parent="Control/HBoxContainer" unique_id=673890119] +custom_minimum_size = Vector2(75, 0) +layout_mode = 2 +text = "Load" + +[node name="Label" type="Label" parent="Control" unique_id=631151135] +layout_mode = 1 +offset_right = 80.0 +offset_bottom = 23.0 +text = "[ paused ]" + +[node name="ItemDescription" type="Label" parent="Control" unique_id=1498356388] +layout_mode = 1 +offset_top = 184.0 +offset_right = 192.0 +offset_bottom = 208.0 +theme_override_font_sizes/font_size = 10 +autowrap_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="Control" unique_id=1571046276] +layout_mode = 1 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_top = -44.0 +offset_right = 196.0 +offset_bottom = 44.0 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_g4auy") + +[node name="GridContainer" type="GridContainer" parent="Control/PanelContainer" unique_id=1929711512] +layout_mode = 2 +columns = 5 +script = ExtResource("3_g4auy") +data = ExtResource("4_nr23h") + +[node name="InventorySlot" parent="Control/PanelContainer/GridContainer" unique_id=823052233 instance=ExtResource("3_ev3e7")] +layout_mode = 2 + +[node name="InventorySlot2" parent="Control/PanelContainer/GridContainer" unique_id=479001907 instance=ExtResource("3_ev3e7")] +layout_mode = 2 + +[node name="InventorySlot3" parent="Control/PanelContainer/GridContainer" unique_id=327293097 instance=ExtResource("3_ev3e7")] +layout_mode = 2 + +[node name="InventorySlot4" parent="Control/PanelContainer/GridContainer" unique_id=355127191 instance=ExtResource("3_ev3e7")] +layout_mode = 2 + +[node name="InventorySlot5" parent="Control/PanelContainer/GridContainer" unique_id=1654439347 instance=ExtResource("3_ev3e7")] +layout_mode = 2 + +[node name="InventorySlot6" parent="Control/PanelContainer/GridContainer" unique_id=786772334 instance=ExtResource("3_ev3e7")] +layout_mode = 2 + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Control" unique_id=838536062] +max_polyphony = 4 diff --git a/gui/scene_transition/scene_transition.gd b/gui/scene_transition/scene_transition.gd new file mode 100644 index 0000000..e9c1e69 --- /dev/null +++ b/gui/scene_transition/scene_transition.gd @@ -0,0 +1,15 @@ +extends CanvasLayer + +@onready var animation_player: AnimationPlayer = $Control/AnimationPlayer + +func fade_out() -> bool: + animation_player.play("fade_out") + await animation_player.animation_finished + return true + +func fade_in() -> bool: + animation_player.play("fade_in") + await animation_player.animation_finished + return true + + diff --git a/gui/scene_transition/scene_transition.gd.uid b/gui/scene_transition/scene_transition.gd.uid new file mode 100644 index 0000000..d26ca0c --- /dev/null +++ b/gui/scene_transition/scene_transition.gd.uid @@ -0,0 +1 @@ +uid://bj8b41e1xb3uq diff --git a/gui/scene_transition/scene_transition.tscn b/gui/scene_transition/scene_transition.tscn new file mode 100644 index 0000000..d086f05 --- /dev/null +++ b/gui/scene_transition/scene_transition.tscn @@ -0,0 +1,98 @@ +[gd_scene format=3 uid="uid://c4iyg64sd02rx"] + +[ext_resource type="Script" uid="uid://bj8b41e1xb3uq" path="res://gui/scene_transition/scene_transition.gd" id="1_yvyfr"] + +[sub_resource type="Animation" id="Animation_ex1eg"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_yvyfr"] +resource_name = "default" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_jxmsx"] +resource_name = "fade_in" +length = 0.2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_ivw6h"] +resource_name = "fade_out" +length = 0.2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_7lt87"] +_data = { +&"RESET": SubResource("Animation_ex1eg"), +&"default": SubResource("Animation_yvyfr"), +&"fade_in": SubResource("Animation_jxmsx"), +&"fade_out": SubResource("Animation_ivw6h") +} + +[node name="SceneTransition" type="CanvasLayer" unique_id=1326424867] +process_mode = 3 +script = ExtResource("1_yvyfr") + +[node name="Control" type="Control" parent="." unique_id=358311519] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="Control" unique_id=1705459741] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Control" unique_id=418775104] +libraries/ = SubResource("AnimationLibrary_7lt87") +autoplay = &"default" diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..5bedaab --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vqte157godwi" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/interactables/dungeon/barred_door.tscn b/interactables/dungeon/barred_door.tscn new file mode 100644 index 0000000..14243df --- /dev/null +++ b/interactables/dungeon/barred_door.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3 uid="uid://bc7hmfth8je8e"] + +[ext_resource type="Script" uid="uid://c7b0f1rtxh6ef" path="res://interactables/dungeon/scripts/barred_door.gd" id="1_2y4v6"] +[ext_resource type="Texture2D" uid="uid://bs2wf6avylmry" path="res://interactables/dungeon/dungeon_props.png" id="1_t1hsr"] +[ext_resource type="AudioStream" uid="uid://cqg2hh5dpvbbf" path="res://interactables/dungeon/bars_open.wav" id="2_1lmnq"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_t1hsr"] +size = Vector2(64, 66) + +[sub_resource type="Animation" id="Animation_t1hsr"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [1] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_wgpnr"] +resource_name = "close_door" +step = 0.075 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.07692307, 0.15384616, 0.23076925, 0.30769232), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [5, 4, 3, 2, 1] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AudioStreamPlayer2D") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("2_1lmnq") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true + +[sub_resource type="Animation" id="Animation_1lmnq"] +resource_name = "closed" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [1] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_7b8gh"] +resource_name = "open_door" +step = 0.075 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.07692308, 0.15384616, 0.23076925, 0.30769232), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [1, 2, 3, 4, 5] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.30769232), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AudioStreamPlayer2D") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("2_1lmnq") +}], +"times": PackedFloat32Array(0) +} +tracks/2/use_blend = true + +[sub_resource type="Animation" id="Animation_6rn0f"] +resource_name = "opened" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [5] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_6rn0f"] +_data = { +&"RESET": SubResource("Animation_t1hsr"), +&"close_door": SubResource("Animation_wgpnr"), +&"closed": SubResource("Animation_1lmnq"), +&"open_door": SubResource("Animation_7b8gh"), +&"opened": SubResource("Animation_6rn0f") +} + +[node name="BarredDoor" type="Node2D" unique_id=2031413673] +script = ExtResource("1_2y4v6") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=403550058] +position = Vector2(32, -40) +texture = ExtResource("1_t1hsr") +hframes = 7 +frame = 1 + +[node name="StaticBody2D" type="StaticBody2D" parent="." unique_id=1122685930] +collision_layer = 16 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=957511667] +position = Vector2(32, -31) +shape = SubResource("RectangleShape2D_t1hsr") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1329199452] +libraries/ = SubResource("AnimationLibrary_6rn0f") + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=637726511] diff --git a/interactables/dungeon/bars_open.wav b/interactables/dungeon/bars_open.wav new file mode 100644 index 0000000..8aa06f5 Binary files /dev/null and b/interactables/dungeon/bars_open.wav differ diff --git a/interactables/dungeon/bars_open.wav.import b/interactables/dungeon/bars_open.wav.import new file mode 100644 index 0000000..9e587e8 --- /dev/null +++ b/interactables/dungeon/bars_open.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cqg2hh5dpvbbf" +path="res://.godot/imported/bars_open.wav-e0c7e41fce1e0698d8f47757944327a0.sample" + +[deps] + +source_file="res://interactables/dungeon/bars_open.wav" +dest_files=["res://.godot/imported/bars_open.wav-e0c7e41fce1e0698d8f47757944327a0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/dungeon/dungeon_props.png b/interactables/dungeon/dungeon_props.png new file mode 100644 index 0000000..41cfd2b Binary files /dev/null and b/interactables/dungeon/dungeon_props.png differ diff --git a/interactables/dungeon/dungeon_props.png.import b/interactables/dungeon/dungeon_props.png.import new file mode 100644 index 0000000..765fbaf --- /dev/null +++ b/interactables/dungeon/dungeon_props.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bs2wf6avylmry" +path="res://.godot/imported/dungeon_props.png-420811059f32bd32994907959c16b76b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://interactables/dungeon/dungeon_props.png" +dest_files=["res://.godot/imported/dungeon_props.png-420811059f32bd32994907959c16b76b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/interactables/dungeon/lever-01.wav b/interactables/dungeon/lever-01.wav new file mode 100644 index 0000000..208d3e0 Binary files /dev/null and b/interactables/dungeon/lever-01.wav differ diff --git a/interactables/dungeon/lever-01.wav.import b/interactables/dungeon/lever-01.wav.import new file mode 100644 index 0000000..be53af4 --- /dev/null +++ b/interactables/dungeon/lever-01.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d8gubxeubi5s" +path="res://.godot/imported/lever-01.wav-765aef4f552fd0351cf314055bf3f5aa.sample" + +[deps] + +source_file="res://interactables/dungeon/lever-01.wav" +dest_files=["res://.godot/imported/lever-01.wav-765aef4f552fd0351cf314055bf3f5aa.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/dungeon/lever-02.wav b/interactables/dungeon/lever-02.wav new file mode 100644 index 0000000..029257b Binary files /dev/null and b/interactables/dungeon/lever-02.wav differ diff --git a/interactables/dungeon/lever-02.wav.import b/interactables/dungeon/lever-02.wav.import new file mode 100644 index 0000000..854720f --- /dev/null +++ b/interactables/dungeon/lever-02.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b2dpcmsho44l6" +path="res://.godot/imported/lever-02.wav-0c029282812bbbce3da6359abd9623ea.sample" + +[deps] + +source_file="res://interactables/dungeon/lever-02.wav" +dest_files=["res://.godot/imported/lever-02.wav-0c029282812bbbce3da6359abd9623ea.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/dungeon/locked_door.tscn b/interactables/dungeon/locked_door.tscn new file mode 100644 index 0000000..3a22b8f --- /dev/null +++ b/interactables/dungeon/locked_door.tscn @@ -0,0 +1,195 @@ +[gd_scene format=3 uid="uid://c5nlta1d2wt5g"] + +[ext_resource type="Texture2D" uid="uid://bs2wf6avylmry" path="res://interactables/dungeon/dungeon_props.png" id="1_onbon"] +[ext_resource type="Script" uid="uid://oyjsrhwdd54n" path="res://interactables/dungeon/scripts/locked_door.gd" id="1_xbbsa"] +[ext_resource type="Resource" uid="uid://q18yuwmxakt8" path="res://items/key_dungeon.tres" id="2_fy1mf"] +[ext_resource type="PackedScene" uid="uid://dqwuowiyehr7d" path="res://general/persistent_data/persistent_data_handler.tscn" id="2_n53nc"] +[ext_resource type="AudioStream" uid="uid://bydopokqnfehy" path="res://interactables/dungeon/locked_door.wav" id="3_y44bh"] +[ext_resource type="AudioStream" uid="uid://b2yrs5ko1vq8k" path="res://interactables/dungeon/unlock_door.wav" id="4_3j3fx"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_onbon"] +size = Vector2(66, 66) + +[sub_resource type="Animation" id="Animation_fy1mf"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_u0hpk"] +resource_name = "close_door" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.20000002), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.20000002), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_y44bh"] +resource_name = "closed" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_sugh4"] +resource_name = "open_door" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.20000002), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.20000002), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} + +[sub_resource type="Animation" id="Animation_3j3fx"] +resource_name = "opened" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("StaticBody2D/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_u0hpk"] +_data = { +&"RESET": SubResource("Animation_fy1mf"), +&"close_door": SubResource("Animation_u0hpk"), +&"closed": SubResource("Animation_y44bh"), +&"open_door": SubResource("Animation_sugh4"), +&"opened": SubResource("Animation_3j3fx") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xbbsa"] +size = Vector2(32, 20) + +[node name="LockedDoor" type="Node2D" unique_id=1609694242] +process_mode = 3 +script = ExtResource("1_xbbsa") +key_item = ExtResource("2_fy1mf") +locked_audio = ExtResource("3_y44bh") +open_audio = ExtResource("4_3j3fx") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=176392408] +position = Vector2(32, -40) +texture = ExtResource("1_onbon") +hframes = 7 + +[node name="StaticBody2D" type="StaticBody2D" parent="." unique_id=1272712363] +collision_layer = 16 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=891832315] +position = Vector2(31, -31) +shape = SubResource("RectangleShape2D_onbon") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=2014387433] +libraries/ = SubResource("AnimationLibrary_u0hpk") + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=281736276] + +[node name="PersistentDataHandler" parent="." unique_id=843808896 instance=ExtResource("2_n53nc")] + +[node name="InteractArea" type="Area2D" parent="." unique_id=1674837604] +position = Vector2(31, 0) +collision_layer = 0 +collision_mask = 4 +monitorable = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractArea" unique_id=799601258] +shape = SubResource("RectangleShape2D_xbbsa") +debug_color = Color(0.64349115, 0.51821285, 0.21126384, 0.41960785) diff --git a/interactables/dungeon/locked_door.wav b/interactables/dungeon/locked_door.wav new file mode 100644 index 0000000..fd1e5c8 Binary files /dev/null and b/interactables/dungeon/locked_door.wav differ diff --git a/interactables/dungeon/locked_door.wav.import b/interactables/dungeon/locked_door.wav.import new file mode 100644 index 0000000..527dcf6 --- /dev/null +++ b/interactables/dungeon/locked_door.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bydopokqnfehy" +path="res://.godot/imported/locked_door.wav-caf3adab393867e780403542b5740880.sample" + +[deps] + +source_file="res://interactables/dungeon/locked_door.wav" +dest_files=["res://.godot/imported/locked_door.wav-caf3adab393867e780403542b5740880.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/dungeon/pressure_plate.tscn b/interactables/dungeon/pressure_plate.tscn new file mode 100644 index 0000000..54c0a86 --- /dev/null +++ b/interactables/dungeon/pressure_plate.tscn @@ -0,0 +1,26 @@ +[gd_scene format=3 uid="uid://c1a61ng23qg3v"] + +[ext_resource type="Script" uid="uid://67xa7gwbduma" path="res://interactables/dungeon/scripts/pressure_plate.gd" id="1_kb1d5"] +[ext_resource type="Texture2D" uid="uid://bs2wf6avylmry" path="res://interactables/dungeon/dungeon_props.png" id="2_upfbp"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_7ay0y"] +size = Vector2(12.75, 13.25) + +[node name="PressurePlate" type="Node2D" unique_id=65868926] +z_index = -1 +script = ExtResource("1_kb1d5") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=332345441] +texture = ExtResource("2_upfbp") +region_enabled = true +region_rect = Rect2(416, 64, 32, 32) + +[node name="Area2D" type="Area2D" parent="." unique_id=1246654924] +collision_layer = 0 +collision_mask = 273 +monitorable = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=1032513013] +shape = SubResource("RectangleShape2D_7ay0y") + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=612531040] diff --git a/interactables/dungeon/push_stone.wav b/interactables/dungeon/push_stone.wav new file mode 100644 index 0000000..93d4d83 Binary files /dev/null and b/interactables/dungeon/push_stone.wav differ diff --git a/interactables/dungeon/push_stone.wav.import b/interactables/dungeon/push_stone.wav.import new file mode 100644 index 0000000..bbd0fe5 --- /dev/null +++ b/interactables/dungeon/push_stone.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://co51e506fkwwr" +path="res://.godot/imported/push_stone.wav-3428979241dd81a4495981a4a02fdaaa.sample" + +[deps] + +source_file="res://interactables/dungeon/push_stone.wav" +dest_files=["res://.godot/imported/push_stone.wav-3428979241dd81a4495981a4a02fdaaa.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=2 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/dungeon/pushable_statue.tscn b/interactables/dungeon/pushable_statue.tscn new file mode 100644 index 0000000..587006d --- /dev/null +++ b/interactables/dungeon/pushable_statue.tscn @@ -0,0 +1,28 @@ +[gd_scene format=3 uid="uid://c6u7f6xj7pw73"] + +[ext_resource type="Script" uid="uid://cg71or2vgu0u8" path="res://interactables/dungeon/scripts/pushable_statue.gd" id="1_1ukbf"] +[ext_resource type="Texture2D" uid="uid://bs2wf6avylmry" path="res://interactables/dungeon/dungeon_props.png" id="2_ddxrk"] +[ext_resource type="AudioStream" uid="uid://co51e506fkwwr" path="res://interactables/dungeon/push_stone.wav" id="3_3imyd"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ddxrk"] +size = Vector2(32, 13) + +[node name="PushableStatue" type="RigidBody2D" unique_id=796294784] +collision_layer = 16 +collision_mask = 273 +gravity_scale = 0.0 +lock_rotation = true +script = ExtResource("1_1ukbf") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1230728072] +position = Vector2(0, 1.5) +shape = SubResource("RectangleShape2D_ddxrk") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=930532294] +position = Vector2(0, -16) +texture = ExtResource("2_ddxrk") +region_enabled = true +region_rect = Rect2(384, 0, 32, 48) + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=2057404877] +stream = ExtResource("3_3imyd") diff --git a/interactables/dungeon/scripts/barred_door.gd b/interactables/dungeon/scripts/barred_door.gd new file mode 100644 index 0000000..12741c6 --- /dev/null +++ b/interactables/dungeon/scripts/barred_door.gd @@ -0,0 +1,14 @@ +class_name BarredDoor extends Node2D + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +func _ready() -> void: + pass + +func open_door() -> void: + animation_player.play("open_door") + pass + +func close_door() -> void: + animation_player.play("close_door") + diff --git a/interactables/dungeon/scripts/barred_door.gd.uid b/interactables/dungeon/scripts/barred_door.gd.uid new file mode 100644 index 0000000..216a013 --- /dev/null +++ b/interactables/dungeon/scripts/barred_door.gd.uid @@ -0,0 +1 @@ +uid://c7b0f1rtxh6ef diff --git a/interactables/dungeon/scripts/locked_door.gd b/interactables/dungeon/scripts/locked_door.gd new file mode 100644 index 0000000..1f0e242 --- /dev/null +++ b/interactables/dungeon/scripts/locked_door.gd @@ -0,0 +1,49 @@ +class_name LockedDoor extends Node2D + +var open := false + +@export var key_item: ItemData +@export var locked_audio: AudioStream +@export var open_audio: AudioStream + +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var audio: AudioStreamPlayer2D = $AudioStreamPlayer2D +@onready var open_data: PersistentDataHandler = $PersistentDataHandler +@onready var interact_area: Area2D = $InteractArea + +func _ready() -> void: + interact_area.area_entered.connect(on_area_entered) + interact_area.area_exited.connect(on_area_exited) + open_data.data_loaded.connect(set_state) + set_state() + +func on_open_door() -> void: + if !key_item: + return + var door_unlocked = PlayerManager.INVENTORY_DATA.use_item(key_item) + + if door_unlocked: + animation_player.play("open_door") + audio.stream = open_audio + open_data.set_value() + else: + audio.stream = locked_audio + + audio.play() + +func on_area_entered(_area: Area2D) -> void: + PlayerManager.interact_pressed.connect(on_open_door) + +func on_area_exited(_area: Area2D) -> void: + PlayerManager.interact_pressed.disconnect(on_open_door) + +func close_door() -> void: + animation_player.play("close_door") + +func set_state() -> void: + open = open_data.value + if open: + animation_player.play("opened") + else: + animation_player.play("closed") + diff --git a/interactables/dungeon/scripts/locked_door.gd.uid b/interactables/dungeon/scripts/locked_door.gd.uid new file mode 100644 index 0000000..4a2fe49 --- /dev/null +++ b/interactables/dungeon/scripts/locked_door.gd.uid @@ -0,0 +1 @@ +uid://oyjsrhwdd54n diff --git a/interactables/dungeon/scripts/pressure_plate.gd b/interactables/dungeon/scripts/pressure_plate.gd new file mode 100644 index 0000000..604e3fc --- /dev/null +++ b/interactables/dungeon/scripts/pressure_plate.gd @@ -0,0 +1,43 @@ +class_name PressurePlate extends Node2D + +signal activated +signal deactivated + +var bodies := 0 +var is_active := false +var offset_rectangle: Rect2 + +@onready var area: Area2D = $Area2D +@onready var audio: AudioStreamPlayer2D = $AudioStreamPlayer2D +@onready var audio_activate: AudioStream = preload("res://interactables/dungeon/lever-01.wav") +@onready var audio_deactivate: AudioStream = preload("res://interactables/dungeon/lever-02.wav") +@onready var sprite: Sprite2D = $Sprite2D + +func _ready() -> void: + area.body_entered.connect(on_body_entered) + area.body_exited.connect(on_body_exited) + offset_rectangle = sprite.region_rect + +func on_body_entered(_body: Node2D) -> void: + bodies += 1 + calc_state_activated() + +func on_body_exited(_body: Node2D) -> void: + bodies -= 1 + calc_state_activated() + +func calc_state_activated() -> void: + if bodies > 0 and !is_active: + is_active = true + sprite.region_rect.position.x = offset_rectangle.position.x - 32 + activated.emit() + play_audio(audio_activate) + elif bodies <= 0 and is_active: + is_active = false + sprite.region_rect.position.x = offset_rectangle.position.x + deactivated.emit() + play_audio(audio_deactivate) + +func play_audio(stream: AudioStream) -> void: + audio.stream = stream + audio.play() diff --git a/interactables/dungeon/scripts/pressure_plate.gd.uid b/interactables/dungeon/scripts/pressure_plate.gd.uid new file mode 100644 index 0000000..402b339 --- /dev/null +++ b/interactables/dungeon/scripts/pressure_plate.gd.uid @@ -0,0 +1 @@ +uid://67xa7gwbduma diff --git a/interactables/dungeon/scripts/pushable_statue.gd b/interactables/dungeon/scripts/pushable_statue.gd new file mode 100644 index 0000000..c4a7149 --- /dev/null +++ b/interactables/dungeon/scripts/pushable_statue.gd @@ -0,0 +1,18 @@ +class_name PushableStatute extends RigidBody2D + +@onready var audio: AudioStreamPlayer2D = $AudioStreamPlayer2D + +@export var push_speed := 30.0 + +var push_direction := Vector2.ZERO : + set = set_push + +func _physics_process(_delta: float) -> void: + linear_velocity = push_direction * push_speed + +func set_push(new_push_direction: Vector2) -> void: + push_direction = new_push_direction + if push_direction == Vector2.ZERO: + audio.stop() + else: + audio.play() diff --git a/interactables/dungeon/scripts/pushable_statue.gd.uid b/interactables/dungeon/scripts/pushable_statue.gd.uid new file mode 100644 index 0000000..223e763 --- /dev/null +++ b/interactables/dungeon/scripts/pushable_statue.gd.uid @@ -0,0 +1 @@ +uid://cg71or2vgu0u8 diff --git a/interactables/dungeon/unlock_door.wav b/interactables/dungeon/unlock_door.wav new file mode 100644 index 0000000..5bc900d Binary files /dev/null and b/interactables/dungeon/unlock_door.wav differ diff --git a/interactables/dungeon/unlock_door.wav.import b/interactables/dungeon/unlock_door.wav.import new file mode 100644 index 0000000..152d26a --- /dev/null +++ b/interactables/dungeon/unlock_door.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b2yrs5ko1vq8k" +path="res://.godot/imported/unlock_door.wav-55eae0655d5743384b4e829ad7c7612f.sample" + +[deps] + +source_file="res://interactables/dungeon/unlock_door.wav" +dest_files=["res://.godot/imported/unlock_door.wav-55eae0655d5743384b4e829ad7c7612f.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/treasure_chest/treasure-chest.png b/interactables/treasure_chest/treasure-chest.png new file mode 100644 index 0000000..c005303 Binary files /dev/null and b/interactables/treasure_chest/treasure-chest.png differ diff --git a/interactables/treasure_chest/treasure-chest.png.import b/interactables/treasure_chest/treasure-chest.png.import new file mode 100644 index 0000000..797e3f6 --- /dev/null +++ b/interactables/treasure_chest/treasure-chest.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://belvmab75wgor" +path="res://.godot/imported/treasure-chest.png-6bac5dc046c7950f8613f4ad91682045.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://interactables/treasure_chest/treasure-chest.png" +dest_files=["res://.godot/imported/treasure-chest.png-6bac5dc046c7950f8613f4ad91682045.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/interactables/treasure_chest/treasure-open.wav b/interactables/treasure_chest/treasure-open.wav new file mode 100644 index 0000000..5e1f67d Binary files /dev/null and b/interactables/treasure_chest/treasure-open.wav differ diff --git a/interactables/treasure_chest/treasure-open.wav.import b/interactables/treasure_chest/treasure-open.wav.import new file mode 100644 index 0000000..a4841df --- /dev/null +++ b/interactables/treasure_chest/treasure-open.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dq3fm4jon368t" +path="res://.godot/imported/treasure-open.wav-ce3a473c1e590530356d5c80459f2325.sample" + +[deps] + +source_file="res://interactables/treasure_chest/treasure-open.wav" +dest_files=["res://.godot/imported/treasure-open.wav-ce3a473c1e590530356d5c80459f2325.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/interactables/treasure_chest/treasure_chest.gd b/interactables/treasure_chest/treasure_chest.gd new file mode 100644 index 0000000..d1c5250 --- /dev/null +++ b/interactables/treasure_chest/treasure_chest.gd @@ -0,0 +1,69 @@ +@tool +class_name TreasureChest extends Node2D + +@export var item_data: ItemData : + set = set_item_data +@export var quantity: int = 1 : + set = set_quantity + +@onready var item_sprite: Sprite2D = $ItemSprite +@onready var label: Label = $ItemSprite/Label +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var area: Area2D = $Area2D +@onready var is_open_save: PersistentDataHandler = $IsOpen + +var is_open := false + +func _ready() -> void: + update_texture() + update_label() + if Engine.is_editor_hint(): + return + + area.area_entered.connect(on_area_entered) + area.area_exited.connect(on_area_exited) + is_open_save.data_loaded.connect(set_chest_state) + set_chest_state() + +func set_item_data(new_item_data: ItemData) -> void: + item_data = new_item_data + update_texture() + +func set_quantity(new_quantity: int) -> void: + quantity = new_quantity + update_label() + +func on_area_entered(_body: Area2D) -> void: + PlayerManager.interact_pressed.connect(on_player_interaction) + +func on_area_exited(_body: Area2D) -> void: + PlayerManager.interact_pressed.disconnect(on_player_interaction) + +func on_player_interaction() -> void: + if is_open: + return + is_open = true + is_open_save.set_value() + animation_player.play("open_chest") + if item_data and quantity > 0: + PlayerManager.INVENTORY_DATA.add_item(item_data, quantity) + else: + printerr("Chest has not items") + push_error("Chest has not items") + +func update_texture() -> void: + if !item_data or !item_sprite: + return + item_sprite.texture = item_data.texture + +func update_label() -> void: + if !label: + return + label.text = "x%d" % quantity if quantity > 1 else "" + +func set_chest_state() -> void: + is_open = is_open_save.value + if is_open: + animation_player.play("opened") + else: + animation_player.play("closed") diff --git a/interactables/treasure_chest/treasure_chest.gd.uid b/interactables/treasure_chest/treasure_chest.gd.uid new file mode 100644 index 0000000..64abeca --- /dev/null +++ b/interactables/treasure_chest/treasure_chest.gd.uid @@ -0,0 +1 @@ +uid://dj8hud3qb815u diff --git a/interactables/treasure_chest/treasure_chest.tscn b/interactables/treasure_chest/treasure_chest.tscn new file mode 100644 index 0000000..a88b505 --- /dev/null +++ b/interactables/treasure_chest/treasure_chest.tscn @@ -0,0 +1,247 @@ +[gd_scene format=3 uid="uid://ca44wdgnsovkt"] + +[ext_resource type="Script" uid="uid://dj8hud3qb815u" path="res://interactables/treasure_chest/treasure_chest.gd" id="1_opwty"] +[ext_resource type="Texture2D" uid="uid://belvmab75wgor" path="res://interactables/treasure_chest/treasure-chest.png" id="2_rolan"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="3_xjfm2"] +[ext_resource type="AudioStream" uid="uid://dq3fm4jon368t" path="res://interactables/treasure_chest/treasure-open.wav" id="4_wqj8h"] +[ext_resource type="PackedScene" uid="uid://dqwuowiyehr7d" path="res://general/persistent_data/persistent_data_handler.tscn" id="5_5t0pk"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_wqj8h"] +atlas = ExtResource("3_xjfm2") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="Animation" id="Animation_5t0pk"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ItemSprite:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("ItemSprite:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -8)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("ItemSprite:modulate") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_0epee"] +resource_name = "closed" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ItemSprite:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_icwpr"] +resource_name = "open_chest" +length = 1.5 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [0, 1] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ItemSprite:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AudioStreamPlayer2D") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_wqj8h") +}], +"times": PackedFloat32Array(0.1) +} +tracks/2/use_blend = true +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("ItemSprite:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.1, 0.3, 0.5, 1.5), +"transitions": PackedFloat32Array(0.5, -2, 2, 1), +"update": 0, +"values": [Vector2(0, -8), Vector2(0, -48), Vector2(0, -18), Vector2(0, -18)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("ItemSprite:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0.2, 0.3, 0.5, 1, 1.5), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1.353256, 1.353256, 1.353256, 1), Color(1, 1, 1, 1), Color(1.353256, 1.353256, 1.353256, 1), Color(1.353256, 1.353256, 1.353256, 0)] +} + +[sub_resource type="Animation" id="Animation_twix2"] +resource_name = "opened" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [1] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ItemSprite:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_yw2ot"] +_data = { +&"RESET": SubResource("Animation_5t0pk"), +&"closed": SubResource("Animation_0epee"), +&"open_chest": SubResource("Animation_icwpr"), +&"opened": SubResource("Animation_twix2") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_5t0pk"] +size = Vector2(32, 16) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xjfm2"] +size = Vector2(48, 26) + +[node name="TreasureChest" type="Node2D" unique_id=477439269] +process_mode = 3 +script = ExtResource("1_opwty") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=521742318] +position = Vector2(0, -8) +texture = ExtResource("2_rolan") +hframes = 2 + +[node name="ItemSprite" type="Sprite2D" parent="." unique_id=1824118910] +position = Vector2(0, -8) +texture = SubResource("AtlasTexture_wqj8h") + +[node name="Label" type="Label" parent="ItemSprite" unique_id=193055326] +offset_left = 8.0 +offset_top = -8.0 +offset_right = 48.0 +offset_bottom = 15.0 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 4 +theme_override_font_sizes/font_size = 10 +text = "x99" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=629460590] +libraries/ = SubResource("AnimationLibrary_yw2ot") +autoplay = &"closed" + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=54490691] + +[node name="StaticBody2D" type="StaticBody2D" parent="." unique_id=1307513908] +collision_layer = 16 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=1422331012] +position = Vector2(0, 8) +shape = SubResource("RectangleShape2D_5t0pk") + +[node name="Area2D" type="Area2D" parent="." unique_id=572471651] +collision_layer = 0 +collision_mask = 4 +monitorable = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=145918165] +position = Vector2(0, 8) +shape = SubResource("RectangleShape2D_xjfm2") +debug_color = Color(5.583167e-06, 0.6433983, 0.3063715, 0.41960785) + +[node name="IsOpen" parent="." unique_id=2132709116 instance=ExtResource("5_5t0pk")] diff --git a/items/apple.tres b/items/apple.tres new file mode 100644 index 0000000..eada640 --- /dev/null +++ b/items/apple.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="ItemData" format=3 uid="uid://wif1wqrr83k0"] + +[ext_resource type="Script" uid="uid://ccj66fmxndpv" path="res://items/item_effects/item_effect.gd" id="1_dumep"] +[ext_resource type="AudioStream" uid="uid://unkdyg28yfhq" path="res://items/item_effects/hp-up.wav" id="2_rj1s8"] +[ext_resource type="Script" uid="uid://rgpcvn78hiod" path="res://items/scripts/item_data.gd" id="2_xmv7l"] +[ext_resource type="Script" uid="uid://cbwvdfpoms6fb" path="res://items/item_effects/item_effect_heal.gd" id="3_ia5ia"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="5_hbuy5"] + +[sub_resource type="Resource" id="Resource_qgymf"] +script = ExtResource("3_ia5ia") +audio = ExtResource("2_rj1s8") +metadata/_custom_type_script = "uid://cbwvdfpoms6fb" + +[sub_resource type="AtlasTexture" id="AtlasTexture_26tcx"] +atlas = ExtResource("5_hbuy5") +region = Rect2(192, 0, 32, 32) + +[resource] +script = ExtResource("2_xmv7l") +name = "A delicious red apple" +texture = SubResource("AtlasTexture_26tcx") +effects = Array[ExtResource("1_dumep")]([SubResource("Resource_qgymf")]) +metadata/_custom_type_script = "uid://rgpcvn78hiod" diff --git a/items/gem.tres b/items/gem.tres new file mode 100644 index 0000000..1e404f0 --- /dev/null +++ b/items/gem.tres @@ -0,0 +1,16 @@ +[gd_resource type="Resource" script_class="ItemData" format=3 uid="uid://bc4mt6ldpoq18"] + +[ext_resource type="Script" uid="uid://ccj66fmxndpv" path="res://items/item_effects/item_effect.gd" id="1_gbvxt"] +[ext_resource type="Script" uid="uid://rgpcvn78hiod" path="res://items/scripts/item_data.gd" id="1_m7x72"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="2_o2n4o"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_gbvxt"] +atlas = ExtResource("2_o2n4o") +region = Rect2(0, 0, 32, 32) + +[resource] +script = ExtResource("1_m7x72") +name = "Gem" +description = "A valuable gem" +texture = SubResource("AtlasTexture_gbvxt") +metadata/_custom_type_script = "uid://rgpcvn78hiod" diff --git a/items/item_effects/hp-up.wav b/items/item_effects/hp-up.wav new file mode 100644 index 0000000..83b5fd7 Binary files /dev/null and b/items/item_effects/hp-up.wav differ diff --git a/items/item_effects/hp-up.wav.import b/items/item_effects/hp-up.wav.import new file mode 100644 index 0000000..2f6c116 --- /dev/null +++ b/items/item_effects/hp-up.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://unkdyg28yfhq" +path="res://.godot/imported/hp-up.wav-2660d0c83d6b7930d0bf14b33024a9e0.sample" + +[deps] + +source_file="res://items/item_effects/hp-up.wav" +dest_files=["res://.godot/imported/hp-up.wav-2660d0c83d6b7930d0bf14b33024a9e0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/items/item_effects/item_effect.gd b/items/item_effects/item_effect.gd new file mode 100644 index 0000000..55f7a6c --- /dev/null +++ b/items/item_effects/item_effect.gd @@ -0,0 +1,6 @@ +class_name ItemEffect extends Resource + +@export var use_description := "" + +func use() -> void: + pass diff --git a/items/item_effects/item_effect.gd.uid b/items/item_effects/item_effect.gd.uid new file mode 100644 index 0000000..d1879d4 --- /dev/null +++ b/items/item_effects/item_effect.gd.uid @@ -0,0 +1 @@ +uid://ccj66fmxndpv diff --git a/items/item_effects/item_effect_heal.gd b/items/item_effects/item_effect_heal.gd new file mode 100644 index 0000000..6ae4372 --- /dev/null +++ b/items/item_effects/item_effect_heal.gd @@ -0,0 +1,8 @@ +class_name ItemEffectHeal extends ItemEffect + +@export var heal_amount := 1 +@export var audio: AudioStream + +func use() -> void: + PlayerManager.player.update_hp(heal_amount) + PauseMenu.play_audio(audio) diff --git a/items/item_effects/item_effect_heal.gd.uid b/items/item_effects/item_effect_heal.gd.uid new file mode 100644 index 0000000..1ffe3cc --- /dev/null +++ b/items/item_effects/item_effect_heal.gd.uid @@ -0,0 +1 @@ +uid://cbwvdfpoms6fb diff --git a/items/item_pickup/item_pickup.gd b/items/item_pickup/item_pickup.gd new file mode 100644 index 0000000..81c812e --- /dev/null +++ b/items/item_pickup/item_pickup.gd @@ -0,0 +1,46 @@ +@tool +class_name ItemPickup extends CharacterBody2D + +signal picked_up + +@export var item_data: ItemData : + set = set_item_data + +@onready var area: Area2D = $Area2D +@onready var sprite: Sprite2D = $Sprite2D +@onready var audio_player: AudioStreamPlayer2D = $AudioStreamPlayer2D + +func _ready() -> void: + update_texture() + if Engine.is_editor_hint(): + return + area.body_entered.connect(on_body_enter) + +func _physics_process(delta: float) -> void: + var collision_info := move_and_collide(velocity * delta) + if collision_info: + velocity = velocity.bounce(collision_info.get_normal()) + velocity -= velocity * delta * 4 + +func on_body_enter(body: Node2D) -> void: + if !item_data or body is not Player: + return + if PlayerManager.INVENTORY_DATA.add_item(item_data): + item_picked_up() + +func item_picked_up() -> void: + area.body_entered.disconnect(on_body_enter) + audio_player.play() + visible = false + picked_up.emit() + await audio_player.finished + queue_free() + +func update_texture() -> void: + if !item_data or !sprite: + return + sprite.texture = item_data.texture + +func set_item_data(new_item_data: ItemData) -> void: + item_data = new_item_data + update_texture() diff --git a/items/item_pickup/item_pickup.gd.uid b/items/item_pickup/item_pickup.gd.uid new file mode 100644 index 0000000..d8f72ae --- /dev/null +++ b/items/item_pickup/item_pickup.gd.uid @@ -0,0 +1 @@ +uid://dtuirhoxa1fkj diff --git a/items/item_pickup/item_pickup.tscn b/items/item_pickup/item_pickup.tscn new file mode 100644 index 0000000..b585e20 --- /dev/null +++ b/items/item_pickup/item_pickup.tscn @@ -0,0 +1,107 @@ +[gd_scene format=3 uid="uid://bd3uiuggwfq2v"] + +[ext_resource type="Script" uid="uid://dtuirhoxa1fkj" path="res://items/item_pickup/item_pickup.gd" id="1_0g51u"] +[ext_resource type="AudioStream" uid="uid://borbldx5nrrjp" path="res://items/item_pickup/item_pickup.wav" id="2_0rscd"] +[ext_resource type="Texture2D" uid="uid://bxqdnnk4dqnu5" path="res://player/sprites/Shadow.png" id="2_jl14n"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="2_tc5ok"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_0rscd"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_7rq5k"] +atlas = ExtResource("2_tc5ok") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="CircleShape2D" id="CircleShape2D_jl14n"] + +[sub_resource type="Animation" id="Animation_puw1c"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ShadowSprite:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} + +[sub_resource type="Animation" id="Animation_bjvna"] +resource_name = "bounce" +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2), +"update": 0, +"values": [Vector2(0, 0), Vector2(0, -6), Vector2(0, 0), Vector2(0, -2), Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ShadowSprite:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8), +"transitions": PackedFloat32Array(-2, -2, -2, -2, -2), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(0.2, 0.2), Vector2(0.5, 0.5), Vector2(0.4, 0.4), Vector2(0.5, 0.5)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_o0c3x"] +_data = { +&"RESET": SubResource("Animation_puw1c"), +&"bounce": SubResource("Animation_bjvna") +} + +[node name="ItemPickup" type="CharacterBody2D" unique_id=320551238] +collision_layer = 0 +collision_mask = 16 +motion_mode = 1 +script = ExtResource("1_0g51u") + +[node name="Area2D" type="Area2D" parent="." unique_id=1719100885] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=82383132] +shape = SubResource("CircleShape2D_0rscd") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1485596032] +texture = SubResource("AtlasTexture_7rq5k") + +[node name="ShadowSprite" type="Sprite2D" parent="." unique_id=772537575] +modulate = Color(0, 0, 0, 0.34901962) +position = Vector2(0, 8) +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_jl14n") + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=60991160] +stream = ExtResource("2_0rscd") +max_polyphony = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=721385119] +shape = SubResource("CircleShape2D_jl14n") +debug_color = Color(0.24937189, 0.6105543, 0.506212, 0.41960785) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1968131721] +libraries/ = SubResource("AnimationLibrary_o0c3x") +autoplay = &"bounce" diff --git a/items/item_pickup/item_pickup.wav b/items/item_pickup/item_pickup.wav new file mode 100644 index 0000000..422eb26 Binary files /dev/null and b/items/item_pickup/item_pickup.wav differ diff --git a/items/item_pickup/item_pickup.wav.import b/items/item_pickup/item_pickup.wav.import new file mode 100644 index 0000000..19dea02 --- /dev/null +++ b/items/item_pickup/item_pickup.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://borbldx5nrrjp" +path="res://.godot/imported/item_pickup.wav-cb95f6a75b96e4fc19c3e7765c534824.sample" + +[deps] + +source_file="res://items/item_pickup/item_pickup.wav" +dest_files=["res://.godot/imported/item_pickup.wav-cb95f6a75b96e4fc19c3e7765c534824.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/items/key_dungeon.tres b/items/key_dungeon.tres new file mode 100644 index 0000000..15a9a4f --- /dev/null +++ b/items/key_dungeon.tres @@ -0,0 +1,16 @@ +[gd_resource type="Resource" script_class="ItemData" format=3 uid="uid://q18yuwmxakt8"] + +[ext_resource type="Script" uid="uid://ccj66fmxndpv" path="res://items/item_effects/item_effect.gd" id="1_gyq0a"] +[ext_resource type="Script" uid="uid://rgpcvn78hiod" path="res://items/scripts/item_data.gd" id="2_5w3bm"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="3_5w3bm"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_p582r"] +atlas = ExtResource("3_5w3bm") +region = Rect2(224, 0, 32, 32) + +[resource] +script = ExtResource("2_5w3bm") +name = "Dungeon Key" +description = "Looks a standard key. Who knows what kind of doors it will unlock?" +texture = SubResource("AtlasTexture_p582r") +metadata/_custom_type_script = "uid://rgpcvn78hiod" diff --git a/items/potion.tres b/items/potion.tres new file mode 100644 index 0000000..d66ceb3 --- /dev/null +++ b/items/potion.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="ItemData" format=3 uid="uid://cysttu2nlwmpp"] + +[ext_resource type="Script" uid="uid://rgpcvn78hiod" path="res://items/scripts/item_data.gd" id="1_70df6"] +[ext_resource type="Script" uid="uid://ccj66fmxndpv" path="res://items/item_effects/item_effect.gd" id="1_hxf14"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="2_8h85v"] +[ext_resource type="Script" uid="uid://cbwvdfpoms6fb" path="res://items/item_effects/item_effect_heal.gd" id="2_u0y06"] +[ext_resource type="AudioStream" uid="uid://unkdyg28yfhq" path="res://items/item_effects/hp-up.wav" id="3_ncbnu"] + +[sub_resource type="Resource" id="Resource_q7uc3"] +script = ExtResource("2_u0y06") +heal_amount = 2 +audio = ExtResource("3_ncbnu") +metadata/_custom_type_script = "uid://cbwvdfpoms6fb" + +[sub_resource type="AtlasTexture" id="AtlasTexture_2nysy"] +atlas = ExtResource("2_8h85v") +region = Rect2(32, 0, 32, 32) + +[resource] +script = ExtResource("1_70df6") +name = "Potion" +description = "A potion to health your wounds" +texture = SubResource("AtlasTexture_2nysy") +effects = Array[ExtResource("1_hxf14")]([SubResource("Resource_q7uc3")]) +metadata/_custom_type_script = "uid://rgpcvn78hiod" diff --git a/items/scripts/item_data.gd b/items/scripts/item_data.gd new file mode 100644 index 0000000..1f67c85 --- /dev/null +++ b/items/scripts/item_data.gd @@ -0,0 +1,15 @@ +class_name ItemData extends Resource + +@export var name := "" +@export_multiline var description := "" +@export var texture: Texture2D +@export_category("Item user effects") +@export var effects: Array[ItemEffect] + +func use() -> bool: + if effects.is_empty(): + return false + for effect in effects: + if effect: + effect.use() + return true diff --git a/items/scripts/item_data.gd.uid b/items/scripts/item_data.gd.uid new file mode 100644 index 0000000..92e89ef --- /dev/null +++ b/items/scripts/item_data.gd.uid @@ -0,0 +1 @@ +uid://rgpcvn78hiod diff --git a/items/sprites/items.png b/items/sprites/items.png new file mode 100644 index 0000000..81b89e4 Binary files /dev/null and b/items/sprites/items.png differ diff --git a/items/sprites/items.png.import b/items/sprites/items.png.import new file mode 100644 index 0000000..6f01549 --- /dev/null +++ b/items/sprites/items.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxf00vjmse6ab" +path="res://.godot/imported/items.png-c112ec8c06134d386ecee7bdec880e50.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://items/sprites/items.png" +dest_files=["res://.godot/imported/items.png-c112ec8c06134d386ecee7bdec880e50.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/items/stone.tres b/items/stone.tres new file mode 100644 index 0000000..ce69164 --- /dev/null +++ b/items/stone.tres @@ -0,0 +1,16 @@ +[gd_resource type="Resource" script_class="ItemData" format=3 uid="uid://mcj3rqawtwa5"] + +[ext_resource type="Script" uid="uid://rgpcvn78hiod" path="res://items/scripts/item_data.gd" id="1_becff"] +[ext_resource type="Script" uid="uid://ccj66fmxndpv" path="res://items/item_effects/item_effect.gd" id="1_uj5p3"] +[ext_resource type="Texture2D" uid="uid://dxf00vjmse6ab" path="res://items/sprites/items.png" id="2_mwerj"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_uj5p3"] +atlas = ExtResource("2_mwerj") +region = Rect2(64, 0, 32, 32) + +[resource] +script = ExtResource("1_becff") +name = "Stone" +description = "A simple stone" +texture = SubResource("AtlasTexture_uj5p3") +metadata/_custom_type_script = "uid://rgpcvn78hiod" diff --git a/levels/areas/01.tscn b/levels/areas/01.tscn new file mode 100644 index 0000000..cd4d4fb --- /dev/null +++ b/levels/areas/01.tscn @@ -0,0 +1,62 @@ +[gd_scene format=4 uid="uid://bm10cpflagmh"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_m47v4"] +[ext_resource type="PackedScene" uid="uid://c28dglqe053m1" path="res://tiles_maps/grass-01.tscn" id="2_a7hok"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="3_wosi5"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="4_05mv5"] +[ext_resource type="PackedScene" uid="uid://dv2hjei167q68" path="res://enemies/slime/slime.tscn" id="5_jy00b"] +[ext_resource type="Resource" uid="uid://wif1wqrr83k0" path="res://items/apple.tres" id="7_05mv5"] +[ext_resource type="Resource" uid="uid://cysttu2nlwmpp" path="res://items/potion.tres" id="7_jy00b"] +[ext_resource type="PackedScene" uid="uid://cksw7i4wuuald" path="res://enemies/goblin/goblin.tscn" id="9_jy00b"] +[ext_resource type="PackedScene" uid="uid://ca44wdgnsovkt" path="res://interactables/treasure_chest/treasure_chest.tscn" id="11_lac8f"] + +[node name="01" type="Node2D" unique_id=1123704002] +script = ExtResource("1_m47v4") + +[node name="Grass-01" parent="." unique_id=653632611 instance=ExtResource("2_a7hok")] +tile_map_data = PackedByteArray("AAD3//3/AAABAAQAAAD3//7/AAABAAUAAAD3////AAABAAYAAAD3/wAAAAABAAcAAAD2/wAAAAAAAAcAAAD2/wEAAAAAAAcAAAD2/wIAAAAAAAcAAAD2/wMAAAAAAAcAAAD2/wQAAAAAAAcAAAD2/wUAAAAAAAcAAAD2/wYAAAAAAAcAAAD2/wcAAAAAAAcAAAD2/wgAAAAAAAcAAAD2/wkAAAAAAAcAAAD2/woAAAAAAAcAAAD2/wsAAAAAAAcAAAD2/wwAAAAAAAcAAAD3/wwAAAABAAcAAAD3/w0AAAABAAcAAAD4/w0AAAAAAAAAAAD5/w0AAAAAAAAAAAD6/w0AAAAAAAAAAAD7/w0AAAAAAAAAAAD7/w4AAAAAAAAAAAD8/w4AAAAAAAAAAAD9/w4AAAAAAAAAAAD+/w4AAAAAAAAAAAD//w4AAAAAAAAAAAAAAA4AAAAAAAAAAAABAA4AAAAAAAAAAAACAA4AAAAAAAAAAAADAA8AAAANAAYAAAAEAA8AAAALAAYAAAAFAA8AAAAMAAYAAAAGAA8AAAANAAYAAAAHAA8AAAALAAYAAAAIAA8AAAAMAAYAAAAJAA8AAAANAAYAAAAKAA8AAAALAAYAAAALABAAAAAMAAcAAAAMABAAAAANAAcAAAANABAAAAALAAcAAAAOABAAAAALAAcAAAAPABAAAAAMAAcAAAAQABAAAAANAAcAAAARABAAAAALAAcAAAASAA8AAAAMAAYAAAATAA8AAAANAAYAAAAUAA8AAAALAAYAAAAVAA8AAAAMAAYAAAAVAA4AAAAAAAAAAAAWAA4AAAAAAAAAAAAXAA4AAAAKAAQAAAAXAA0AAAACAAIAAAAYAA0AAAAAAAAAAAAYAAwAAAAAAAAAAAAXAAsAAAACAAIAAAAXAAoAAAAKAAcAAAAXAAkAAAAFAAcAAAAXAAgAAAAFAAcAAAAXAAcAAAAFAAcAAAAXAAYAAAAFAAcAAAAXAAUAAAAFAAcAAAAXAAQAAAAFAAcAAAAXAAMAAAAFAAcAAAAXAAIAAAAFAAcAAAAXAAEAAAAFAAcAAAAXAAAAAAAFAAcAAAAXAP//AAAFAAYAAAAXAP7/AAAFAAUAAAAXAP3/AAAFAAQAAAAWAP3/AAAEAAQAAAAVAP3/AAADAAQAAAAUAP3/AAACAAQAAAATAP3/AQACAAAAAAASAP3/AQABAAAAAAARAP3/AQAAAAAAAAAQAP3/AAAEAAQAAAAPAP3/AAADAAQAAAAOAP3/AAACAAQAAAANAP3/AAAEAAQAAAAMAP3/AAADAAQAAAALAP3/AAACAAQAAAAKAP3/AAAEAAQAAAAJAP3/AAADAAQAAAAIAP3/AAACAAQAAAAHAP3/AAAEAAQAAAAGAP3/AAADAAQAAAAFAP3/AAAEAAQAAAAEAP3/AAADAAQAAAADAP3/AAAEAAQAAAACAP3/AAADAAQAAAABAP3/AAAEAAQAAAAAAP3/AAADAAQAAAD///3/AAACAAQAAAD+//3/AAAEAAQAAAD9//3/AAADAAQAAAD8//3/AAACAAQAAAD7//3/AAAEAAQAAAD6//3/AAADAAQAAAD5//3/AAACAAQAAAD4//3/AAACAAQAAAD7/wkAAAAAAAAAAAD7/wgAAAAAAAAAAAD7/wcAAAAAAAAAAAD7/wYAAAAAAAAAAAD7/wUAAAAAAAAAAAD7/wQAAAAAAAAAAAD7/wMAAAAAAAAAAAD7/wIAAAAAAAAAAAD7/wEAAAABAAEAAAD7/wAAAAAAAAAAAAD7////AAAEAAYAAAD7//7/AAAEAAUAAAD6//7/AAADAAUAAAD5//7/AAACAAUAAAD4//7/AAACAAUAAAD4////AAACAAYAAAD4/wAAAAAAAAAAAAD4/wEAAAAAAAAAAAD3/wEAAAABAAcAAAD3/wIAAAABAAcAAAD3/wMAAAABAAcAAAD3/wQAAAABAAcAAAD3/wUAAAABAAcAAAD3/wYAAAABAAcAAAD3/wcAAAABAAcAAAD3/wgAAAABAAcAAAD3/wkAAAABAAcAAAD3/woAAAABAAcAAAD3/wsAAAABAAcAAAD4/wsAAAAAAAAAAAD4/woAAAAAAAAAAAD4/wkAAAAAAAAAAAD4/wgAAAAAAAAAAAD4/wcAAAAAAAAAAAD4/wYAAAAAAAAAAAD4/wUAAAAAAAAAAAD4/wQAAAAAAAAAAAD4/wMAAAAAAAAAAAD4/wIAAAAAAAAAAAD5/wIAAAAAAAAAAAD5/wEAAAAAAAAAAAD5/wAAAAAAAAAAAAD5////AAACAAYAAAD6////AAADAAYAAAD6/wAAAAAAAAAAAAD6/wEAAAAAAAAAAAD6/wIAAAAAAAAAAAD6/wMAAAAAAAAAAAD5/wMAAAAAAAAAAAD5/wQAAAAAAAAAAAD5/wUAAAAAAAAAAAD5/wYAAAAAAAAAAAD5/wcAAAAAAAAAAAD5/wgAAAAAAAAAAAD5/wkAAAAAAAAAAAD5/woAAAAAAAAAAAD5/wsAAAAAAAAAAAD5/wwAAAAAAAAAAAD4/wwAAAAAAAAAAAD6/wwAAAAAAAAAAAD6/wsAAAAAAAAAAAD6/woAAAAAAAAAAAD6/wkAAAAAAAAAAAD6/wgAAAAAAAAAAAD6/wcAAAAAAAAAAAD6/wYAAAAAAAAAAAD6/wUAAAAAAAAAAAD6/wQAAAAAAAAAAAD7/woAAAAAAAAAAAD7/wsAAAAAAAAAAAD7/wwAAAAAAAAAAAD8/wwAAAAAAAAAAAD8/wsAAAAAAAAAAAD8/woAAAAAAAAAAAD8/wkAAAAAAAAAAAD8/wgAAAAAAAAAAAD8/wcAAAAAAAAAAAD8/wYAAAABAAEAAAD8/wUAAAABAAEAAAD8/wQAAAAAAAAAAAD8/wMAAAAAAAAAAAD8/wIAAAAAAAAAAAD8/wEAAAAAAAAAAAD8/wAAAAAAAAAAAAD8////AAACAAYAAAD8//7/AAACAAUAAAD9//7/AAADAAUAAAD9////AAADAAYAAAD9/wAAAAAAAAAAAAD9/wEAAAAAAAAAAAD9/wIAAAAAAAAAAAD9/wMAAAAAAAAAAAD9/wQAAAAAAAAAAAD9/wUAAAAAAAAAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAAAAAAAAAD9/wkAAAAAAAAAAAD9/woAAAAAAAAAAAD9/wsAAAAAAAAAAAD9/wwAAAABAAEAAAD9/w0AAAAAAAAAAAD8/w0AAAAAAAAAAAD+/w0AAAAAAAAAAAD+/wwAAAAAAAAAAAD+/wsAAAAAAAAAAAD+/woAAAAAAAAAAAD+/wkAAAAAAAAAAAD+/wgAAAAAAAAAAAD+/wcAAAACAAEAAAD+/wYAAAAAAAAAAAD+/wUAAAAAAAAAAAD+/wQAAAAAAAAAAAD+/wMAAAAAAAAAAAD+/wIAAAAAAAAAAAD+/wEAAAAAAAAAAAD+/wAAAAAAAAAAAAD+////AAAEAAYAAAD+//7/AAAEAAUAAAD///7/AAACAAUAAAD/////AAACAAYAAAD//wAAAAAAAAAAAAD//wEAAAAAAAAAAAD//wIAAAAAAAAAAAD//wMAAAAAAAAAAAD//wQAAAAAAAAAAAD//wUAAAACAAEAAAD//wYAAAAAAAAAAAD//wcAAAABAAEAAAD//wgAAAACAAEAAAD//wkAAAAAAAAAAAD//woAAAAAAAAAAAD//wsAAAAAAAAAAAD//wwAAAAAAAAAAAD//w0AAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAADAAYAAAAAAP7/AAADAAUAAAABAP7/AAAEAAUAAAABAP//AAAEAAYAAAABAAAAAAAAAAAAAAABAAEAAAAAAAAAAAABAAIAAAAAAAAAAAABAAMAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAABAAsAAAAAAAAAAAABAAwAAAAAAAAAAAABAA0AAAAAAAAAAAACAA0AAAAAAAAAAAACAAwAAAAAAAAAAAACAAsAAAAAAAAAAAACAAoAAAAAAAAAAAACAAkAAAAAAAAAAAACAAgAAAAAAAAAAAACAAcAAAAAAAAAAAACAAYAAAAAAAAAAAACAAUAAAAAAAAAAAACAAQAAAAAAAAAAAACAAMAAAAAAAAAAAACAAIAAAAAAAAAAAACAAEAAAAAAAAAAAACAAAAAAAAAAAAAAACAP//AAADAAYAAAACAP7/AAADAAUAAAADAP7/AAAEAAUAAAADAP//AAAEAAYAAAADAAAAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAADAAkAAAAAAAAAAAADAAoAAAAAAAAAAAADAAsAAAAAAAAAAAADAAwAAAAAAAAAAAADAA0AAAAAAAAAAAADAA4AAAABAAEAAAAEAA4AAAAAAAAAAAAEAA0AAAAAAAAAAAAEAAwAAAAAAAAAAAAEAAsAAAAAAAAAAAAEAAoAAAAAAAAAAAAEAAkAAAAAAAAAAAAEAAgAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAMAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAP//AAADAAYAAAAEAP7/AAADAAUAAAAFAP7/AAAEAAUAAAAFAP//AAAEAAYAAAAFAAAAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAAAAAAAAAAFAAkAAAAAAAAAAAAFAAoAAAAAAAAAAAAFAAsAAAAAAAAAAAAFAAwAAAAAAAAAAAAFAA0AAAAAAAAAAAAFAA4AAAAAAAAAAAAGAA4AAAAAAAAAAAAGAA0AAAAAAAAAAAAGAAwAAAAAAAAAAAAGAAsAAAAAAAAAAAAGAAoAAAAAAAAAAAAGAAkAAAAAAAAAAAAGAAgAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAMAAAAAAAAAAAAGAAIAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAP//AAADAAYAAAAGAP7/AAADAAUAAAAHAP7/AAAEAAUAAAAHAP//AAAEAAYAAAAHAAAAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAABAAEAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAAAAAAAAAAHAAgAAAABAAEAAAAHAAkAAAAAAAAAAAAHAAoAAAAAAAAAAAAHAAsAAAAAAAAAAAAHAAwAAAAAAAAAAAAHAA0AAAAAAAAAAAAHAA4AAAAAAAAAAAAIAA4AAAAAAAAAAAAIAA0AAAAAAAAAAAAIAAwAAAABAAEAAAAIAAsAAAAAAAAAAAAIAAoAAAAAAAAAAAAIAAkAAAAAAAAAAAAIAAgAAAAAAAAAAAAIAAcAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAMAAAAAAAAAAAAIAAIAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAP//AAACAAYAAAAIAP7/AAACAAUAAAAJAP7/AAADAAUAAAAJAP//AAADAAYAAAAJAAAAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAJAAcAAAAAAAAAAAAJAAgAAAAAAAAAAAAJAAkAAAAAAAAAAAAJAAoAAAAAAAAAAAAJAAsAAAAAAAAAAAAJAAwAAAAAAAAAAAAJAA0AAAAAAAAAAAAJAA4AAAAAAAAAAAAKAA4AAAAAAAAAAAAKAA0AAAAAAAAAAAAKAAwAAAAAAAAAAAAKAAsAAAAAAAAAAAAKAAoAAAAAAAAAAAAKAAkAAAAAAAAAAAAKAAgAAAABAAMAAAAKAAcAAAABAAIAAAAKAAYAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAAAAAAAAAAAAAAKAP//AAAEAAYAAAAKAP7/AAAEAAUAAAALAP7/AAACAAUAAAALAP//AAACAAYAAAALAAAAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAALAAMAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAACAAIAAAALAAgAAAACAAMAAAALAAkAAAAAAAAAAAALAAoAAAAAAAAAAAALAAsAAAAAAAAAAAALAAwAAAAAAAAAAAALAA0AAAAAAAAAAAALAA4AAAAAAAAAAAALAA8AAAAMAAYAAAAMAA8AAAANAAYAAAAMAA4AAAAAAAAAAAAMAA0AAAAAAAAAAAAMAAwAAAAAAAAAAAAMAAsAAAAAAAAAAAAMAAoAAAAAAAAAAAAMAAkAAAAAAAAAAAAMAAgAAAAAAAAAAAAMAAcAAAABAAEAAAAMAAYAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAMAAAAAAAAAAAAMAAIAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAP//AAADAAYAAAAMAP7/AAADAAUAAAANAP7/AAAEAAUAAAANAP//AAAEAAYAAAANAAAAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAANAAcAAAAAAAAAAAANAAgAAAAAAAAAAAANAAkAAAAAAAAAAAANAAoAAAAAAAAAAAANAAsAAAAAAAAAAAANAAwAAAAAAAAAAAANAA0AAAAAAAAAAAANAA4AAAACAAEAAAANAA8AAAALAAYAAAAOAA8AAAALAAYAAAAOAA4AAAACAAEAAAAOAA0AAAAAAAAAAAAOAAwAAAAAAAAAAAAOAAsAAAAAAAAAAAAOAAoAAAAAAAAAAAAOAAkAAAAAAAAAAAAOAAgAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAUAAAABAAMAAAAOAAQAAAABAAIAAAAOAAMAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAEAAAABAAMAAAAOAAAAAAABAAIAAAAOAP//AAACAAYAAAAOAP7/AAACAAUAAAAPAP7/AAADAAUAAAAPAP//AAADAAYAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAACAAIAAAAPAAUAAAACAAMAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAPAAkAAAAAAAAAAAAPAAoAAAABAAEAAAAPAAsAAAAAAAAAAAAPAAwAAAAAAAAAAAAPAA0AAAAAAAAAAAAPAA4AAAACAAEAAAAPAA8AAAAMAAYAAAAQAA8AAAANAAYAAAAQAA4AAAACAAEAAAAQAA0AAAAAAAAAAAAQAAwAAAAAAAAAAAAQAAsAAAAAAAAAAAAQAAoAAAAAAAAAAAAQAAkAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAP//AAAEAAYAAAAQAP7/AAAEAAUAAAARAP7/AQAAAAEAAAARAP//AQAAAAIAAAARAAAAAAAAAAAAAAARAAIAAAABAAMAAAARAAMAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAAAAAAAAARAAkAAAAAAAAAAAARAAoAAAAAAAAAAAARAAsAAAAAAAAAAAARAAwAAAAAAAAAAAARAA0AAAAAAAAAAAARAA4AAAAAAAAAAAARAA8AAAALAAYAAAASAA4AAAAAAAAAAAASAA0AAAAAAAAAAAASAAwAAAAAAAAAAAASAAsAAAAAAAAAAAASAAoAAAAAAAAAAAASAAkAAAAAAAAAAAASAAgAAAAAAAAAAAASAAcAAAAAAAAAAAASAAYAAAAAAAAAAAASAAUAAAAAAAAAAAASAAQAAAAAAAAAAAASAAMAAAAAAAAAAAASAAIAAAACAAMAAAASAAAAAAAAAAAAAAASAP//AQABAAIAAAASAP7/AQABAAEAAAATAP7/AQACAAEAAAATAP//AQACAAIAAAATAAAAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAACAAEAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAATAAwAAAAAAAAAAAATAA0AAAAAAAAAAAATAA4AAAAAAAAAAAAUAA4AAAAAAAAAAAAUAA0AAAAAAAAAAAAUAAwAAAAAAAAAAAAUAAsAAAAAAAAAAAAUAAoAAAAAAAAAAAAUAAkAAAAAAAAAAAAUAAgAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAYAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAQAAAAAAAAAAAAUAAMAAAAAAAAAAAAUAAIAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAP//AAACAAYAAAAUAP7/AAACAAUAAAAVAP7/AAADAAUAAAAVAP//AAADAAYAAAAVAAAAAAAAAAAAAAAVAAEAAAAAAAAAAAAVAAIAAAAAAAAAAAAVAAMAAAAAAAAAAAAVAAQAAAAAAAAAAAAVAAUAAAAAAAAAAAAVAAYAAAAAAAAAAAAVAAcAAAAAAAAAAAAVAAgAAAAAAAAAAAAVAAkAAAAAAAAAAAAVAAoAAAAAAAAAAAAVAAsAAAAAAAAAAAAVAAwAAAAAAAAAAAAVAA0AAAAAAAAAAAAWAA0AAAAAAAAAAAAWAAwAAAAAAAAAAAAWAAsAAAAAAAAAAAAWAAoAAAAAAAAAAAAWAAkAAAAAAAAAAAAWAAgAAAAAAAAAAAAWAAcAAAAAAAAAAAAWAAYAAAAAAAAAAAAWAAUAAAAAAAAAAAAWAAQAAAAAAAAAAAAWAAMAAAAAAAAAAAAWAAIAAAAAAAAAAAAWAAEAAAAAAAAAAAAWAAAAAAAAAAAAAAAWAP//AAAEAAYAAAAWAP7/AAAEAAUAAAAXAAwAAAACAAIAAAD4/w8AAAALAAYAAAD4/w4AAAAAAAAAAAD3/w4AAAABAAcAAAD2/w4AAAAAAAcAAAD2/w0AAAAAAAcAAAD2/w8AAAAAAAcAAAD2/xAAAAAAAAcAAAD3/xAAAAABAAcAAAD3/w8AAAABAAcAAAD4/xAAAAAKAAcAAAD5/xAAAAAMAAcAAAD5/w8AAAAMAAYAAAD5/w4AAAAAAAAAAAD6/w4AAAAAAAAAAAD6/w8AAAANAAYAAAD6/xAAAAANAAcAAAD7/xAAAAALAAcAAAD7/w8AAAALAAYAAAD8/w8AAAAMAAYAAAD8/xAAAAAMAAcAAAD9/xAAAAANAAcAAAD9/w8AAAANAAYAAAD+/w8AAAALAAYAAAD+/xAAAAALAAcAAAD//xAAAAAMAAcAAAD//w8AAAAMAAYAAAAAAA8AAAANAAYAAAAAABAAAAANAAcAAAABABAAAAALAAcAAAABAA8AAAALAAYAAAACAA8AAAAMAAYAAAACABAAAAAMAAcAAAADABAAAAANAAcAAAAEABAAAAALAAcAAAAFABAAAAAMAAcAAAAGABAAAAANAAcAAAAHABAAAAALAAcAAAAIABAAAAAMAAcAAAAJABAAAAANAAcAAAAKABAAAAALAAcAAAAXAA8AAAAKAAYAAAAWAA8AAAANAAYAAAAWABAAAAANAAcAAAAVABAAAAAMAAcAAAAUABAAAAALAAcAAAATABAAAAANAAcAAAASABAAAAAMAAcAAAAXABAAAAAOAAcAAAAYABAAAAAAAAAAAAAYAA8AAAAAAAAAAAAYAA4AAAALAAQAAAAYAAgAAAAGAAcAAAAYAAcAAAAGAAcAAAAYAAYAAAAGAAcAAAAYAAUAAAAGAAcAAAAYAAQAAAAGAAcAAAAYAAMAAAAGAAcAAAAYAAIAAAAGAAcAAAAYAAEAAAAGAAcAAAAYAAAAAAAGAAcAAAAYAP//AAAGAAYAAAAYAP7/AAAAAAAAAAAYAP3/AAAAAAAAAAAYAAkAAAAFAAUAAAAYAAoAAAAFAAYAAAAYAAsAAAAAAAAAAAD2////AAAAAAYAAAD2//7/AAACAAMAAAD2//3/AAAAAAAAAAAPAAAAAAAGAAQAAAAPAAEAAAACAAEAAAAQAAEAAAAAAAAAAAARAAEAAAABAAIAAAASAAEAAAACAAIAAAATAAEAAAAAAAAAAAA=") + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("4_05mv5")] +position = Vector2(576, 64) + +[node name="Slime" parent="." unique_id=2039155988 instance=ExtResource("5_jy00b")] +position = Vector2(184, 120) + +[node name="Slime2" parent="." unique_id=1593658226 instance=ExtResource("5_jy00b")] +position = Vector2(232, 64) + +[node name="Slime3" parent="." unique_id=1089714746 instance=ExtResource("5_jy00b")] +position = Vector2(232, 248) + +[node name="Slime5" parent="." unique_id=1052922950 instance=ExtResource("5_jy00b")] +position = Vector2(456, 80) + +[node name="Slime4" parent="." unique_id=2137402100 instance=ExtResource("5_jy00b")] +position = Vector2(344, 64) + +[node name="TreasureChest" parent="." unique_id=477439269 instance=ExtResource("11_lac8f")] +position = Vector2(560, 136) +item_data = ExtResource("7_jy00b") +quantity = 3 + +[node name="TreasureChest2" parent="." unique_id=451066687 instance=ExtResource("11_lac8f")] +position = Vector2(480, 136) +item_data = ExtResource("7_05mv5") + +[node name="Slime6" parent="." unique_id=1444513234 instance=ExtResource("9_jy00b")] +position = Vector2(600, 224) + +[node name="F1TD1" parent="." unique_id=1580697641 instance=ExtResource("3_wosi5")] +position = Vector2(592, -16) +level = "uid://btu35v1s43w0k" +target_area = "FD1T1" +center_player = true +side = 2 + +[node name="Area02" parent="." unique_id=438390501 instance=ExtResource("3_wosi5")] +position = Vector2(768, 400) +level = "uid://cqakopgkjlf7e" +target_area = "Area02" +center_player = true +size = 3 +side = 1 diff --git a/levels/areas/02.tscn b/levels/areas/02.tscn new file mode 100644 index 0000000..ee66636 --- /dev/null +++ b/levels/areas/02.tscn @@ -0,0 +1,30 @@ +[gd_scene format=4 uid="uid://cqakopgkjlf7e"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_40pow"] +[ext_resource type="PackedScene" uid="uid://c28dglqe053m1" path="res://tiles_maps/grass-01.tscn" id="2_mnj3f"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="3_h02n6"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="4_u24ek"] + +[node name="02" type="Node2D" unique_id=1123704002] +script = ExtResource("1_40pow") + +[node name="Grass-01" parent="." unique_id=653632611 instance=ExtResource("2_mnj3f")] +tile_map_data = PackedByteArray("AAD3//3/AAAAAAAAAAD3//7/AAAKAAQAAAD3////AAAKAAUAAAD3/wAAAAAKAAUAAAD2/wAAAAAAAAAAAAD2/wEAAAACAAIAAAD2/wIAAAAAAAAAAAD2/wMAAAAAAAAAAAD2/wQAAAAAAAAAAAD2/wUAAAAAAAAAAAD2/wYAAAAAAAAAAAD2/wcAAAAAAAAAAAD2/wgAAAAAAAAAAAD2/wkAAAAMAAYAAAD2/woAAAAMAAcAAAD2/wsAAAAAAAAAAAD2/wwAAAAAAAAAAAD3/wwAAAACAAIAAAD3/w0AAAACAAIAAAD4/w0AAAAAAAAAAAD5/w0AAAAAAAAAAAD6/w0AAAAAAAAAAAD7/w0AAAAAAAAAAAD7/w4AAAAMAAQAAAD8/w4AAAAMAAQAAAD9/w4AAAAMAAQAAAD+/w4AAAAMAAQAAAD//w4AAAAMAAQAAAAAAA4AAAAMAAQAAAABAA4AAAAMAAQAAAACAA4AAAAMAAQAAAADAA8AAAANAAYAAAAEAA8AAAAOAAYAAAAFAA8AAAAGAAUAAAAGAA8AAAAGAAUAAAAHAA8AAAAGAAUAAAAIAA8AAAAKAAYAAAAJAA8AAAANAAYAAAAKAA8AAAALAAYAAAALABAAAAAMAAcAAAAMABAAAAANAAcAAAANABAAAAALAAcAAAAOABAAAAALAAcAAAAPABAAAAAMAAcAAAAQABAAAAANAAcAAAARABAAAAALAAcAAAASAA8AAAAMAAYAAAATAA8AAAANAAYAAAAUAA8AAAALAAYAAAAVAA8AAAAMAAYAAAAVAA4AAAALAAQAAAAWAA4AAAALAAQAAAAXAA4AAAALAAQAAAAXAA0AAAAKAAcAAAAYAA0AAAAMAAcAAAAYAAwAAAAMAAYAAAAXAAsAAAAKAAUAAAAXAAoAAAAKAAUAAAAXAAkAAAAKAAYAAAAXAAgAAAAKAAUAAAAXAAcAAAAKAAYAAAAXAAYAAAAKAAUAAAAXAAUAAAAKAAYAAAAXAAQAAAAKAAUAAAAXAAMAAAAKAAYAAAAXAAIAAAAKAAUAAAAXAAEAAAAKAAYAAAAXAAAAAAAKAAUAAAAXAP//AAAKAAYAAAAXAP7/AAAOAAQAAAAXAP3/AAAAAAAAAAAWAP3/AAAAAAAAAAAVAP3/AAAAAAAAAAAUAP3/AAAAAAAAAAATAP3/AAAAAAAAAAASAP3/AAAAAAAAAAARAP3/AAAAAAAAAAAQAP3/AAAAAAAAAAAPAP3/AAAAAAAAAAAOAP3/AAAAAAAAAAANAP3/AAAAAAAAAAAMAP3/AAAAAAAAAAALAP3/AAAAAAAAAAAKAP3/AAAAAAAAAAAJAP3/AAAAAAAAAAAIAP3/AAAAAAAAAAAHAP3/AAAAAAAAAAAGAP3/AAAAAAAAAAAFAP3/AAAAAAAAAAAEAP3/AAAAAAAAAAADAP3/AAAAAAAAAAACAP3/AAAAAAAAAAABAP3/AAAAAAAAAAAAAP3/AAAAAAAAAAD///3/AAAAAAAAAAD+//3/AAAAAAAAAAD9//3/AAAAAAAAAAD8//3/AAAAAAAAAAD7//3/AAAAAAAAAAD6//3/AAAAAAAAAAD5//3/AAAAAAAAAAD4//3/AAAAAAAAAAD7/wkAAAAAAAAAAAD7/wgAAAAAAAAAAAD7/wcAAAAAAAAAAAD7/wYAAAAAAAAAAAD7/wUAAAAAAAAAAAD7/wQAAAAAAAAAAAD7/wMAAAAAAAAAAAD7/wIAAAAAAAAAAAD7/wEAAAABAAEAAAD7/wAAAAAAAAAAAAD7////AAAAAAAAAAD7//7/AAAMAAQAAAD6//7/AAALAAQAAAD5//7/AAANAAQAAAD4//7/AAAMAAQAAAD4////AAAAAAAAAAD4/wAAAAAAAAAAAAD4/wEAAAAAAAAAAAD3/wEAAAAKAAUAAAD3/wIAAAAKAAUAAAD3/wMAAAAKAAYAAAD3/wQAAAAKAAUAAAD3/wUAAAAKAAYAAAD3/wYAAAAKAAUAAAD3/wcAAAAKAAYAAAD3/wgAAAAKAAUAAAD3/wkAAAAKAAYAAAD3/woAAAAOAAcAAAD3/wsAAAACAAIAAAD4/wsAAAAAAAAAAAD4/woAAAAAAAAAAAD4/wkAAAAAAAAAAAD4/wgAAAAAAAAAAAD4/wcAAAAAAAAAAAD4/wYAAAAAAAAAAAD4/wUAAAAAAAAAAAD4/wQAAAAAAAAAAAD4/wMAAAAAAAAAAAD4/wIAAAAAAAAAAAD5/wIAAAAAAAAAAAD5/wEAAAAAAAAAAAD5/wAAAAAAAAAAAAD5////AAAAAAAAAAD6////AAAAAAAAAAD6/wAAAAAAAAAAAAD6/wEAAAAAAAAAAAD6/wIAAAAAAAAAAAD6/wMAAAAAAAAAAAD5/wMAAAAAAAAAAAD5/wQAAAAAAAAAAAD5/wUAAAAAAAAAAAD5/wYAAAAAAAAAAAD5/wcAAAAAAAAAAAD5/wgAAAAAAAAAAAD5/wkAAAAAAAAAAAD5/woAAAAAAAAAAAD5/wsAAAAAAAAAAAD5/wwAAAAAAAAAAAD4/wwAAAAAAAAAAAD6/wwAAAAAAAAAAAD6/wsAAAAAAAAAAAD6/woAAAAAAAAAAAD6/wkAAAAAAAAAAAD6/wgAAAAAAAAAAAD6/wcAAAAAAAAAAAD6/wYAAAAAAAAAAAD6/wUAAAAAAAAAAAD6/wQAAAAAAAAAAAD7/woAAAAAAAAAAAD7/wsAAAAAAAAAAAD7/wwAAAAAAAAAAAD8/wwAAAAAAAAAAAD8/wsAAAAAAAAAAAD8/woAAAAAAAAAAAD8/wkAAAAAAAAAAAD8/wgAAAAAAAAAAAD8/wcAAAAAAAAAAAD8/wYAAAABAAEAAAD8/wUAAAABAAEAAAD8/wQAAAAAAAAAAAD8/wMAAAAAAAAAAAD8/wIAAAAAAAAAAAD8/wEAAAAAAAAAAAD8/wAAAAAAAAAAAAD8////AAAAAAAAAAD8//7/AAANAAQAAAD9//7/AAALAAQAAAD9////AAAAAAAAAAD9/wAAAAAAAAAAAAD9/wEAAAAAAAAAAAD9/wIAAAAAAAAAAAD9/wMAAAAAAAAAAAD9/wQAAAAAAAAAAAD9/wUAAAAAAAAAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAAAAAAAAAD9/wkAAAAAAAAAAAD9/woAAAAAAAAAAAD9/wsAAAAAAAAAAAD9/wwAAAABAAEAAAD9/w0AAAAAAAAAAAD8/w0AAAAAAAAAAAD+/w0AAAAAAAAAAAD+/wwAAAAAAAAAAAD+/wsAAAAAAAAAAAD+/woAAAAAAAAAAAD+/wkAAAAAAAAAAAD+/wgAAAAAAAAAAAD+/wcAAAACAAEAAAD+/wYAAAAAAAAAAAD+/wUAAAAAAAAAAAD+/wQAAAAAAAAAAAD+/wMAAAAAAAAAAAD+/wIAAAAAAAAAAAD+/wEAAAAAAAAAAAD+/wAAAAAAAAAAAAD+////AAADAAMAAAD+//7/AAAMAAQAAAD///7/AAANAAQAAAD/////AAADAAMAAAD//wAAAAAAAAAAAAD//wEAAAAAAAAAAAD//wIAAAAAAAAAAAD//wMAAAAAAAAAAAD//wQAAAAAAAAAAAD//wUAAAACAAEAAAD//wYAAAAAAAAAAAD//wcAAAABAAEAAAD//wgAAAACAAEAAAD//wkAAAAAAAAAAAD//woAAAAAAAAAAAD//wsAAAAAAAAAAAD//wwAAAAAAAAAAAD//w0AAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAADAAMAAAAAAP7/AAALAAQAAAABAP7/AAAMAAQAAAABAP//AAADAAMAAAABAAAAAAAAAAAAAAABAAEAAAAAAAAAAAABAAIAAAAAAAAAAAABAAMAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAABAAsAAAAAAAAAAAABAAwAAAAAAAAAAAABAA0AAAAAAAAAAAACAA0AAAAAAAAAAAACAAwAAAAAAAAAAAACAAsAAAAAAAAAAAACAAoAAAAAAAAAAAACAAkAAAAAAAAAAAACAAgAAAAAAAAAAAACAAcAAAAAAAAAAAACAAYAAAAAAAAAAAACAAUAAAAAAAAAAAACAAQAAAAAAAAAAAACAAMAAAAAAAAAAAACAAIAAAAAAAAAAAACAAEAAAAAAAAAAAACAAAAAAAAAAAAAAACAP//AAADAAMAAAACAP7/AAANAAQAAAADAP7/AAALAAQAAAADAP//AAAAAAAAAAADAAAAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAADAAkAAAAAAAAAAAADAAoAAAAAAAAAAAADAAsAAAAAAAAAAAADAAwAAAAAAAAAAAADAA0AAAAAAAAAAAADAA4AAAAMAAQAAAAEAA4AAAAOAAQAAAAEAA0AAAAAAAAAAAAEAAwAAAAAAAAAAAAEAAsAAAAAAAAAAAAEAAoAAAAAAAAAAAAEAAkAAAAAAAAAAAAEAAgAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAMAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAP//AAAAAAAAAAAEAP7/AAAMAAQAAAAFAP7/AAANAAQAAAAFAP//AAAAAAAAAAAFAAAAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAAAAAAAAAAFAAkAAAAAAAAAAAAFAAoAAAAAAAAAAAAFAAsAAAAAAAAAAAAFAAwAAAAAAAAAAAAFAA0AAAAAAAAAAAAFAA4AAAAAAAAAAAAGAA4AAAAAAAAAAAAGAA0AAAAAAAAAAAAGAAwAAAAAAAAAAAAGAAsAAAAAAAAAAAAGAAoAAAAAAAAAAAAGAAkAAAAAAAAAAAAGAAgAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAMAAAAAAAAAAAAGAAIAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAP//AAAAAAAAAAAGAP7/AAALAAQAAAAHAP7/AAAMAAQAAAAHAP//AAAAAAAAAAAHAAAAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAABAAEAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAAAAAAAAAAHAAgAAAABAAEAAAAHAAkAAAAAAAAAAAAHAAoAAAAAAAAAAAAHAAsAAAAAAAAAAAAHAAwAAAAAAAAAAAAHAA0AAAAAAAAAAAAHAA4AAAAAAAAAAAAIAA4AAAAKAAQAAAAIAA0AAAAAAAAAAAAIAAwAAAABAAEAAAAIAAsAAAAAAAAAAAAIAAoAAAAAAAAAAAAIAAkAAAAAAAAAAAAIAAgAAAAAAAAAAAAIAAcAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAMAAAAAAAAAAAAIAAIAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAP//AAAAAAAAAAAIAP7/AAANAAQAAAAJAP7/AAALAAQAAAAJAP//AAAAAAAAAAAJAAAAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAJAAcAAAAAAAAAAAAJAAgAAAAAAAAAAAAJAAkAAAAAAAAAAAAJAAoAAAAAAAAAAAAJAAsAAAAAAAAAAAAJAAwAAAAAAAAAAAAJAA0AAAAAAAAAAAAJAA4AAAALAAQAAAAKAA4AAAALAAQAAAAKAA0AAAAAAAAAAAAKAAwAAAAAAAAAAAAKAAsAAAAAAAAAAAAKAAoAAAAAAAAAAAAKAAkAAAAAAAAAAAAKAAgAAAABAAMAAAAKAAcAAAABAAIAAAAKAAYAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAAAAAAAAAAAAAAKAP//AAAAAAAAAAAKAP7/AAAMAAQAAAALAP7/AAANAAQAAAALAP//AAAAAAAAAAALAAAAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAALAAMAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAACAAIAAAALAAgAAAACAAMAAAALAAkAAAAAAAAAAAALAAoAAAAAAAAAAAALAAsAAAAAAAAAAAALAAwAAAAAAAAAAAALAA0AAAAAAAAAAAALAA4AAAALAAQAAAALAA8AAAAMAAYAAAAMAA8AAAANAAYAAAAMAA4AAAALAAQAAAAMAA0AAAAAAAAAAAAMAAwAAAAAAAAAAAAMAAsAAAAAAAAAAAAMAAoAAAAAAAAAAAAMAAkAAAAAAAAAAAAMAAgAAAAAAAAAAAAMAAcAAAABAAEAAAAMAAYAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAMAAAAAAAAAAAAMAAIAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAP//AAAAAAAAAAAMAP7/AAAMAAQAAAANAP7/AAANAAQAAAANAP//AAAAAAAAAAANAAAAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAANAAcAAAAAAAAAAAANAAgAAAAAAAAAAAANAAkAAAAAAAAAAAANAAoAAAAAAAAAAAANAAsAAAAAAAAAAAANAAwAAAAAAAAAAAANAA0AAAAAAAAAAAANAA4AAAALAAQAAAANAA8AAAALAAYAAAAOAA8AAAALAAYAAAAOAA4AAAALAAQAAAAOAA0AAAAAAAAAAAAOAAwAAAAAAAAAAAAOAAsAAAAAAAAAAAAOAAoAAAAAAAAAAAAOAAkAAAAAAAAAAAAOAAgAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAUAAAABAAMAAAAOAAQAAAABAAIAAAAOAAMAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAEAAAABAAMAAAAOAAAAAAABAAIAAAAOAP//AAAAAAAAAAAOAP7/AAALAAQAAAAPAP7/AAAMAAQAAAAPAP//AAAAAAAAAAAPAAAAAAACAAIAAAAPAAEAAAACAAEAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAACAAIAAAAPAAUAAAACAAMAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAPAAkAAAAAAAAAAAAPAAoAAAABAAEAAAAPAAsAAAAAAAAAAAAPAAwAAAAAAAAAAAAPAA0AAAAAAAAAAAAPAA4AAAALAAQAAAAPAA8AAAAMAAYAAAAQAA8AAAANAAYAAAAQAA4AAAALAAQAAAAQAA0AAAAAAAAAAAAQAAwAAAAAAAAAAAAQAAsAAAAAAAAAAAAQAAoAAAAAAAAAAAAQAAkAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAP//AAAAAAAAAAAQAP7/AAANAAQAAAARAP7/AAALAAQAAAARAP//AAAAAAAAAAARAAAAAAAAAAAAAAARAAEAAAABAAIAAAARAAIAAAABAAMAAAARAAMAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAAAAAAAAARAAkAAAAAAAAAAAARAAoAAAAAAAAAAAARAAsAAAAAAAAAAAARAAwAAAAAAAAAAAARAA0AAAAAAAAAAAARAA4AAAALAAQAAAARAA8AAAALAAYAAAASAA4AAAALAAQAAAASAA0AAAAAAAAAAAASAAwAAAAAAAAAAAASAAsAAAAAAAAAAAASAAoAAAAAAAAAAAASAAkAAAAAAAAAAAASAAgAAAAAAAAAAAASAAcAAAAAAAAAAAASAAYAAAAAAAAAAAASAAUAAAAAAAAAAAASAAQAAAAAAAAAAAASAAMAAAAAAAAAAAASAAIAAAACAAMAAAASAAEAAAACAAIAAAASAAAAAAAAAAAAAAASAP//AAAAAAAAAAASAP7/AAAMAAQAAAATAP7/AAANAAQAAAATAP//AAAAAAAAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAACAAEAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAATAAwAAAAAAAAAAAATAA0AAAAAAAAAAAATAA4AAAALAAQAAAAUAA4AAAALAAQAAAAUAA0AAAAAAAAAAAAUAAwAAAAAAAAAAAAUAAsAAAAAAAAAAAAUAAoAAAAAAAAAAAAUAAkAAAAAAAAAAAAUAAgAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAYAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAQAAAAAAAAAAAAUAAMAAAAAAAAAAAAUAAIAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAP//AAAAAAAAAAAUAP7/AAALAAQAAAAVAP7/AAAMAAQAAAAVAP//AAAAAAAAAAAVAAAAAAAAAAAAAAAVAAEAAAAAAAAAAAAVAAIAAAAAAAAAAAAVAAMAAAAAAAAAAAAVAAQAAAAAAAAAAAAVAAUAAAAAAAAAAAAVAAYAAAAAAAAAAAAVAAcAAAAAAAAAAAAVAAgAAAAAAAAAAAAVAAkAAAAAAAAAAAAVAAoAAAAAAAAAAAAVAAsAAAAAAAAAAAAVAAwAAAAAAAAAAAAVAA0AAAAAAAAAAAAWAA0AAAAAAAAAAAAWAAwAAAAAAAAAAAAWAAsAAAAAAAAAAAAWAAoAAAAAAAAAAAAWAAkAAAAAAAAAAAAWAAgAAAAAAAAAAAAWAAcAAAAAAAAAAAAWAAYAAAAAAAAAAAAWAAUAAAAAAAAAAAAWAAQAAAAAAAAAAAAWAAMAAAAAAAAAAAAWAAIAAAAAAAAAAAAWAAEAAAAAAAAAAAAWAAAAAAAAAAAAAAAWAP//AAAAAAAAAAAWAP7/AAANAAQAAAAXAAwAAAAKAAUAAAD4/w8AAAAMAAYAAAD4/w4AAAAMAAQAAAD3/w4AAAAMAAQAAAD2/w4AAAAMAAQAAAD2/w0AAAAAAAAAAAD2/w8AAAAMAAYAAAD2/xAAAAANAAcAAAD3/xAAAAANAAcAAAD3/w8AAAAMAAYAAAD4/xAAAAANAAcAAAD5/xAAAAAMAAcAAAD5/w8AAAAMAAYAAAD5/w4AAAAMAAQAAAD6/w4AAAAMAAQAAAD6/w8AAAANAAYAAAD6/xAAAAANAAcAAAD7/xAAAAALAAcAAAD7/w8AAAALAAYAAAD8/w8AAAAMAAYAAAD8/xAAAAAMAAcAAAD9/xAAAAANAAcAAAD9/w8AAAANAAYAAAD+/w8AAAALAAYAAAD+/xAAAAALAAcAAAD//xAAAAAMAAcAAAD//w8AAAAMAAYAAAAAAA8AAAANAAYAAAAAABAAAAANAAcAAAABABAAAAALAAcAAAABAA8AAAALAAYAAAACAA8AAAAMAAYAAAACABAAAAAMAAcAAAADABAAAAANAAcAAAAEABAAAAAOAAcAAAAFABAAAAAGAAUAAAAGABAAAAAGAAUAAAAHABAAAAAGAAUAAAAIABAAAAAKAAcAAAAJABAAAAANAAcAAAAKABAAAAALAAcAAAAXAA8AAAALAAYAAAAWAA8AAAANAAYAAAAWABAAAAANAAcAAAAVABAAAAAMAAcAAAAUABAAAAALAAcAAAATABAAAAANAAcAAAASABAAAAAMAAcAAAAXABAAAAALAAcAAAAYABAAAAALAAcAAAAYAA8AAAALAAYAAAAYAA4AAAALAAQAAAAYAAgAAAAAAAAAAAAYAAcAAAAAAAAAAAAYAAYAAAAAAAAAAAAYAAUAAAAAAAAAAAAYAAQAAAAAAAAAAAAYAAMAAAAAAAAAAAAYAAIAAAAAAAAAAAAYAAEAAAAAAAAAAAAYAAAAAAAAAAAAAAAYAP//AAAAAAAAAAAYAP7/AAAAAAAAAAAYAP3/AAAAAAAAAAAYAAkAAAAAAAAAAAAYAAoAAAALAAUAAAAYAAsAAAAAAAAAAAD2////AAAAAAAAAAD2//7/AAACAAIAAAD2//3/AAAAAAAAAAA=") + +[node name="Area01" parent="." unique_id=438390501 instance=ExtResource("3_h02n6")] +position = Vector2(-320, 400) +level = "uid://bm10cpflagmh" +target_area = "Area02" +size = 3 +snap_to_grid = true + +[node name="Area03" parent="." unique_id=1155013703 instance=ExtResource("3_h02n6")] +position = Vector2(208, 544) +level = "uid://bgarfydl3qc02" +target_area = "Area02" +size = 5 +side = 3 +snap_to_grid = true + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("4_u24ek")] +position = Vector2(65, 149) diff --git a/levels/areas/03.tscn b/levels/areas/03.tscn new file mode 100644 index 0000000..90a71b9 --- /dev/null +++ b/levels/areas/03.tscn @@ -0,0 +1,23 @@ +[gd_scene format=4 uid="uid://bgarfydl3qc02"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_o1goe"] +[ext_resource type="PackedScene" uid="uid://c28dglqe053m1" path="res://tiles_maps/grass-01.tscn" id="2_cslpf"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="3_qv43l"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="4_jt6os"] + +[node name="03" type="Node2D" unique_id=1123704002] +script = ExtResource("1_o1goe") + +[node name="Grass-01" parent="." unique_id=653632611 instance=ExtResource("2_cslpf")] +tile_map_data = PackedByteArray("AAD3//3/AAAMAAQAAAD3//7/AAAMAAYAAAD3////AAANAAcAAAD3/wAAAAAKAAUAAAD2/wAAAAAAAAAAAAD2/wEAAAACAAIAAAD2/wIAAAAAAAAAAAD2/wMAAAAAAAAAAAD2/wQAAAAAAAAAAAD2/wUAAAAAAAAAAAD2/wYAAAAAAAAAAAD2/wcAAAACAAIAAAD2/wgAAAAAAAAAAAD2/wkAAAAAAAAAAAD2/woAAAAAAAAAAAD2/wsAAAAAAAAAAAD2/wwAAAAAAAAAAAD3/wwAAAAKAAUAAAD3/w0AAAAKAAYAAAD4/w0AAAAKAAQAAAD5/w0AAAALAAQAAAD6/w0AAAAMAAQAAAD7/w0AAAANAAQAAAD7/w4AAAANAAUAAAD8/w4AAAAMAAUAAAD9/w4AAAANAAUAAAD+/w4AAAAMAAUAAAD//w4AAAANAAUAAAAAAA4AAAAMAAUAAAABAA4AAAANAAUAAAACAA4AAAAMAAUAAAADAA8AAAANAAYAAAAEAA8AAAAMAAYAAAAFAA8AAAANAAYAAAAGAA8AAAAMAAYAAAAHAA8AAAANAAYAAAAIAA8AAAAMAAYAAAAJAA8AAAANAAYAAAAKAA8AAAAMAAYAAAALABAAAAANAAcAAAAMABAAAAAMAAcAAAANABAAAAANAAcAAAAOABAAAAAMAAcAAAAPABAAAAANAAcAAAAQABAAAAAMAAcAAAARABAAAAANAAcAAAASAA8AAAAMAAYAAAATAA8AAAANAAYAAAAUAA8AAAAMAAYAAAAVAA8AAAANAAYAAAAVAA4AAAANAAUAAAAWAA4AAAAOAAUAAAAXAA4AAAAKAAUAAAAXAA0AAAAKAAUAAAAYAA0AAAALAAUAAAAYAAwAAAAAAAAAAAAXAAsAAAAKAAUAAAAXAAoAAAAKAAYAAAAXAAkAAAAKAAUAAAAXAAgAAAAKAAYAAAAXAAcAAAAKAAUAAAAXAAYAAAAKAAYAAAAXAAUAAAAKAAUAAAAXAAQAAAAKAAYAAAAXAAMAAAAKAAUAAAAXAAIAAAAKAAUAAAAXAAEAAAAKAAYAAAAXAAAAAAAKAAUAAAAXAP//AAALAAcAAAAXAP7/AAALAAYAAAAXAP3/AAALAAQAAAAWAP3/AAALAAQAAAAVAP3/AAALAAQAAAAUAP3/AAALAAQAAAATAP3/AAALAAQAAAASAP3/AAALAAQAAAARAP3/AAALAAQAAAAQAP3/AAALAAQAAAAPAP3/AAALAAQAAAAOAP3/AAALAAQAAAANAP3/AAALAAQAAAAMAP3/AAALAAQAAAALAP3/AAALAAQAAAAKAP3/AAALAAQAAAAJAP3/AAALAAQAAAAIAP3/AAAKAAQAAAAHAP3/AAAAAAAAAAAGAP3/AAAAAAAAAAAFAP3/AAAAAAAAAAAEAP3/AAAOAAQAAAADAP3/AAAMAAQAAAACAP3/AAAMAAQAAAABAP3/AAAMAAQAAAAAAP3/AAAMAAQAAAD///3/AAAMAAQAAAD+//3/AAAMAAQAAAD9//3/AAAMAAQAAAD8//3/AAAMAAQAAAD7//3/AAAMAAQAAAD6//3/AAAMAAQAAAD5//3/AAAMAAQAAAD4//3/AAAMAAQAAAD7/wkAAAAAAAAAAAD7/wgAAAAAAAAAAAD7/wcAAAAAAAAAAAD7/wYAAAAAAAAAAAD7/wUAAAAAAAAAAAD7/wQAAAAAAAAAAAD7/wMAAAAAAAAAAAD7/wIAAAAAAAAAAAD7/wEAAAABAAEAAAD7/wAAAAAAAAAAAAD7////AAALAAcAAAD7//7/AAALAAYAAAD6//7/AAANAAYAAAD5//7/AAAMAAYAAAD4//7/AAAMAAYAAAD4////AAANAAcAAAD4/wAAAAAAAAAAAAD4/wEAAAAAAAAAAAD3/wEAAAAKAAUAAAD3/wIAAAAKAAUAAAD3/wMAAAAKAAYAAAD3/wQAAAAKAAUAAAD3/wUAAAAKAAYAAAD3/wYAAAAKAAUAAAD3/wcAAAAKAAUAAAD3/wgAAAAKAAUAAAD3/wkAAAAKAAYAAAD3/woAAAAKAAUAAAD3/wsAAAAKAAYAAAD4/wsAAAAAAAAAAAD4/woAAAAAAAAAAAD4/wkAAAAAAAAAAAD4/wgAAAAAAAAAAAD4/wcAAAAAAAAAAAD4/wYAAAAAAAAAAAD4/wUAAAAAAAAAAAD4/wQAAAAAAAAAAAD4/wMAAAAAAAAAAAD4/wIAAAAAAAAAAAD5/wIAAAAAAAAAAAD5/wEAAAAAAAAAAAD5/wAAAAAAAAAAAAD5////AAAMAAcAAAD6////AAANAAcAAAD6/wAAAAAAAAAAAAD6/wEAAAAAAAAAAAD6/wIAAAAAAAAAAAD6/wMAAAAAAAAAAAD5/wMAAAAAAAAAAAD5/wQAAAAAAAAAAAD5/wUAAAAAAAAAAAD5/wYAAAAAAAAAAAD5/wcAAAAAAAAAAAD5/wgAAAAAAAAAAAD5/wkAAAAAAAAAAAD5/woAAAAAAAAAAAD5/wsAAAAAAAAAAAD5/wwAAAAAAAAAAAD4/wwAAAAAAAAAAAD6/wwAAAACAAIAAAD6/wsAAAACAAIAAAD6/woAAAAAAAAAAAD6/wkAAAAAAAAAAAD6/wgAAAAAAAAAAAD6/wcAAAAAAAAAAAD6/wYAAAAAAAAAAAD6/wUAAAAAAAAAAAD6/wQAAAAAAAAAAAD7/woAAAAAAAAAAAD7/wsAAAAAAAAAAAD7/wwAAAAAAAAAAAD8/wwAAAAAAAAAAAD8/wsAAAAAAAAAAAD8/woAAAAAAAAAAAD8/wkAAAAAAAAAAAD8/wgAAAAAAAAAAAD8/wcAAAAAAAAAAAD8/wYAAAABAAEAAAD8/wUAAAABAAEAAAD8/wQAAAAAAAAAAAD8/wMAAAAAAAAAAAD8/wIAAAAAAAAAAAD8/wEAAAAAAAAAAAD8/wAAAAAAAAAAAAD8////AAAMAAcAAAD8//7/AAAMAAYAAAD9//7/AAANAAYAAAD9////AAANAAcAAAD9/wAAAAAAAAAAAAD9/wEAAAAAAAAAAAD9/wIAAAAAAAAAAAD9/wMAAAAAAAAAAAD9/wQAAAAAAAAAAAD9/wUAAAAAAAAAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAAAAAAAAAD9/wkAAAAAAAAAAAD9/woAAAAAAAAAAAD9/wsAAAAAAAAAAAD9/wwAAAABAAEAAAD9/w0AAAANAAQAAAD8/w0AAAAMAAQAAAD+/w0AAAAMAAQAAAD+/wwAAAAAAAAAAAD+/wsAAAAAAAAAAAD+/woAAAAAAAAAAAD+/wkAAAAAAAAAAAD+/wgAAAAAAAAAAAD+/wcAAAACAAEAAAD+/wYAAAAAAAAAAAD+/wUAAAAAAAAAAAD+/wQAAAAAAAAAAAD+/wMAAAAAAAAAAAD+/wIAAAAAAAAAAAD+/wEAAAAAAAAAAAD+/wAAAAAAAAAAAAD+////AAALAAcAAAD+//7/AAALAAYAAAD///7/AAAMAAYAAAD/////AAAMAAcAAAD//wAAAAAAAAAAAAD//wEAAAAAAAAAAAD//wIAAAAAAAAAAAD//wMAAAAAAAAAAAD//wQAAAAAAAAAAAD//wUAAAACAAEAAAD//wYAAAAAAAAAAAD//wcAAAABAAEAAAD//wgAAAACAAEAAAD//wkAAAAAAAAAAAD//woAAAAAAAAAAAD//wsAAAAAAAAAAAD//wwAAAAAAAAAAAD//w0AAAANAAQAAAAAAA0AAAAMAAQAAAAAAAwAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAANAAcAAAAAAP7/AAANAAYAAAABAP7/AAALAAYAAAABAP//AAALAAcAAAABAAAAAAAAAAAAAAABAAEAAAAAAAAAAAABAAIAAAAAAAAAAAABAAMAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAABAAsAAAAAAAAAAAABAAwAAAAAAAAAAAABAA0AAAANAAQAAAACAA0AAAAMAAQAAAACAAwAAAAAAAAAAAACAAsAAAAAAAAAAAACAAoAAAAAAAAAAAACAAkAAAAAAAAAAAACAAgAAAAAAAAAAAACAAcAAAAAAAAAAAACAAYAAAAAAAAAAAACAAUAAAAAAAAAAAACAAQAAAAAAAAAAAACAAMAAAAAAAAAAAACAAIAAAAAAAAAAAACAAEAAAAAAAAAAAACAAAAAAAAAAAAAAACAP//AAAMAAcAAAACAP7/AAAMAAYAAAADAP7/AAANAAYAAAADAP//AAANAAcAAAADAAAAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAADAAkAAAAAAAAAAAADAAoAAAAAAAAAAAADAAsAAAAAAAAAAAADAAwAAAAAAAAAAAADAA0AAAANAAQAAAADAA4AAAANAAUAAAAEAA4AAAAMAAUAAAAEAA0AAAAMAAQAAAAEAAwAAAAAAAAAAAAEAAsAAAAAAAAAAAAEAAoAAAAAAAAAAAAEAAkAAAAAAAAAAAAEAAgAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAMAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAP//AAAOAAcAAAAEAP7/AAAOAAYAAAAFAP7/AAABAAMAAAAFAP//AAAAAAAAAAAFAAAAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAAAAAAAAAAFAAkAAAAAAAAAAAAFAAoAAAAAAAAAAAAFAAsAAAAAAAAAAAAFAAwAAAAAAAAAAAAFAA0AAAANAAQAAAAFAA4AAAANAAUAAAAGAA4AAAAMAAUAAAAGAA0AAAAMAAQAAAAGAAwAAAAAAAAAAAAGAAsAAAAAAAAAAAAGAAoAAAAAAAAAAAAGAAkAAAAAAAAAAAAGAAgAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAMAAAAAAAAAAAAGAAIAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAP//AAAAAAAAAAAGAP7/AAABAAMAAAAHAP7/AAABAAMAAAAHAP//AAAAAAAAAAAHAAAAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAABAAEAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAAAAAAAAAAHAAgAAAABAAEAAAAHAAkAAAAAAAAAAAAHAAoAAAAAAAAAAAAHAAsAAAAAAAAAAAAHAAwAAAAAAAAAAAAHAA0AAAANAAQAAAAHAA4AAAANAAUAAAAIAA4AAAAMAAUAAAAIAA0AAAAMAAQAAAAIAAwAAAABAAEAAAAIAAsAAAAAAAAAAAAIAAoAAAAAAAAAAAAIAAkAAAAAAAAAAAAIAAgAAAAAAAAAAAAIAAcAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAMAAAAAAAAAAAAIAAIAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAP//AAAKAAcAAAAIAP7/AAAKAAYAAAAJAP7/AAANAAYAAAAJAP//AAANAAcAAAAJAAAAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAJAAcAAAAAAAAAAAAJAAgAAAAAAAAAAAAJAAkAAAAAAAAAAAAJAAoAAAAAAAAAAAAJAAsAAAAAAAAAAAAJAAwAAAAAAAAAAAAJAA0AAAANAAQAAAAJAA4AAAANAAUAAAAKAA4AAAAMAAUAAAAKAA0AAAAMAAQAAAAKAAwAAAAAAAAAAAAKAAsAAAAAAAAAAAAKAAoAAAAAAAAAAAAKAAkAAAAAAAAAAAAKAAgAAAABAAMAAAAKAAcAAAABAAIAAAAKAAYAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAAAAAAAAAAAAAAKAP//AAALAAcAAAAKAP7/AAALAAYAAAALAP7/AAAMAAYAAAALAP//AAAMAAcAAAALAAAAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAALAAMAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAACAAIAAAALAAgAAAACAAMAAAALAAkAAAAAAAAAAAALAAoAAAAAAAAAAAALAAsAAAAAAAAAAAALAAwAAAAAAAAAAAALAA0AAAANAAQAAAALAA4AAAANAAUAAAALAA8AAAANAAYAAAAMAA8AAAAMAAYAAAAMAA4AAAAMAAUAAAAMAA0AAAAMAAQAAAAMAAwAAAAAAAAAAAAMAAsAAAAAAAAAAAAMAAoAAAAAAAAAAAAMAAkAAAAAAAAAAAAMAAgAAAAAAAAAAAAMAAcAAAABAAEAAAAMAAYAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAMAAAAAAAAAAAAMAAIAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAP//AAANAAcAAAAMAP7/AAANAAYAAAANAP7/AAALAAYAAAANAP//AAALAAcAAAANAAAAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAANAAcAAAAAAAAAAAANAAgAAAAAAAAAAAANAAkAAAAAAAAAAAANAAoAAAAAAAAAAAANAAsAAAAAAAAAAAANAAwAAAAAAAAAAAANAA0AAAANAAQAAAANAA4AAAANAAUAAAANAA8AAAANAAYAAAAOAA8AAAAMAAYAAAAOAA4AAAAMAAUAAAAOAA0AAAAMAAQAAAAOAAwAAAAAAAAAAAAOAAsAAAAAAAAAAAAOAAoAAAAAAAAAAAAOAAkAAAAAAAAAAAAOAAgAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAUAAAABAAMAAAAOAAQAAAABAAIAAAAOAAMAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAEAAAABAAMAAAAOAAAAAAABAAIAAAAOAP//AAALAAcAAAAOAP7/AAALAAYAAAAPAP7/AAAMAAYAAAAPAP//AAAMAAcAAAAPAAAAAAACAAIAAAAPAAEAAAACAAEAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAACAAIAAAAPAAUAAAACAAMAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAPAAkAAAAAAAAAAAAPAAoAAAABAAEAAAAPAAsAAAAAAAAAAAAPAAwAAAAAAAAAAAAPAA0AAAANAAQAAAAPAA4AAAANAAUAAAAPAA8AAAANAAYAAAAQAA8AAAAMAAYAAAAQAA0AAAAMAAQAAAAQAAwAAAAAAAAAAAAQAAsAAAAAAAAAAAAQAAoAAAAAAAAAAAAQAAkAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAP//AAANAAcAAAAQAP7/AAANAAYAAAARAP7/AAALAAYAAAARAP//AAALAAcAAAARAAAAAAAAAAAAAAARAAEAAAABAAIAAAARAAIAAAABAAMAAAARAAMAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAAAAAAAAARAAkAAAAAAAAAAAARAAoAAAAAAAAAAAARAAsAAAAAAAAAAAARAAwAAAAAAAAAAAARAA0AAAANAAQAAAARAA4AAAANAAUAAAARAA8AAAANAAYAAAASAA4AAAAMAAUAAAASAA0AAAAMAAQAAAASAAwAAAAAAAAAAAASAAsAAAAAAAAAAAASAAoAAAAAAAAAAAASAAkAAAAAAAAAAAASAAgAAAAAAAAAAAASAAcAAAAAAAAAAAASAAYAAAAAAAAAAAASAAUAAAAAAAAAAAASAAQAAAAAAAAAAAASAAMAAAAAAAAAAAASAAIAAAACAAMAAAASAAEAAAACAAIAAAASAAAAAAAAAAAAAAASAP//AAAMAAcAAAASAP7/AAAMAAYAAAATAP7/AAANAAYAAAATAP//AAANAAcAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAACAAEAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAATAAwAAAAAAAAAAAATAA0AAAANAAQAAAATAA4AAAANAAUAAAAUAA4AAAAMAAUAAAAUAA0AAAAMAAQAAAAUAAwAAAAAAAAAAAAUAAsAAAAAAAAAAAAUAAoAAAAAAAAAAAAUAAkAAAAAAAAAAAAUAAgAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAYAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAQAAAAAAAAAAAAUAAMAAAAAAAAAAAAUAAIAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAP//AAALAAcAAAAUAP7/AAALAAYAAAAVAP7/AAAMAAYAAAAVAP//AAAMAAcAAAAVAAAAAAAAAAAAAAAVAAEAAAAAAAAAAAAVAAIAAAAAAAAAAAAVAAMAAAAAAAAAAAAVAAQAAAAAAAAAAAAVAAUAAAAAAAAAAAAVAAYAAAAAAAAAAAAVAAcAAAAAAAAAAAAVAAgAAAAAAAAAAAAVAAkAAAAAAAAAAAAVAAoAAAAAAAAAAAAVAAsAAAAAAAAAAAAVAAwAAAAAAAAAAAAVAA0AAAANAAQAAAAWAA0AAAAOAAQAAAAWAAwAAAAAAAAAAAAWAAsAAAAAAAAAAAAWAAoAAAAAAAAAAAAWAAkAAAAAAAAAAAAWAAgAAAAAAAAAAAAWAAcAAAAAAAAAAAAWAAYAAAAAAAAAAAAWAAUAAAAAAAAAAAAWAAQAAAAAAAAAAAAWAAMAAAAAAAAAAAAWAAIAAAAAAAAAAAAWAAEAAAAAAAAAAAAWAAAAAAAAAAAAAAAWAP//AAANAAcAAAAWAP7/AAANAAYAAAAXAAwAAAAKAAYAAAD4/w8AAAAKAAYAAAD4/w4AAAAKAAUAAAD3/w4AAAAKAAUAAAD2/w4AAAAAAAAAAAD2/w0AAAAAAAAAAAD2/w8AAAAMAAYAAAD2/xAAAAAMAAcAAAD3/xAAAAAOAAcAAAD3/w8AAAAKAAYAAAD4/xAAAAAKAAcAAAD5/xAAAAALAAcAAAD5/w8AAAALAAYAAAD5/w4AAAALAAUAAAD6/w4AAAAMAAUAAAD6/w8AAAAMAAYAAAD6/xAAAAAMAAcAAAD7/xAAAAANAAcAAAD7/w8AAAANAAYAAAD8/w8AAAAMAAYAAAD8/xAAAAAMAAcAAAD9/xAAAAANAAcAAAD9/w8AAAANAAYAAAD+/w8AAAAMAAYAAAD+/xAAAAAMAAcAAAD//xAAAAANAAcAAAD//w8AAAANAAYAAAAAAA8AAAAMAAYAAAAAABAAAAAMAAcAAAABABAAAAANAAcAAAABAA8AAAANAAYAAAACAA8AAAAMAAYAAAACABAAAAAMAAcAAAADABAAAAANAAcAAAAEABAAAAAMAAcAAAAFABAAAAANAAcAAAAGABAAAAAMAAcAAAAHABAAAAANAAcAAAAIABAAAAAMAAcAAAAJABAAAAANAAcAAAAKABAAAAAMAAcAAAAXAA8AAAAKAAUAAAAWAA8AAAAOAAYAAAAWABAAAAAOAAcAAAAVABAAAAANAAcAAAAUABAAAAAMAAcAAAATABAAAAANAAcAAAASABAAAAAMAAcAAAAXABAAAAAKAAcAAAAYABAAAAAMAAcAAAAYAA8AAAAMAAYAAAAYAA4AAAAAAAAAAAAYAAgAAAAAAAAAAAAYAAcAAAAAAAAAAAAYAAYAAAAAAAAAAAAYAAUAAAAAAAAAAAAYAAQAAAAAAAAAAAAYAAMAAAAAAAAAAAAYAAIAAAAAAAAAAAAYAAEAAAAAAAAAAAAYAAAAAAAAAAAAAAAYAP//AAALAAcAAAAYAP7/AAALAAYAAAAYAP3/AAALAAQAAAAYAAkAAAAAAAAAAAAYAAoAAAAAAAAAAAAYAAsAAAAAAAAAAAD2////AAANAAcAAAD2//7/AAAMAAYAAAD2//3/AAAMAAQAAAAQAA4AAAAMAAUAAAA=") + +[node name="Area02" parent="." unique_id=438390501 instance=ExtResource("3_qv43l")] +position = Vector2(208, -96) +level = "uid://cqakopgkjlf7e" +target_area = "Area03" +size = 4 +side = 2 +snap_to_grid = true + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("4_jt6os")] +position = Vector2(65, 149) diff --git a/levels/dungeons/d01.tscn b/levels/dungeons/d01.tscn new file mode 100644 index 0000000..b3e4dd8 --- /dev/null +++ b/levels/dungeons/d01.tscn @@ -0,0 +1,44 @@ +[gd_scene format=4 uid="uid://btu35v1s43w0k"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_n0ymk"] +[ext_resource type="PackedScene" uid="uid://dt4nil8vsgejc" path="res://tiles_maps/dungeon-01.tscn" id="2_ny1k4"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="3_ypbjp"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="4_ypbjp"] +[ext_resource type="PackedScene" uid="uid://c1a61ng23qg3v" path="res://interactables/dungeon/pressure_plate.tscn" id="5_m3rwv"] +[ext_resource type="PackedScene" uid="uid://bc7hmfth8je8e" path="res://interactables/dungeon/barred_door.tscn" id="6_5loeg"] +[ext_resource type="PackedScene" uid="uid://c6u7f6xj7pw73" path="res://interactables/dungeon/pushable_statue.tscn" id="7_ucno3"] + +[node name="D01" type="Node2D" unique_id=1097787906] +script = ExtResource("1_n0ymk") + +[node name="Dungeon01" parent="." unique_id=1326609295 instance=ExtResource("2_ny1k4")] +position = Vector2(-104, -56) +tile_map_data = PackedByteArray("AAAAAAAAAAAJAAAAAAAAAAEAAAAJAAEAAAAAAAIAAAAJAAIAAAAAAAMAAAAJAAMAAAAAAAQAAAAJAAQAAAAAAAUAAAAJAAUAAAAAAAYAAAAJAAEAAAAAAAcAAAAJAAIAAAAAAAgAAAAJAAMAAAAAAAkAAAAJAAQAAAAAAAoAAAAJAAUAAAAAAAsAAAAJAAYAAAABAAsAAAAKAAYAAAACAAsAAAALAAYAAAADAAsAAAAMAAYAAAAEAAsAAAANAAYAAAAFAAsAAAAOAAYAAAAGAAsAAAAKAAYAAAAHAAsAAAALAAYAAAAIAAsAAAAMAAYAAAAJAAsAAAAAAAcAAAAKAAsAAAABAAcAAAALAAsAAAACAAcAAAAMAAsAAAADAAcAAAANAAsAAAAMAAYAAAAOAAsAAAAKAAYAAAAPAAsAAAALAAYAAAAQAAsAAAAMAAYAAAARAAsAAAANAAYAAAASAAsAAAAOAAYAAAAJAAkAAAAAAAUAAAAJAAoAAAAAAAYAAAAKAAkAAAABAAUAAAAKAAoAAAABAAYAAAALAAkAAAACAAUAAAALAAoAAAACAAYAAAAMAAkAAAADAAUAAAAMAAoAAAADAAYAAAATAAsAAAANAAYAAAAUAAsAAAAOAAYAAAAVAAsAAAAPAAYAAAAVAAYAAAAPAAEAAAAVAAcAAAAPAAIAAAAVAAgAAAAPAAMAAAAVAAkAAAAPAAQAAAAVAAoAAAAPAAUAAAAVAAEAAAAPAAEAAAAVAAIAAAAPAAIAAAAVAAMAAAAPAAMAAAAVAAQAAAAPAAQAAAAVAAUAAAAPAAUAAAAQAAAAAAAKAAAAAAARAAAAAAALAAAAAAASAAAAAAAMAAAAAAATAAAAAAANAAAAAAAUAAAAAAAOAAAAAAAVAAAAAAAPAAAAAAALAAAAAAAGAAUAAAAMAAAAAAAHAAUAAAANAAAAAAAMAAAAAAAOAAAAAAANAAAAAAAPAAAAAAAOAAAAAAAHAAAAAAAOAAAAAAAIAAAAAAALAAAAAAAJAAAAAAAEAAUAAAAKAAAAAAAFAAUAAAADAAAAAAANAAAAAAAEAAAAAAAOAAAAAAAFAAAAAAAMAAAAAAAGAAAAAAANAAAAAAABAAAAAAALAAAAAAACAAAAAAAMAAAAAAAJAAEAAAAEAAYAAAAJAAIAAAAEAAcAAAAKAAEAAAAFAAYAAAAKAAIAAAAFAAcAAAALAAEAAAAGAAYAAAALAAIAAAAGAAcAAAAMAAEAAAAHAAYAAAAMAAIAAAAHAAcAAAAIAAEAAAAGAAMAAAAIAAIAAAAGAAQAAAAHAAEAAAAGAAMAAAAHAAIAAAAGAAQAAAANAAEAAAAGAAMAAAANAAIAAAAGAAQAAAAOAAEAAAAGAAMAAAAOAAIAAAAGAAQAAAAQAAEAAAAHAAYAAAAQAAIAAAAHAAcAAAAGAAEAAAAHAAYAAAAGAAIAAAAHAAcAAAAPAAEAAAAEAAYAAAAPAAIAAAAEAAcAAAAFAAEAAAAEAAYAAAAFAAIAAAAEAAcAAAAEAAEAAAAGAAMAAAAEAAIAAAAGAAQAAAADAAEAAAAGAAMAAAADAAIAAAAGAAQAAAACAAEAAAALAAEAAAACAAIAAAALAAIAAAABAAEAAAAKAAEAAAABAAIAAAAKAAIAAAARAAEAAAAGAAMAAAARAAIAAAAGAAQAAAASAAEAAAAGAAMAAAASAAIAAAAGAAQAAAATAAEAAAANAAEAAAATAAIAAAANAAIAAAAUAAEAAAAOAAEAAAAUAAIAAAAOAAIAAAABAAMAAAAHAAIAAAACAAMAAAAIAAIAAAABAAQAAAAHAAIAAAACAAQAAAAIAAIAAAABAAUAAAAHAAIAAAACAAUAAAAIAAIAAAABAAYAAAAHAAIAAAACAAYAAAAIAAIAAAABAAcAAAAHAAIAAAACAAcAAAAIAAIAAAATAAcAAAANAAMAAAAUAAcAAAAOAAMAAAATAAgAAAANAAMAAAAUAAgAAAAOAAMAAAATAAYAAAANAAMAAAAUAAYAAAAOAAMAAAATAAUAAAANAAMAAAAUAAUAAAAOAAMAAAATAAQAAAANAAMAAAAUAAQAAAAOAAMAAAATAAMAAAANAAMAAAAUAAMAAAAOAAMAAAATAAkAAAANAAQAAAATAAoAAAANAAUAAAAUAAkAAAAOAAQAAAAUAAoAAAAOAAUAAAASAAkAAAAMAAQAAAASAAoAAAAMAAUAAAARAAkAAAAMAAQAAAARAAoAAAAMAAUAAAAQAAkAAAADAAUAAAAQAAoAAAADAAYAAAAPAAkAAAAAAAUAAAAPAAoAAAAAAAYAAAAOAAkAAAAMAAQAAAAOAAoAAAAMAAUAAAANAAkAAAAMAAQAAAANAAoAAAAMAAUAAAAGAAkAAAADAAUAAAAGAAoAAAADAAYAAAAFAAkAAAAAAAUAAAAFAAoAAAAAAAYAAAAIAAkAAAAMAAQAAAAIAAoAAAAMAAUAAAAHAAkAAAAMAAQAAAAHAAoAAAAMAAUAAAAEAAkAAAAMAAQAAAAEAAoAAAAMAAUAAAADAAkAAAAMAAQAAAADAAoAAAAMAAUAAAACAAkAAAALAAQAAAACAAoAAAALAAUAAAABAAkAAAAKAAQAAAABAAoAAAAKAAUAAAABAAgAAAAHAAIAAAACAAgAAAAIAAIAAAAPAAYAAAADAAEAAAAPAAcAAAADAAIAAAAPAAgAAAADAAIAAAAQAAYAAAACAAIAAAAQAAcAAAABAAEAAAAQAAgAAAABAAIAAAARAAYAAAADAAIAAAARAAcAAAACAAEAAAARAAgAAAACAAIAAAASAAYAAAADAAAAAAASAAcAAAADAAEAAAASAAgAAAADAAIAAAAMAAYAAAAAAAEAAAAMAAcAAAAAAAIAAAAMAAgAAAADAAIAAAANAAYAAAABAAEAAAANAAcAAAABAAIAAAANAAgAAAABAAIAAAAOAAYAAAACAAEAAAAOAAcAAAACAAIAAAAOAAgAAAACAAIAAAAJAAYAAAABAAEAAAAJAAcAAAABAAIAAAAJAAgAAAACAAIAAAAKAAYAAAACAAEAAAAKAAcAAAACAAIAAAAKAAgAAAADAAIAAAALAAYAAAADAAEAAAALAAcAAAADAAIAAAALAAgAAAACAAIAAAAHAAYAAAADAAAAAAAHAAcAAAADAAEAAAAHAAgAAAADAAIAAAAIAAYAAAAAAAEAAAAIAAcAAAAAAAIAAAAIAAgAAAABAAIAAAAEAAYAAAABAAIAAAAEAAcAAAABAAEAAAAEAAgAAAABAAIAAAAFAAYAAAACAAIAAAAFAAcAAAACAAEAAAAFAAgAAAACAAIAAAAGAAYAAAADAAIAAAAGAAcAAAADAAEAAAAGAAgAAAADAAIAAAADAAYAAAAAAAIAAAADAAcAAAAAAAEAAAADAAgAAAAAAAIAAAAEAAMAAAABAAAAAAAEAAQAAAABAAAAAAAEAAUAAAABAAEAAAAFAAMAAAACAAAAAAAFAAQAAAACAAAAAAAFAAUAAAACAAEAAAAGAAMAAAADAAAAAAAGAAQAAAADAAAAAAAGAAUAAAADAAEAAAAHAAMAAAAAAAAAAAAHAAQAAAAAAAEAAAAHAAUAAAAAAAIAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAEAAAAIAAMAAAABAAAAAAAIAAQAAAABAAEAAAAIAAUAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAEAAAAJAAUAAAABAAAAAAAKAAMAAAABAAAAAAAKAAQAAAABAAEAAAAKAAUAAAACAAAAAAALAAMAAAACAAAAAAALAAQAAAACAAEAAAALAAUAAAADAAAAAAAMAAMAAAADAAAAAAAMAAQAAAADAAEAAAAMAAUAAAAAAAAAAAANAAUAAAABAAAAAAANAAQAAAAAAAEAAAAOAAQAAAAAAAAAAAAOAAUAAAACAAAAAAAPAAQAAAAAAAEAAAAPAAUAAAAAAAIAAAAQAAQAAAABAAEAAAAQAAUAAAABAAIAAAANAAMAAAAAAAAAAAAOAAMAAAABAAAAAAAPAAMAAAAAAAAAAAAQAAMAAAABAAMAAAARAAMAAAACAAAAAAARAAQAAAACAAEAAAARAAUAAAACAAIAAAASAAMAAAABAAMAAAASAAQAAAADAAEAAAASAAUAAAADAAIAAAD+/w0AAAAJAAcAAAD+/wwAAAAJAAcAAAD+/wsAAAAJAAcAAAD+/woAAAAJAAcAAAD+/wkAAAAJAAcAAAD+/wgAAAAJAAcAAAD+/wcAAAAJAAcAAAD+/wYAAAAJAAcAAAD+/wUAAAAJAAcAAAD+/wQAAAAJAAcAAAD+/wMAAAAJAAcAAAD+/wIAAAAJAAcAAAD+/wEAAAAJAAcAAAD+/wAAAAAJAAcAAAD+////AAAJAAcAAAD+//7/AAAJAAcAAAAAAAwAAAAJAAcAAAD//wwAAAAJAAcAAAD//wsAAAAJAAcAAAD//woAAAAJAAcAAAD//wkAAAAJAAcAAAD//wgAAAAJAAcAAAD//wcAAAAJAAcAAAD//wYAAAAJAAcAAAD//wUAAAAJAAcAAAD//wQAAAAJAAcAAAD//wMAAAAJAAcAAAD//wIAAAAJAAcAAAD//wEAAAAJAAcAAAD//wAAAAAJAAcAAAD/////AAAJAAcAAAD///7/AAAJAAcAAAAAAP7/AAAJAAcAAAAAAP//AAAJAAcAAAABAP//AAAJAAcAAAABAP7/AAAJAAcAAAACAP7/AAAJAAcAAAACAP//AAAJAAcAAAADAP//AAAJAAcAAAADAP7/AAAJAAcAAAAEAP7/AAAJAAcAAAAEAP//AAAJAAcAAAAFAP//AAAJAAcAAAAFAP7/AAAJAAcAAAAGAP7/AAAJAAcAAAAGAP//AAAJAAcAAAAHAP//AAAJAAcAAAAHAP7/AAAJAAcAAAAIAP7/AAAJAAcAAAAIAP//AAAJAAcAAAAJAP//AAAJAAcAAAAJAP7/AAAJAAcAAAAKAP7/AAAJAAcAAAAKAP//AAAJAAcAAAALAP//AAAJAAcAAAALAP7/AAAJAAcAAAAMAP7/AAAJAAcAAAAMAP//AAAJAAcAAAANAP//AAAJAAcAAAANAP7/AAAJAAcAAAAOAP7/AAAJAAcAAAAOAP//AAAJAAcAAAAPAP//AAAJAAcAAAAPAP7/AAAJAAcAAAAQAP7/AAAJAAcAAAAQAP//AAAJAAcAAAARAP//AAAJAAcAAAARAP7/AAAJAAcAAAASAP7/AAAJAAcAAAASAP//AAAJAAcAAAATAP//AAAJAAcAAAATAP7/AAAJAAcAAAAUAP7/AAAJAAcAAAAUAP//AAAJAAcAAAAVAP//AAAJAAcAAAAVAP7/AAAJAAcAAAD//w0AAAAJAAcAAAAAAA0AAAAJAAcAAAABAA0AAAAJAAcAAAABAAwAAAAJAAcAAAACAAwAAAAJAAcAAAACAA0AAAAJAAcAAAADAA0AAAAJAAcAAAADAAwAAAAJAAcAAAAEAAwAAAAJAAcAAAAEAA0AAAAJAAcAAAAFAA0AAAAJAAcAAAAFAAwAAAAJAAcAAAAGAAwAAAAJAAcAAAAGAA0AAAAJAAcAAAAHAA0AAAAJAAcAAAAHAAwAAAAJAAcAAAAIAAwAAAAJAAcAAAAIAA0AAAAJAAcAAAAJAA0AAAAJAAcAAAAJAAwAAAAJAAcAAAAKAAwAAAAJAAcAAAAKAA0AAAAJAAcAAAALAA0AAAAJAAcAAAALAAwAAAAJAAcAAAAMAAwAAAAJAAcAAAAMAA0AAAAJAAcAAAANAA0AAAAJAAcAAAANAAwAAAAJAAcAAAAOAAwAAAAJAAcAAAAOAA0AAAAJAAcAAAAPAA0AAAAJAAcAAAAPAAwAAAAJAAcAAAAQAAwAAAAJAAcAAAAQAA0AAAAJAAcAAAARAA0AAAAJAAcAAAARAAwAAAAJAAcAAAASAAwAAAAJAAcAAAASAA0AAAAJAAcAAAATAA0AAAAJAAcAAAATAAwAAAAJAAcAAAAUAAwAAAAJAAcAAAAUAA0AAAAJAAcAAAAVAA0AAAAJAAcAAAAVAAwAAAAJAAcAAAAWAA0AAAAJAAcAAAAXAA0AAAAJAAcAAAAWAP7/AAAJAAcAAAAXAP7/AAAJAAcAAAAWAAgAAAAJAAcAAAAWAAcAAAAJAAcAAAAWAAYAAAAJAAcAAAAWAAUAAAAJAAcAAAAWAAQAAAAJAAcAAAAWAAMAAAAJAAcAAAAWAAIAAAAJAAcAAAAWAAEAAAAJAAcAAAAWAAAAAAAJAAcAAAAWAP//AAAJAAcAAAAXAP//AAAJAAcAAAAXAAAAAAAJAAcAAAAXAAEAAAAJAAcAAAAXAAIAAAAJAAcAAAAXAAMAAAAJAAcAAAAXAAQAAAAJAAcAAAAXAAUAAAAJAAcAAAAXAAYAAAAJAAcAAAAXAAcAAAAJAAcAAAAXAAgAAAAJAAcAAAAXAAkAAAAJAAcAAAAWAAkAAAAJAAcAAAAWAAoAAAAJAAcAAAAWAAsAAAAJAAcAAAAWAAwAAAAJAAcAAAAXAAwAAAAJAAcAAAAXAAsAAAAJAAcAAAAXAAoAAAAJAAcAAAA=") + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("3_ypbjp")] +position = Vector2(208, 152) + +[node name="PressurePlate" parent="." unique_id=65868926 instance=ExtResource("5_m3rwv")] +position = Vector2(104, 136) + +[node name="BarredDoor" parent="." unique_id=2031413673 instance=ExtResource("6_5loeg")] +position = Vector2(216, 32) + +[node name="PushableStatue" parent="." unique_id=796294784 instance=ExtResource("7_ucno3")] +position = Vector2(168, 138) + +[node name="FD1TD2" parent="." unique_id=438390501 instance=ExtResource("4_ypbjp")] +position = Vector2(248, 24) +level = "uid://bb2tupwi3i4eh" +target_area = "FD2TD1" +center_player = true +side = 2 + +[node name="FD1T1" parent="." unique_id=1593471098 instance=ExtResource("4_ypbjp")] +position = Vector2(248, 248) +level = "uid://bm10cpflagmh" +target_area = "F1TD1" +side = 3 + +[connection signal="activated" from="PressurePlate" to="BarredDoor" method="open_door"] +[connection signal="deactivated" from="PressurePlate" to="BarredDoor" method="close_door"] diff --git a/levels/dungeons/d02.tscn b/levels/dungeons/d02.tscn new file mode 100644 index 0000000..4a34dee --- /dev/null +++ b/levels/dungeons/d02.tscn @@ -0,0 +1,292 @@ +[gd_scene format=4 uid="uid://bb2tupwi3i4eh"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_k6gpd"] +[ext_resource type="PackedScene" uid="uid://dt4nil8vsgejc" path="res://tiles_maps/dungeon-01.tscn" id="2_mf67o"] +[ext_resource type="Texture2D" uid="uid://cim3u2o47fu7v" path="res://tiles_maps/sprites/dungeon.png" id="3_sc4fk"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="4_7d4oo"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="5_d4y5w"] +[ext_resource type="PackedScene" uid="uid://c5nlta1d2wt5g" path="res://interactables/dungeon/locked_door.tscn" id="6_u4dub"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_d4y5w"] +texture = ExtResource("3_sc4fk") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:0/0 = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:0/0 = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:0/0 = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:0/0 = 0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:0/0 = 0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:0/0 = 0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:0/0 = 0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:0/0 = 0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:0/0 = 0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:0/0 = 0 +14:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:0/0 = 0 +15:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:1/0 = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:1/0 = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:1/0 = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:1/0 = 0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:1/0 = 0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:1/0 = 0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:1/0 = 0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:1/0 = 0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:1/0 = 0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:1/0 = 0 +14:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:1/0 = 0 +15:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:2/0 = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:2/0 = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:2/0 = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:2/0 = 0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:2/0 = 0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:2/0 = 0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:2/0 = 0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:2/0 = 0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:2/0 = 0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:2/0 = 0 +14:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:2/0 = 0 +15:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:3/0 = 0 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:3/0 = 0 +4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:3/0 = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:3/0 = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:3/0 = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:3/0 = 0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:3/0 = 0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:3/0 = 0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:3/0 = 0 +11:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:3/0 = 0 +13:3/0 = 0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:3/0 = 0 +14:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:3/0 = 0 +15:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:4/0 = 0 +3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:4/0 = 0 +4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:4/0 = 0 +5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:4/0 = 0 +6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:4/0 = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:4/0 = 0 +8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:4/0 = 0 +9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:4/0 = 0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:4/0 = 0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:4/0 = 0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:4/0 = 0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:4/0 = 0 +14:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:4/0 = 0 +15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:5/0 = 0 +0:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:5/0 = 0 +1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -7, -12, -7, 16, -16, 16) +2:5/0 = 0 +2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, -16, 16, -16, 16, 16, 7, 16) +3:5/0 = 0 +3:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:5/0 = 0 +4:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:5/0 = 0 +5:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:5/0 = 0 +6:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:5/0 = 0 +7:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:5/0 = 0 +8:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:5/0 = 0 +9:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:5/0 = 0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:5/0 = 0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:5/0 = 0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:5/0 = 0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:5/0 = 0 +14:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:5/0 = 0 +15:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:6/0 = 0 +0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:6/0 = 0 +1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -7, -16, -7, -1, 8, 16, -16, 16) +2:6/0 = 0 +2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, -16, 16, -16, 16, 16, -8, 16, 7, -2) +3:6/0 = 0 +3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:6/0 = 0 +4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:6/0 = 0 +5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 8, -16, -7, 2, -7, 16, -16, 16) +6:6/0 = 0 +6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, 2, -8, -16, 16, -16, 16, 16, 7, 16) +7:6/0 = 0 +7:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:6/0 = 0 +8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:6/0 = 0 +9:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:6/0 = 0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:6/0 = 0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:6/0 = 0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:6/0 = 0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:6/0 = 0 +14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:6/0 = 0 +15:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:7/0 = 0 +0:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:7/0 = 0 +1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:7/0 = 0 +2:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:7/0 = 0 +3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:7/0 = 0 +4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:7/0 = 0 +5:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -7, -16, -7, 11, -16, 11) +6:7/0 = 0 +6:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, -16, 16, -16, 16, 11, 7, 11) +7:7/0 = 0 +7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:7/0 = 0 +8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:7/0 = 0 +9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:7/0 = 0 +10:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:7/0 = 0 +11:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:7/0 = 0 +12:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:7/0 = 0 +13:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:7/0 = 0 +14:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:7/0 = 0 +15:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) + +[sub_resource type="TileSet" id="TileSet_u4dub"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 16 +physics_layer_0/collision_mask = 0 +sources/0 = SubResource("TileSetAtlasSource_d4y5w") + +[node name="D02" type="Node2D" unique_id=1588915451] +script = ExtResource("1_k6gpd") + +[node name="DungeonTiles" parent="." unique_id=1326609295 instance=ExtResource("2_mf67o")] +position = Vector2(-104, -56) +tile_map_data = PackedByteArray("AAAAAAAAAAAJAAAAAAAAAAEAAAAJAAEAAAAAAAIAAAAJAAMAAAAAAAMAAAAJAAMAAAAAAAQAAAAJAAMAAAAAAAUAAAAJAAMAAAAAAAYAAAAJAAMAAAAAAAcAAAAJAAMAAAAAAAgAAAAJAAMAAAAAAAkAAAAJAAMAAAAAAAoAAAAJAAUAAAAAAAsAAAAJAAYAAAABAAsAAAAKAAYAAAACAAsAAAALAAYAAAADAAsAAAAMAAYAAAAEAAsAAAAAAAcAAAANAAsAAAAMAAYAAAAOAAsAAAAKAAYAAAAPAAsAAAALAAYAAAAQAAsAAAAMAAYAAAARAAsAAAANAAYAAAASAAsAAAAOAAYAAAATAAsAAAANAAYAAAAUAAsAAAAOAAYAAAAVAAsAAAAPAAYAAAAVAAYAAAABAAEAAAAVAAcAAAAGAAAAAAAVAAgAAAAGAAEAAAAVAAkAAAACAAMAAAAVAAoAAAAPAAUAAAAVAAEAAAAPAAEAAAAVAAIAAAACAAQAAAAVAAMAAAAMAAQAAAAVAAQAAAAMAAUAAAAVAAUAAAABAAEAAAAQAAAAAAAKAAAAAAARAAAAAAALAAAAAAASAAAAAAAMAAAAAAATAAAAAAANAAAAAAAUAAAAAAAOAAAAAAAVAAAAAAAPAAAAAAALAAAAAAAGAAUAAAAMAAAAAAAHAAUAAAANAAAAAAAMAAAAAAAOAAAAAAANAAAAAAAPAAAAAAAOAAAAAAAHAAAAAAAOAAAAAAAIAAAAAAALAAAAAAAJAAAAAAAEAAUAAAAKAAAAAAAFAAUAAAADAAAAAAANAAAAAAAEAAAAAAAOAAAAAAAFAAAAAAAMAAAAAAAGAAAAAAANAAAAAAABAAAAAAALAAAAAAACAAAAAAAMAAAAAAAJAAEAAAAEAAYAAAAJAAIAAAAEAAcAAAAKAAEAAAAFAAYAAAAKAAIAAAAFAAcAAAALAAEAAAAGAAYAAAALAAIAAAAGAAcAAAAMAAEAAAAHAAYAAAAMAAIAAAAHAAcAAAAIAAEAAAAGAAMAAAAIAAIAAAAGAAQAAAAHAAEAAAAGAAMAAAAHAAIAAAAGAAQAAAANAAEAAAAGAAMAAAANAAIAAAAGAAQAAAAOAAEAAAAGAAMAAAAOAAIAAAAGAAQAAAAQAAEAAAAHAAYAAAAQAAIAAAAHAAcAAAAGAAEAAAAHAAYAAAAGAAIAAAAHAAcAAAAPAAEAAAAEAAYAAAAPAAIAAAAEAAcAAAAFAAEAAAAEAAYAAAAFAAIAAAAEAAcAAAAEAAEAAAAGAAMAAAAEAAIAAAAGAAQAAAADAAEAAAAGAAMAAAADAAIAAAAGAAQAAAACAAEAAAALAAEAAAACAAIAAAALAAIAAAABAAEAAAAKAAEAAAABAAIAAAAKAAIAAAARAAEAAAAGAAMAAAARAAIAAAAGAAQAAAASAAEAAAAGAAMAAAASAAIAAAAGAAQAAAATAAEAAAANAAEAAAATAAIAAAANAAIAAAAUAAEAAAAOAAEAAAAUAAIAAAAOAAIAAAABAAMAAAAHAAIAAAACAAMAAAAIAAIAAAABAAQAAAAHAAIAAAACAAQAAAAIAAIAAAABAAUAAAAHAAIAAAACAAUAAAAIAAIAAAABAAYAAAAHAAIAAAACAAYAAAAIAAIAAAABAAcAAAAHAAIAAAACAAcAAAAIAAIAAAATAAcAAAAEAAAAAAAUAAcAAAAFAAAAAAATAAgAAAAEAAEAAAAUAAgAAAAFAAEAAAATAAYAAAABAAEAAAAUAAYAAAABAAEAAAATAAUAAAABAAEAAAAUAAUAAAABAAEAAAATAAQAAAAKAAUAAAAUAAQAAAALAAUAAAATAAMAAAAKAAQAAAAUAAMAAAALAAQAAAATAAkAAAANAAQAAAATAAoAAAANAAUAAAAUAAkAAAAOAAQAAAAUAAoAAAAOAAUAAAASAAkAAAAMAAQAAAASAAoAAAAMAAUAAAARAAkAAAAMAAQAAAARAAoAAAAMAAUAAAAQAAkAAAADAAUAAAAQAAoAAAADAAYAAAAPAAkAAAAAAAUAAAAPAAoAAAAAAAYAAAAOAAkAAAAMAAQAAAAOAAoAAAAMAAUAAAANAAkAAAAMAAQAAAANAAoAAAAMAAUAAAAEAAkAAAAAAAUAAAAEAAoAAAAAAAYAAAADAAkAAAAMAAQAAAADAAoAAAAMAAUAAAACAAkAAAALAAQAAAACAAoAAAALAAUAAAABAAkAAAAKAAQAAAABAAoAAAAKAAUAAAABAAgAAAAHAAIAAAACAAgAAAAIAAIAAAAPAAYAAAADAAEAAAAPAAcAAAADAAIAAAAPAAgAAAADAAIAAAAQAAYAAAACAAIAAAAQAAcAAAABAAEAAAAQAAgAAAABAAIAAAARAAYAAAADAAIAAAARAAcAAAACAAEAAAARAAgAAAACAAIAAAASAAYAAAADAAAAAAASAAcAAAADAAEAAAASAAgAAAADAAIAAAAMAAYAAAAAAAEAAAAMAAcAAAAAAAIAAAAMAAgAAAADAAIAAAANAAYAAAABAAEAAAANAAcAAAABAAIAAAANAAgAAAABAAIAAAAOAAYAAAACAAEAAAAOAAcAAAACAAIAAAAOAAgAAAACAAIAAAAJAAYAAAABAAEAAAAJAAcAAAABAAIAAAAJAAgAAAACAAIAAAAKAAYAAAACAAEAAAAKAAcAAAACAAIAAAAKAAgAAAADAAIAAAALAAYAAAADAAEAAAALAAcAAAADAAIAAAALAAgAAAACAAIAAAAHAAYAAAADAAAAAAAHAAcAAAADAAEAAAAHAAgAAAADAAIAAAAIAAYAAAAAAAEAAAAIAAcAAAAAAAIAAAAIAAgAAAABAAIAAAAEAAYAAAABAAIAAAAEAAcAAAABAAEAAAAEAAgAAAABAAIAAAAFAAYAAAACAAIAAAAFAAcAAAACAAEAAAAFAAgAAAACAAIAAAAGAAYAAAADAAIAAAAGAAcAAAADAAEAAAAGAAgAAAADAAIAAAADAAYAAAAAAAIAAAADAAcAAAAAAAEAAAADAAgAAAAAAAIAAAAEAAMAAAABAAAAAAAEAAQAAAABAAAAAAAEAAUAAAABAAEAAAAFAAMAAAACAAAAAAAFAAQAAAACAAAAAAAFAAUAAAACAAEAAAAGAAMAAAADAAAAAAAGAAQAAAADAAAAAAAGAAUAAAADAAEAAAAHAAMAAAAAAAAAAAAHAAQAAAAAAAEAAAAHAAUAAAAAAAIAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAEAAAAIAAMAAAABAAAAAAAIAAQAAAABAAEAAAAIAAUAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAEAAAAJAAUAAAABAAAAAAAKAAMAAAABAAAAAAAKAAQAAAABAAEAAAAKAAUAAAACAAAAAAALAAMAAAACAAAAAAALAAQAAAACAAEAAAALAAUAAAADAAAAAAAMAAMAAAADAAAAAAAMAAQAAAADAAEAAAAMAAUAAAAAAAAAAAANAAUAAAABAAAAAAANAAQAAAAAAAEAAAAOAAQAAAAAAAAAAAAOAAUAAAACAAAAAAAPAAQAAAAAAAEAAAAPAAUAAAAAAAIAAAAQAAQAAAABAAEAAAAQAAUAAAABAAIAAAANAAMAAAAAAAAAAAAOAAMAAAABAAAAAAAPAAMAAAAAAAAAAAAQAAMAAAABAAMAAAARAAMAAAACAAAAAAARAAQAAAACAAEAAAARAAUAAAACAAIAAAASAAMAAAABAAMAAAASAAQAAAADAAEAAAASAAUAAAADAAIAAAD+/w0AAAAJAAcAAAD+/wwAAAAJAAcAAAD+/wsAAAAJAAcAAAD+/woAAAAJAAcAAAD+/wkAAAAMAAcAAAD+/wgAAAAMAAcAAAD+/wcAAAAMAAcAAAD+/wYAAAAMAAcAAAD+/wUAAAAMAAcAAAD+/wQAAAAMAAcAAAD+/wMAAAAMAAcAAAD+/wIAAAAMAAcAAAD+/wEAAAAJAAcAAAD+/wAAAAAJAAcAAAD+////AAAJAAcAAAD+//7/AAAJAAcAAAAAAAwAAAAJAAcAAAD//wwAAAAJAAcAAAD//wsAAAAJAAcAAAD//woAAAAJAAcAAAD//wkAAAAMAAcAAAD//wgAAAAMAAcAAAD//wcAAAAMAAcAAAD//wYAAAAMAAcAAAD//wUAAAAMAAcAAAD//wQAAAAMAAcAAAD//wMAAAAMAAcAAAD//wIAAAAMAAcAAAD//wEAAAAJAAcAAAD//wAAAAAJAAcAAAD/////AAAJAAcAAAD///7/AAAJAAcAAAAAAP7/AAAJAAcAAAAAAP//AAAJAAcAAAABAP//AAAJAAcAAAABAP7/AAAJAAcAAAACAP7/AAAJAAcAAAACAP//AAAJAAcAAAADAP//AAAJAAcAAAADAP7/AAAJAAcAAAAEAP7/AAAJAAcAAAAEAP//AAAJAAcAAAAFAP//AAAJAAcAAAAFAP7/AAAJAAcAAAAGAP7/AAAJAAcAAAAGAP//AAAJAAcAAAAHAP//AAAJAAcAAAAHAP7/AAAJAAcAAAAIAP7/AAAJAAcAAAAIAP//AAAJAAcAAAAJAP//AAAJAAcAAAAJAP7/AAAJAAcAAAAKAP7/AAAJAAcAAAAKAP//AAAJAAcAAAALAP//AAAJAAcAAAALAP7/AAAJAAcAAAAMAP7/AAAJAAcAAAAMAP//AAAJAAcAAAANAP//AAAJAAcAAAANAP7/AAAJAAcAAAAOAP7/AAAJAAcAAAAOAP//AAAJAAcAAAAPAP//AAAJAAcAAAAPAP7/AAAJAAcAAAAQAP7/AAAJAAcAAAAQAP//AAAJAAcAAAARAP//AAAJAAcAAAARAP7/AAAJAAcAAAASAP7/AAAJAAcAAAASAP//AAAJAAcAAAATAP//AAAJAAcAAAATAP7/AAAJAAcAAAAUAP7/AAAJAAcAAAAUAP//AAAJAAcAAAAVAP//AAAJAAcAAAAVAP7/AAAJAAcAAAD//w0AAAAJAAcAAAAAAA0AAAAJAAcAAAABAA0AAAAJAAcAAAABAAwAAAAJAAcAAAACAAwAAAAJAAcAAAACAA0AAAAJAAcAAAADAA0AAAAJAAcAAAADAAwAAAAJAAcAAAAEAAwAAAAJAAcAAAAEAA0AAAAJAAcAAAAFAA0AAAAJAAcAAAAFAAwAAAAJAAcAAAAGAAwAAAAJAAcAAAAGAA0AAAAJAAcAAAAHAA0AAAAJAAcAAAAHAAwAAAAJAAcAAAAIAAwAAAAJAAcAAAAIAA0AAAAJAAcAAAAJAA0AAAAJAAcAAAAJAAwAAAAJAAcAAAAKAAwAAAAJAAcAAAAKAA0AAAAJAAcAAAALAA0AAAAJAAcAAAALAAwAAAAJAAcAAAAMAAwAAAAJAAcAAAAMAA0AAAAJAAcAAAANAA0AAAAJAAcAAAANAAwAAAAJAAcAAAAOAAwAAAAJAAcAAAAOAA0AAAAJAAcAAAAPAA0AAAAJAAcAAAAPAAwAAAAJAAcAAAAQAAwAAAAJAAcAAAAQAA0AAAAJAAcAAAARAA0AAAAJAAcAAAARAAwAAAAJAAcAAAASAAwAAAAJAAcAAAASAA0AAAAJAAcAAAATAA0AAAAJAAcAAAATAAwAAAAJAAcAAAAUAAwAAAAJAAcAAAAUAA0AAAAJAAcAAAAVAA0AAAAJAAcAAAAVAAwAAAAJAAcAAAAWAA0AAAAJAAcAAAAXAA0AAAAJAAcAAAAWAP7/AAAJAAcAAAAXAP7/AAAJAAcAAAAWAAgAAAAGAAEAAAAWAAcAAAAGAAAAAAAWAAYAAAABAAEAAAAWAAUAAAABAAEAAAAWAAQAAAAMAAUAAAAWAAMAAAAMAAQAAAAWAAIAAAALAAAAAAAWAAEAAAAJAAcAAAAWAAAAAAAJAAcAAAAWAP//AAAJAAcAAAAXAP//AAAJAAcAAAAXAAAAAAAJAAcAAAAXAAEAAAAJAAcAAAAXAAIAAAALAAAAAAAXAAMAAAAMAAQAAAAXAAQAAAAMAAUAAAAXAAUAAAABAAEAAAAXAAYAAAABAAEAAAAXAAcAAAAGAAAAAAAXAAgAAAAGAAEAAAAXAAkAAAAKAAYAAAAWAAkAAAAKAAYAAAAWAAoAAAAJAAcAAAAWAAsAAAAJAAcAAAAWAAwAAAAJAAcAAAAXAAwAAAAJAAcAAAAXAAsAAAAJAAcAAAAXAAoAAAAJAAcAAAAFAAkAAAABAAUAAAAFAAoAAAABAAYAAAAFAAsAAAABAAcAAAAGAAkAAAACAAUAAAAGAAoAAAACAAYAAAAGAAsAAAACAAcAAAAHAAkAAAADAAUAAAAHAAoAAAADAAYAAAAHAAsAAAADAAcAAAAKAAkAAAAAAAUAAAAKAAoAAAAAAAYAAAAKAAsAAAALAAYAAAALAAkAAAAMAAQAAAALAAoAAAAMAAUAAAALAAsAAAAKAAYAAAAMAAkAAAAAAAUAAAAMAAoAAAAAAAYAAAAMAAsAAAALAAYAAAAIAAkAAAAMAAQAAAAIAAoAAAAMAAUAAAAIAAsAAAAMAAYAAAAJAAkAAAAMAAQAAAAJAAoAAAAMAAUAAAAJAAsAAAAKAAYAAAA=") +tile_set = SubResource("TileSet_u4dub") + +[node name="LockedDoor" parent="." unique_id=1609694242 instance=ExtResource("6_u4dub")] +position = Vector2(216, 32) + +[node name="FD2TD1" parent="." unique_id=438390501 instance=ExtResource("4_7d4oo")] +position = Vector2(88, 248) +level = "uid://btu35v1s43w0k" +target_area = "FD1TD2" +center_player = true +side = 3 + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("5_d4y5w")] +position = Vector2(240, 200) + +[node name="FD2TD3" parent="." unique_id=1632738339 instance=ExtResource("4_7d4oo")] +position = Vector2(632, 136) +level = "uid://np3jym38gbkj" +target_area = "FD3TD2" +center_player = true +side = 1 + +[node name="FD2TD4" parent="." unique_id=2088360386 instance=ExtResource("4_7d4oo")] +position = Vector2(248, 24) +level = "uid://usewkfcesaeq" +target_area = "FD4TD2" +center_player = true +side = 2 diff --git a/levels/dungeons/d03.tscn b/levels/dungeons/d03.tscn new file mode 100644 index 0000000..0869d66 --- /dev/null +++ b/levels/dungeons/d03.tscn @@ -0,0 +1,39 @@ +[gd_scene format=4 uid="uid://np3jym38gbkj"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_dna7d"] +[ext_resource type="PackedScene" uid="uid://dt4nil8vsgejc" path="res://tiles_maps/dungeon-01.tscn" id="2_wdy0x"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="3_wdy0x"] +[ext_resource type="PackedScene" uid="uid://s54xni3yvek5" path="res://general/enemy_counter/enemy_counter.tscn" id="4_5r4gk"] +[ext_resource type="PackedScene" uid="uid://dv2hjei167q68" path="res://enemies/slime/slime.tscn" id="5_4e02e"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="6_bwbh6"] +[ext_resource type="PackedScene" uid="uid://q756h6ku2kjn" path="res://general/item-dropper/item_dropper.tscn" id="7_4e02e"] +[ext_resource type="Resource" uid="uid://q18yuwmxakt8" path="res://items/key_dungeon.tres" id="8_bwbh6"] + +[node name="D03" type="Node2D" unique_id=1225126429] +script = ExtResource("1_dna7d") + +[node name="Dungeon01" parent="." unique_id=1326609295 instance=ExtResource("2_wdy0x")] +tile_map_data = PackedByteArray("AAAAAAAAAAAKAAEAAAAAAAEAAAAKAAIAAAAAAAIAAAAKAAMAAAAAAAMAAAANAAQAAAAAAAQAAAANAAUAAAAAAAUAAAABAAIAAAAAAAYAAAABAAIAAAAAAAcAAAANAAEAAAAAAAgAAAANAAIAAAAAAAkAAAAKAAMAAAAAAAoAAAAKAAQAAAAAAAsAAAAKAAUAAAABAAsAAAALAAUAAAACAAsAAAAMAAUAAAADAAsAAAAMAAUAAAAEAAsAAAAMAAUAAAAFAAsAAAAMAAUAAAAGAAsAAAAMAAUAAAAHAAsAAAAMAAUAAAAIAAsAAAAMAAUAAAAJAAsAAAAMAAUAAAAKAAsAAAAMAAUAAAALAAsAAAAMAAUAAAAMAAsAAAAMAAUAAAANAAsAAAAMAAUAAAAOAAsAAAAMAAUAAAAPAAsAAAAMAAUAAAAQAAsAAAANAAUAAAARAAsAAAAOAAUAAAARAAoAAAAOAAQAAAARAAkAAAAOAAMAAAARAAgAAAAOAAMAAAARAAcAAAAOAAMAAAARAAYAAAAOAAMAAAARAAUAAAAOAAMAAAARAAQAAAAOAAMAAAARAAAAAAAOAAEAAAARAAEAAAAOAAIAAAARAAIAAAAOAAMAAAARAAMAAAAOAAMAAAAQAAAAAAANAAEAAAAPAAAAAAAMAAEAAAAOAAAAAAAMAAEAAAANAAAAAAAMAAEAAAAMAAAAAAAMAAEAAAALAAAAAAAMAAEAAAAKAAAAAAAMAAEAAAAJAAAAAAAMAAEAAAAIAAAAAAAMAAEAAAAHAAAAAAAMAAEAAAAGAAAAAAAMAAEAAAAFAAAAAAAMAAEAAAAEAAAAAAAMAAEAAAADAAAAAAAMAAEAAAACAAAAAAAMAAEAAAABAAAAAAALAAEAAAAGAAYAAAABAAEAAAAGAAUAAAABAAEAAAAGAAQAAAABAAEAAAAGAAMAAAABAAEAAAAGAAIAAAABAAEAAAAGAAEAAAAMAAIAAAAFAAEAAAAMAAIAAAAEAAEAAAAMAAIAAAADAAEAAAAMAAIAAAACAAEAAAAMAAIAAAABAAEAAAALAAIAAAABAAIAAAALAAMAAAABAAMAAAAOAAQAAAABAAQAAAAOAAUAAAABAAUAAAABAAIAAAABAAYAAAABAAIAAAABAAcAAAAOAAEAAAABAAgAAAAOAAIAAAABAAkAAAALAAMAAAABAAoAAAALAAQAAAACAAoAAAAMAAQAAAACAAkAAAABAAEAAAACAAgAAAABAAEAAAACAAcAAAABAAEAAAACAAYAAAABAAEAAAACAAUAAAABAAEAAAACAAQAAAABAAEAAAACAAMAAAABAAEAAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAADAAMAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAEAAAADAAkAAAABAAEAAAADAAoAAAAMAAQAAAAEAAoAAAAMAAQAAAAEAAkAAAABAAEAAAAEAAgAAAABAAEAAAAEAAcAAAABAAEAAAAEAAYAAAABAAEAAAAEAAUAAAABAAEAAAAEAAQAAAABAAEAAAAEAAMAAAABAAEAAAAEAAIAAAABAAEAAAAFAAIAAAABAAEAAAAFAAMAAAABAAEAAAAFAAQAAAABAAEAAAAFAAUAAAABAAEAAAAFAAYAAAABAAEAAAAFAAcAAAABAAEAAAAFAAgAAAABAAEAAAAFAAkAAAABAAEAAAAFAAoAAAAMAAQAAAAGAAoAAAAMAAQAAAAGAAkAAAABAAEAAAAGAAgAAAABAAEAAAAGAAcAAAABAAEAAAAHAAcAAAABAAEAAAAHAAYAAAABAAEAAAAHAAUAAAABAAEAAAAHAAQAAAABAAEAAAAHAAMAAAABAAEAAAAHAAIAAAABAAEAAAAHAAEAAAAMAAIAAAAIAAEAAAAMAAIAAAAIAAIAAAABAAEAAAAIAAMAAAABAAEAAAAIAAQAAAABAAEAAAAIAAUAAAABAAEAAAAIAAYAAAABAAEAAAAIAAcAAAABAAEAAAAIAAgAAAABAAEAAAAHAAgAAAABAAEAAAAHAAkAAAABAAEAAAAHAAoAAAAMAAQAAAAIAAoAAAAMAAQAAAAIAAkAAAABAAEAAAAJAAkAAAABAAEAAAAJAAgAAAABAAEAAAAJAAcAAAABAAEAAAAJAAYAAAABAAEAAAAJAAUAAAABAAEAAAAJAAQAAAABAAEAAAAJAAMAAAABAAEAAAAJAAIAAAABAAEAAAAJAAEAAAAMAAIAAAAKAAEAAAAMAAIAAAAKAAIAAAABAAEAAAAKAAMAAAABAAEAAAAKAAQAAAABAAEAAAAKAAUAAAABAAEAAAAKAAYAAAABAAEAAAAKAAcAAAABAAEAAAAKAAgAAAABAAEAAAAKAAkAAAABAAEAAAAKAAoAAAAMAAQAAAAJAAoAAAAMAAQAAAALAAoAAAAMAAQAAAALAAkAAAABAAEAAAALAAgAAAABAAEAAAALAAcAAAABAAEAAAALAAYAAAABAAEAAAALAAUAAAABAAEAAAALAAQAAAABAAEAAAALAAMAAAABAAEAAAALAAIAAAABAAEAAAALAAEAAAAMAAIAAAAMAAEAAAAMAAIAAAAMAAIAAAABAAEAAAAMAAMAAAABAAEAAAAMAAQAAAABAAEAAAAMAAUAAAABAAEAAAAMAAYAAAABAAEAAAAMAAcAAAABAAEAAAAMAAgAAAABAAEAAAAMAAkAAAABAAEAAAAMAAoAAAAMAAQAAAANAAoAAAAMAAQAAAANAAkAAAABAAEAAAANAAgAAAABAAEAAAANAAcAAAABAAEAAAANAAYAAAABAAEAAAANAAUAAAABAAEAAAANAAQAAAABAAEAAAANAAMAAAABAAEAAAANAAIAAAABAAEAAAANAAEAAAAMAAIAAAAOAAEAAAAMAAIAAAAOAAIAAAABAAEAAAAOAAMAAAABAAEAAAAOAAQAAAABAAEAAAAOAAUAAAABAAEAAAAOAAYAAAABAAEAAAAOAAcAAAABAAEAAAAOAAgAAAABAAEAAAAOAAkAAAABAAEAAAAOAAoAAAAMAAQAAAAPAAoAAAAMAAQAAAAPAAkAAAABAAEAAAAPAAgAAAABAAEAAAAPAAcAAAABAAEAAAAPAAYAAAABAAEAAAAPAAUAAAABAAEAAAAPAAQAAAABAAEAAAAPAAMAAAABAAEAAAAPAAIAAAABAAEAAAAPAAEAAAAMAAIAAAAQAAEAAAANAAIAAAAQAAIAAAANAAMAAAAQAAMAAAANAAMAAAAQAAQAAAANAAMAAAAQAAUAAAANAAMAAAAQAAYAAAANAAMAAAAQAAcAAAANAAMAAAAQAAgAAAANAAMAAAAQAAkAAAANAAMAAAAQAAoAAAANAAQAAAD//wMAAAAMAAQAAAD//wQAAAAMAAUAAAD+/wMAAAAMAAQAAAD+/wQAAAAMAAUAAAD//wcAAAAMAAEAAAD//wgAAAAMAAIAAAD+/wcAAAAMAAEAAAD+/wgAAAAMAAIAAAD+/wkAAAAMAAYAAAD//wkAAAADAAMAAAD//woAAAAJAAQAAAD//wsAAAAJAAUAAAAAAAwAAAAKAAYAAAABAAwAAAANAAYAAAACAAwAAAAMAAYAAAAEAAwAAAALAAYAAAAFAAwAAAAMAAYAAAAGAAwAAAANAAYAAAADAAwAAAANAAYAAAAHAAwAAAALAAYAAAAIAAwAAAAMAAYAAAAJAAwAAAANAAYAAAAKAAwAAAALAAYAAAALAAwAAAAMAAYAAAAMAAwAAAANAAYAAAANAAwAAAALAAYAAAAOAAwAAAAMAAYAAAAPAAwAAAALAAYAAAAQAAwAAAAMAAYAAAARAAwAAAANAAYAAAD//wwAAAAJAAYAAAASAAwAAAAPAAYAAAASAAcAAAAPAAUAAAASAAgAAAAPAAIAAAASAAkAAAAPAAMAAAASAAoAAAAPAAQAAAASAAsAAAAPAAUAAAASAAMAAAAPAAQAAAASAAQAAAAPAAUAAAASAAUAAAAPAAMAAAASAAYAAAAPAAQAAAASAAAAAAAPAAEAAAASAAEAAAAPAAIAAAASAAIAAAAPAAMAAAAOAP//AAAKAAAAAAAPAP//AAALAAAAAAAQAP//AAAMAAAAAAARAP//AAANAAAAAAASAP//AAAPAAAAAAAJAP//AAAKAAAAAAAKAP//AAALAAAAAAALAP//AAAMAAAAAAAMAP//AAANAAAAAAANAP//AAAOAAAAAAAEAP//AAAKAAAAAAAFAP//AAALAAAAAAAGAP//AAAMAAAAAAAHAP//AAANAAAAAAAIAP//AAAOAAAAAAD/////AAAJAAAAAAAAAP//AAALAAAAAAABAP//AAAMAAAAAAACAP//AAANAAAAAAADAP//AAAOAAAAAAD//wAAAAAJAAIAAAD//wEAAAAJAAMAAAD//wIAAAADAAQAAAD+/wIAAAAMAAAAAAD//wUAAAACAAEAAAD//wYAAAACAAEAAAD+/wYAAAACAAEAAAD+/wUAAAACAAEAAAD+/wEAAAAIAAcAAAD+/wAAAAAIAAcAAAD+////AAAIAAcAAAD+/woAAAAIAAcAAAD+/wsAAAAIAAcAAAD+/wwAAAAIAAcAAAD+//7/AAAIAAcAAAD+//3/AAAIAAcAAAATAP//AAAIAAcAAAAUAP//AAAIAAcAAAAUAP7/AAAIAAcAAAAUAP3/AAAIAAcAAAATAA0AAAAIAAcAAAAUAA0AAAAIAAcAAAATAA4AAAAIAAcAAAD+/w0AAAAIAAcAAAD+/w4AAAAIAAcAAAACAA4AAAAIAAcAAAACAA0AAAAIAAcAAAABAA0AAAAIAAcAAAAAAA0AAAAIAAcAAAD//w0AAAAIAAcAAAD//w4AAAAIAAcAAAAAAA4AAAAIAAcAAAABAA4AAAAIAAcAAAADAA0AAAAIAAcAAAADAA4AAAAIAAcAAAAEAA4AAAAIAAcAAAAEAA0AAAAIAAcAAAAFAA0AAAAIAAcAAAAFAA4AAAAIAAcAAAAGAA4AAAAIAAcAAAAGAA0AAAAIAAcAAAAHAA0AAAAIAAcAAAAHAA4AAAAIAAcAAAAIAA4AAAAIAAcAAAAIAA0AAAAIAAcAAAAJAA0AAAAIAAcAAAAJAA4AAAAIAAcAAAAKAA4AAAAIAAcAAAAKAA0AAAAIAAcAAAALAA0AAAAIAAcAAAALAA4AAAAIAAcAAAAMAA4AAAAIAAcAAAAMAA0AAAAIAAcAAAANAA0AAAAIAAcAAAANAA4AAAAIAAcAAAAOAA4AAAAIAAcAAAAOAA0AAAAIAAcAAAAPAA0AAAAIAAcAAAAPAA4AAAAIAAcAAAAQAA4AAAAIAAcAAAAQAA0AAAAIAAcAAAARAA0AAAAIAAcAAAARAA4AAAAIAAcAAAASAA4AAAAIAAcAAAASAA0AAAAIAAcAAAATAAsAAAAIAAcAAAATAAoAAAAIAAcAAAATAAkAAAAIAAcAAAATAAgAAAAIAAcAAAATAAcAAAAIAAcAAAATAAYAAAAIAAcAAAATAAUAAAAIAAcAAAATAAQAAAAIAAcAAAATAAMAAAAIAAcAAAATAAIAAAAIAAcAAAATAAEAAAAIAAcAAAATAAAAAAAIAAcAAAAUAAAAAAAIAAcAAAAUAAEAAAAIAAcAAAAUAAIAAAAIAAcAAAAUAAMAAAAIAAcAAAAUAAQAAAAIAAcAAAAUAAUAAAAIAAcAAAAUAAYAAAAIAAcAAAAUAAcAAAAIAAcAAAAUAAgAAAAIAAcAAAAUAAkAAAAIAAcAAAAUAAoAAAAIAAcAAAAUAAsAAAAIAAcAAAAUAAwAAAAIAAcAAAATAAwAAAAIAAcAAAAUAA4AAAAIAAcAAAAPAP3/AAAIAAcAAAAOAP3/AAAIAAcAAAANAP3/AAAIAAcAAAAMAP3/AAAIAAcAAAALAP3/AAAIAAcAAAAKAP3/AAAIAAcAAAAJAP3/AAAIAAcAAAAIAP3/AAAIAAcAAAAHAP3/AAAIAAcAAAAGAP3/AAAIAAcAAAAFAP3/AAAIAAcAAAAEAP3/AAAIAAcAAAADAP3/AAAIAAcAAAACAP3/AAAIAAcAAAABAP3/AAAIAAcAAAAAAP3/AAAIAAcAAAD///3/AAAIAAcAAAD///7/AAAIAAcAAAAAAP7/AAAIAAcAAAABAP7/AAAIAAcAAAACAP7/AAAIAAcAAAADAP7/AAAIAAcAAAAEAP7/AAAIAAcAAAAFAP7/AAAIAAcAAAAGAP7/AAAIAAcAAAAHAP7/AAAIAAcAAAAIAP7/AAAIAAcAAAAJAP7/AAAIAAcAAAAKAP7/AAAIAAcAAAALAP7/AAAIAAcAAAAMAP7/AAAIAAcAAAANAP7/AAAIAAcAAAAOAP7/AAAIAAcAAAAPAP7/AAAIAAcAAAAQAP7/AAAIAAcAAAAQAP3/AAAIAAcAAAARAP3/AAAIAAcAAAARAP7/AAAIAAcAAAASAP7/AAAIAAcAAAASAP3/AAAIAAcAAAATAP3/AAAIAAcAAAATAP7/AAAIAAcAAAA=") + +[node name="FD3TD2" parent="." unique_id=438390501 instance=ExtResource("3_wdy0x")] +position = Vector2(-32, 192) +level = "uid://bb2tupwi3i4eh" +target_area = "FD2TD3" +center_player = true + +[node name="EnemyCounter" parent="." unique_id=1225445185 instance=ExtResource("4_5r4gk")] + +[node name="Slime" parent="EnemyCounter" unique_id=2039155988 instance=ExtResource("5_4e02e")] +position = Vector2(184, 128) + +[node name="Slime2" parent="EnemyCounter" unique_id=1583367834 instance=ExtResource("5_4e02e")] +position = Vector2(344, 160) + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("6_bwbh6")] +position = Vector2(176, 264) + +[node name="ItemDropper" parent="." unique_id=1807553228 instance=ExtResource("7_4e02e")] +position = Vector2(440, 192) +item = ExtResource("8_bwbh6") + +[connection signal="enemies_defeated" from="EnemyCounter" to="ItemDropper" method="drop_item"] diff --git a/levels/dungeons/d04.tscn b/levels/dungeons/d04.tscn new file mode 100644 index 0000000..f2236cd --- /dev/null +++ b/levels/dungeons/d04.tscn @@ -0,0 +1,18 @@ +[gd_scene format=4 uid="uid://usewkfcesaeq"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_q1j4e"] +[ext_resource type="PackedScene" uid="uid://dt4nil8vsgejc" path="res://tiles_maps/dungeon-01.tscn" id="2_ix72x"] +[ext_resource type="PackedScene" uid="uid://cpf3fr32ediqk" path="res://levels/level_transition.tscn" id="3_ix72x"] + +[node name="D04" type="Node2D" unique_id=1457376298] +script = ExtResource("1_q1j4e") + +[node name="Dungeon01" parent="." unique_id=1326609295 instance=ExtResource("2_ix72x")] +tile_map_data = PackedByteArray("AAAAAAAAAAAKAAEAAAAAAAEAAAAKAAIAAAAAAAIAAAAKAAMAAAAAAAMAAAAKAAMAAAAAAAQAAAAKAAMAAAAAAAUAAAAKAAMAAAAAAAYAAAAKAAMAAAAAAAcAAAAKAAMAAAAAAAgAAAAKAAMAAAAAAAkAAAAKAAMAAAAAAAoAAAAKAAQAAAAAAAsAAAAKAAUAAAABAAsAAAALAAUAAAACAAsAAAAMAAUAAAADAAsAAAAMAAUAAAAEAAsAAAAMAAUAAAAFAAsAAAAMAAUAAAAGAAsAAAAMAAUAAAAHAAsAAAAMAAUAAAAIAAsAAAAAAAYAAAAJAAsAAAABAAYAAAAKAAsAAAACAAYAAAALAAsAAAADAAYAAAAMAAsAAAAMAAUAAAANAAsAAAAMAAUAAAAOAAsAAAAMAAUAAAAPAAsAAAAMAAUAAAAQAAsAAAAMAAUAAAARAAsAAAAMAAUAAAASAAsAAAAMAAUAAAATAAsAAAANAAUAAAAUAAsAAAAOAAUAAAAUAAoAAAAOAAQAAAAUAAkAAAAOAAMAAAAUAAgAAAAOAAMAAAAUAAcAAAAOAAMAAAAUAAYAAAAOAAMAAAAUAAUAAAAOAAMAAAAUAAQAAAAOAAMAAAAUAAMAAAAOAAMAAAAUAAIAAAAOAAMAAAAUAAEAAAAOAAIAAAAUAAAAAAAOAAEAAAATAAAAAAANAAEAAAASAAAAAAAMAAEAAAARAAAAAAAMAAEAAAAQAAAAAAAMAAEAAAAPAAAAAAAMAAEAAAAOAAAAAAAMAAEAAAANAAAAAAAMAAEAAAAMAAAAAAAMAAEAAAALAAAAAAAMAAEAAAAKAAAAAAAMAAEAAAAJAAAAAAAMAAEAAAAIAAAAAAAMAAEAAAAHAAAAAAAMAAEAAAAGAAAAAAAMAAEAAAAFAAAAAAAMAAEAAAAEAAAAAAAMAAEAAAADAAAAAAAMAAEAAAACAAAAAAAMAAEAAAABAAAAAAALAAEAAAAHAAYAAAACAAAAAAAHAAUAAAACAAAAAAAHAAQAAAACAAAAAAAHAAMAAAACAAAAAAAHAAIAAAACAAAAAAAHAAEAAAAMAAIAAAAGAAEAAAAMAAIAAAAFAAEAAAAMAAIAAAAEAAEAAAAMAAIAAAADAAEAAAAMAAIAAAACAAEAAAAMAAIAAAABAAEAAAALAAIAAAABAAIAAAALAAMAAAABAAMAAAALAAMAAAABAAQAAAALAAMAAAABAAUAAAALAAMAAAABAAYAAAALAAMAAAABAAcAAAALAAMAAAABAAgAAAALAAMAAAABAAkAAAALAAMAAAABAAoAAAALAAQAAAACAAoAAAAMAAQAAAACAAkAAAACAAAAAAACAAgAAAACAAAAAAACAAcAAAACAAAAAAACAAYAAAACAAAAAAACAAUAAAACAAIAAAACAAQAAAACAAAAAAACAAMAAAACAAAAAAACAAIAAAACAAAAAAADAAIAAAACAAAAAAADAAMAAAACAAAAAAADAAQAAAACAAAAAAADAAUAAAACAAAAAAADAAYAAAACAAAAAAADAAcAAAACAAAAAAADAAgAAAACAAAAAAADAAkAAAACAAAAAAADAAoAAAAMAAQAAAAEAAoAAAAMAAQAAAAEAAkAAAACAAAAAAAEAAgAAAACAAIAAAAEAAcAAAACAAAAAAAEAAYAAAACAAAAAAAEAAUAAAACAAAAAAAEAAQAAAACAAAAAAAEAAMAAAACAAAAAAAEAAIAAAACAAAAAAAFAAIAAAACAAAAAAAFAAMAAAACAAAAAAAFAAQAAAACAAAAAAAFAAUAAAABAAIAAAAFAAYAAAACAAAAAAAFAAcAAAACAAAAAAAFAAgAAAACAAAAAAAFAAkAAAACAAAAAAAFAAoAAAAMAAQAAAAGAAoAAAAMAAQAAAAGAAkAAAACAAAAAAAGAAgAAAACAAAAAAAGAAcAAAACAAAAAAAGAAYAAAACAAAAAAAGAAUAAAABAAIAAAAGAAQAAAACAAAAAAAGAAMAAAACAAAAAAAGAAIAAAABAAIAAAAHAAcAAAACAAAAAAAHAAgAAAAAAAIAAAAHAAkAAAACAAAAAAAHAAoAAAAMAAQAAAAIAAoAAAAAAAUAAAAIAAkAAAACAAAAAAAIAAgAAAACAAAAAAAIAAcAAAACAAAAAAAIAAYAAAACAAAAAAAIAAUAAAAAAAIAAAAIAAQAAAACAAAAAAAIAAMAAAACAAIAAAAIAAIAAAACAAAAAAAIAAEAAAAMAAIAAAAJAAEAAAAMAAIAAAAJAAIAAAACAAAAAAAJAAMAAAACAAAAAAAJAAQAAAACAAAAAAAJAAUAAAACAAAAAAAJAAYAAAACAAAAAAAJAAcAAAACAAAAAAAJAAgAAAACAAAAAAAJAAkAAAACAAAAAAAJAAoAAAABAAUAAAAKAAoAAAACAAUAAAAKAAkAAAACAAAAAAAKAAgAAAAAAAIAAAAKAAcAAAACAAIAAAAKAAYAAAACAAIAAAAKAAUAAAACAAAAAAAKAAQAAAACAAAAAAAKAAMAAAACAAAAAAAKAAIAAAACAAAAAAAKAAEAAAAMAAIAAAALAAEAAAAMAAIAAAALAAIAAAACAAAAAAALAAMAAAAAAAIAAAALAAQAAAACAAAAAAALAAUAAAACAAAAAAALAAYAAAACAAAAAAALAAcAAAACAAAAAAALAAgAAAACAAAAAAALAAkAAAACAAAAAAALAAoAAAADAAUAAAAMAAoAAAAMAAQAAAAMAAkAAAACAAAAAAAMAAgAAAACAAAAAAAMAAcAAAACAAAAAAAMAAYAAAAAAAIAAAAMAAUAAAACAAAAAAAMAAQAAAABAAIAAAAMAAMAAAACAAAAAAAMAAIAAAACAAAAAAAMAAEAAAAMAAIAAAANAAEAAAAMAAIAAAANAAIAAAACAAAAAAANAAMAAAACAAAAAAANAAQAAAACAAAAAAANAAUAAAACAAAAAAANAAYAAAACAAAAAAANAAcAAAACAAIAAAANAAgAAAACAAAAAAANAAkAAAACAAAAAAANAAoAAAAMAAQAAAAOAAoAAAAMAAQAAAAOAAkAAAACAAAAAAAOAAgAAAACAAAAAAAOAAcAAAACAAAAAAAOAAYAAAACAAAAAAAOAAUAAAACAAAAAAAOAAQAAAACAAAAAAAOAAMAAAACAAAAAAAOAAIAAAACAAAAAAAOAAEAAAAMAAIAAAAPAAEAAAAMAAIAAAAPAAIAAAACAAAAAAAPAAMAAAACAAAAAAAPAAQAAAACAAAAAAAPAAUAAAACAAAAAAAPAAYAAAACAAAAAAAPAAcAAAACAAAAAAAPAAgAAAACAAAAAAAPAAkAAAACAAAAAAAPAAoAAAAMAAQAAAAQAAoAAAAMAAQAAAAQAAkAAAACAAAAAAAQAAgAAAACAAAAAAAQAAcAAAACAAAAAAAQAAYAAAACAAAAAAAQAAUAAAACAAIAAAAQAAQAAAACAAAAAAAQAAMAAAACAAAAAAAQAAIAAAACAAAAAAAQAAEAAAAMAAIAAAARAAEAAAAMAAIAAAARAAIAAAACAAAAAAARAAMAAAACAAAAAAARAAQAAAACAAAAAAARAAUAAAACAAAAAAARAAYAAAACAAAAAAARAAcAAAABAAIAAAARAAgAAAACAAAAAAARAAkAAAACAAAAAAARAAoAAAAMAAQAAAASAAoAAAAMAAQAAAASAAkAAAACAAAAAAASAAgAAAACAAAAAAASAAcAAAACAAAAAAASAAYAAAACAAAAAAASAAUAAAACAAAAAAASAAQAAAACAAAAAAASAAMAAAACAAAAAAASAAIAAAACAAAAAAASAAEAAAAMAAIAAAATAAEAAAANAAIAAAATAAIAAAANAAMAAAATAAMAAAANAAMAAAATAAQAAAANAAMAAAATAAUAAAANAAMAAAATAAYAAAANAAMAAAATAAcAAAANAAMAAAATAAgAAAANAAMAAAATAAkAAAANAAMAAAATAAoAAAANAAQAAAD//wwAAAAJAAYAAAD+/w0AAAAIAAcAAAD/////AAAJAAAAAAD+//7/AAAIAAcAAAAVAP//AAAPAAAAAAAWAP7/AAAIAAcAAAAVAAwAAAAPAAYAAAAWAA0AAAAIAAcAAAAHAA0AAAAIAAcAAAAHAAwAAAAMAAYAAAAGAAwAAAALAAYAAAAFAAwAAAAKAAYAAAAEAAwAAAAOAAYAAAADAAwAAAANAAYAAAACAAwAAAAMAAYAAAABAAwAAAALAAYAAAAAAAwAAAAKAAYAAAAAAA0AAAAIAAcAAAD//w0AAAAIAAcAAAABAA0AAAAIAAcAAAACAA0AAAAIAAcAAAADAA0AAAAIAAcAAAAEAA0AAAAIAAcAAAAFAA0AAAAIAAcAAAAGAA0AAAAIAAcAAAAIAAwAAAAAAAcAAAAIAA0AAAAIAAcAAAAJAA0AAAAIAAcAAAAJAAwAAAABAAcAAAAKAAwAAAACAAcAAAAKAA0AAAAIAAcAAAALAA0AAAAIAAcAAAALAAwAAAADAAcAAAAMAAwAAAAMAAYAAAAMAA0AAAAIAAcAAAANAA0AAAAIAAcAAAANAAwAAAANAAYAAAAOAAwAAAAKAAYAAAAOAA0AAAAIAAcAAAAPAA0AAAAIAAcAAAAPAAwAAAALAAYAAAAQAAwAAAAMAAYAAAAQAA0AAAAIAAcAAAARAA0AAAAIAAcAAAARAAwAAAANAAYAAAASAAwAAAAOAAYAAAASAA0AAAAIAAcAAAATAA0AAAAIAAcAAAATAAwAAAANAAYAAAAUAAwAAAAOAAYAAAAUAA0AAAAIAAcAAAAVAA0AAAAIAAcAAAAWAAQAAAAIAAcAAAAWAAMAAAAIAAcAAAAWAAIAAAAIAAcAAAAWAAEAAAAIAAcAAAAWAAAAAAAIAAcAAAAWAP//AAAIAAcAAAAVAAAAAAAPAAEAAAAVAAEAAAAPAAIAAAAVAAIAAAAPAAMAAAAVAAMAAAAPAAQAAAAVAAQAAAAPAAUAAAAVAAUAAAAPAAQAAAAVAAYAAAAPAAUAAAAVAAcAAAAPAAEAAAAVAAgAAAAPAAIAAAAVAAkAAAAPAAMAAAAVAAoAAAAPAAQAAAAVAAsAAAAPAAUAAAAWAAsAAAAIAAcAAAAWAAoAAAAIAAcAAAAWAAkAAAAIAAcAAAAWAAgAAAAIAAcAAAAWAAcAAAAIAAcAAAAWAAYAAAAIAAcAAAAWAAUAAAAIAAcAAAAWAAwAAAAIAAcAAAAOAP7/AAAIAAcAAAANAP7/AAAIAAcAAAAMAP7/AAAIAAcAAAALAP7/AAAIAAcAAAAKAP7/AAAIAAcAAAAJAP7/AAAIAAcAAAAIAP7/AAAIAAcAAAAHAP7/AAAIAAcAAAAGAP7/AAAIAAcAAAAFAP7/AAAIAAcAAAAEAP7/AAAIAAcAAAADAP7/AAAIAAcAAAACAP7/AAAIAAcAAAABAP7/AAAIAAcAAAAAAP7/AAAIAAcAAAD///7/AAAIAAcAAAAAAP//AAAKAAAAAAABAP//AAALAAAAAAACAP//AAAMAAAAAAADAP//AAANAAAAAAAEAP//AAAOAAAAAAAFAP//AAAKAAAAAAAGAP//AAALAAAAAAAHAP//AAAMAAAAAAAIAP//AAANAAAAAAAJAP//AAAKAAAAAAAKAP//AAALAAAAAAALAP//AAAMAAAAAAAMAP//AAANAAAAAAANAP//AAAOAAAAAAAOAP//AAAKAAAAAAAPAP//AAALAAAAAAAPAP7/AAAIAAcAAAAQAP7/AAAIAAcAAAAQAP//AAAKAAAAAAARAP//AAALAAAAAAARAP7/AAAIAAcAAAASAP7/AAAIAAcAAAASAP//AAAMAAAAAAATAP//AAANAAAAAAATAP7/AAAIAAcAAAAUAP7/AAAIAAcAAAAUAP//AAAOAAAAAAAVAP7/AAAIAAcAAAD+/wYAAAAIAAcAAAD+/wUAAAAIAAcAAAD+/wQAAAAIAAcAAAD+/wMAAAAIAAcAAAD+/wIAAAAIAAcAAAD+/wEAAAAIAAcAAAD+/wAAAAAIAAcAAAD+////AAAIAAcAAAD//wAAAAAJAAEAAAD//wEAAAAJAAIAAAD//wIAAAAJAAMAAAD//wMAAAAJAAQAAAD//wQAAAAJAAUAAAD//wUAAAAJAAQAAAD//wYAAAAJAAUAAAD//wcAAAAJAAEAAAD+/wcAAAAIAAcAAAD+/wgAAAAIAAcAAAD+/wkAAAAIAAcAAAD+/woAAAAIAAcAAAD+/wsAAAAIAAcAAAD+/wwAAAAIAAcAAAD//wsAAAAJAAUAAAD//woAAAAJAAQAAAD//wkAAAAJAAMAAAD//wgAAAAJAAIAAAA=") + +[node name="FD4TD2" parent="." unique_id=438390501 instance=ExtResource("3_ix72x")] +position = Vector2(320, 336) +level = "uid://bb2tupwi3i4eh" +target_area = "FD2TD4" +center_player = true +side = 3 diff --git a/levels/level_transition.gd b/levels/level_transition.gd new file mode 100644 index 0000000..0a99b56 --- /dev/null +++ b/levels/level_transition.gd @@ -0,0 +1,95 @@ +@tool +class_name LevelTransation extends Area2D + +enum SIDE { + LEFT, + RIGHT, + TOP, + BOTTOM +} + +@export_file("*.tscn") var level +@export var target_area: String = "LevelManager" +@export var center_player := false +@export_category("Collision Area Settings") +@export_range(1, 12, 1, "or_greater") +var size: int = 2 : + set(new_size): + size = new_size + update_area() +@export var side: SIDE = SIDE.LEFT : + set(new_side): + side = new_side + update_area() +@export var snap_to_grid: bool = false : + set(new_snap_to_grid): + snap_to_grid = new_snap_to_grid + update_snap_to_grid() + +@onready var collision_shape: CollisionShape2D = $CollisionShape2D + +func _ready() -> void: + update_area() + if Engine.is_editor_hint(): + return + monitoring = false + place_player() + await LevelManager.level_loaded + monitoring = true + body_entered.connect(on_enter) + +func update_area() -> void: + var new_rect: Vector2 = Vector2(32, 32) + var new_position: Vector2 = Vector2.ZERO + + if side == SIDE.TOP: + new_rect.x *= size + new_position.y -= 16 + elif side == SIDE.BOTTOM: + new_rect.x *= size + new_position.y += 16 + elif side == SIDE.LEFT: + new_rect.y *= size + new_position.x -= 16 + elif side == SIDE.RIGHT: + new_rect.y *= size + new_position.x += 16 + + if collision_shape == null: + collision_shape = get_node("CollisionShape2D") + + collision_shape.shape.size = new_rect + collision_shape.position = new_position + +func update_snap_to_grid() -> void: + position.x = round(position.x / 16) * 16 + position.y = round(position.y / 16) * 16 + +func on_enter(_node: Node2D) -> void: + LevelManager.load_new_level(level, target_area, get_offset()) + +func place_player() -> void: + if name != LevelManager.target_transition: + return + PlayerManager.set_player_position(global_position + LevelManager.position_offset) + +func get_offset() -> Vector2: + var offset := Vector2.ZERO + var player_pos := PlayerManager.player.global_position + if side == SIDE.LEFT or side == SIDE.RIGHT: + if center_player: + offset.y = 0 + else: + offset.y = player_pos.y - global_position.y + offset.x = 16 + if side == SIDE.LEFT: + offset.x *= -1 + else: + if center_player: + offset.x = 0 + else: + offset.x = player_pos.x - global_position.x + offset.y = 16 + if side == SIDE.TOP: + offset.y *= -1 + return offset diff --git a/levels/level_transition.gd.uid b/levels/level_transition.gd.uid new file mode 100644 index 0000000..342d4bc --- /dev/null +++ b/levels/level_transition.gd.uid @@ -0,0 +1 @@ +uid://xve4bvfude5f diff --git a/levels/level_transition.tscn b/levels/level_transition.tscn new file mode 100644 index 0000000..98a172b --- /dev/null +++ b/levels/level_transition.tscn @@ -0,0 +1,18 @@ +[gd_scene format=3 uid="uid://cpf3fr32ediqk"] + +[ext_resource type="Script" uid="uid://xve4bvfude5f" path="res://levels/level_transition.gd" id="1_hvuti"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_smikd"] +resource_local_to_scene = true +size = Vector2(32, 64) + +[node name="LevelManager" type="Area2D" unique_id=438390501] +collision_layer = 0 +monitorable = false +script = ExtResource("1_hvuti") +level = "" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=930732106] +position = Vector2(-16, 0) +shape = SubResource("RectangleShape2D_smikd") +debug_color = Color(0.64724547, 0.33917212, 0.98769504, 0.41960785) diff --git a/levels/player_spawn.tscn b/levels/player_spawn.tscn new file mode 100644 index 0000000..c1b405f --- /dev/null +++ b/levels/player_spawn.tscn @@ -0,0 +1,14 @@ +[gd_scene format=3 uid="uid://dao452qs5wu63"] + +[ext_resource type="Script" uid="uid://ymk7h2a2b06t" path="res://levels/scripts/player_spawn.gd" id="1_2efx6"] +[ext_resource type="Texture2D" uid="uid://cge4rwsf016ej" path="res://player/sprites/PlayerSprite02.png" id="1_j6jwq"] + +[node name="PlayerSpawn" type="Node2D" unique_id=792855586] +script = ExtResource("1_2efx6") + +[node name="PlayerSprite" type="Sprite2D" parent="." unique_id=752985470] +modulate = Color(0.0627451, 0.49803922, 0.7254902, 0.30980393) +position = Vector2(0, -20) +texture = ExtResource("1_j6jwq") +hframes = 16 +vframes = 3 diff --git a/levels/scripts/level.gd b/levels/scripts/level.gd new file mode 100644 index 0000000..eee311d --- /dev/null +++ b/levels/scripts/level.gd @@ -0,0 +1,10 @@ +class_name Level extends Node2D + +func _ready() -> void: + y_sort_enabled = true + PlayerManager.set_as_parent(self) + LevelManager.level_load_started.connect(free_level) + +func free_level() -> void: + PlayerManager.unparent_player(self) + queue_free() diff --git a/levels/scripts/level.gd.uid b/levels/scripts/level.gd.uid new file mode 100644 index 0000000..deb03e5 --- /dev/null +++ b/levels/scripts/level.gd.uid @@ -0,0 +1 @@ +uid://curqsb603j1yj diff --git a/levels/scripts/player_spawn.gd b/levels/scripts/player_spawn.gd new file mode 100644 index 0000000..148e3e6 --- /dev/null +++ b/levels/scripts/player_spawn.gd @@ -0,0 +1,9 @@ +extends Node2D + + +func _ready() -> void: + visible = false + if !PlayerManager.player_spawned: + PlayerManager.set_player_position(global_position) + PlayerManager.player_spawned = true + diff --git a/levels/scripts/player_spawn.gd.uid b/levels/scripts/player_spawn.gd.uid new file mode 100644 index 0000000..d932455 --- /dev/null +++ b/levels/scripts/player_spawn.gd.uid @@ -0,0 +1 @@ +uid://ymk7h2a2b06t diff --git a/player/audio/SwordSwoosh.wav b/player/audio/SwordSwoosh.wav new file mode 100644 index 0000000..7861535 Binary files /dev/null and b/player/audio/SwordSwoosh.wav differ diff --git a/player/audio/SwordSwoosh.wav.import b/player/audio/SwordSwoosh.wav.import new file mode 100644 index 0000000..9944096 --- /dev/null +++ b/player/audio/SwordSwoosh.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://qsxe4l0o268q" +path="res://.godot/imported/SwordSwoosh.wav-f30e293b6421bffc875aeb09805a5384.sample" + +[deps] + +source_file="res://player/audio/SwordSwoosh.wav" +dest_files=["res://.godot/imported/SwordSwoosh.wav-f30e293b6421bffc875aeb09805a5384.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/player/audio/hit_player.wav b/player/audio/hit_player.wav new file mode 100644 index 0000000..b348bd7 Binary files /dev/null and b/player/audio/hit_player.wav differ diff --git a/player/audio/hit_player.wav.import b/player/audio/hit_player.wav.import new file mode 100644 index 0000000..586a7b3 --- /dev/null +++ b/player/audio/hit_player.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dgqiq3755uttq" +path="res://.godot/imported/hit_player.wav-906e5c3229ae8f245a876efcb6d12a8d.sample" + +[deps] + +source_file="res://player/audio/hit_player.wav" +dest_files=["res://.godot/imported/hit_player.wav-906e5c3229ae8f245a876efcb6d12a8d.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/player/player.tscn b/player/player.tscn new file mode 100644 index 0000000..97f09fb --- /dev/null +++ b/player/player.tscn @@ -0,0 +1,716 @@ +[gd_scene format=3 uid="uid://c3v8niwu0avmm"] + +[ext_resource type="Script" uid="uid://bh2madpelppjn" path="res://player/scripts/player.gd" id="1_rkbax"] +[ext_resource type="Texture2D" uid="uid://cge4rwsf016ej" path="res://player/sprites/PlayerSprite02.png" id="2_qjkh3"] +[ext_resource type="Texture2D" uid="uid://b0hgmxuickvw8" path="res://player/sprites/AttackSprite01.png" id="3_boad6"] +[ext_resource type="Script" uid="uid://cbmwqg1xr14sg" path="res://player/scripts/player_state_machine.gd" id="3_yw30f"] +[ext_resource type="Texture2D" uid="uid://bxqdnnk4dqnu5" path="res://player/sprites/Shadow.png" id="4_hg6s5"] +[ext_resource type="Script" uid="uid://cabtgwm5i08oe" path="res://player/scripts/state_idle.gd" id="4_qjkh3"] +[ext_resource type="Script" uid="uid://c6p40pfivsfxo" path="res://player/scripts/state_walk.gd" id="5_qjkh3"] +[ext_resource type="Script" uid="uid://rkjhx7gfma1e" path="res://player/scripts/state_attack.gd" id="6_g6k8r"] +[ext_resource type="AudioStream" uid="uid://qsxe4l0o268q" path="res://player/audio/SwordSwoosh.wav" id="8_rgyib"] +[ext_resource type="Script" uid="uid://ba6scm5um18sd" path="res://player/scripts/player_interactions_host.gd" id="10_2ieo8"] +[ext_resource type="PackedScene" uid="uid://mwyvk4gke34" path="res://general/hurtbox/hurtbox.tscn" id="10_8t03j"] +[ext_resource type="Script" uid="uid://gyjl7owe3dxx" path="res://player/scripts/camera.gd" id="11_ebec5"] +[ext_resource type="Script" uid="uid://pr4o7w6faw08" path="res://player/scripts/state_stun.gd" id="11_wodsf"] +[ext_resource type="PackedScene" uid="uid://cda6fr5vhb4ty" path="res://general/hitbox/hitbox.tscn" id="13_yllr7"] +[ext_resource type="Script" uid="uid://cyff8l2rrvtl" path="res://player/scripts/push_area.gd" id="14_32hag"] +[ext_resource type="AudioStream" uid="uid://dgqiq3755uttq" path="res://player/audio/hit_player.wav" id="14_kb6p2"] + +[sub_resource type="Animation" id="Animation_ebec5"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 10)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:show_behind_parent") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_yllr7"] +resource_name = "attack_down" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0, 3] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 10)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:show_behind_parent") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_kb6p2"] +resource_name = "attack_side" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [8, 11] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(10, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:show_behind_parent") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_wodsf"] +resource_name = "attack_up" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [4, 7] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -10)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:show_behind_parent") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_32hag"] +resource_name = "no_attack" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_32hag"] +_data = { +&"RESET": SubResource("Animation_ebec5"), +&"attack_down": SubResource("Animation_yllr7"), +&"attack_side": SubResource("Animation_kb6p2"), +&"attack_up": SubResource("Animation_wodsf"), +&"no_attack": SubResource("Animation_32hag") +} + +[sub_resource type="CircleShape2D" id="CircleShape2D_2ieo8"] +radius = 20.0 + +[sub_resource type="Animation" id="Animation_rkbax"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D/attack_hurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 36)] +} + +[sub_resource type="Animation" id="Animation_hg6s5"] +resource_name = "attack_down" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [21, 23] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D/attack_hurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 17)] +} + +[sub_resource type="Animation" id="Animation_8t03j"] +resource_name = "attack_side" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [27, 29] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D/attack_hurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(17, 0)] +} + +[sub_resource type="Animation" id="Animation_2ieo8"] +resource_name = "attack_up" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [24, 26] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D/attack_hurtbox:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -17)] +} + +[sub_resource type="Animation" id="Animation_g1dw6"] +resource_name = "idle_down" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0, 2] +} + +[sub_resource type="Animation" id="Animation_yw30f"] +resource_name = "idle_side" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [6, 8] +} + +[sub_resource type="Animation" id="Animation_qjkh3"] +resource_name = "idle_up" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [3, 5] +} + +[sub_resource type="Animation" id="Animation_tqiix"] +resource_name = "stun_down" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [30] +} + +[sub_resource type="Animation" id="Animation_e7oew"] +resource_name = "stun_side" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [32] +} + +[sub_resource type="Animation" id="Animation_c35mf"] +resource_name = "stun_up" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [31] +} + +[sub_resource type="Animation" id="Animation_g6k8r"] +resource_name = "walk_down" +length = 0.3 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [9, 12] +} + +[sub_resource type="Animation" id="Animation_boad6"] +resource_name = "walk_side" +length = 0.3 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [17, 20] +} + +[sub_resource type="Animation" id="Animation_rgyib"] +resource_name = "walk_up" +length = 0.3 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [13, 16] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_hg6s5"] +_data = { +&"RESET": SubResource("Animation_rkbax"), +&"attack_down": SubResource("Animation_hg6s5"), +&"attack_side": SubResource("Animation_8t03j"), +&"attack_up": SubResource("Animation_2ieo8"), +&"idle_down": SubResource("Animation_g1dw6"), +&"idle_side": SubResource("Animation_yw30f"), +&"idle_up": SubResource("Animation_qjkh3"), +&"stun_down": SubResource("Animation_tqiix"), +&"stun_side": SubResource("Animation_e7oew"), +&"stun_up": SubResource("Animation_c35mf"), +&"walk_down": SubResource("Animation_g6k8r"), +&"walk_side": SubResource("Animation_boad6"), +&"walk_up": SubResource("Animation_rgyib") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wodsf"] +size = Vector2(20, 8.999985) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_32hag"] +size = Vector2(20, 16.499956) + +[sub_resource type="CircleShape2D" id="CircleShape2D_edjgo"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_kb6p2"] + +[sub_resource type="Animation" id="Animation_65viv"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_bjvpn"] +resource_name = "damaged" +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4015934, 0.49814668, 0.6092257, 0.7100513, 0.8040412), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0.09803922), Color(1, 1, 1, 1), Color(1, 1, 1, 0.05882353), Color(1, 1, 1, 1), Color(1, 1, 1, 0.39215687), Color(1, 1, 1, 1), Color(1, 1, 1, 0.09803922), Color(1, 1, 1, 1)] +} +tracks/1/type = "audio" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("audio/audio") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("14_kb6p2") +}], +"times": PackedFloat32Array(0) +} +tracks/1/use_blend = true + +[sub_resource type="Animation" id="Animation_x7c3f"] +resource_name = "default" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_bjvpn"] +_data = { +&"RESET": SubResource("Animation_65viv"), +&"damaged": SubResource("Animation_bjvpn"), +&"default": SubResource("Animation_x7c3f") +} + +[node name="player" type="CharacterBody2D" unique_id=267810811] +collision_mask = 16 +motion_mode = 1 +wall_min_slide_angle = 0.17453292 +script = ExtResource("1_rkbax") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=536210534] +position = Vector2(0, -20) +texture = ExtResource("2_qjkh3") +hframes = 16 +vframes = 3 + +[node name="shadow" type="Sprite2D" parent="Sprite2D" unique_id=175175930] +modulate = Color(0, 0, 0, 0.5176471) +show_behind_parent = true +position = Vector2(0, 20) +texture = ExtResource("4_hg6s5") + +[node name="attack_effect" type="Sprite2D" parent="Sprite2D" unique_id=707156114] +position = Vector2(0, 10) +texture = ExtResource("3_boad6") +hframes = 12 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Sprite2D/attack_effect" unique_id=1619018780] +libraries/ = SubResource("AnimationLibrary_32hag") +autoplay = &"no_attack" + +[node name="attack_hurtbox" parent="Sprite2D" unique_id=38213362 instance=ExtResource("10_8t03j")] +unique_name_in_owner = true +position = Vector2(0, 36) +rotation = 0.002383499 +scale = Vector2(0.99999994, 0.99999994) +collision_mask = 256 +monitoring = false + +[node name="collision" type="CollisionShape2D" parent="Sprite2D/attack_hurtbox" unique_id=1176445286] +shape = SubResource("CircleShape2D_2ieo8") +debug_color = Color(0.99431497, 0, 0.2313017, 0.41960785) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=65643183] +libraries/ = SubResource("AnimationLibrary_hg6s5") + +[node name="state_machine" type="Node2D" parent="." unique_id=1189850546] +script = ExtResource("3_yw30f") + +[node name="idle" type="Node2D" parent="state_machine" unique_id=1427450181] +script = ExtResource("4_qjkh3") + +[node name="walk" type="Node2D" parent="state_machine" unique_id=1531939313] +script = ExtResource("5_qjkh3") + +[node name="attack" type="Node2D" parent="state_machine" unique_id=1875111878] +script = ExtResource("6_g6k8r") +attack_sound = ExtResource("8_rgyib") + +[node name="stun" type="Node2D" parent="state_machine" unique_id=242638647] +script = ExtResource("11_wodsf") + +[node name="Camera2D" type="Camera2D" parent="." unique_id=77105996] +position = Vector2(6, -5) +script = ExtResource("11_ebec5") + +[node name="audio" type="Node2D" parent="." unique_id=1455470313] + +[node name="audio" type="AudioStreamPlayer2D" parent="audio" unique_id=245569319] +max_polyphony = 4 + +[node name="interactions" type="Node2D" parent="." unique_id=446148331] +rotation = 0.002383499 +script = ExtResource("10_2ieo8") + +[node name="Area2D" type="Area2D" parent="interactions" unique_id=265616332] +collision_layer = 4 +collision_mask = 0 +monitoring = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="interactions/Area2D" unique_id=902291624] +position = Vector2(0, 6) +shape = SubResource("RectangleShape2D_wodsf") +debug_color = Color(3.3691526e-07, 0.6381925, 0.38625547, 0.41960785) + +[node name="PushArea" type="Area2D" parent="interactions" unique_id=2049347269] +collision_layer = 0 +collision_mask = 16 +monitorable = false +script = ExtResource("14_32hag") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="interactions/PushArea" unique_id=992735310] +position = Vector2(-0.002383499, 2.7499897) +scale = Vector2(1.0000002, 1.0000002) +shape = SubResource("RectangleShape2D_32hag") +debug_color = Color(0.86947346, 0.09178855, 0.8239628, 0.41960785) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1933391791] +shape = SubResource("CircleShape2D_edjgo") + +[node name="Hitbox" parent="." unique_id=1876591880 instance=ExtResource("13_yllr7")] +collision_layer = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox" unique_id=130293538] +position = Vector2(0, -8) +shape = SubResource("CircleShape2D_kb6p2") +debug_color = Color(0.75446975, 0.45642966, 0.03938905, 0.41960785) + +[node name="effect_animation" type="AnimationPlayer" parent="." unique_id=658262531] +libraries/ = SubResource("AnimationLibrary_bjvpn") diff --git a/player/scripts/camera.gd b/player/scripts/camera.gd new file mode 100644 index 0000000..3b1a103 --- /dev/null +++ b/player/scripts/camera.gd @@ -0,0 +1,11 @@ +class_name Camera extends Camera2D + +func _ready() -> void: + LevelManager.Tilemap_boudns_change.connect(update_limits) + +func update_limits(bounds: Array[Vector2]) -> void: + limit_left = int(bounds[0].x) + limit_top = int(bounds[0].y) + limit_right = int(bounds[1].x) + limit_bottom = int(bounds[1].y) + diff --git a/player/scripts/camera.gd.uid b/player/scripts/camera.gd.uid new file mode 100644 index 0000000..aec2c1b --- /dev/null +++ b/player/scripts/camera.gd.uid @@ -0,0 +1 @@ +uid://gyjl7owe3dxx diff --git a/player/scripts/player.gd b/player/scripts/player.gd new file mode 100644 index 0000000..10ff018 --- /dev/null +++ b/player/scripts/player.gd @@ -0,0 +1,87 @@ +class_name Player extends CharacterBody2D + +const DIR_4 = [ + Vector2.RIGHT, + Vector2.DOWN, + Vector2.LEFT, + Vector2.UP, +] + +signal direction_change(new_direction: Vector2) +signal player_damaged(hurtbox: Hurtbox) + +@onready var animation_player : AnimationPlayer = $AnimationPlayer +@onready var sprite : Sprite2D = $Sprite2D +@onready var state_machine: PlayerStateMachine = $state_machine +@onready var hitbox: Hitbox = $Hitbox +@onready var effect_animation: AnimationPlayer = $effect_animation + +@export_group("Stats") +@export var hp: int = 6 +@export var maxHp: int = 6 + +var cardinal_direction : Vector2 = Vector2.DOWN +var direction : Vector2 = Vector2.ZERO +var invlunerable: bool = false + +func _ready() -> void: + PlayerManager.player = self + state_machine.initialize(self) + hitbox.damaged.connect(on_damage) + update_hp(99) + +func _process(_delta: float) -> void: + direction = Vector2( + Input.get_axis("left", "right"), + Input.get_axis("up", "down"), + ).normalized() + +func _physics_process(_delta: float) -> void: + move_and_slide() + +func set_direction() -> bool: + if direction == Vector2.ZERO: + return false + + var new_direction = DIR_4[int(round((direction + cardinal_direction * 0.1).angle() / TAU * DIR_4.size()))] + + if new_direction == cardinal_direction: + return false + cardinal_direction = new_direction + direction_change.emit(new_direction) + sprite.scale.x = -1 if cardinal_direction == Vector2.LEFT else 1 + return true + +func update_animation(state: String) -> void: + animation_player.play(state + "_" + anim_direction()) + +func anim_direction() -> String: + var direction_result : String = "side" + if cardinal_direction == Vector2.DOWN: + direction_result = "down" + elif cardinal_direction == Vector2.UP: + direction_result = "up" + return direction_result + +func on_damage(hurtbox: Hurtbox) -> void: + if invlunerable: + return + update_hp(-hurtbox.damage) + if hp > 0: + player_damaged.emit(hurtbox) + else: + player_damaged.emit(hurtbox) + update_hp(99) + +func update_hp(more_hp: int) -> void: + hp = clampi(hp + more_hp, 0, maxHp) + Hud.update_hp(hp, maxHp) + +func make_invulnerable(duration: float = 1.0) -> void: + invlunerable = true + hitbox.monitoring = false + + await get_tree().create_timer(duration).timeout + invlunerable = false + hitbox.monitoring = true + diff --git a/player/scripts/player.gd.uid b/player/scripts/player.gd.uid new file mode 100644 index 0000000..a686581 --- /dev/null +++ b/player/scripts/player.gd.uid @@ -0,0 +1 @@ +uid://bh2madpelppjn diff --git a/player/scripts/player_interactions_host.gd b/player/scripts/player_interactions_host.gd new file mode 100644 index 0000000..8e99e24 --- /dev/null +++ b/player/scripts/player_interactions_host.gd @@ -0,0 +1,19 @@ +class_name PlayerInteractionsHost extends Node2D + +@onready var player: Player = $".." + +func _ready() -> void: + player.direction_change.connect(update_direction) + +func update_direction(new_direction: Vector2) -> void: + match new_direction: + Vector2.DOWN: + rotation_degrees = 0 + Vector2.UP: + rotation_degrees = 180 + Vector2.LEFT: + rotation_degrees = 90 + Vector2.RIGHT: + rotation_degrees = 270 + _: + rotation_degrees = 0 diff --git a/player/scripts/player_interactions_host.gd.uid b/player/scripts/player_interactions_host.gd.uid new file mode 100644 index 0000000..d953cdc --- /dev/null +++ b/player/scripts/player_interactions_host.gd.uid @@ -0,0 +1 @@ +uid://ba6scm5um18sd diff --git a/player/scripts/player_state_machine.gd b/player/scripts/player_state_machine.gd new file mode 100644 index 0000000..b02ff18 --- /dev/null +++ b/player/scripts/player_state_machine.gd @@ -0,0 +1,46 @@ +class_name PlayerStateMachine extends Node + +var states: Array[State] +var previous_state: State +var current_state: State + +func _ready() -> void: + process_mode = Node.PROCESS_MODE_DISABLED + +func _process(delta: float) -> void: + change_state(current_state.process(delta)) + +func _physics_process(delta: float) -> void: + change_state(current_state.process(delta)) + +func _unhandled_input(event) -> void: + change_state(current_state.handle_input(event)) + +func initialize(player: Player) -> void: + states = [] + for child in get_children(): + if child is State: + states.append(child) + if states.is_empty(): + return + + var firstState = states[0] + firstState.player = player + firstState.state_machine = self + + for state in states: + state.init() + + change_state(firstState) + process_mode = Node.PROCESS_MODE_INHERIT + +func change_state(new_state: State) -> void: + if new_state == null or new_state == current_state: + return + + if current_state: + current_state.exit() + + previous_state = current_state + current_state = new_state + current_state.enter() diff --git a/player/scripts/player_state_machine.gd.uid b/player/scripts/player_state_machine.gd.uid new file mode 100644 index 0000000..a794d01 --- /dev/null +++ b/player/scripts/player_state_machine.gd.uid @@ -0,0 +1 @@ +uid://cbmwqg1xr14sg diff --git a/player/scripts/push_area.gd b/player/scripts/push_area.gd new file mode 100644 index 0000000..847213a --- /dev/null +++ b/player/scripts/push_area.gd @@ -0,0 +1,13 @@ +extends Area2D + +func _ready() -> void: + body_entered.connect(on_body_entered) + body_exited.connect(on_body_exited) + +func on_body_entered(body: Node2D) -> void: + if body is PushableStatute: + body.push_direction = PlayerManager.player.direction + +func on_body_exited(body: Node2D) -> void: + if body is PushableStatute: + body.push_direction = Vector2.ZERO diff --git a/player/scripts/push_area.gd.uid b/player/scripts/push_area.gd.uid new file mode 100644 index 0000000..b6d7717 --- /dev/null +++ b/player/scripts/push_area.gd.uid @@ -0,0 +1 @@ +uid://cyff8l2rrvtl diff --git a/player/scripts/state.gd b/player/scripts/state.gd new file mode 100644 index 0000000..ea9c91e --- /dev/null +++ b/player/scripts/state.gd @@ -0,0 +1,25 @@ +class_name State extends Node + +static var player : Player +static var state_machine: PlayerStateMachine + +func _ready() -> void: + pass + +func init() -> void: + pass + +func enter() -> void: + pass + +func exit() -> void: + pass + +func process(_delta : float) -> State: + return null + +func physics(_delta : float) -> State: + return null + +func handle_input(_event : InputEvent) -> State: + return null diff --git a/player/scripts/state.gd.uid b/player/scripts/state.gd.uid new file mode 100644 index 0000000..7eb6ef4 --- /dev/null +++ b/player/scripts/state.gd.uid @@ -0,0 +1 @@ +uid://cmcwtkqxxkhik diff --git a/player/scripts/state_attack.gd b/player/scripts/state_attack.gd new file mode 100644 index 0000000..93d42f5 --- /dev/null +++ b/player/scripts/state_attack.gd @@ -0,0 +1,44 @@ +class_name State_Attack extends State + +@onready var walk: State = $"../walk" +@onready var idle: State = $"../idle" +@onready var animation_player: AnimationPlayer = $"../../AnimationPlayer" +@onready var attack_animation_player: AnimationPlayer = $"../../Sprite2D/attack_effect/AnimationPlayer" +@onready var audio_player: AudioStreamPlayer2D = $"../../audio/audio" +@onready var hurtbox: Hurtbox = %attack_hurtbox +@export var attack_sound: AudioStream +@export_range(1, 20, 0.5) var decelerate_speed: float = 5.0 +var attacking: bool = false + +func enter() -> void: + animation_player.animation_finished.connect(end_attack) + player.update_animation("attack") + attack_animation_player.play("attack_" + player.anim_direction()) + audio_player.stream = attack_sound + audio_player.pitch_scale = randf_range(0.9, 1.1) + audio_player.play() + attacking = true + + await get_tree().create_timer(0.075).timeout + if attacking: + hurtbox.monitoring = true + +func exit() -> void: + animation_player.animation_finished.disconnect(end_attack) + attacking = false + hurtbox.monitoring = false + +func process(delta : float) -> State: + player.velocity -= player.velocity * decelerate_speed * delta + if attacking: + return null + return idle if player.direction == Vector2.ZERO else walk + +func physics(_delta : float) -> State: + return null + +func handle_input(_event : InputEvent) -> State: + return null + +func end_attack(_new_animation_name: String) -> void: + attacking = false diff --git a/player/scripts/state_attack.gd.uid b/player/scripts/state_attack.gd.uid new file mode 100644 index 0000000..c66e83b --- /dev/null +++ b/player/scripts/state_attack.gd.uid @@ -0,0 +1 @@ +uid://rkjhx7gfma1e diff --git a/player/scripts/state_idle.gd b/player/scripts/state_idle.gd new file mode 100644 index 0000000..77aef28 --- /dev/null +++ b/player/scripts/state_idle.gd @@ -0,0 +1,26 @@ +class_name State_Idle extends State + +@onready var walk: State = $"../walk" +@onready var attack: State = $"../attack" + +func enter() -> void: + player.update_animation("idle") + +func exit() -> void: + pass + +func process(_delta : float) -> State: + if player.direction != Vector2.ZERO: + return walk + player.velocity = Vector2.ZERO + return null + +func physics(_delta : float) -> State: + return null + +func handle_input(event : InputEvent) -> State: + if event.is_action_pressed("attack"): + return attack + if event.is_action_pressed("interact"): + PlayerManager.interact_pressed.emit() + return null diff --git a/player/scripts/state_idle.gd.uid b/player/scripts/state_idle.gd.uid new file mode 100644 index 0000000..5c3545a --- /dev/null +++ b/player/scripts/state_idle.gd.uid @@ -0,0 +1 @@ +uid://cabtgwm5i08oe diff --git a/player/scripts/state_stun.gd b/player/scripts/state_stun.gd new file mode 100644 index 0000000..2d2df46 --- /dev/null +++ b/player/scripts/state_stun.gd @@ -0,0 +1,46 @@ +class_name StateStun extends State + +@export var knockback_speed: float = 200.0 +@export var decelerate_speed: float = 10.0 +@export var invulnerable_duration: float = 1.0 + +@onready var idle: State = $"../idle" + +var hurtbox: Hurtbox +var direction: Vector2 + +var next_state: State + + +func init() -> void: + player.player_damaged.connect(on_damaged) + +func enter() -> void: + player.animation_player.animation_finished.connect(on_animation_finished) + direction = player.global_position.direction_to(hurtbox.global_position) + player.velocity = direction * -knockback_speed + player.set_direction() + player.update_animation("stun") + player.make_invulnerable(invulnerable_duration) + player.effect_animation.play("damaged") + +func exit() -> void: + player.animation_player.animation_finished.disconnect(on_animation_finished) + next_state = null + +func process(delta: float) -> State: + player.velocity -= player.velocity * decelerate_speed * delta + return next_state + +func physics(_delta: float) -> State: + return null + +func handle_input(_event: InputEvent) -> State: + return null + +func on_damaged(incomig_hurtbox: Hurtbox) -> void: + hurtbox = incomig_hurtbox + state_machine.change_state(self) + +func on_animation_finished(_name: String) -> void: + next_state = idle diff --git a/player/scripts/state_stun.gd.uid b/player/scripts/state_stun.gd.uid new file mode 100644 index 0000000..cecba3e --- /dev/null +++ b/player/scripts/state_stun.gd.uid @@ -0,0 +1 @@ +uid://pr4o7w6faw08 diff --git a/player/scripts/state_walk.gd b/player/scripts/state_walk.gd new file mode 100644 index 0000000..f0e6707 --- /dev/null +++ b/player/scripts/state_walk.gd @@ -0,0 +1,31 @@ +class_name State_Walk extends State + +@export var move_speed: float = 100.0 +@onready var idle: State = $"../idle" +@onready var attack: State = $"../attack" + +func enter() -> void: + player.update_animation("walk") + +func exit() -> void: + pass + +func process(_delta : float) -> State: + if player.direction == Vector2.ZERO: + return idle + + player.velocity = player.direction * move_speed + + if player.set_direction(): + player.update_animation("walk") + return null + +func physics(_delta : float) -> State: + return null + +func handle_input(event : InputEvent) -> State: + if event.is_action_pressed("attack"): + return attack + if event.is_action_pressed("interact"): + PlayerManager.interact_pressed.emit() + return null diff --git a/player/scripts/state_walk.gd.uid b/player/scripts/state_walk.gd.uid new file mode 100644 index 0000000..4095662 --- /dev/null +++ b/player/scripts/state_walk.gd.uid @@ -0,0 +1 @@ +uid://c6p40pfivsfxo diff --git a/player/sprites/AttackSprite01.png b/player/sprites/AttackSprite01.png new file mode 100644 index 0000000..8aee12e Binary files /dev/null and b/player/sprites/AttackSprite01.png differ diff --git a/player/sprites/AttackSprite01.png.import b/player/sprites/AttackSprite01.png.import new file mode 100644 index 0000000..436e8c8 --- /dev/null +++ b/player/sprites/AttackSprite01.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0hgmxuickvw8" +path="res://.godot/imported/AttackSprite01.png-0575abc50558d56ec8c30b16d172511d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://player/sprites/AttackSprite01.png" +dest_files=["res://.godot/imported/AttackSprite01.png-0575abc50558d56ec8c30b16d172511d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/player/sprites/ExamplePlayerSprite.png b/player/sprites/ExamplePlayerSprite.png new file mode 100644 index 0000000..77eb25a Binary files /dev/null and b/player/sprites/ExamplePlayerSprite.png differ diff --git a/player/sprites/ExamplePlayerSprite.png.import b/player/sprites/ExamplePlayerSprite.png.import new file mode 100644 index 0000000..133be92 --- /dev/null +++ b/player/sprites/ExamplePlayerSprite.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8c6f4i0v4lfb" +path="res://.godot/imported/ExamplePlayerSprite.png-4bba829ddabbc6d45d21ad0746f328de.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://player/sprites/ExamplePlayerSprite.png" +dest_files=["res://.godot/imported/ExamplePlayerSprite.png-4bba829ddabbc6d45d21ad0746f328de.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/player/sprites/PlayerSprite02.png b/player/sprites/PlayerSprite02.png new file mode 100644 index 0000000..091dda8 Binary files /dev/null and b/player/sprites/PlayerSprite02.png differ diff --git a/player/sprites/PlayerSprite02.png.import b/player/sprites/PlayerSprite02.png.import new file mode 100644 index 0000000..3333561 --- /dev/null +++ b/player/sprites/PlayerSprite02.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cge4rwsf016ej" +path="res://.godot/imported/PlayerSprite02.png-52d1913b1a17d0976781a54b22f3d6e0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://player/sprites/PlayerSprite02.png" +dest_files=["res://.godot/imported/PlayerSprite02.png-52d1913b1a17d0976781a54b22f3d6e0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/player/sprites/Shadow.png b/player/sprites/Shadow.png new file mode 100644 index 0000000..ec37144 Binary files /dev/null and b/player/sprites/Shadow.png differ diff --git a/player/sprites/Shadow.png.import b/player/sprites/Shadow.png.import new file mode 100644 index 0000000..554e629 --- /dev/null +++ b/player/sprites/Shadow.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxqdnnk4dqnu5" +path="res://.godot/imported/Shadow.png-feabb5c232372dba2ec097eeef7da2e3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://player/sprites/Shadow.png" +dest_files=["res://.godot/imported/Shadow.png-feabb5c232372dba2ec097eeef7da2e3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/playground.tscn b/playground.tscn new file mode 100644 index 0000000..4aeb518 --- /dev/null +++ b/playground.tscn @@ -0,0 +1,41 @@ +[gd_scene format=4 uid="uid://m8dljgy8f3mp"] + +[ext_resource type="Script" uid="uid://curqsb603j1yj" path="res://levels/scripts/level.gd" id="1_o00ia"] +[ext_resource type="PackedScene" uid="uid://c28dglqe053m1" path="res://tiles_maps/grass-01.tscn" id="2_wt17y"] +[ext_resource type="PackedScene" uid="uid://b16l2ehf7hd1t" path="res://props/plants/plant.tscn" id="3_m8u5f"] +[ext_resource type="PackedScene" uid="uid://dv2hjei167q68" path="res://enemies/slime/slime.tscn" id="4_is3ju"] +[ext_resource type="PackedScene" uid="uid://dao452qs5wu63" path="res://levels/player_spawn.tscn" id="4_o00ia"] + +[node name="playground" type="Node2D" unique_id=1056158981] +y_sort_enabled = true +script = ExtResource("1_o00ia") + +[node name="Grass-01" parent="." unique_id=653632611 instance=ExtResource("2_wt17y")] +tile_map_data = PackedByteArray("AAAAAAAAAAADAAQAAAAAAAEAAAADAAUAAAAAAAIAAAADAAYAAAAAAAMAAAAGAAMAAAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAYAAAACAAEAAAAAAAcAAAAAAAAAAAAAAAgAAAAFAAAAAAABAAAAAAAEAAQAAAABAAEAAAAEAAUAAAABAAIAAAAEAAYAAAABAAMAAAAJAAAAAAABAAQAAAAMAAEAAAABAAUAAAAFAAIAAAABAAYAAAAAAAAAAAABAAcAAAAMAAAAAAABAAgAAAAJAAMAAAACAAAAAAACAAQAAAACAAEAAAACAAUAAAACAAIAAAACAAYAAAACAAMAAAAOAAAAAAACAAQAAAANAAIAAAACAAUAAAAJAAIAAAACAAYAAAAMAAEAAAACAAcAAAAJAAEAAAACAAgAAAAOAAMAAAADAAAAAAADAAQAAAADAAEAAAADAAUAAAADAAIAAAADAAYAAAADAAMAAAAPAAAAAAADAAQAAAAKAAEAAAADAAUAAAANAAIAAAADAAYAAAANAAIAAAADAAcAAAAKAAIAAAADAAgAAAAPAAMAAAAEAAAAAAAEAAQAAAAEAAEAAAAEAAUAAAAEAAIAAAAEAAYAAAAEAAMAAAAAAAAAAAAEAAQAAAAOAAAAAAAEAAUAAAANAAIAAAAEAAYAAAAKAAIAAAAEAAcAAAAPAAMAAAAEAAgAAAAAAAAAAAAFAAAAAAAHAAQAAAAFAAEAAAAHAAUAAAAFAAIAAAAHAAYAAAAFAAMAAAAMAAAAAAAFAAQAAAAJAAEAAAAFAAUAAAAKAAIAAAAFAAYAAAAPAAMAAAAFAAcAAAAAAAAAAAAFAAgAAAACAAEAAAAGAAAAAAAMAAAAAAAGAAEAAAAMAAEAAAAGAAIAAAAMAAEAAAAGAAMAAAAJAAEAAAAGAAQAAAANAAIAAAAGAAUAAAANAAMAAAAGAAYAAAACAAEAAAAGAAcAAAAAAAAAAAAGAAgAAAAMAAAAAAAHAAAAAAAPAAAAAAAHAAEAAAAPAAIAAAAHAAIAAAAPAAIAAAAHAAMAAAAKAAEAAAAHAAQAAAANAAIAAAAHAAUAAAANAAMAAAAHAAYAAAAAAAAAAAAHAAcAAAAMAAAAAAAHAAgAAAANAAEAAAAIAAAAAAAIAAQAAAAIAAEAAAAIAAUAAAAIAAIAAAAIAAYAAAAIAAMAAAAPAAAAAAAIAAQAAAAKAAEAAAAIAAUAAAAJAAIAAAAIAAYAAAAMAAEAAAAIAAcAAAAJAAEAAAAIAAgAAAANAAMAAAAJAAAAAAACAAQAAAAJAAEAAAACAAUAAAAJAAIAAAACAAYAAAAJAAMAAAAAAAAAAAAJAAQAAAAKAAAAAAAJAAUAAAAPAAIAAAAJAAYAAAAPAAIAAAAJAAcAAAAPAAIAAAAJAAgAAAALAAIAAAAKAAAAAAADAAQAAAAKAAEAAAADAAUAAAAKAAIAAAADAAYAAAAKAAMAAAAAAAAAAAAKAAQAAAAGAAMAAAAKAAUAAAAKAAQAAAAKAAYAAAAKAAUAAAAKAAcAAAAKAAYAAAAKAAgAAAAKAAcAAAALAAAAAAAEAAQAAAALAAEAAAAEAAUAAAALAAIAAAAEAAYAAAALAAMAAAAAAAAAAAALAAQAAAAGAAMAAAALAAUAAAALAAQAAAALAAYAAAALAAUAAAALAAcAAAALAAYAAAALAAgAAAALAAcAAAAMAAAAAAACAAQAAAAMAAEAAAACAAUAAAAMAAIAAAACAAYAAAAMAAMAAAAMAAAAAAAMAAQAAAAJAAMAAAAMAAUAAAAMAAQAAAAMAAYAAAAMAAUAAAAMAAcAAAAMAAYAAAAMAAgAAAAMAAcAAAANAAAAAAADAAQAAAANAAEAAAADAAUAAAANAAIAAAADAAYAAAANAAMAAAAOAAAAAAANAAQAAAANAAMAAAANAAUAAAANAAQAAAANAAYAAAANAAUAAAANAAcAAAANAAYAAAANAAgAAAANAAcAAAAOAAAAAAACAAQAAAAOAAEAAAACAAUAAAAOAAIAAAACAAYAAAAOAAMAAAAOAAAAAAAOAAQAAAANAAMAAAAOAAUAAAAOAAQAAAAOAAYAAAAOAAUAAAAOAAcAAAAOAAYAAAAOAAgAAAAOAAcAAAD//wAAAAACAAQAAAD//wEAAAACAAUAAAD//wIAAAACAAYAAAAPAAAAAAADAAQAAAAPAAEAAAADAAUAAAAPAAIAAAADAAYAAAAQAAAAAAAEAAQAAAAQAAEAAAAEAAUAAAAQAAIAAAAEAAYAAAD//wMAAAAGAAMAAAD+/wMAAAAGAAMAAAD9/wMAAAAGAAMAAAD8/wMAAAAGAAMAAAD7/wMAAAAFAAMAAAAGAAkAAAAMAAEAAAAGAAoAAAAMAAEAAAAGAAsAAAAMAAMAAAAHAAoAAAAPAAIAAAAHAAkAAAAPAAIAAAAHAAsAAAAPAAMAAAAPAAQAAAAJAAIAAAAQAAQAAAAPAAEAAAARAAQAAAAGAAMAAAAPAAUAAAAIAAIAAAAPAAYAAAAEAAEAAAAPAAcAAAAEAAEAAAAPAAgAAAAEAAEAAAAPAAkAAAAHAAIAAAAOAAkAAAAGAAMAAAANAAkAAAAGAAMAAAAMAAkAAAAGAAMAAAALAAkAAAAGAAMAAAAKAAkAAAAGAAMAAAAJAAkAAAAGAAIAAAAQAAUAAAAPAAMAAAASAAQAAAAGAAMAAAATAAQAAAAGAAMAAAAUAAQAAAAGAAMAAAAVAAQAAAAHAAMAAAAQAAMAAAAPAAAAAAAPAAMAAAAOAAAAAAAAAAkAAAAEAAEAAAAAAAoAAAAIAAMAAAAAAAsAAAAPAAMAAAD//wsAAAAMAAMAAAD//woAAAAMAAAAAAABAAoAAAAHAAMAAAACAAkAAAAEAAIAAAABAAkAAAACAAEAAAD9/wUAAAAAAAAAAAD9/wQAAAAAAAAAAAD8/wQAAAAAAAAAAAD7/wQAAAAAAAAAAAD7/wUAAAAAAAAAAAD7/wYAAAAAAAAAAAD7/wcAAAAAAAAAAAD7/wgAAAAAAAAAAAD7/wkAAAAAAAAAAAD7/woAAAAAAAAAAAD7/wsAAAAAAAAAAAD8/wsAAAAAAAAAAAD8/woAAAAAAAAAAAD8/wkAAAAAAAAAAAD8/wgAAAAAAAAAAAD8/wcAAAAAAAAAAAD8/wYAAAAAAAAAAAD8/wUAAAAAAAAAAAD9/wYAAAAAAAAAAAD9/wcAAAAAAAAAAAD9/wgAAAAAAAAAAAD9/wkAAAAAAAAAAAD9/woAAAAAAAAAAAD9/wsAAAAAAAAAAAD+/wsAAAAAAAAAAAD+/woAAAAAAAAAAAD+/wkAAAAAAAAAAAD+/wgAAAAAAAAAAAD+/wcAAAAAAAAAAAD+/wYAAAAAAAAAAAD+/wUAAAAAAAAAAAD+/wQAAAAAAAAAAAD//wQAAAAAAAAAAAD//wUAAAAAAAAAAAD//wYAAAAAAAAAAAD//wcAAAAAAAAAAAD//wgAAAAAAAAAAAD//wkAAAAAAAAAAAD8/wAAAAAAAAAAAAD7/wAAAAAAAAAAAAD7/wEAAAAAAAAAAAD7/wIAAAAAAAAAAAD8/wIAAAAAAAAAAAD8/wEAAAAAAAAAAAD9/wEAAAAAAAAAAAD9/wAAAAAAAAAAAAD+/wAAAAAAAAAAAAD+/wEAAAAAAAAAAAD+/wIAAAAAAAAAAAD9/wIAAAAAAAAAAAAQAAkAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAYAAAAAAAAAAAARAAYAAAAAAAAAAAARAAUAAAAAAAAAAAASAAUAAAAAAAAAAAASAAYAAAAAAAAAAAASAAcAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAAAAAAAAARAAkAAAAAAAAAAAARAAoAAAAAAAAAAAAQAAoAAAAAAAAAAAAPAAoAAAAAAAAAAAAOAAoAAAAAAAAAAAANAAoAAAAAAAAAAAAMAAoAAAAAAAAAAAALAAoAAAAAAAAAAAAKAAoAAAAAAAAAAAAJAAoAAAAAAAAAAAAIAAoAAAAAAAAAAAAIAAkAAAAAAAAAAAAIAAsAAAAAAAAAAAAJAAsAAAAAAAAAAAAKAAsAAAAAAAAAAAALAAsAAAAAAAAAAAAMAAsAAAAAAAAAAAANAAsAAAAAAAAAAAAOAAsAAAAAAAAAAAAPAAsAAAAAAAAAAAAQAAsAAAAAAAAAAAARAAsAAAAAAAAAAAASAAsAAAAAAAAAAAASAAoAAAAAAAAAAAASAAkAAAAAAAAAAAASAAgAAAAAAAAAAAATAAgAAAAAAAAAAAATAAcAAAAAAAAAAAATAAYAAAAAAAAAAAATAAUAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAYAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAgAAAAAAAAAAAAUAAkAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAAUAAsAAAAAAAAAAAAUAAoAAAAAAAAAAAAVAAoAAAAAAAAAAAAVAAkAAAAAAAAAAAAVAAgAAAAAAAAAAAAVAAcAAAAAAAAAAAAVAAYAAAAAAAAAAAAVAAUAAAAAAAAAAAAVAAsAAAAAAAAAAAADAAoAAAAAAAAAAAADAAkAAAAAAAAAAAAEAAkAAAAAAAAAAAAEAAoAAAAAAAAAAAAEAAsAAAAAAAAAAAADAAsAAAAAAAAAAAACAAsAAAAAAAAAAAACAAoAAAAAAAAAAAABAAsAAAAAAAAAAAAFAAsAAAAAAAAAAAAFAAoAAAAAAAAAAAAFAAkAAAAAAAAAAAAUAAIAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAAAAAAAAAAAAAATAAAAAAAAAAAAAAASAAAAAAAAAAAAAAARAAAAAAAAAAAAAAARAAEAAAAAAAAAAAARAAIAAAAAAAAAAAARAAMAAAAAAAAAAAASAAMAAAAAAAAAAAASAAIAAAAAAAAAAAASAAEAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAAUAAMAAAAAAAAAAAAVAAMAAAAAAAAAAAAVAAIAAAAAAAAAAAAVAAEAAAAAAAAAAAAVAAAAAAAAAAAAAAD7////AAAAAAAAAAD7//7/AAAAAAAAAAD7//3/AAAAAAAAAAD7//z/AAAAAAAAAAD7//v/AAAAAAAAAAAVAP//AAAAAAAAAAAVAP7/AAAAAAAAAAAVAP3/AAAAAAAAAAAVAPz/AAAAAAAAAAAVAPv/AAAAAAAAAAAVAPr/AAAAAAAAAAAWAAwAAAAAAAAAAAAVAAwAAAAAAAAAAAAXAAwAAAAAAAAAAAAYAAwAAAAAAAAAAAAZAAwAAAAAAAAAAAAaAAwAAAAAAAAAAAAbAAwAAAAAAAAAAAAVAA0AAAAAAAAAAAAVAA4AAAAAAAAAAAAVAA8AAAAAAAAAAAAVABAAAAAAAAAAAAAVABEAAAAAAAAAAAD7/wwAAAAAAAAAAAD7/w0AAAAAAAAAAAD7/w4AAAAAAAAAAAD7/w8AAAAAAAAAAAD7/xAAAAAAAAAAAAD6/xAAAAAAAAAAAAD6/xEAAAAAAAAAAAD6/xIAAAAAAAAAAAD6/woAAAAAAAAAAAD6/wsAAAAAAAAAAAD5/wsAAAAAAAAAAAD4/wsAAAAAAAAAAAD3/wsAAAAAAAAAAAD2/wsAAAAAAAAAAAD1/wsAAAAAAAAAAAD6/wAAAAAAAAAAAAD5/wAAAAAAAAAAAAD4/wAAAAAAAAAAAAD3/wAAAAAAAAAAAAD2/wAAAAAAAAAAAAD1/wAAAAAAAAAAAAD4/wUAAAAAAAAAAAD4/wQAAAAAAAAAAAD4/wMAAAAAAAAAAAD4/wIAAAAAAAAAAAD4/wEAAAAAAAAAAAD3/wEAAAAAAAAAAAD2/wEAAAAAAAAAAAD1/wEAAAAAAAAAAAD1/wIAAAAAAAAAAAD1/wMAAAAAAAAAAAD1/wQAAAAAAAAAAAD1/wUAAAAAAAAAAAD1/wYAAAAAAAAAAAD1/wcAAAAAAAAAAAD1/wgAAAAAAAAAAAD1/wkAAAAAAAAAAAD1/woAAAAAAAAAAAD2/woAAAAAAAAAAAD2/wkAAAAAAAAAAAD2/wgAAAAAAAAAAAD2/wcAAAAAAAAAAAD2/wYAAAAAAAAAAAD2/wUAAAAAAAAAAAD2/wQAAAAAAAAAAAD2/wMAAAAAAAAAAAD2/wIAAAAAAAAAAAD3/wIAAAAAAAAAAAD3/wMAAAAAAAAAAAD3/wQAAAAAAAAAAAD3/wUAAAAAAAAAAAD3/wYAAAAAAAAAAAD3/wcAAAAAAAAAAAD3/wgAAAAAAAAAAAD3/wkAAAAAAAAAAAD3/woAAAAAAAAAAAD4/woAAAAAAAAAAAD4/wkAAAAAAAAAAAD4/wgAAAAAAAAAAAD4/wcAAAAAAAAAAAD4/wYAAAAAAAAAAAD5/wYAAAAAAAAAAAD5/wUAAAAAAAAAAAD5/wQAAAAAAAAAAAD5/wMAAAAAAAAAAAD5/wIAAAAAAAAAAAD5/wEAAAAAAAAAAAD6/wEAAAAAAAAAAAD6/wIAAAAAAAAAAAD6/wMAAAAAAAAAAAD6/wQAAAAAAAAAAAD6/wUAAAAAAAAAAAD6/wYAAAAAAAAAAAD6/wcAAAAAAAAAAAD5/wcAAAAAAAAAAAD5/wgAAAAAAAAAAAD5/wkAAAAAAAAAAAD5/woAAAAAAAAAAAD6/wkAAAAAAAAAAAD6/wgAAAAAAAAAAAD4//z/AAAAAAAAAAD4//v/AAAAAAAAAAD4//r/AAAAAAAAAAD3//r/AAAAAAAAAAD2//r/AAAAAAAAAAD1//r/AAAAAAAAAAD1//v/AAAAAAAAAAD1//z/AAAAAAAAAAD1//3/AAAAAAAAAAD1//7/AAAAAAAAAAD1////AAAAAAAAAAD2////AAAAAAAAAAD2//7/AAAAAAAAAAD2//3/AAAAAAAAAAD2//z/AAAAAAAAAAD2//v/AAAAAAAAAAD3//v/AAAAAAAAAAD3//z/AAAAAAAAAAD3//3/AAAAAAAAAAD3//7/AAAAAAAAAAD3////AAAAAAAAAAD4////AAAAAAAAAAD4//7/AAAAAAAAAAD4//3/AAAAAAAAAAD5//3/AAAAAAAAAAD5//z/AAAAAAAAAAD5//v/AAAAAAAAAAD5//r/AAAAAAAAAAD6//r/AAAAAAAAAAD6//v/AAAAAAAAAAD6//z/AAAAAAAAAAD6//3/AAAAAAAAAAD6//7/AAAAAAAAAAD5//7/AAAAAAAAAAD5////AAAAAAAAAAD6////AAAAAAAAAAD7//r/AAAAAAAAAAD8//r/AAAAAAAAAAD8//v/AAAAAAAAAAD8//z/AAAAAAAAAAD8//3/AAAAAAAAAAD8//7/AAAAAAAAAAD8////AAAAAAAAAAD9////AAAAAAAAAAD9//7/AAAAAAAAAAD9//3/AAAAAAAAAAD9//z/AAAAAAAAAAD9//v/AAAAAAAAAAD9//r/AAAAAAAAAAD+//r/AAAAAAAAAAD+//v/AAAAAAAAAAD+//z/AAAAAAAAAAD+//3/AAAAAAAAAAD+//7/AAAAAAAAAAD+////AAAAAAAAAAD/////AAAAAAAAAAD///7/AAAAAAAAAAD///3/AAAAAAAAAAD///z/AAAAAAAAAAD///v/AAAAAAAAAAD///r/AAAAAAAAAAAAAPr/AAAAAAAAAAAAAPv/AAAAAAAAAAAAAPz/AAAAAAAAAAAAAP3/AAAAAAAAAAAAAP7/AAAAAAAAAAAAAP//AAAAAAAAAAABAP//AAAAAAAAAAABAP7/AAAAAAAAAAABAP3/AAAAAAAAAAABAPz/AAAAAAAAAAABAPv/AAAAAAAAAAABAPr/AAAAAAAAAAACAPr/AAAAAAAAAAACAPv/AAAAAAAAAAACAPz/AAAAAAAAAAACAP3/AAAAAAAAAAACAP7/AAAAAAAAAAACAP//AAAAAAAAAAADAP//AAAAAAAAAAADAP7/AAAAAAAAAAADAP3/AAAAAAAAAAADAPz/AAAAAAAAAAADAPv/AAAAAAAAAAADAPr/AAAAAAAAAAAEAPr/AAAAAAAAAAAEAPv/AAAAAAAAAAAEAPz/AAAAAAAAAAAEAP3/AAAAAAAAAAAEAP7/AAAAAAAAAAAEAP//AAAAAAAAAAAFAP//AAAAAAAAAAAFAP7/AAAAAAAAAAAFAP3/AAAAAAAAAAAFAPz/AAAAAAAAAAAFAPv/AAAAAAAAAAAFAPr/AAAAAAAAAAAGAPr/AAAAAAAAAAAGAPv/AAAAAAAAAAAGAPz/AAAAAAAAAAAGAP3/AAAAAAAAAAAGAP7/AAAAAAAAAAAGAP//AAAAAAAAAAAHAP//AAAAAAAAAAAHAP7/AAAAAAAAAAAHAP3/AAAAAAAAAAAHAPz/AAAAAAAAAAAHAPv/AAAAAAAAAAAHAPr/AAAAAAAAAAAIAPr/AAAAAAAAAAAIAPv/AAAAAAAAAAAIAPz/AAAAAAAAAAAIAP3/AAAAAAAAAAAIAP7/AAAAAAAAAAAIAP//AAAAAAAAAAAJAP//AAAAAAAAAAAJAP7/AAAAAAAAAAAJAP3/AAAAAAAAAAAJAPz/AAAAAAAAAAAJAPv/AAAAAAAAAAAJAPr/AAAAAAAAAAAKAPr/AAAAAAAAAAAKAPv/AAAAAAAAAAAKAPz/AAAAAAAAAAAKAP3/AAAAAAAAAAAKAP7/AAAAAAAAAAAKAP//AAAAAAAAAAALAP//AAAAAAAAAAALAP7/AAAAAAAAAAALAP3/AAAAAAAAAAALAPz/AAAAAAAAAAALAPv/AAAAAAAAAAALAPr/AAAAAAAAAAAMAPr/AAAAAAAAAAAMAPv/AAAAAAAAAAAMAPz/AAAAAAAAAAAMAP3/AAAAAAAAAAAMAP7/AAAAAAAAAAAMAP//AAAAAAAAAAANAP//AAAAAAAAAAANAP7/AAAAAAAAAAANAP3/AAAAAAAAAAANAPz/AAAAAAAAAAANAPv/AAAAAAAAAAANAPr/AAAAAAAAAAAOAPr/AAAAAAAAAAAOAPv/AAAAAAAAAAAOAPz/AAAAAAAAAAAOAP3/AAAAAAAAAAAOAP7/AAAAAAAAAAAOAP//AAAAAAAAAAAPAP//AAAAAAAAAAAPAP7/AAAAAAAAAAAPAP3/AAAAAAAAAAAPAPz/AAAAAAAAAAAPAPv/AAAAAAAAAAAPAPr/AAAAAAAAAAAQAPr/AAAAAAAAAAAQAPv/AAAAAAAAAAAQAPz/AAAAAAAAAAAQAP3/AAAAAAAAAAAQAP7/AAAAAAAAAAAQAP//AAAAAAAAAAARAP//AAAAAAAAAAARAP7/AAAAAAAAAAARAP3/AAAAAAAAAAARAPz/AAAAAAAAAAARAPv/AAAAAAAAAAARAPr/AAAAAAAAAAASAPr/AAAAAAAAAAASAPv/AAAAAAAAAAASAPz/AAAAAAAAAAASAP3/AAAAAAAAAAASAP7/AAAAAAAAAAASAP//AAAAAAAAAAATAP//AAAAAAAAAAATAP7/AAAAAAAAAAATAP3/AAAAAAAAAAATAPz/AAAAAAAAAAATAPv/AAAAAAAAAAATAPr/AAAAAAAAAAAUAPr/AAAAAAAAAAAUAPv/AAAAAAAAAAAUAPz/AAAAAAAAAAAUAP3/AAAAAAAAAAAUAP7/AAAAAAAAAAAUAP//AAAAAAAAAAAaAAQAAAAAAAAAAAAaAAMAAAAAAAAAAAAaAAIAAAAAAAAAAAAaAAEAAAAAAAAAAAAaAAAAAAAAAAAAAAAaAP//AAAAAAAAAAAaAP7/AAAAAAAAAAAaAP3/AAAAAAAAAAAaAPz/AAAAAAAAAAAaAPv/AAAAAAAAAAAaAPr/AAAAAAAAAAAZAPr/AAAAAAAAAAAYAPr/AAAAAAAAAAAXAPr/AAAAAAAAAAAWAPr/AAAAAAAAAAAWAPv/AAAAAAAAAAAWAPz/AAAAAAAAAAAWAP3/AAAAAAAAAAAWAP7/AAAAAAAAAAAWAP//AAAAAAAAAAAWAAAAAAAAAAAAAAAWAAEAAAAAAAAAAAAWAAIAAAAAAAAAAAAWAAMAAAAAAAAAAAAWAAQAAAAAAAAAAAAWAAUAAAAAAAAAAAAWAAYAAAAAAAAAAAAWAAcAAAAAAAAAAAAWAAgAAAAAAAAAAAAWAAkAAAAAAAAAAAAWAAoAAAAAAAAAAAAWAAsAAAAAAAAAAAAXAAsAAAAAAAAAAAAXAAoAAAAAAAAAAAAXAAkAAAAAAAAAAAAXAAgAAAAAAAAAAAAXAAcAAAAAAAAAAAAXAAYAAAAAAAAAAAAXAAUAAAAAAAAAAAAXAAQAAAAAAAAAAAAXAAMAAAAAAAAAAAAXAAIAAAAAAAAAAAAXAAEAAAAAAAAAAAAXAAAAAAAAAAAAAAAXAP//AAAAAAAAAAAXAP7/AAAAAAAAAAAXAP3/AAAAAAAAAAAXAPz/AAAAAAAAAAAXAPv/AAAAAAAAAAAYAPv/AAAAAAAAAAAYAPz/AAAAAAAAAAAYAP3/AAAAAAAAAAAYAP7/AAAAAAAAAAAYAP//AAAAAAAAAAAYAAAAAAAAAAAAAAAYAAEAAAAAAAAAAAAYAAIAAAAAAAAAAAAYAAMAAAAAAAAAAAAYAAQAAAAAAAAAAAAYAAUAAAAAAAAAAAAYAAYAAAAAAAAAAAAYAAcAAAAAAAAAAAAYAAgAAAAAAAAAAAAYAAkAAAAAAAAAAAAYAAoAAAAAAAAAAAAYAAsAAAAAAAAAAAAZAAsAAAAAAAAAAAAZAAoAAAAAAAAAAAAZAAkAAAAAAAAAAAAZAAgAAAAAAAAAAAAZAAcAAAAAAAAAAAAZAAYAAAAAAAAAAAAZAAUAAAAAAAAAAAAZAAQAAAAAAAAAAAAZAAMAAAAAAAAAAAAZAAIAAAAAAAAAAAAZAAEAAAAAAAAAAAAZAAAAAAAAAAAAAAAZAP//AAAAAAAAAAAZAP7/AAAAAAAAAAAZAP3/AAAAAAAAAAAZAPz/AAAAAAAAAAAZAPv/AAAAAAAAAAAaAAUAAAAAAAAAAAAaAAYAAAAAAAAAAAAaAAcAAAAAAAAAAAAaAAgAAAAAAAAAAAAaAAkAAAAAAAAAAAAaAAoAAAAAAAAAAAAaAAsAAAAAAAAAAAAbAAsAAAAAAAAAAAAbAAoAAAAAAAAAAAAbAAkAAAAAAAAAAAAbAAgAAAAAAAAAAAAbAAcAAAAAAAAAAAAbAAYAAAAAAAAAAAAbAAUAAAAAAAAAAAAbAAQAAAAAAAAAAAAbAAMAAAAAAAAAAAAbAAIAAAAAAAAAAAAbAAEAAAAAAAAAAAAbAAAAAAAAAAAAAAAbAP//AAAAAAAAAAAbAP7/AAAAAAAAAAAbAP3/AAAAAAAAAAAbAPz/AAAAAAAAAAAbAPv/AAAAAAAAAAAbAPr/AAAAAAAAAAAXAA8AAAAAAAAAAAAXAA4AAAAAAAAAAAAXAA0AAAAAAAAAAAAWAA0AAAAAAAAAAAAWAA4AAAAAAAAAAAAWAA8AAAAAAAAAAAAWABAAAAAAAAAAAAAWABEAAAAAAAAAAAAWABIAAAAAAAAAAAAVABIAAAAAAAAAAAAUABIAAAAAAAAAAAAUABEAAAAAAAAAAAAUABAAAAAAAAAAAAAUAA8AAAAAAAAAAAAUAA4AAAAAAAAAAAAUAA0AAAAAAAAAAAAUAAwAAAAAAAAAAAATAAwAAAAAAAAAAAASAAwAAAAAAAAAAAARAAwAAAAAAAAAAAAQAAwAAAAAAAAAAAAPAAwAAAAAAAAAAAAOAAwAAAAAAAAAAAANAAwAAAAAAAAAAAAMAAwAAAAAAAAAAAALAAwAAAAAAAAAAAAKAAwAAAAAAAAAAAAJAAwAAAAAAAAAAAAIAAwAAAAAAAAAAAAHAAwAAAAAAAAAAAAGAAwAAAAAAAAAAAAFAAwAAAAAAAAAAAAEAAwAAAAAAAAAAAADAAwAAAAAAAAAAAACAAwAAAAAAAAAAAABAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAD//wwAAAAAAAAAAAD+/wwAAAAAAAAAAAD9/wwAAAAAAAAAAAD8/wwAAAAAAAAAAAD8/w0AAAAAAAAAAAD8/w4AAAAAAAAAAAD8/w8AAAAAAAAAAAD8/xAAAAAAAAAAAAD8/xEAAAAAAAAAAAD7/xEAAAAAAAAAAAD7/xIAAAAAAAAAAAD8/xIAAAAAAAAAAAD9/xIAAAAAAAAAAAD9/xEAAAAAAAAAAAD9/xAAAAAAAAAAAAD9/w8AAAAAAAAAAAD9/w4AAAAAAAAAAAD9/w0AAAAAAAAAAAD+/w0AAAAAAAAAAAD+/w4AAAAAAAAAAAD+/w8AAAAAAAAAAAD+/xAAAAAAAAAAAAD+/xEAAAAAAAAAAAD+/xIAAAAAAAAAAAD//xIAAAAAAAAAAAD//xEAAAAAAAAAAAD//xAAAAAAAAAAAAD//w8AAAAAAAAAAAD//w4AAAAAAAAAAAD//w0AAAAAAAAAAAAAAA0AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA8AAAAAAAAAAAAAABAAAAAAAAAAAAAAABEAAAAAAAAAAAAAABIAAAAAAAAAAAABABIAAAAAAAAAAAABABEAAAAAAAAAAAABABAAAAAAAAAAAAABAA8AAAAAAAAAAAABAA4AAAAAAAAAAAABAA0AAAAAAAAAAAACAA0AAAAAAAAAAAACAA4AAAAAAAAAAAACAA8AAAAAAAAAAAACABAAAAAAAAAAAAACABEAAAAAAAAAAAACABIAAAAAAAAAAAADABIAAAAAAAAAAAADABEAAAAAAAAAAAADABAAAAAAAAAAAAADAA8AAAAAAAAAAAADAA4AAAAAAAAAAAADAA0AAAAAAAAAAAAEAA0AAAAAAAAAAAAEAA4AAAAAAAAAAAAEAA8AAAAAAAAAAAAEABAAAAAAAAAAAAAEABEAAAAAAAAAAAAEABIAAAAAAAAAAAAFABIAAAAAAAAAAAAFABEAAAAAAAAAAAAFABAAAAAAAAAAAAAFAA8AAAAAAAAAAAAFAA4AAAAAAAAAAAAFAA0AAAAAAAAAAAAGAA0AAAAAAAAAAAAGAA4AAAAAAAAAAAAGAA8AAAAAAAAAAAAGABAAAAAAAAAAAAAGABEAAAAAAAAAAAAGABIAAAAAAAAAAAAHABIAAAAAAAAAAAAHABEAAAAAAAAAAAAHABAAAAAAAAAAAAAHAA8AAAAAAAAAAAAHAA4AAAAAAAAAAAAHAA0AAAAAAAAAAAAIAA0AAAAAAAAAAAAIAA4AAAAAAAAAAAAIAA8AAAAAAAAAAAAIABAAAAAAAAAAAAAIABEAAAAAAAAAAAAIABIAAAAAAAAAAAAJABIAAAAAAAAAAAAJABEAAAAAAAAAAAAJABAAAAAAAAAAAAAJAA8AAAAAAAAAAAAJAA4AAAAAAAAAAAAJAA0AAAAAAAAAAAAKAA0AAAAAAAAAAAAKAA4AAAAAAAAAAAAKAA8AAAAAAAAAAAAKABAAAAAAAAAAAAAKABEAAAAAAAAAAAAKABIAAAAAAAAAAAALABIAAAAAAAAAAAALABEAAAAAAAAAAAALABAAAAAAAAAAAAALAA8AAAAAAAAAAAALAA4AAAAAAAAAAAALAA0AAAAAAAAAAAAMAA0AAAAAAAAAAAAMAA4AAAAAAAAAAAAMAA8AAAAAAAAAAAAMABAAAAAAAAAAAAAMABEAAAAAAAAAAAAMABIAAAAAAAAAAAANABIAAAAAAAAAAAANABEAAAAAAAAAAAANABAAAAAAAAAAAAANAA8AAAAAAAAAAAANAA4AAAAAAAAAAAANAA0AAAAAAAAAAAAOAA0AAAAAAAAAAAAOAA4AAAAAAAAAAAAOAA8AAAAAAAAAAAAOABAAAAAAAAAAAAAOABEAAAAAAAAAAAAOABIAAAAAAAAAAAAPABIAAAAAAAAAAAAPABEAAAAAAAAAAAAPABAAAAAAAAAAAAAPAA8AAAAAAAAAAAAPAA4AAAAAAAAAAAAPAA0AAAAAAAAAAAAQAA0AAAAAAAAAAAAQAA4AAAAAAAAAAAAQAA8AAAAAAAAAAAAQABAAAAAAAAAAAAAQABEAAAAAAAAAAAAQABIAAAAAAAAAAAARABIAAAAAAAAAAAARABEAAAAAAAAAAAARABAAAAAAAAAAAAARAA8AAAAAAAAAAAARAA4AAAAAAAAAAAARAA0AAAAAAAAAAAASAA0AAAAAAAAAAAASAA4AAAAAAAAAAAASAA8AAAAAAAAAAAASABAAAAAAAAAAAAASABEAAAAAAAAAAAASABIAAAAAAAAAAAATABIAAAAAAAAAAAATABEAAAAAAAAAAAATABAAAAAAAAAAAAATAA8AAAAAAAAAAAATAA4AAAAAAAAAAAATAA0AAAAAAAAAAAAXABIAAAAAAAAAAAAXABEAAAAAAAAAAAAXABAAAAAAAAAAAAAYABAAAAAAAAAAAAAYAA8AAAAAAAAAAAAYAA4AAAAAAAAAAAAYAA0AAAAAAAAAAAAZAA0AAAAAAAAAAAAZAA4AAAAAAAAAAAAZAA8AAAAAAAAAAAAZABAAAAAAAAAAAAAZABEAAAAAAAAAAAAYABEAAAAAAAAAAAAYABIAAAAAAAAAAAAZABIAAAAAAAAAAAAaABIAAAAAAAAAAAAaABEAAAAAAAAAAAAaABAAAAAAAAAAAAAaAA8AAAAAAAAAAAAaAA4AAAAAAAAAAAAaAA0AAAAAAAAAAAAbAA0AAAAAAAAAAAAbAA4AAAAAAAAAAAAbAA8AAAAAAAAAAAAbABAAAAAAAAAAAAAbABEAAAAAAAAAAAAbABIAAAAAAAAAAAD5/w8AAAAAAAAAAAD5/w4AAAAAAAAAAAD5/w0AAAAAAAAAAAD5/wwAAAAAAAAAAAD4/wwAAAAAAAAAAAD3/wwAAAAAAAAAAAD2/wwAAAAAAAAAAAD1/wwAAAAAAAAAAAD1/w0AAAAAAAAAAAD1/w4AAAAAAAAAAAD1/w8AAAAAAAAAAAD1/xAAAAAAAAAAAAD1/xEAAAAAAAAAAAD1/xIAAAAAAAAAAAD2/xIAAAAAAAAAAAD2/xEAAAAAAAAAAAD2/xAAAAAAAAAAAAD2/w8AAAAAAAAAAAD2/w4AAAAAAAAAAAD2/w0AAAAAAAAAAAD3/w0AAAAAAAAAAAD3/w4AAAAAAAAAAAD3/w8AAAAAAAAAAAD3/xAAAAAAAAAAAAD3/xEAAAAAAAAAAAD3/xIAAAAAAAAAAAD4/xIAAAAAAAAAAAD4/xEAAAAAAAAAAAD4/xAAAAAAAAAAAAD4/w8AAAAAAAAAAAD4/w4AAAAAAAAAAAD4/w0AAAAAAAAAAAD5/xAAAAAAAAAAAAD5/xEAAAAAAAAAAAD5/xIAAAAAAAAAAAD6/wwAAAAAAAAAAAD6/w0AAAAAAAAAAAD6/w4AAAAAAAAAAAD6/w8AAAAAAAAAAAA=") + +[node name="Plant" parent="." unique_id=1477419859 instance=ExtResource("3_m8u5f")] +position = Vector2(141, 150) + +[node name="Plant2" parent="." unique_id=492497178 instance=ExtResource("3_m8u5f")] +position = Vector2(348, 134) + +[node name="Plant3" parent="." unique_id=1537260799 instance=ExtResource("3_m8u5f")] +position = Vector2(298, 249) + +[node name="Plant4" parent="." unique_id=1108174870 instance=ExtResource("3_m8u5f")] +position = Vector2(146, 251) + +[node name="Plant5" parent="." unique_id=488712875 instance=ExtResource("3_m8u5f")] +position = Vector2(7, 214) + +[node name="Slime" parent="." unique_id=2039155988 instance=ExtResource("4_is3ju")] +position = Vector2(183, 190) + +[node name="Slime2" parent="." unique_id=1877934609 instance=ExtResource("4_is3ju")] +position = Vector2(218, 57) + +[node name="Slime3" parent="." unique_id=652522291 instance=ExtResource("4_is3ju")] +position = Vector2(98, 145) + +[node name="PlayerSpawn" parent="." unique_id=792855586 instance=ExtResource("4_o00ia")] +position = Vector2(245, 150) diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..9d158cd --- /dev/null +++ b/project.godot @@ -0,0 +1,94 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="aarpg" +run/main_scene="uid://btu35v1s43w0k" +config/features=PackedStringArray("4.6", "Forward Plus") +config/icon="res://icon.svg" + +[autoload] + +LevelManager="*uid://d1yritt1yngf1" +Hud="*uid://dwon5dsqxao56" +PlayerManager="*uid://dcqwe4meucgrn" +SceneTransition="*uid://c4iyg64sd02rx" +SaveManager="*uid://c547xrdujao7w" +PauseMenu="*uid://dr37gne0tsx3h" + +[display] + +window/size/viewport_width=480 +window/size/viewport_height=270 +window/size/window_width_override=1920 +window/size/window_height_override=1080 +window/stretch/mode="viewport" + +[editor] + +version_control/plugin_name="GitPlugin" +version_control/autoload_on_startup=true + +[input] + +up={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +down={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +right={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +left={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +attack={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":78,"key_label":0,"unicode":110,"location":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(212, 0),"global_position":Vector2(221, 48),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +pause={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +interact={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +2d_physics/layer_1="Player" +2d_physics/layer_2="PlayerHurt" +2d_physics/layer_3="PlayerInteract" +2d_physics/layer_5="Walls" +2d_physics/layer_9="Enemy" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +textures/canvas_textures/default_texture_filter=0 +rendering_device/driver.windows="d3d12" diff --git a/props/plants/plant.gd b/props/plants/plant.gd new file mode 100644 index 0000000..63b86e4 --- /dev/null +++ b/props/plants/plant.gd @@ -0,0 +1,12 @@ +class_name Plant extends Node + +@onready var hitbox: Hitbox = $Hitbox + +func _ready() -> void: + hitbox.damaged.connect(take_damage) + +func _process(_delta: float) -> void: + pass + +func take_damage(_hurtbox: Hurtbox) -> void: + queue_free() diff --git a/props/plants/plant.gd.uid b/props/plants/plant.gd.uid new file mode 100644 index 0000000..d42e6f0 --- /dev/null +++ b/props/plants/plant.gd.uid @@ -0,0 +1 @@ +uid://d2vgfhua60scb diff --git a/props/plants/plant.tscn b/props/plants/plant.tscn new file mode 100644 index 0000000..0197878 --- /dev/null +++ b/props/plants/plant.tscn @@ -0,0 +1,44 @@ +[gd_scene format=3 uid="uid://b16l2ehf7hd1t"] + +[ext_resource type="Script" uid="uid://d2vgfhua60scb" path="res://props/plants/plant.gd" id="1_nxykt"] +[ext_resource type="Texture2D" uid="uid://3b5t47gfnrvn" path="res://props/sprites/Props.png" id="1_siw38"] +[ext_resource type="PackedScene" uid="uid://cda6fr5vhb4ty" path="res://general/hitbox/hitbox.tscn" id="2_nxykt"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_nxykt"] +size = Vector2(29, 30) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5bg"] +size = Vector2(24, 16) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_5g5lq"] +size = Vector2(24, 16) + +[node name="Plant" type="Area2D" unique_id=492497178] +script = ExtResource("1_nxykt") + +[node name="sprite" type="Sprite2D" parent="." unique_id=373826636] +texture = ExtResource("1_siw38") +hframes = 16 +vframes = 3 + +[node name="Hitbox" parent="." unique_id=1876591880 instance=ExtResource("2_nxykt")] +position = Vector2(0, 9) + +[node name="collision" type="CollisionShape2D" parent="Hitbox" unique_id=2005718804] +position = Vector2(-0.5, -7) +shape = SubResource("RectangleShape2D_nxykt") +debug_color = Color(0.57204384, 0.5537644, 0.1232397, 0.41960785) + +[node name="collision" type="CollisionShape2D" parent="." unique_id=1955953887] +position = Vector2(0, 9) +shape = SubResource("RectangleShape2D_3p5bg") + +[node name="body" type="StaticBody2D" parent="." unique_id=299359808] +collision_layer = 16 +collision_mask = 0 + +[node name="collision" type="CollisionShape2D" parent="body" unique_id=1831304255] +position = Vector2(0, 9) +shape = SubResource("RectangleShape2D_5g5lq") + +[editable path="Hitbox"] diff --git a/props/sprites/Props.png b/props/sprites/Props.png new file mode 100644 index 0000000..49f9fed Binary files /dev/null and b/props/sprites/Props.png differ diff --git a/props/sprites/Props.png.import b/props/sprites/Props.png.import new file mode 100644 index 0000000..b6cb2d0 --- /dev/null +++ b/props/sprites/Props.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3b5t47gfnrvn" +path="res://.godot/imported/Props.png-e75f45c2aed4f78c9dea08e5eba74a96.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://props/sprites/Props.png" +dest_files=["res://.godot/imported/Props.png-e75f45c2aed4f78c9dea08e5eba74a96.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/tiles_maps/dungeon-01.tscn b/tiles_maps/dungeon-01.tscn new file mode 100644 index 0000000..5b1d962 --- /dev/null +++ b/tiles_maps/dungeon-01.tscn @@ -0,0 +1,259 @@ +[gd_scene format=3 uid="uid://dt4nil8vsgejc"] + +[ext_resource type="Texture2D" uid="uid://cim3u2o47fu7v" path="res://tiles_maps/sprites/dungeon.png" id="1_yenuv"] +[ext_resource type="Script" uid="uid://doq7a0ln1gird" path="res://tiles_maps/level_tilemap.gd" id="2_eb5ir"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eb5ir"] +texture = ExtResource("1_yenuv") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:0/0 = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:0/0 = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:0/0 = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:0/0 = 0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:0/0 = 0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:0/0 = 0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:0/0 = 0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:0/0 = 0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:0/0 = 0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:0/0 = 0 +14:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:0/0 = 0 +15:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:1/0 = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:1/0 = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:1/0 = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:1/0 = 0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:1/0 = 0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:1/0 = 0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:1/0 = 0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:1/0 = 0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:1/0 = 0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:1/0 = 0 +14:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:1/0 = 0 +15:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:2/0 = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:2/0 = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:2/0 = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:2/0 = 0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:2/0 = 0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:2/0 = 0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:2/0 = 0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:2/0 = 0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:2/0 = 0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:2/0 = 0 +14:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:2/0 = 0 +15:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:3/0 = 0 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:3/0 = 0 +4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:3/0 = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:3/0 = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:3/0 = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:3/0 = 0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:3/0 = 0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:3/0 = 0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:3/0 = 0 +11:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:3/0 = 0 +13:3/0 = 0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:3/0 = 0 +14:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:3/0 = 0 +15:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:4/0 = 0 +3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:4/0 = 0 +4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:4/0 = 0 +5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:4/0 = 0 +6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:4/0 = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:4/0 = 0 +8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:4/0 = 0 +9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:4/0 = 0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:4/0 = 0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:4/0 = 0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:4/0 = 0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:4/0 = 0 +14:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:4/0 = 0 +15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:5/0 = 0 +0:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:5/0 = 0 +1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -7, -12, -7, 16, -16, 16) +2:5/0 = 0 +2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, -16, 16, -16, 16, 16, 7, 16) +3:5/0 = 0 +3:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:5/0 = 0 +4:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:5/0 = 0 +5:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:5/0 = 0 +6:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +7:5/0 = 0 +7:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:5/0 = 0 +8:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:5/0 = 0 +9:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:5/0 = 0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:5/0 = 0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:5/0 = 0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:5/0 = 0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:5/0 = 0 +14:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:5/0 = 0 +15:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:6/0 = 0 +0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:6/0 = 0 +1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -7, -16, -7, -1, 8, 16, -16, 16) +2:6/0 = 0 +2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, -16, 16, -16, 16, 16, -8, 16, 7, -2) +3:6/0 = 0 +3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:6/0 = 0 +4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:6/0 = 0 +5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 8, -16, -7, 2, -7, 16, -16, 16) +6:6/0 = 0 +6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, 2, -8, -16, 16, -16, 16, 16, 7, 16) +7:6/0 = 0 +7:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:6/0 = 0 +8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:6/0 = 0 +9:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:6/0 = 0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:6/0 = 0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:6/0 = 0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:6/0 = 0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:6/0 = 0 +14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:6/0 = 0 +15:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:7/0 = 0 +0:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:7/0 = 0 +1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:7/0 = 0 +2:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:7/0 = 0 +3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:7/0 = 0 +4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:7/0 = 0 +5:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -7, -16, -7, 11, -16, 11) +6:7/0 = 0 +6:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, -16, 16, -16, 16, 11, 7, 11) +7:7/0 = 0 +7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +8:7/0 = 0 +8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:7/0 = 0 +9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:7/0 = 0 +10:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:7/0 = 0 +11:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:7/0 = 0 +12:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:7/0 = 0 +13:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +14:7/0 = 0 +14:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:7/0 = 0 +15:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) + +[sub_resource type="TileSet" id="TileSet_y5u52"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 16 +physics_layer_0/collision_mask = 0 +sources/0 = SubResource("TileSetAtlasSource_eb5ir") + +[node name="Dungeon01" type="TileMapLayer" unique_id=1326609295] +z_index = -1 +tile_set = SubResource("TileSet_y5u52") +rendering_quadrant_size = 32 +script = ExtResource("2_eb5ir") diff --git a/tiles_maps/grass-01.tscn b/tiles_maps/grass-01.tscn new file mode 100644 index 0000000..e3de3c6 --- /dev/null +++ b/tiles_maps/grass-01.tscn @@ -0,0 +1,503 @@ +[gd_scene format=3 uid="uid://c28dglqe053m1"] + +[ext_resource type="Texture2D" uid="uid://bxcudcy4diqb2" path="res://tiles_maps/sprites/Grass-01.png" id="1_ktyh8"] +[ext_resource type="Script" uid="uid://doq7a0ln1gird" path="res://tiles_maps/level_tilemap.gd" id="2_guo4s"] +[ext_resource type="Texture2D" uid="uid://b0sui71s003ur" path="res://tiles_maps/sprites/dungeon_entrance.png" id="2_w4y6p"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_guo4s"] +texture = ExtResource("1_ktyh8") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/terrain = 0 +4:0/0/terrains_peering_bit/bottom_side = 0 +5:0/0 = 0 +5:0/0/terrain_set = 0 +5:0/0/terrain = 0 +5:0/0/terrains_peering_bit/right_side = 0 +5:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0 = 0 +6:0/0/terrain_set = 0 +6:0/0/terrain = 0 +6:0/0/terrains_peering_bit/right_side = 0 +6:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0/terrains_peering_bit/left_side = 0 +7:0/0 = 0 +7:0/0/terrain_set = 0 +7:0/0/terrain = 0 +7:0/0/terrains_peering_bit/bottom_side = 0 +7:0/0/terrains_peering_bit/left_side = 0 +8:0/0 = 0 +8:0/0/terrain_set = 0 +8:0/0/terrain = 0 +8:0/0/terrains_peering_bit/right_side = 0 +8:0/0/terrains_peering_bit/bottom_side = 0 +8:0/0/terrains_peering_bit/left_side = 0 +8:0/0/terrains_peering_bit/top_left_corner = 0 +8:0/0/terrains_peering_bit/top_side = 0 +9:0/0 = 0 +9:0/0/terrain_set = 0 +9:0/0/terrain = 0 +9:0/0/terrains_peering_bit/right_side = 0 +9:0/0/terrains_peering_bit/bottom_right_corner = 0 +9:0/0/terrains_peering_bit/bottom_side = 0 +9:0/0/terrains_peering_bit/left_side = 0 +10:0/0 = 0 +10:0/0/terrain_set = 0 +10:0/0/terrain = 0 +10:0/0/terrains_peering_bit/right_side = 0 +10:0/0/terrains_peering_bit/bottom_side = 0 +10:0/0/terrains_peering_bit/bottom_left_corner = 0 +10:0/0/terrains_peering_bit/left_side = 0 +11:0/0 = 0 +11:0/0/terrain_set = 0 +11:0/0/terrain = 0 +11:0/0/terrains_peering_bit/right_side = 0 +11:0/0/terrains_peering_bit/bottom_side = 0 +11:0/0/terrains_peering_bit/left_side = 0 +11:0/0/terrains_peering_bit/top_side = 0 +11:0/0/terrains_peering_bit/top_right_corner = 0 +12:0/0 = 0 +12:0/0/terrain_set = 0 +12:0/0/terrain = 0 +12:0/0/terrains_peering_bit/right_side = 0 +12:0/0/terrains_peering_bit/bottom_right_corner = 0 +12:0/0/terrains_peering_bit/bottom_side = 0 +13:0/0 = 0 +13:0/0/terrain_set = 0 +13:0/0/terrain = 0 +13:0/0/terrains_peering_bit/right_side = 0 +13:0/0/terrains_peering_bit/bottom_right_corner = 0 +13:0/0/terrains_peering_bit/bottom_side = 0 +13:0/0/terrains_peering_bit/bottom_left_corner = 0 +13:0/0/terrains_peering_bit/left_side = 0 +13:0/0/terrains_peering_bit/top_side = 0 +14:0/0 = 0 +14:0/0/terrain_set = 0 +14:0/0/terrain = 0 +14:0/0/terrains_peering_bit/right_side = 0 +14:0/0/terrains_peering_bit/bottom_right_corner = 0 +14:0/0/terrains_peering_bit/bottom_side = 0 +14:0/0/terrains_peering_bit/bottom_left_corner = 0 +14:0/0/terrains_peering_bit/left_side = 0 +15:0/0 = 0 +15:0/0/terrain_set = 0 +15:0/0/terrain = 0 +15:0/0/terrains_peering_bit/bottom_side = 0 +15:0/0/terrains_peering_bit/bottom_left_corner = 0 +15:0/0/terrains_peering_bit/left_side = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +4:1/0/terrain_set = 0 +4:1/0/terrain = 0 +4:1/0/terrains_peering_bit/bottom_side = 0 +4:1/0/terrains_peering_bit/top_side = 0 +5:1/0 = 0 +5:1/0/terrain_set = 0 +5:1/0/terrain = 0 +5:1/0/terrains_peering_bit/right_side = 0 +5:1/0/terrains_peering_bit/bottom_side = 0 +5:1/0/terrains_peering_bit/top_side = 0 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +6:1/0/terrains_peering_bit/right_side = 0 +6:1/0/terrains_peering_bit/bottom_side = 0 +6:1/0/terrains_peering_bit/left_side = 0 +6:1/0/terrains_peering_bit/top_side = 0 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +7:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0/terrains_peering_bit/left_side = 0 +7:1/0/terrains_peering_bit/top_side = 0 +8:1/0 = 0 +8:1/0/terrain_set = 0 +8:1/0/terrain = 0 +8:1/0/terrains_peering_bit/right_side = 0 +8:1/0/terrains_peering_bit/bottom_right_corner = 0 +8:1/0/terrains_peering_bit/bottom_side = 0 +8:1/0/terrains_peering_bit/top_side = 0 +9:1/0 = 0 +9:1/0/terrain_set = 0 +9:1/0/terrain = 0 +9:1/0/terrains_peering_bit/right_side = 0 +9:1/0/terrains_peering_bit/bottom_right_corner = 0 +9:1/0/terrains_peering_bit/bottom_side = 0 +9:1/0/terrains_peering_bit/bottom_left_corner = 0 +9:1/0/terrains_peering_bit/left_side = 0 +9:1/0/terrains_peering_bit/top_side = 0 +9:1/0/terrains_peering_bit/top_right_corner = 0 +10:1/0 = 0 +10:1/0/terrain_set = 0 +10:1/0/terrain = 0 +10:1/0/terrains_peering_bit/right_side = 0 +10:1/0/terrains_peering_bit/bottom_right_corner = 0 +10:1/0/terrains_peering_bit/bottom_side = 0 +10:1/0/terrains_peering_bit/bottom_left_corner = 0 +10:1/0/terrains_peering_bit/left_side = 0 +10:1/0/terrains_peering_bit/top_left_corner = 0 +10:1/0/terrains_peering_bit/top_side = 0 +11:1/0 = 0 +11:1/0/terrain_set = 0 +11:1/0/terrain = 0 +11:1/0/terrains_peering_bit/bottom_side = 0 +11:1/0/terrains_peering_bit/bottom_left_corner = 0 +11:1/0/terrains_peering_bit/left_side = 0 +11:1/0/terrains_peering_bit/top_side = 0 +12:1/0 = 0 +12:1/0/terrain_set = 0 +12:1/0/terrain = 0 +12:1/0/terrains_peering_bit/right_side = 0 +12:1/0/terrains_peering_bit/bottom_right_corner = 0 +12:1/0/terrains_peering_bit/bottom_side = 0 +12:1/0/terrains_peering_bit/top_side = 0 +12:1/0/terrains_peering_bit/top_right_corner = 0 +13:1/0 = 0 +13:1/0/terrain_set = 0 +13:1/0/terrain = 0 +13:1/0/terrains_peering_bit/right_side = 0 +13:1/0/terrains_peering_bit/bottom_side = 0 +13:1/0/terrains_peering_bit/bottom_left_corner = 0 +13:1/0/terrains_peering_bit/left_side = 0 +13:1/0/terrains_peering_bit/top_side = 0 +13:1/0/terrains_peering_bit/top_right_corner = 0 +14:1/0 = 0 +15:1/0 = 0 +15:1/0/terrain_set = 0 +15:1/0/terrain = 0 +15:1/0/terrains_peering_bit/right_side = 0 +15:1/0/terrains_peering_bit/bottom_side = 0 +15:1/0/terrains_peering_bit/bottom_left_corner = 0 +15:1/0/terrains_peering_bit/left_side = 0 +15:1/0/terrains_peering_bit/top_left_corner = 0 +15:1/0/terrains_peering_bit/top_side = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/terrain = 0 +4:2/0/terrains_peering_bit/top_side = 0 +5:2/0 = 0 +5:2/0/terrain_set = 0 +5:2/0/terrain = 0 +5:2/0/terrains_peering_bit/right_side = 0 +5:2/0/terrains_peering_bit/top_side = 0 +5:2/0/terrains_peering_bit/top_right_corner = 0 +6:2/0 = 0 +6:2/0/terrain_set = 0 +6:2/0/terrain = 0 +6:2/0/terrains_peering_bit/right_side = 0 +6:2/0/terrains_peering_bit/left_side = 0 +6:2/0/terrains_peering_bit/top_side = 0 +7:2/0 = 0 +7:2/0/terrain_set = 0 +7:2/0/terrain = 0 +7:2/0/terrains_peering_bit/left_side = 0 +7:2/0/terrains_peering_bit/top_side = 0 +8:2/0 = 0 +8:2/0/terrain_set = 0 +8:2/0/terrain = 0 +8:2/0/terrains_peering_bit/right_side = 0 +8:2/0/terrains_peering_bit/bottom_side = 0 +8:2/0/terrains_peering_bit/top_side = 0 +8:2/0/terrains_peering_bit/top_right_corner = 0 +9:2/0 = 0 +9:2/0/terrain_set = 0 +9:2/0/terrain = 0 +9:2/0/terrains_peering_bit/right_side = 0 +9:2/0/terrains_peering_bit/bottom_right_corner = 0 +9:2/0/terrains_peering_bit/bottom_side = 0 +9:2/0/terrains_peering_bit/left_side = 0 +9:2/0/terrains_peering_bit/top_left_corner = 0 +9:2/0/terrains_peering_bit/top_side = 0 +9:2/0/terrains_peering_bit/top_right_corner = 0 +10:2/0 = 0 +10:2/0/terrain_set = 0 +10:2/0/terrain = 0 +10:2/0/terrains_peering_bit/right_side = 0 +10:2/0/terrains_peering_bit/bottom_side = 0 +10:2/0/terrains_peering_bit/bottom_left_corner = 0 +10:2/0/terrains_peering_bit/left_side = 0 +10:2/0/terrains_peering_bit/top_left_corner = 0 +10:2/0/terrains_peering_bit/top_side = 0 +10:2/0/terrains_peering_bit/top_right_corner = 0 +11:2/0 = 0 +11:2/0/terrain_set = 0 +11:2/0/terrain = 0 +11:2/0/terrains_peering_bit/bottom_side = 0 +11:2/0/terrains_peering_bit/left_side = 0 +11:2/0/terrains_peering_bit/top_left_corner = 0 +11:2/0/terrains_peering_bit/top_side = 0 +12:2/0 = 0 +12:2/0/terrain_set = 0 +12:2/0/terrain = 0 +12:2/0/terrains_peering_bit/right_side = 0 +12:2/0/terrains_peering_bit/bottom_right_corner = 0 +12:2/0/terrains_peering_bit/bottom_side = 0 +12:2/0/terrains_peering_bit/left_side = 0 +12:2/0/terrains_peering_bit/top_side = 0 +12:2/0/terrains_peering_bit/top_right_corner = 0 +13:2/0 = 0 +13:2/0/terrain_set = 0 +13:2/0/terrain = 0 +13:2/0/terrains_peering_bit/right_side = 0 +13:2/0/terrains_peering_bit/bottom_right_corner = 0 +13:2/0/terrains_peering_bit/bottom_side = 0 +13:2/0/terrains_peering_bit/bottom_left_corner = 0 +13:2/0/terrains_peering_bit/left_side = 0 +13:2/0/terrains_peering_bit/top_left_corner = 0 +13:2/0/terrains_peering_bit/top_side = 0 +13:2/0/terrains_peering_bit/top_right_corner = 0 +14:2/0 = 0 +14:2/0/terrain_set = 0 +14:2/0/terrain = 0 +14:2/0/terrains_peering_bit/right_side = 0 +14:2/0/terrains_peering_bit/bottom_right_corner = 0 +14:2/0/terrains_peering_bit/bottom_side = 0 +14:2/0/terrains_peering_bit/left_side = 0 +14:2/0/terrains_peering_bit/top_left_corner = 0 +14:2/0/terrains_peering_bit/top_side = 0 +15:2/0 = 0 +15:2/0/terrain_set = 0 +15:2/0/terrain = 0 +15:2/0/terrains_peering_bit/bottom_side = 0 +15:2/0/terrains_peering_bit/bottom_left_corner = 0 +15:2/0/terrains_peering_bit/left_side = 0 +15:2/0/terrains_peering_bit/top_left_corner = 0 +15:2/0/terrains_peering_bit/top_side = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +4:3/0/terrain_set = 0 +4:3/0/terrain = 0 +5:3/0 = 0 +5:3/0/terrain_set = 0 +5:3/0/terrain = 0 +5:3/0/terrains_peering_bit/right_side = 0 +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +6:3/0/terrains_peering_bit/right_side = 0 +6:3/0/terrains_peering_bit/left_side = 0 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/terrains_peering_bit/left_side = 0 +8:3/0 = 0 +8:3/0/terrain_set = 0 +8:3/0/terrain = 0 +8:3/0/terrains_peering_bit/right_side = 0 +8:3/0/terrains_peering_bit/bottom_side = 0 +8:3/0/terrains_peering_bit/bottom_left_corner = 0 +8:3/0/terrains_peering_bit/left_side = 0 +8:3/0/terrains_peering_bit/top_side = 0 +9:3/0 = 0 +9:3/0/terrain_set = 0 +9:3/0/terrain = 0 +9:3/0/terrains_peering_bit/right_side = 0 +9:3/0/terrains_peering_bit/left_side = 0 +9:3/0/terrains_peering_bit/top_side = 0 +9:3/0/terrains_peering_bit/top_right_corner = 0 +10:3/0 = 0 +10:3/0/terrain_set = 0 +10:3/0/terrain = 0 +10:3/0/terrains_peering_bit/right_side = 0 +10:3/0/terrains_peering_bit/left_side = 0 +10:3/0/terrains_peering_bit/top_left_corner = 0 +10:3/0/terrains_peering_bit/top_side = 0 +11:3/0 = 0 +11:3/0/terrain_set = 0 +11:3/0/terrain = 0 +11:3/0/terrains_peering_bit/right_side = 0 +11:3/0/terrains_peering_bit/bottom_right_corner = 0 +11:3/0/terrains_peering_bit/bottom_side = 0 +11:3/0/terrains_peering_bit/left_side = 0 +11:3/0/terrains_peering_bit/top_side = 0 +12:3/0 = 0 +12:3/0/terrain_set = 0 +12:3/0/terrain = 0 +12:3/0/terrains_peering_bit/right_side = 0 +12:3/0/terrains_peering_bit/top_side = 0 +12:3/0/terrains_peering_bit/top_right_corner = 0 +13:3/0 = 0 +13:3/0/terrain_set = 0 +13:3/0/terrain = 0 +13:3/0/terrains_peering_bit/right_side = 0 +13:3/0/terrains_peering_bit/left_side = 0 +13:3/0/terrains_peering_bit/top_left_corner = 0 +13:3/0/terrains_peering_bit/top_side = 0 +13:3/0/terrains_peering_bit/top_right_corner = 0 +14:3/0 = 0 +14:3/0/terrain_set = 0 +14:3/0/terrain = 0 +14:3/0/terrains_peering_bit/right_side = 0 +14:3/0/terrains_peering_bit/bottom_side = 0 +14:3/0/terrains_peering_bit/left_side = 0 +14:3/0/terrains_peering_bit/top_left_corner = 0 +14:3/0/terrains_peering_bit/top_side = 0 +14:3/0/terrains_peering_bit/top_right_corner = 0 +15:3/0 = 0 +15:3/0/terrain_set = 0 +15:3/0/terrain = 0 +15:3/0/terrains_peering_bit/left_side = 0 +15:3/0/terrains_peering_bit/top_left_corner = 0 +15:3/0/terrains_peering_bit/top_side = 0 +0:4/0 = 0 +1:4/0 = 0 +1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(7.965767, 16, 16, 8.284401, 16, 16) +2:4/0 = 0 +2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, 16, -16, 16) +3:4/0 = 0 +3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, 16, -16, 16) +4:4/0 = 0 +4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, 16, -16, 16) +5:4/0 = 0 +5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, 7.3285065, -10.196184, 16) +6:4/0 = 0 +7:4/0 = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(14, -5, 10, -12, -16, 10, -16, 16, 9, 16) +8:4/0 = 0 +8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-14, -5, -10, -12, 16, 10, 16, 16, -9, 16) +9:4/0 = 0 +10:4/0 = 0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:4/0 = 0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 6, -16, 6) +12:4/0 = 0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 6, -16, 6) +13:4/0 = 0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 6, -16, 6) +14:4/0 = 0 +14:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:4/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(0.63726044, 3.186306, 5.098091, -9.877554, 16, -16, 16, 16, -7.0098763, 16) +2:5/0 = 0 +2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:5/0 = 0 +3:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:5/0 = 0 +4:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:5/0 = 0 +5:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -10.196184, -16, 9.877552, 16, -16, 16) +6:5/0 = 0 +7:5/0 = 0 +7:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -2, 6, -16, -16, -16, -16, 16, -3, 16) +8:5/0 = 0 +8:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -16, 16, -16, 16, 16, 5, 16, -1, 9) +9:5/0 = 0 +10:5/0 = 0 +10:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:5/0 = 0 +12:5/0 = 0 +13:5/0 = 0 +14:5/0 = 0 +14:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:5/0 = 0 +0:6/0 = 0 +0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(7.965767, 16, 16, -2.8676758, 16, 16) +1:6/0 = 0 +1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-11.789339, -9.240292, -7.965769, -16, 16, -16, 16, 16, -16, 16, -16, -1.9117851) +2:6/0 = 0 +2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:6/0 = 0 +3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:6/0 = 0 +4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +5:6/0 = 0 +5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, 0, 7, -16, -16, -16, -16, 16) +6:6/0 = 0 +6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -1.593153, -10.8334465, 6.372616, -10.196184, 16) +7:6/0 = 0 +7:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-5, -16, -16, -16, -16, 16, -9, 5) +8:6/0 = 0 +8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -16, 16, -16, 16, 14, 11, 7) +9:6/0 = 0 +9:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -16, 16) +10:6/0 = 0 +10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +11:6/0 = 0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10, 16, 11, 16, 16, -16, 16) +12:6/0 = 0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10, 16, 11, 16, 16, -16, 16) +13:6/0 = 0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10, 16, 11, 16, 16, -16, 16) +14:6/0 = 0 +14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:6/0 = 0 +0:7/0 = 0 +0:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(7.965767, 16, 8.284401, -16, 16, -16, 16, 16) +1:7/0 = 0 +1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:7/0 = 0 +3:7/0 = 0 +4:7/0 = 0 +5:7/0 = 0 +5:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:7/0 = 0 +6:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, -10.196184, -16, -10.196184, 16) +7:7/0 = 0 +8:7/0 = 0 +9:7/0 = 0 +9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -16, 16) +10:7/0 = 0 +10:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -7, 11, 5, 11, 9, 16) +11:7/0 = 0 +11:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -16, 16) +12:7/0 = 0 +12:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -16, 16) +13:7/0 = 0 +13:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -16, 16) +14:7/0 = 0 +14:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 6, 12, -1, 10, -7, 14, -16, 16) +15:7/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ao5w0"] +texture = ExtResource("2_w4y6p") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:0/0 = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:0/0 = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:1/0 = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -13, 6, 0, 4, 16, -16, 16) +1:1/0 = 0 +1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -12, 3, -3, -3, -3, -16, -13) +2:1/0 = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -5, 16, -7, 0, -16, -12) +0:2/0 = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 5, -16, 8, 5, 5, 16, -16, 16) +1:2/0 = 0 +2:2/0 = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-5, -16, 16, -16, 16, 16, -6, 16, -6, 0) + +[sub_resource type="TileSet" id="TileSet_w4y6p"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 16 +physics_layer_0/collision_mask = 0 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Path" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/0 = SubResource("TileSetAtlasSource_guo4s") +sources/1 = SubResource("TileSetAtlasSource_ao5w0") + +[node name="Grass-01" type="TileMapLayer" unique_id=653632611] +z_index = -1 +tile_set = SubResource("TileSet_w4y6p") +rendering_quadrant_size = 32 +script = ExtResource("2_guo4s") diff --git a/tiles_maps/level_tilemap.gd b/tiles_maps/level_tilemap.gd new file mode 100644 index 0000000..f9e274c --- /dev/null +++ b/tiles_maps/level_tilemap.gd @@ -0,0 +1,10 @@ +class_name LevelTileMap extends TileMapLayer + +func _ready() -> void: + LevelManager.change_tilemap_bounds(get_tilemap_bounds()) + +func get_tilemap_bounds() -> Array[Vector2]: + var bounds: Array[Vector2] = [] + bounds.append(Vector2(get_used_rect().position * rendering_quadrant_size)) + bounds.append(Vector2(get_used_rect().end * rendering_quadrant_size)) + return bounds diff --git a/tiles_maps/level_tilemap.gd.uid b/tiles_maps/level_tilemap.gd.uid new file mode 100644 index 0000000..f884ffc --- /dev/null +++ b/tiles_maps/level_tilemap.gd.uid @@ -0,0 +1 @@ +uid://doq7a0ln1gird diff --git a/tiles_maps/sprites/Grass-01.png b/tiles_maps/sprites/Grass-01.png new file mode 100644 index 0000000..6572c52 Binary files /dev/null and b/tiles_maps/sprites/Grass-01.png differ diff --git a/tiles_maps/sprites/Grass-01.png.import b/tiles_maps/sprites/Grass-01.png.import new file mode 100644 index 0000000..38c9b5e --- /dev/null +++ b/tiles_maps/sprites/Grass-01.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxcudcy4diqb2" +path="res://.godot/imported/Grass-01.png-8bb64907041614f388d18020b13817e8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://tiles_maps/sprites/Grass-01.png" +dest_files=["res://.godot/imported/Grass-01.png-8bb64907041614f388d18020b13817e8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/tiles_maps/sprites/dungeon.png b/tiles_maps/sprites/dungeon.png new file mode 100644 index 0000000..8e1ce60 Binary files /dev/null and b/tiles_maps/sprites/dungeon.png differ diff --git a/tiles_maps/sprites/dungeon.png.import b/tiles_maps/sprites/dungeon.png.import new file mode 100644 index 0000000..75a0005 --- /dev/null +++ b/tiles_maps/sprites/dungeon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cim3u2o47fu7v" +path="res://.godot/imported/dungeon.png-9b2047bb77997b8dee5afb66ab733ab2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://tiles_maps/sprites/dungeon.png" +dest_files=["res://.godot/imported/dungeon.png-9b2047bb77997b8dee5afb66ab733ab2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/tiles_maps/sprites/dungeon_entrance.png b/tiles_maps/sprites/dungeon_entrance.png new file mode 100644 index 0000000..8c883df Binary files /dev/null and b/tiles_maps/sprites/dungeon_entrance.png differ diff --git a/tiles_maps/sprites/dungeon_entrance.png.import b/tiles_maps/sprites/dungeon_entrance.png.import new file mode 100644 index 0000000..97117c9 --- /dev/null +++ b/tiles_maps/sprites/dungeon_entrance.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0sui71s003ur" +path="res://.godot/imported/dungeon_entrance.png-59257d70f85bed5683437d56a5feae72.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://tiles_maps/sprites/dungeon_entrance.png" +dest_files=["res://.godot/imported/dungeon_entrance.png-59257d70f85bed5683437d56a5feae72.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1