├── .gitignore ├── LICENSE ├── README.md ├── assets ├── audio │ ├── Abstract2.ogg │ ├── Abstract2.ogg.import │ ├── bfh1_glass_breaking_02.ogg │ ├── bfh1_glass_breaking_02.ogg.import │ ├── btn-Modern2.wav │ ├── btn-Modern2.wav.import │ ├── move-Minimalist4.wav │ └── move-Minimalist4.wav.import ├── bkgd │ ├── Background.png │ ├── Background.png.import │ ├── Cloud_1.png │ ├── Cloud_1.png.import │ ├── Cloud_2.png │ ├── Cloud_2.png.import │ ├── anim-asteroid.png │ └── anim-asteroid.png.import ├── effects │ ├── Burst_1_256.png │ ├── Burst_1_256.png.import │ ├── Burst_3_128.png │ ├── Burst_3_128.png.import │ ├── Burst_3_256.png │ ├── Burst_3_256.png.import │ ├── explode-03.png │ ├── explode-03.png.import │ ├── explode-06.png │ └── explode-06.png.import ├── fonts │ ├── Acme-Regular.ttf │ ├── Acme-Regular.ttf.import │ ├── Quicksand-Regular.ttf │ └── Quicksand-Regular.ttf.import ├── gems │ ├── background-space.png │ ├── background-space.png.import │ ├── food │ │ ├── characters_0001.png │ │ ├── characters_0001.png.import │ │ ├── characters_0002.png │ │ ├── characters_0002.png.import │ │ ├── characters_0003.png │ │ ├── characters_0003.png.import │ │ ├── characters_0004.png │ │ ├── characters_0004.png.import │ │ ├── characters_0005.png │ │ ├── characters_0005.png.import │ │ ├── characters_0006.png │ │ ├── characters_0006.png.import │ │ ├── characters_0007.png │ │ └── characters_0007.png.import │ ├── gems │ │ ├── Gem1.png │ │ ├── Gem1.png.import │ │ ├── Gem2.png │ │ ├── Gem2.png.import │ │ ├── Gem3.png │ │ ├── Gem3.png.import │ │ ├── Gem4.png │ │ ├── Gem4.png.import │ │ ├── Gem5.png │ │ ├── Gem5.png.import │ │ ├── Gem6.png │ │ ├── Gem6.png.import │ │ ├── Overlay-Ice.png │ │ ├── Overlay-Ice.png.import │ │ ├── Overlay-Lock.png │ │ ├── Overlay-Lock.png.import │ │ ├── Special-Rock.png │ │ └── Special-Rock.png.import │ ├── gems2 │ │ ├── gem_b.png │ │ ├── gem_b.png.import │ │ ├── gem_g.png │ │ ├── gem_g.png.import │ │ ├── gem_o.png │ │ ├── gem_o.png.import │ │ ├── gem_o2.png.import │ │ ├── gem_p.png │ │ ├── gem_p.png.import │ │ ├── gem_x.png │ │ ├── gem_x.png.import │ │ ├── gem_y.png │ │ ├── gem_y.png.import │ │ ├── gem_z.png │ │ └── gem_z.png.import │ ├── space-fun │ │ ├── gem-space-fun-b.png │ │ ├── gem-space-fun-b.png.import │ │ ├── gem-space-fun-g.png │ │ ├── gem-space-fun-g.png.import │ │ ├── gem-space-fun-o.png │ │ ├── gem-space-fun-o.png.import │ │ ├── gem-space-fun-p.png │ │ ├── gem-space-fun-p.png.import │ │ ├── gem-space-fun-r.png │ │ ├── gem-space-fun-r.png.import │ │ ├── gem-space-fun-y.png │ │ └── gem-space-fun-y.png.import │ └── space │ │ ├── Gem2.png │ │ ├── Gem2.png.import │ │ ├── Gem3.png │ │ ├── Gem3.png.import │ │ ├── Overlay-Lock.png │ │ ├── Overlay-Lock.png.import │ │ ├── Space_B.png │ │ ├── Space_B.png.import │ │ ├── Space_G.png │ │ ├── Space_G.png.import │ │ ├── Space_O.png │ │ ├── Space_O.png.import │ │ ├── Space_P.png │ │ ├── Space_P.png.import │ │ ├── Space_R.png │ │ ├── Space_R.png.import │ │ ├── Space_Y.png │ │ ├── Space_Y.png.import │ │ ├── Space_Z.png │ │ ├── Space_Z.png.import │ │ ├── Special-Rock.png │ │ ├── Special-Rock.png.import │ │ ├── background-space.png │ │ ├── background-space.png.import │ │ ├── special-flame.png │ │ └── special-flame.png.import └── gui │ ├── Banner_Blue.png │ ├── Banner_Blue.png.import │ ├── Box_Blue_Rounded.png │ ├── Box_Blue_Rounded.png.import │ ├── Box_Blue_Square.png │ ├── Box_Blue_Square.png.import │ ├── ButtonText_Large_Blue_Round.png │ ├── ButtonText_Large_Blue_Round.png.import │ ├── ButtonText_Large_Green_Round.png │ ├── ButtonText_Large_Green_Round.png.import │ ├── ButtonText_Large_Green_Square.png │ ├── ButtonText_Large_Green_Square.png.import │ ├── ButtonText_Large_GreyOutline_Round.png │ ├── ButtonText_Large_GreyOutline_Round.png.import │ ├── ButtonText_Large_Orange_Round.png │ ├── ButtonText_Large_Orange_Round.png.import │ ├── IconButton_Small_Red_Square.png │ ├── IconButton_Small_Red_Square.png.import │ ├── button_9slice.png │ ├── button_9slice.png.import │ ├── button_9slice01.png │ ├── button_9slice01.png.import │ ├── icon_info.png │ └── icon_info.png.import ├── enums.gd ├── enums.gd.uid ├── export_presets.cfg ├── game_boards ├── all_common │ ├── cmn_gem_cell.gd │ ├── cmn_gem_cell.gd.uid │ ├── cmn_gem_cell.tscn │ ├── cmn_gem_control.gd │ ├── cmn_gem_control.gd.uid │ ├── common.gd │ ├── common.gd.uid │ ├── common_debug.gd │ ├── common_debug.gd.uid │ ├── gem_cell.gdshader │ └── gem_cell.gdshader.uid ├── board_food │ ├── assets │ │ ├── animated_cloud.tscn │ │ ├── board_square_0.tscn │ │ └── board_square_1.tscn │ ├── board_food.gd │ ├── board_food.gd.uid │ ├── board_food.tscn │ ├── game_food.gd │ ├── game_food.gd.uid │ └── game_food.tscn └── board_space │ ├── assets │ ├── animated_cloud.tscn │ ├── board_square_0.tscn │ ├── board_square_1.tscn │ ├── gem_cell.gdshader │ ├── gem_cell.gdshader.uid │ ├── gem_cell_v2.gdshader │ └── gem_cell_v2.gdshader.uid │ ├── board_space.gd │ ├── board_space.gd.uid │ ├── board_space.tscn │ ├── game_space.gd │ ├── game_space.gd.uid │ └── game_space.tscn ├── icon.svg ├── icon.svg.import ├── main.gd ├── main.gd.uid ├── main.tscn ├── project.godot └── themes ├── debug_label_theme.tres ├── game_msg_btm.tres ├── game_msg_top.tres ├── game_stats_label_theme.tres └── game_top_label_theme.tres /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | /.godot 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # godot-match-3 2 | Godot Match 3 Game (GDScript 4.2) 3 | 4 | Godot Match 3 is a classic gem matching game built with the Godot Engine. 5 | 6 |

7 | 8 | 9 | 15 | 16 | 17 | 23 | 29 | 30 |
10 |
Start Screen
11 | 12 | Godot Match-3 Gameplay on iPad 13 | 14 |
18 |
Board 1 (Food)
19 | 20 | Godot Match-3 Gameplay on iPad 21 | 22 |
24 |
Board 2 (Space)
25 | 26 | Godot-Match-3 Gameplay on iPad 27 | 28 |
31 |

32 | 33 | https://github.com/gitbrent/godot-match-3/assets/7218970/ef429eeb-c6bb-4cb2-bf88-144f6eec9217 34 | -------------------------------------------------------------------------------- /assets/audio/Abstract2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/audio/Abstract2.ogg -------------------------------------------------------------------------------- /assets/audio/Abstract2.ogg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="oggvorbisstr" 4 | type="AudioStreamOggVorbis" 5 | uid="uid://ds53xomd2ha1b" 6 | path="res://.godot/imported/Abstract2.ogg-c216d28aaac6ef196a37062410cec891.oggvorbisstr" 7 | 8 | [deps] 9 | 10 | source_file="res://assets/audio/Abstract2.ogg" 11 | dest_files=["res://.godot/imported/Abstract2.ogg-c216d28aaac6ef196a37062410cec891.oggvorbisstr"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /assets/audio/bfh1_glass_breaking_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/audio/bfh1_glass_breaking_02.ogg -------------------------------------------------------------------------------- /assets/audio/bfh1_glass_breaking_02.ogg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="oggvorbisstr" 4 | type="AudioStreamOggVorbis" 5 | uid="uid://ca0jp78fn0bi1" 6 | path="res://.godot/imported/bfh1_glass_breaking_02.ogg-3d224225c62caf2ce6677606402deb09.oggvorbisstr" 7 | 8 | [deps] 9 | 10 | source_file="res://assets/audio/bfh1_glass_breaking_02.ogg" 11 | dest_files=["res://.godot/imported/bfh1_glass_breaking_02.ogg-3d224225c62caf2ce6677606402deb09.oggvorbisstr"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /assets/audio/btn-Modern2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/audio/btn-Modern2.wav -------------------------------------------------------------------------------- /assets/audio/btn-Modern2.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://v2hw81htalth" 6 | path="res://.godot/imported/btn-Modern2.wav-66f17a25a1775887191faffbeee5e476.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://assets/audio/btn-Modern2.wav" 11 | dest_files=["res://.godot/imported/btn-Modern2.wav-66f17a25a1775887191faffbeee5e476.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /assets/audio/move-Minimalist4.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/audio/move-Minimalist4.wav -------------------------------------------------------------------------------- /assets/audio/move-Minimalist4.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bqdecvk7bvfpc" 6 | path="res://.godot/imported/move-Minimalist4.wav-6633906e60654ef6c80c20b471687e81.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://assets/audio/move-Minimalist4.wav" 11 | dest_files=["res://.godot/imported/move-Minimalist4.wav-6633906e60654ef6c80c20b471687e81.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /assets/bkgd/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/bkgd/Background.png -------------------------------------------------------------------------------- /assets/bkgd/Background.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cnlqirgwr8d4" 6 | path="res://.godot/imported/Background.png-14a3a68223ad10409c100c46176dc7a9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/bkgd/Background.png" 14 | dest_files=["res://.godot/imported/Background.png-14a3a68223ad10409c100c46176dc7a9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/bkgd/Cloud_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/bkgd/Cloud_1.png -------------------------------------------------------------------------------- /assets/bkgd/Cloud_1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cb6i12qqedvr4" 6 | path="res://.godot/imported/Cloud_1.png-f4ac26b194206c801faf41ccb4b5564d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/bkgd/Cloud_1.png" 14 | dest_files=["res://.godot/imported/Cloud_1.png-f4ac26b194206c801faf41ccb4b5564d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/bkgd/Cloud_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/bkgd/Cloud_2.png -------------------------------------------------------------------------------- /assets/bkgd/Cloud_2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cfdjrsigqjjjk" 6 | path="res://.godot/imported/Cloud_2.png-edbd26bde64b00120e0ade65672325c8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/bkgd/Cloud_2.png" 14 | dest_files=["res://.godot/imported/Cloud_2.png-edbd26bde64b00120e0ade65672325c8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/bkgd/anim-asteroid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/bkgd/anim-asteroid.png -------------------------------------------------------------------------------- /assets/bkgd/anim-asteroid.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://chjx4dikt1rp3" 6 | path="res://.godot/imported/anim-asteroid.png-e7c37840c61ff62513b5a976888abc6c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/bkgd/anim-asteroid.png" 14 | dest_files=["res://.godot/imported/anim-asteroid.png-e7c37840c61ff62513b5a976888abc6c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/effects/Burst_1_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/effects/Burst_1_256.png -------------------------------------------------------------------------------- /assets/effects/Burst_1_256.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dfmdq1ovwwde" 6 | path="res://.godot/imported/Burst_1_256.png-f9a0da649047f1848ce32cf313a7c9ae.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/effects/Burst_1_256.png" 14 | dest_files=["res://.godot/imported/Burst_1_256.png-f9a0da649047f1848ce32cf313a7c9ae.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/effects/Burst_3_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/effects/Burst_3_128.png -------------------------------------------------------------------------------- /assets/effects/Burst_3_128.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cbtyq8gp4lek0" 6 | path="res://.godot/imported/Burst_3_128.png-55b9f3dba4ece0bd8b49615fcda4a4f1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/effects/Burst_3_128.png" 14 | dest_files=["res://.godot/imported/Burst_3_128.png-55b9f3dba4ece0bd8b49615fcda4a4f1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/effects/Burst_3_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/effects/Burst_3_256.png -------------------------------------------------------------------------------- /assets/effects/Burst_3_256.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bbv37skakfk3w" 6 | path="res://.godot/imported/Burst_3_256.png-8ee1b3e2b3d3e043cfb18de007450468.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/effects/Burst_3_256.png" 14 | dest_files=["res://.godot/imported/Burst_3_256.png-8ee1b3e2b3d3e043cfb18de007450468.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/effects/explode-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/effects/explode-03.png -------------------------------------------------------------------------------- /assets/effects/explode-03.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://djen3tlkbem1a" 6 | path="res://.godot/imported/explode-03.png-d3af380a4ba5ed99837ae7a382aa319f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/effects/explode-03.png" 14 | dest_files=["res://.godot/imported/explode-03.png-d3af380a4ba5ed99837ae7a382aa319f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/effects/explode-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/effects/explode-06.png -------------------------------------------------------------------------------- /assets/effects/explode-06.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dacjcttesccxk" 6 | path="res://.godot/imported/explode-06.png-5252df0d59f9281671c6599fe24025fa.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/effects/explode-06.png" 14 | dest_files=["res://.godot/imported/explode-06.png-5252df0d59f9281671c6599fe24025fa.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/fonts/Acme-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/fonts/Acme-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Acme-Regular.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://dlhwrp5jwkrll" 6 | path="res://.godot/imported/Acme-Regular.ttf-b2675e9734cacefba3354b0bc3dced17.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://assets/fonts/Acme-Regular.ttf" 11 | dest_files=["res://.godot/imported/Acme-Regular.ttf-b2675e9734cacefba3354b0bc3dced17.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /assets/fonts/Quicksand-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/fonts/Quicksand-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Quicksand-Regular.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://bylgyjavx5yts" 6 | path="res://.godot/imported/Quicksand-Regular.ttf-4a6a8af0477e9afc1a5823bbac6f49dd.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://assets/fonts/Quicksand-Regular.ttf" 11 | dest_files=["res://.godot/imported/Quicksand-Regular.ttf-4a6a8af0477e9afc1a5823bbac6f49dd.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /assets/gems/background-space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/background-space.png -------------------------------------------------------------------------------- /assets/gems/background-space.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwhjcn0y744nv" 6 | path="res://.godot/imported/background-space.png-b300020794502642cc6643ea09361449.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/background-space.png" 14 | dest_files=["res://.godot/imported/background-space.png-b300020794502642cc6643ea09361449.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0001.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0001.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://duau66qew6757" 6 | path="res://.godot/imported/characters_0001.png-6c0da41dea172175fda30406cc1e5193.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0001.png" 14 | dest_files=["res://.godot/imported/characters_0001.png-6c0da41dea172175fda30406cc1e5193.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0002.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0002.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b8biy2iputyhe" 6 | path="res://.godot/imported/characters_0002.png-4e2c1e7b750973429ada8f71e151dc2a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0002.png" 14 | dest_files=["res://.godot/imported/characters_0002.png-4e2c1e7b750973429ada8f71e151dc2a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0003.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0003.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://vu6oui2n7024" 6 | path="res://.godot/imported/characters_0003.png-bdfb8aaaddf3f93e8a75c23bafeece58.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0003.png" 14 | dest_files=["res://.godot/imported/characters_0003.png-bdfb8aaaddf3f93e8a75c23bafeece58.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0004.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0004.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://djje8avawcq2p" 6 | path="res://.godot/imported/characters_0004.png-a26d7bb1bfa20668963ca011d5c7e6be.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0004.png" 14 | dest_files=["res://.godot/imported/characters_0004.png-a26d7bb1bfa20668963ca011d5c7e6be.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0005.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0005.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://byliae6aa6ki2" 6 | path="res://.godot/imported/characters_0005.png-5bc259de214cf93ed515c35a014a3a00.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0005.png" 14 | dest_files=["res://.godot/imported/characters_0005.png-5bc259de214cf93ed515c35a014a3a00.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0006.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0006.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b1o34xq1pq82y" 6 | path="res://.godot/imported/characters_0006.png-dd692f2415454d5faaed8a9132939c39.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0006.png" 14 | dest_files=["res://.godot/imported/characters_0006.png-dd692f2415454d5faaed8a9132939c39.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/food/characters_0007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/food/characters_0007.png -------------------------------------------------------------------------------- /assets/gems/food/characters_0007.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://2vrsevjv4w43" 6 | path="res://.godot/imported/characters_0007.png-a11229eeaa1796dd9930d685d857046c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/food/characters_0007.png" 14 | dest_files=["res://.godot/imported/characters_0007.png-a11229eeaa1796dd9930d685d857046c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Gem1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Gem1.png -------------------------------------------------------------------------------- /assets/gems/gems/Gem1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://drvn08bq7wqd3" 6 | path="res://.godot/imported/Gem1.png-bb93c42a98adce486146f5f0a3c5b304.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Gem1.png" 14 | dest_files=["res://.godot/imported/Gem1.png-bb93c42a98adce486146f5f0a3c5b304.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Gem2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Gem2.png -------------------------------------------------------------------------------- /assets/gems/gems/Gem2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://8st0pjjj06t6" 6 | path="res://.godot/imported/Gem2.png-719d3f9c4bfe57cc538196ec41c30da4.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Gem2.png" 14 | dest_files=["res://.godot/imported/Gem2.png-719d3f9c4bfe57cc538196ec41c30da4.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Gem3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Gem3.png -------------------------------------------------------------------------------- /assets/gems/gems/Gem3.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://f03xp7kt4yhx" 6 | path="res://.godot/imported/Gem3.png-6704d14e0ccec223c509398d622c0452.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Gem3.png" 14 | dest_files=["res://.godot/imported/Gem3.png-6704d14e0ccec223c509398d622c0452.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Gem4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Gem4.png -------------------------------------------------------------------------------- /assets/gems/gems/Gem4.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://demwo7h8k1qio" 6 | path="res://.godot/imported/Gem4.png-883623c60d352c80aae2ea95e4099192.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Gem4.png" 14 | dest_files=["res://.godot/imported/Gem4.png-883623c60d352c80aae2ea95e4099192.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Gem5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Gem5.png -------------------------------------------------------------------------------- /assets/gems/gems/Gem5.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dhrwau2byrgig" 6 | path="res://.godot/imported/Gem5.png-6dedc65a4af7aadcc23c1bcee016ae4d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Gem5.png" 14 | dest_files=["res://.godot/imported/Gem5.png-6dedc65a4af7aadcc23c1bcee016ae4d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Gem6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Gem6.png -------------------------------------------------------------------------------- /assets/gems/gems/Gem6.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwnrtr34axkyv" 6 | path="res://.godot/imported/Gem6.png-4aeaf5eade6796394f560e42f81a3aa0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Gem6.png" 14 | dest_files=["res://.godot/imported/Gem6.png-4aeaf5eade6796394f560e42f81a3aa0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Overlay-Ice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Overlay-Ice.png -------------------------------------------------------------------------------- /assets/gems/gems/Overlay-Ice.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cooat8cgq2rb4" 6 | path="res://.godot/imported/Overlay-Ice.png-14b92730fb3e98cbe4f073ec276567ec.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Overlay-Ice.png" 14 | dest_files=["res://.godot/imported/Overlay-Ice.png-14b92730fb3e98cbe4f073ec276567ec.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Overlay-Lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Overlay-Lock.png -------------------------------------------------------------------------------- /assets/gems/gems/Overlay-Lock.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c4u0bdf7rh0u3" 6 | path="res://.godot/imported/Overlay-Lock.png-d4e3d07a3897b1d132964f62dc314465.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Overlay-Lock.png" 14 | dest_files=["res://.godot/imported/Overlay-Lock.png-d4e3d07a3897b1d132964f62dc314465.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems/Special-Rock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems/Special-Rock.png -------------------------------------------------------------------------------- /assets/gems/gems/Special-Rock.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cd1clgb1p24h2" 6 | path="res://.godot/imported/Special-Rock.png-1d1fc822a9b2aa1625ae04c9eedb3bac.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems/Special-Rock.png" 14 | dest_files=["res://.godot/imported/Special-Rock.png-1d1fc822a9b2aa1625ae04c9eedb3bac.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_b.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_b.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://shgcc3i0kgia" 6 | path="res://.godot/imported/gem_b.png-63eba53c831aaf70b78704aabd40fee3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_b.png" 14 | dest_files=["res://.godot/imported/gem_b.png-63eba53c831aaf70b78704aabd40fee3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_g.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_g.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cosx3kdpgbaq8" 6 | path="res://.godot/imported/gem_g.png-8a9d8377f435d3058c21f86110b4d1c8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_g.png" 14 | dest_files=["res://.godot/imported/gem_g.png-8a9d8377f435d3058c21f86110b4d1c8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_o.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_o.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://die6h3b65ui1k" 6 | path="res://.godot/imported/gem_o.png-f124f7c315702addfbdbe2c5ffd3c7c8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_o.png" 14 | dest_files=["res://.godot/imported/gem_o.png-f124f7c315702addfbdbe2c5ffd3c7c8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_o2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bu8jtt54b1pjf" 6 | path="res://.godot/imported/gem_o2.png-cabadc99cffbd4052a50b881740855cf.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_o2.png" 14 | dest_files=["res://.godot/imported/gem_o2.png-cabadc99cffbd4052a50b881740855cf.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_p.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_p.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://btun7ocavtgdg" 6 | path="res://.godot/imported/gem_p.png-ecb3cf6e25a44d2e65019390492e6cb1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_p.png" 14 | dest_files=["res://.godot/imported/gem_p.png-ecb3cf6e25a44d2e65019390492e6cb1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_x.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_x.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c8b810hxcrfkk" 6 | path="res://.godot/imported/gem_x.png-681aae87b9d938b2c7570c77b26ad457.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_x.png" 14 | dest_files=["res://.godot/imported/gem_x.png-681aae87b9d938b2c7570c77b26ad457.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_y.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_y.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c47i6okyowoeq" 6 | path="res://.godot/imported/gem_y.png-b84920a21dbcd7d187a2e2d48d5f377d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_y.png" 14 | dest_files=["res://.godot/imported/gem_y.png-b84920a21dbcd7d187a2e2d48d5f377d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/gems2/gem_z.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/gems2/gem_z.png -------------------------------------------------------------------------------- /assets/gems/gems2/gem_z.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://wmtah08vwgrn" 6 | path="res://.godot/imported/gem_z.png-d6960e8242baac6a9f481ebd84272cf5.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/gems2/gem_z.png" 14 | dest_files=["res://.godot/imported/gem_z.png-d6960e8242baac6a9f481ebd84272cf5.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space-fun/gem-space-fun-b.png -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-b.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://pldi2f0b5np3" 6 | path="res://.godot/imported/gem-space-fun-b.png-7b7952cc09a7fb1d837ca35b7b67ed3c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space-fun/gem-space-fun-b.png" 14 | dest_files=["res://.godot/imported/gem-space-fun-b.png-7b7952cc09a7fb1d837ca35b7b67ed3c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space-fun/gem-space-fun-g.png -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-g.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dvj40t3onvehv" 6 | path="res://.godot/imported/gem-space-fun-g.png-b862f25d3f5a8a3bcc34eef714b70be4.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space-fun/gem-space-fun-g.png" 14 | dest_files=["res://.godot/imported/gem-space-fun-g.png-b862f25d3f5a8a3bcc34eef714b70be4.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space-fun/gem-space-fun-o.png -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-o.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4555t0cp021y" 6 | path="res://.godot/imported/gem-space-fun-o.png-e1edd58fadd0c27c99ebfac32088e0c1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space-fun/gem-space-fun-o.png" 14 | dest_files=["res://.godot/imported/gem-space-fun-o.png-e1edd58fadd0c27c99ebfac32088e0c1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space-fun/gem-space-fun-p.png -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-p.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dier3fg331048" 6 | path="res://.godot/imported/gem-space-fun-p.png-5671a8588e0ba17e8dcb9368fe00f8b8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space-fun/gem-space-fun-p.png" 14 | dest_files=["res://.godot/imported/gem-space-fun-p.png-5671a8588e0ba17e8dcb9368fe00f8b8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space-fun/gem-space-fun-r.png -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-r.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b5rgujk3bcrw4" 6 | path="res://.godot/imported/gem-space-fun-r.png-0e25967e931bd0aa3f588bbb817e191e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space-fun/gem-space-fun-r.png" 14 | dest_files=["res://.godot/imported/gem-space-fun-r.png-0e25967e931bd0aa3f588bbb817e191e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space-fun/gem-space-fun-y.png -------------------------------------------------------------------------------- /assets/gems/space-fun/gem-space-fun-y.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c274b5bnxu8n0" 6 | path="res://.godot/imported/gem-space-fun-y.png-43fb2fa0a4bcb36d9eb715dd83b236f0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space-fun/gem-space-fun-y.png" 14 | dest_files=["res://.godot/imported/gem-space-fun-y.png-43fb2fa0a4bcb36d9eb715dd83b236f0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Gem2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Gem2.png -------------------------------------------------------------------------------- /assets/gems/space/Gem2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bwclqqw52gvpg" 6 | path="res://.godot/imported/Gem2.png-53c91380e6507002d98a3e76c8edad1c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Gem2.png" 14 | dest_files=["res://.godot/imported/Gem2.png-53c91380e6507002d98a3e76c8edad1c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Gem3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Gem3.png -------------------------------------------------------------------------------- /assets/gems/space/Gem3.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d1w4qnxyo315o" 6 | path="res://.godot/imported/Gem3.png-43ddb08aab5eef3f604fef29cdd65c33.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Gem3.png" 14 | dest_files=["res://.godot/imported/Gem3.png-43ddb08aab5eef3f604fef29cdd65c33.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Overlay-Lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Overlay-Lock.png -------------------------------------------------------------------------------- /assets/gems/space/Overlay-Lock.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://coy2yhk8tbels" 6 | path="res://.godot/imported/Overlay-Lock.png-cd8018af4dffec731d2815c717b1c622.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Overlay-Lock.png" 14 | dest_files=["res://.godot/imported/Overlay-Lock.png-cd8018af4dffec731d2815c717b1c622.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_B.png -------------------------------------------------------------------------------- /assets/gems/space/Space_B.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cvlodafggu8vg" 6 | path="res://.godot/imported/Space_B.png-53c10d88bb7e9c4a08bcc38f393b7ede.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_B.png" 14 | dest_files=["res://.godot/imported/Space_B.png-53c10d88bb7e9c4a08bcc38f393b7ede.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_G.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_G.png -------------------------------------------------------------------------------- /assets/gems/space/Space_G.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c37gqqvuu16v3" 6 | path="res://.godot/imported/Space_G.png-4ac2b72721753fdc9fa72ebec91112e9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_G.png" 14 | dest_files=["res://.godot/imported/Space_G.png-4ac2b72721753fdc9fa72ebec91112e9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_O.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_O.png -------------------------------------------------------------------------------- /assets/gems/space/Space_O.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c3gf2kl8ex7ru" 6 | path="res://.godot/imported/Space_O.png-c3aab6192ac82cbe9b1f326a6efce7fb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_O.png" 14 | dest_files=["res://.godot/imported/Space_O.png-c3aab6192ac82cbe9b1f326a6efce7fb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_P.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_P.png -------------------------------------------------------------------------------- /assets/gems/space/Space_P.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cnx5i4dv14xma" 6 | path="res://.godot/imported/Space_P.png-f4ebcd34cab9e62b1c127bbd5e69259a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_P.png" 14 | dest_files=["res://.godot/imported/Space_P.png-f4ebcd34cab9e62b1c127bbd5e69259a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_R.png -------------------------------------------------------------------------------- /assets/gems/space/Space_R.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dt14wt38x2ddb" 6 | path="res://.godot/imported/Space_R.png-8d5c56cdf1224092e8ff7b9dc9377192.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_R.png" 14 | dest_files=["res://.godot/imported/Space_R.png-8d5c56cdf1224092e8ff7b9dc9377192.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_Y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_Y.png -------------------------------------------------------------------------------- /assets/gems/space/Space_Y.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cavqcc5satl8d" 6 | path="res://.godot/imported/Space_Y.png-04e6cb1d859761c0a9599941deae935f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_Y.png" 14 | dest_files=["res://.godot/imported/Space_Y.png-04e6cb1d859761c0a9599941deae935f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Space_Z.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Space_Z.png -------------------------------------------------------------------------------- /assets/gems/space/Space_Z.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dwf6yosfhinvi" 6 | path="res://.godot/imported/Space_Z.png-13f1767497460eea0e208aa3e172523b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Space_Z.png" 14 | dest_files=["res://.godot/imported/Space_Z.png-13f1767497460eea0e208aa3e172523b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/Special-Rock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/Special-Rock.png -------------------------------------------------------------------------------- /assets/gems/space/Special-Rock.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c7gt64tslpp7g" 6 | path="res://.godot/imported/Special-Rock.png-80b98505586117bce91c6d04c6915cd8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/Special-Rock.png" 14 | dest_files=["res://.godot/imported/Special-Rock.png-80b98505586117bce91c6d04c6915cd8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/background-space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/background-space.png -------------------------------------------------------------------------------- /assets/gems/space/background-space.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c3w1w5b1kn38h" 6 | path="res://.godot/imported/background-space.png-7bcf9a681c0970e556296136a70e736e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/background-space.png" 14 | dest_files=["res://.godot/imported/background-space.png-7bcf9a681c0970e556296136a70e736e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gems/space/special-flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gems/space/special-flame.png -------------------------------------------------------------------------------- /assets/gems/space/special-flame.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://lvwus1km7wxq" 6 | path="res://.godot/imported/special-flame.png-5b47ba831cac375c6b4813fb6fa447b5.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gems/space/special-flame.png" 14 | dest_files=["res://.godot/imported/special-flame.png-5b47ba831cac375c6b4813fb6fa447b5.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/Banner_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/Banner_Blue.png -------------------------------------------------------------------------------- /assets/gui/Banner_Blue.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ggv6emruhkpa" 6 | path="res://.godot/imported/Banner_Blue.png-f4395fdc43a2dd12e0944cf946d55542.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/Banner_Blue.png" 14 | dest_files=["res://.godot/imported/Banner_Blue.png-f4395fdc43a2dd12e0944cf946d55542.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/Box_Blue_Rounded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/Box_Blue_Rounded.png -------------------------------------------------------------------------------- /assets/gui/Box_Blue_Rounded.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c4hpyl2askghn" 6 | path="res://.godot/imported/Box_Blue_Rounded.png-e663c20f533779919ed7eeffd09db168.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/Box_Blue_Rounded.png" 14 | dest_files=["res://.godot/imported/Box_Blue_Rounded.png-e663c20f533779919ed7eeffd09db168.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/Box_Blue_Square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/Box_Blue_Square.png -------------------------------------------------------------------------------- /assets/gui/Box_Blue_Square.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://26oggt734vaj" 6 | path="res://.godot/imported/Box_Blue_Square.png-0cc435e05355c9188f8c2d853b983045.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/Box_Blue_Square.png" 14 | dest_files=["res://.godot/imported/Box_Blue_Square.png-0cc435e05355c9188f8c2d853b983045.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Blue_Round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/ButtonText_Large_Blue_Round.png -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Blue_Round.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://chrsqb6yhlqeq" 6 | path="res://.godot/imported/ButtonText_Large_Blue_Round.png-28b6773134cc201c77c81daf370a52f0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/ButtonText_Large_Blue_Round.png" 14 | dest_files=["res://.godot/imported/ButtonText_Large_Blue_Round.png-28b6773134cc201c77c81daf370a52f0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Green_Round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/ButtonText_Large_Green_Round.png -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Green_Round.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://27rcw10bp2xt" 6 | path="res://.godot/imported/ButtonText_Large_Green_Round.png-a529278fbf2695a8faeb61b0b5b3f07a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/ButtonText_Large_Green_Round.png" 14 | dest_files=["res://.godot/imported/ButtonText_Large_Green_Round.png-a529278fbf2695a8faeb61b0b5b3f07a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Green_Square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/ButtonText_Large_Green_Square.png -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Green_Square.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dmdbncevubru8" 6 | path="res://.godot/imported/ButtonText_Large_Green_Square.png-759509761072ad1bfb03d5ac45eda359.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/ButtonText_Large_Green_Square.png" 14 | dest_files=["res://.godot/imported/ButtonText_Large_Green_Square.png-759509761072ad1bfb03d5ac45eda359.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_GreyOutline_Round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/ButtonText_Large_GreyOutline_Round.png -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_GreyOutline_Round.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bebhmcgujnoxc" 6 | path="res://.godot/imported/ButtonText_Large_GreyOutline_Round.png-3a62204519fd0963ce60f59adb9e7f34.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/ButtonText_Large_GreyOutline_Round.png" 14 | dest_files=["res://.godot/imported/ButtonText_Large_GreyOutline_Round.png-3a62204519fd0963ce60f59adb9e7f34.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Orange_Round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/ButtonText_Large_Orange_Round.png -------------------------------------------------------------------------------- /assets/gui/ButtonText_Large_Orange_Round.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dcow071sb2a7i" 6 | path="res://.godot/imported/ButtonText_Large_Orange_Round.png-3f704a3c9c10995643cc9b9926b55e27.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/ButtonText_Large_Orange_Round.png" 14 | dest_files=["res://.godot/imported/ButtonText_Large_Orange_Round.png-3f704a3c9c10995643cc9b9926b55e27.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/IconButton_Small_Red_Square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/IconButton_Small_Red_Square.png -------------------------------------------------------------------------------- /assets/gui/IconButton_Small_Red_Square.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bcbbjton0xqjd" 6 | path="res://.godot/imported/IconButton_Small_Red_Square.png-78ab7319f3dadb8f19adcab492ab57a2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/IconButton_Small_Red_Square.png" 14 | dest_files=["res://.godot/imported/IconButton_Small_Red_Square.png-78ab7319f3dadb8f19adcab492ab57a2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/button_9slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/button_9slice.png -------------------------------------------------------------------------------- /assets/gui/button_9slice.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bd7d54ydbcdrk" 6 | path="res://.godot/imported/button_9slice.png-6c74e4998793e2bbac696445b3b41987.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/button_9slice.png" 14 | dest_files=["res://.godot/imported/button_9slice.png-6c74e4998793e2bbac696445b3b41987.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/button_9slice01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/button_9slice01.png -------------------------------------------------------------------------------- /assets/gui/button_9slice01.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dr3og85coomrh" 6 | path="res://.godot/imported/button_9slice01.png-27834532c429af5d0a7bf50ff95c1e0b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/button_9slice01.png" 14 | dest_files=["res://.godot/imported/button_9slice01.png-27834532c429af5d0a7bf50ff95c1e0b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /assets/gui/icon_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitbrent/godot-match-3/5874fe0f8a55a7b0738a31f81ef8271dfe0ca2f6/assets/gui/icon_info.png -------------------------------------------------------------------------------- /assets/gui/icon_info.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bwl2pqdyvm3pd" 6 | path="res://.godot/imported/icon_info.png-6cd07700ec07d21df6ac6324cd507fbc.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/gui/icon_info.png" 14 | dest_files=["res://.godot/imported/icon_info.png-6cd07700ec07d21df6ac6324cd507fbc.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /enums.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | # APP 3 | const APP_VER:String = "0.5.0" 4 | const APP_BLD:String = "20240524" 5 | # GAME 6 | const TWEEN_TIME:float = 0.25 7 | const EXPLODE_DELAY:float = TWEEN_TIME*2.0 8 | const SRPITE_POS:Vector2 = Vector2(64,64) 9 | const HINT_DELAY:int = 10 10 | # VARS 11 | var current_debug_level = DEBUG_LEVEL.INFO # Global variable to set the current debug level 12 | 13 | # ========================================================= 14 | 15 | enum GemColor { 16 | RED, 17 | ORG, 18 | YLW, 19 | GRN, 20 | BLU, 21 | PRP 22 | } 23 | 24 | func get_color_name_by_value(value: int) -> String: 25 | for key in GemColor.keys(): 26 | if GemColor[key] == value: 27 | return key 28 | return "Unknown" 29 | 30 | # ========================================================= 31 | 32 | enum GemDict { 33 | FOOD, 34 | GEMS, 35 | SPACE 36 | } 37 | 38 | # ========================================================= 39 | 40 | enum DEBUG_LEVEL { 41 | NONE, # No debug output 42 | ERROR, # Critical errors only 43 | WARNING, # Errors and warnings 44 | INFO, # Informational output 45 | DEBUG # All debug messages 46 | } 47 | 48 | func debug_print(message: String, level: int): 49 | if level <= current_debug_level: 50 | print(message) 51 | -------------------------------------------------------------------------------- /enums.gd.uid: -------------------------------------------------------------------------------- 1 | uid://nd5miuu5wqqg 2 | -------------------------------------------------------------------------------- /export_presets.cfg: -------------------------------------------------------------------------------- 1 | [preset.0] 2 | 3 | name="iOS" 4 | platform="iOS" 5 | runnable=true 6 | dedicated_server=false 7 | custom_features="" 8 | export_filter="all_resources" 9 | include_filter="" 10 | exclude_filter="" 11 | export_path="../godot-match-3-export-ios/Godot Match 3.ipa" 12 | encryption_include_filters="" 13 | encryption_exclude_filters="" 14 | encrypt_pck=false 15 | encrypt_directory=false 16 | 17 | [preset.0.options] 18 | 19 | custom_template/debug="" 20 | custom_template/release="" 21 | architectures/arm64=true 22 | application/app_store_team_id="brentely" 23 | application/code_sign_identity_debug="" 24 | application/export_method_debug=1 25 | application/code_sign_identity_release="" 26 | application/export_method_release=0 27 | application/targeted_device_family=2 28 | application/bundle_identifier="com.github.brentely" 29 | application/signature="" 30 | application/short_version="" 31 | application/version="" 32 | application/icon_interpolation=4 33 | application/launch_screens_interpolation=4 34 | application/export_project_only=false 35 | capabilities/access_wifi=false 36 | capabilities/push_notifications=false 37 | user_data/accessible_from_files_app=false 38 | user_data/accessible_from_itunes_sharing=false 39 | privacy/camera_usage_description="" 40 | privacy/camera_usage_description_localized={} 41 | privacy/microphone_usage_description="" 42 | privacy/microphone_usage_description_localized={} 43 | privacy/photolibrary_usage_description="" 44 | privacy/photolibrary_usage_description_localized={} 45 | icons/iphone_120x120="" 46 | icons/iphone_180x180="" 47 | icons/ipad_76x76="" 48 | icons/ipad_152x152="" 49 | icons/ipad_167x167="" 50 | icons/app_store_1024x1024="res://assets/bkgd/Background.png" 51 | icons/spotlight_40x40="" 52 | icons/spotlight_80x80="" 53 | icons/settings_58x58="" 54 | icons/settings_87x87="" 55 | icons/notification_40x40="" 56 | icons/notification_60x60="" 57 | storyboard/use_launch_screen_storyboard=false 58 | storyboard/image_scale_mode=0 59 | storyboard/custom_image@2x="" 60 | storyboard/custom_image@3x="" 61 | storyboard/use_custom_bg_color=false 62 | storyboard/custom_bg_color=Color(0, 0, 0, 1) 63 | landscape_launch_screens/iphone_2436x1125="" 64 | landscape_launch_screens/iphone_2208x1242="" 65 | landscape_launch_screens/ipad_1024x768="" 66 | landscape_launch_screens/ipad_2048x1536="" 67 | portrait_launch_screens/iphone_640x960="" 68 | portrait_launch_screens/iphone_640x1136="" 69 | portrait_launch_screens/iphone_750x1334="" 70 | portrait_launch_screens/iphone_1125x2436="" 71 | portrait_launch_screens/ipad_768x1024="" 72 | portrait_launch_screens/ipad_1536x2048="" 73 | portrait_launch_screens/iphone_1242x2208="" 74 | -------------------------------------------------------------------------------- /game_boards/all_common/cmn_gem_cell.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | class_name CommonGemCell 3 | # VARS 4 | @onready var sprite:Sprite2D = $Sprite2D 5 | @onready var anim_player_fx:AnimationPlayer = $AnimPlayerFx 6 | @onready var anim_sprite_explode:AnimatedSprite2D = $AnimSpriteExplode 7 | @onready var anim_burst_1:AnimatedSprite2D = $AnimatedBurst1 8 | @onready var anim_burst_3:AnimatedSprite2D = $AnimatedBurst3 9 | @onready var debug_label_sel_num:Label = $DebugLabelSelNum 10 | @onready var debug_ui_panel:Panel = $DebugUIPanel 11 | @onready var audio_gem_explode:AudioStreamPlayer = $AudioGemExplode 12 | @onready var audio_gem_move:AudioStreamPlayer = $AudioGemMove 13 | @onready var label_points:Label = $LabelPoints 14 | @onready var highlight_rect:ColorRect = $Highlight 15 | # PROPS 16 | const SPRITE_SCALE:Vector2 = Vector2(0.5, 0.5) 17 | const DROP_OFFSET:int = 128 # (the sprite is centered in the 128x128 container, and uses a 64,64 position) 18 | var gem_color:Enums.GemColor 19 | var gem_dict:Enums.GemDict 20 | # Declare and preload textures 21 | const gem_textures_food: Dictionary = { 22 | Enums.GemColor.RED: preload("res://assets/gems/food/characters_0001.png"), 23 | Enums.GemColor.ORG: preload("res://assets/gems/food/characters_0002.png"), 24 | Enums.GemColor.YLW: preload("res://assets/gems/food/characters_0003.png"), 25 | Enums.GemColor.GRN: preload("res://assets/gems/food/characters_0005.png"), 26 | Enums.GemColor.BLU: preload("res://assets/gems/food/characters_0007.png"), 27 | Enums.GemColor.PRP: preload("res://assets/gems/food/characters_0006.png") 28 | } 29 | const gem_textures_gems: Dictionary = { 30 | Enums.GemColor.RED: preload("res://assets/gems/gems/gem1.png"), 31 | Enums.GemColor.ORG: preload("res://assets/gems/gems/gem2.png"), 32 | Enums.GemColor.YLW: preload("res://assets/gems/gems/gem3.png"), 33 | Enums.GemColor.GRN: preload("res://assets/gems/gems/gem4.png"), 34 | Enums.GemColor.BLU: preload("res://assets/gems/gems/gem5.png"), 35 | Enums.GemColor.PRP: preload("res://assets/gems/gems/gem6.png") 36 | } 37 | const gem_textures_space: Dictionary = { 38 | Enums.GemColor.RED: preload("res://assets/gems/space/Space_R.png"), 39 | Enums.GemColor.ORG: preload("res://assets/gems/space/Space_Z.png"), 40 | Enums.GemColor.YLW: preload("res://assets/gems/space/Space_Y.png"), 41 | Enums.GemColor.GRN: preload("res://assets/gems/space/Space_G.png"), 42 | Enums.GemColor.BLU: preload("res://assets/gems/space/Space_B.png"), 43 | Enums.GemColor.PRP: preload("res://assets/gems/space/Space_P.png") 44 | } 45 | const gem_textures_spacefun: Dictionary = { 46 | Enums.GemColor.RED: preload("res://assets/gems/gems2/gem_z.png"), 47 | Enums.GemColor.ORG: preload("res://assets/gems/gems2/gem_o.png"), 48 | Enums.GemColor.YLW: preload("res://assets/gems/gems2/gem_x.png"), 49 | Enums.GemColor.GRN: preload("res://assets/gems/gems2/gem_g.png"), 50 | Enums.GemColor.BLU: preload("res://assets/gems/gems2/gem_b.png"), 51 | Enums.GemColor.PRP: preload("res://assets/gems/gems2/gem_p.png") 52 | } 53 | const gem_textures_space1: Dictionary = { 54 | Enums.GemColor.RED: preload("res://assets/gems/space-fun/gem-space-fun-r.png"), 55 | Enums.GemColor.ORG: preload("res://assets/gems/space-fun/gem-space-fun-o.png"), 56 | Enums.GemColor.YLW: preload("res://assets/gems/space-fun/gem-space-fun-y.png"), 57 | Enums.GemColor.GRN: preload("res://assets/gems/space-fun/gem-space-fun-g.png"), 58 | Enums.GemColor.BLU: preload("res://assets/gems/space-fun/gem-space-fun-b.png"), 59 | Enums.GemColor.PRP: preload("res://assets/gems/space-fun/gem-space-fun-p.png") 60 | } 61 | var gem_textures:Dictionary = gem_textures_food 62 | 63 | func initialize(colorIn: Enums.GemColor, dictIn:Enums.GemDict): 64 | # A: 65 | gem_color = colorIn 66 | gem_dict = dictIn 67 | # B: 68 | if dictIn == Enums.GemDict.FOOD: 69 | gem_textures = gem_textures_food 70 | elif dictIn == Enums.GemDict.GEMS: 71 | gem_textures = gem_textures_gems 72 | elif dictIn == Enums.GemDict.SPACE: 73 | gem_textures = gem_textures_space 74 | else: 75 | print("ERROR: Unknown `GemDict`!") 76 | # C: 77 | update_texture() 78 | # D: 79 | #panel_hover.visible = false 80 | 81 | func explode_gem(colorIn: Enums.GemColor, pointsIn:int): 82 | # A: set color immediately so code in `GameBoard.gd` canstart checking this cell's color 83 | gem_color = colorIn 84 | # B: 85 | play_selected_anim(false) 86 | play_anim_explode(pointsIn) 87 | 88 | func replace_gem(colorIn: Enums.GemColor, rows_to_drop: int = 1): 89 | #print("[replace_gem]: colorIn=", colorIn, " rows_to_drop=", rows_to_drop) 90 | 91 | # Calculate the beginning position based on how many rows the gem needs to drop 92 | var drop_height = DROP_OFFSET * rows_to_drop 93 | # DEBUG!!! vfvvvvvvvv 94 | debug_ui_panel.get_child(0).get_child(0).text = "drop-ROWS" 95 | debug_ui_panel.get_child(0).get_child(1).text = str(rows_to_drop) 96 | debug_ui_panel.get_child(0).get_child(2).text = "drop-H" 97 | debug_ui_panel.get_child(0).get_child(3).text = str(round(drop_height)) 98 | # DEBUG!!! ^^ 99 | 100 | var beg_pos = Vector2(sprite.position.x, sprite.position.y - drop_height) 101 | sprite.position = beg_pos 102 | sprite.visible = true 103 | 104 | # Initialize the gem with the new color and ensure it's visible 105 | initialize(colorIn, gem_dict) 106 | sprite.visible = true # Make sure the sprite is visible if it was hidden after explosion 107 | 108 | # Call the drop animation deferred to ensure it starts after other logic 109 | call_deferred("drop_in_gem") 110 | 111 | func drop_in_gem(): 112 | var tween = get_tree().create_tween() 113 | # DESIGN: final position should *always* be its default [relative] position 114 | tween.tween_property(sprite, "position", Enums.SRPITE_POS, Enums.TWEEN_TIME) 115 | 116 | func update_texture(): 117 | if gem_color in gem_textures: 118 | sprite.texture = gem_textures[gem_color] 119 | #print("[gem_cell] loaded sprite.texture: ", gem_color) 120 | else: 121 | print("ERROR: Texture for gem color not found!") 122 | print("gem_textures: ", gem_textures) 123 | 124 | # ========================================================= 125 | 126 | func highlight(): 127 | anim_player_fx.play("highlight") 128 | 129 | func unhighlight(): 130 | print("UNNNNNN") 131 | anim_player_fx.stop() 132 | highlight_rect.color = Color('ffffff00') 133 | 134 | func play_audio_gem_move(): 135 | audio_gem_move.play() 136 | 137 | func play_selected_anim(selected:bool): 138 | if selected: 139 | anim_player_fx.play("selected") 140 | else: 141 | anim_player_fx.stop() 142 | sprite.scale = SPRITE_SCALE 143 | label_points.visible = false 144 | 145 | # @desc: both AnimPlayer & AnimExplode are 1-sec 146 | func play_anim_explode(points:int): 147 | # A: sound effect 148 | audio_gem_explode.play() 149 | 150 | # B: explode effect (scale down to zero) 151 | # IMPORTANT: use play/stop or scale wont reset! 152 | anim_player_fx.play("explode") 153 | sprite.visible = false 154 | 155 | # C: show points 156 | label_points.text = "+"+str(points) 157 | if points > 0: 158 | anim_player_fx.play("new_points") 159 | 160 | # D: explode animation (exploding sprite) 161 | anim_sprite_explode.visible = true 162 | anim_sprite_explode.play("default") 163 | anim_burst_3.visible = true 164 | anim_burst_3.play("default") 165 | anim_burst_1.visible = true 166 | anim_burst_1.play("default") 167 | await get_tree().create_timer(Enums.EXPLODE_DELAY).timeout 168 | 169 | # LAST: reset anim-player effects (after await above) 170 | anim_sprite_explode.visible = false 171 | anim_burst_3.visible = false 172 | anim_burst_1.visible = false 173 | anim_player_fx.stop() 174 | label_points.visible = false # anim_player_fx stop/reset above unhides it 175 | 176 | # ========================================================= 177 | 178 | func debug_show_selnum(num:int): 179 | if not num or num == 0: 180 | debug_label_sel_num.visible = false 181 | debug_label_sel_num.text = "-" 182 | else: 183 | debug_label_sel_num.visible = true 184 | debug_label_sel_num.text = str(num) 185 | 186 | func debug_show_debug_panel(isShow:bool): 187 | debug_ui_panel.visible = isShow 188 | if not isShow: 189 | debug_ui_panel.get_child(0).get_child(0).text = "." 190 | debug_ui_panel.get_child(0).get_child(1).text = "." 191 | debug_ui_panel.get_child(0).get_child(2).text = "." 192 | debug_ui_panel.get_child(0).get_child(3).text = "." 193 | -------------------------------------------------------------------------------- /game_boards/all_common/cmn_gem_cell.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c3yfaqrt07jvl 2 | -------------------------------------------------------------------------------- /game_boards/all_common/cmn_gem_control.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | class_name CommonGemControl 3 | # SIGNALS 4 | signal cell_click(gem_cell) 5 | #signal drag_start(gem_cell, mouse_position) 6 | #signal drag_in_prog(gem_cell) 7 | signal drag_ended(gem_cell) 8 | 9 | func _gui_input(event): 10 | if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: 11 | if event.pressed: 12 | emit_signal("cell_click", get_parent()) 13 | #emit_signal("drag_start", get_parent(), get_global_mouse_position()) 14 | else: 15 | emit_signal("drag_ended", get_parent()) 16 | elif event is InputEventMouseMotion: 17 | #emit_signal("drag_in_prog", get_parent(), event.global_position) 18 | #print("TODO: drag") 19 | pass 20 | -------------------------------------------------------------------------------- /game_boards/all_common/cmn_gem_control.gd.uid: -------------------------------------------------------------------------------- 1 | uid://y8i04ir8cbd2 2 | -------------------------------------------------------------------------------- /game_boards/all_common/common.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | class_name Common 3 | # 4 | const GEM_COLOR_NAMES = [Enums.GemColor.RED, Enums.GemColor.ORG, Enums.GemColor.YLW, Enums.GemColor.GRN, Enums.GemColor.BLU, Enums.GemColor.PRP] 5 | const GEM_POINTS:int = 25 6 | # 7 | var highlight_gem1: CommonGemCell = null 8 | var highlight_gem2: CommonGemCell = null 9 | 10 | # ========================================================= 11 | 12 | func fill_grid(hbox:HBoxContainer, grid:GridContainer, square0:String, square1:String): 13 | var size = hbox.get_child_count() 14 | for i in range(size): 15 | for j in range(size): 16 | # Load the appropriate scene based on the checkerboard pattern 17 | var brdsq_scene_path = square0 # Light square 18 | if (i + j) % 2 == 0: 19 | brdsq_scene_path = square1 # Dark square 20 | 21 | # Load and instantiate the scene 22 | var brdsq_scene = load(brdsq_scene_path) 23 | var brdsq = brdsq_scene.instantiate() 24 | 25 | # Add the instantiated square to the grid container 26 | grid.add_child(brdsq) 27 | 28 | func fill_hbox(hbox:HBoxContainer, gem_dict:Enums.GemDict, on_cell_click): 29 | for col_idx in range(hbox.get_child_count()): 30 | for row_idx in range(8): 31 | # A: random gem 32 | var gem_type = GEM_COLOR_NAMES[randi() % GEM_COLOR_NAMES.size()] 33 | # B: create/add 34 | var gem_cell_scene = load("res://game_boards/all_common/cmn_gem_cell.tscn") 35 | var gem_cell:CommonGemCell = gem_cell_scene.instantiate() 36 | hbox.get_child(col_idx).add_child(gem_cell) 37 | gem_cell.initialize(gem_type, gem_dict) 38 | var control_node = gem_cell.get_node("GemControl") 39 | control_node.connect("cell_click", on_cell_click) 40 | #control_node.connect("drag_start", self._on_cell_click) # TODO: 41 | #control_node.connect("drag_ended", self._on_cell_click) # TODO: 42 | 43 | # ========================================================= 44 | 45 | # NEW 46 | 47 | func find_first_possible_swap(hbox:HBoxContainer) -> Array: 48 | var num_columns: int = hbox.get_child_count() 49 | var num_rows: int = hbox.get_child(0).get_child_count() 50 | # Create a 2D array to represent the board 51 | var board = [] 52 | for x in range(num_columns): 53 | var column = [] 54 | for y in range(num_rows): 55 | column.append(hbox.get_child(x).get_child(y)) 56 | board.append(column) 57 | # Try swapping each gem with its neighbors and check for matches 58 | var swaps = [[0, 1], [1, 0]] # Only right and down to avoid duplicate checks 59 | for x in range(num_columns): 60 | for y in range(num_rows): 61 | for swap in swaps: 62 | var dx = swap[0] 63 | var dy = swap[1] 64 | var nx = x + dx 65 | var ny = y + dy 66 | if nx < num_columns and ny < num_rows: 67 | # Swap using a temporary variable 68 | var temp = board[x][y] 69 | board[x][y] = board[nx][ny] 70 | board[nx][ny] = temp 71 | # Check for a match 72 | if has_match_at(x, y, board) or has_match_at(nx, ny, board): 73 | # Swap back 74 | temp = board[x][y] 75 | board[x][y] = board[nx][ny] 76 | board[nx][ny] = temp 77 | # Return the coordinates of the first valid swap 78 | return [board[x][y], board[nx][ny]] 79 | # Swap back 80 | temp = board[x][y] 81 | board[x][y] = board[nx][ny] 82 | board[nx][ny] = temp 83 | return [] # No moves possible 84 | 85 | func highlight_first_swap(hbox:HBoxContainer) -> void: 86 | var swap = find_first_possible_swap(hbox) 87 | if swap.size() == 2: 88 | highlight_gem1 = swap[0] 89 | highlight_gem2 = swap[1] 90 | highlight_gem1.highlight() 91 | highlight_gem2.highlight() 92 | 93 | func has_match_at(x, y, board): 94 | var color = board[x][y].gem_color 95 | 96 | # Check horizontal matches 97 | var count = 1 98 | # Check left 99 | var i = x - 1 100 | while i >= 0 and board[i][y].gem_color == color: 101 | count += 1 102 | i -= 1 103 | # Check right 104 | i = x + 1 105 | while i < board.size() and board[i][y].gem_color == color: 106 | count += 1 107 | i += 1 108 | if count >= 3: 109 | return true 110 | 111 | # Check vertical matches 112 | count = 1 113 | # Check up 114 | var j = y - 1 115 | while j >= 0 and board[x][j].gem_color == color: 116 | count += 1 117 | j -= 1 118 | # Check down 119 | j = y + 1 120 | while j < board[x].size() and board[x][j].gem_color == color: 121 | count += 1 122 | j += 1 123 | if count >= 3: 124 | return true 125 | 126 | return false 127 | 128 | func check_for_possible_moves(hbox:HBoxContainer) -> bool: 129 | if find_first_possible_swap(hbox).size() > 0: 130 | return true 131 | return false 132 | 133 | # UTILS 134 | 135 | func get_all_matches(hbox:HBoxContainer) -> Array: 136 | var num_columns: int = hbox.get_child_count() 137 | var num_rows: int = hbox.get_child(0).get_child_count() 138 | var matches = [] 139 | 140 | # Horizontal Check (check each row) 141 | for row in range(num_rows): 142 | var last_color = null 143 | var streak = 0 144 | var match_start = 0 145 | for column in range(num_columns): 146 | var gem_cell = hbox.get_child(column).get_child(row) as CommonGemCell 147 | if gem_cell.gem_color == last_color: 148 | streak += 1 149 | else: 150 | if streak >= 3: 151 | var match_cells = [] 152 | for i in range(match_start, column): 153 | match_cells.append(hbox.get_child(i).get_child(row)) 154 | matches.append({ 155 | "cells": match_cells, 156 | "count": streak 157 | }) 158 | streak = 1 159 | match_start = column 160 | last_color = gem_cell.gem_color 161 | if streak >= 3: 162 | var match_cells = [] 163 | for i in range(match_start, num_columns): 164 | match_cells.append(hbox.get_child(i).get_child(row)) 165 | matches.append({ 166 | "cells": match_cells, 167 | "count": streak 168 | }) 169 | 170 | # Vertical Check (check each column) 171 | for column in range(num_columns): 172 | var last_color = null 173 | var streak = 0 174 | var match_start = 0 175 | for row in range(num_rows): 176 | var gem_cell = hbox.get_child(column).get_child(row) as CommonGemCell 177 | if gem_cell.gem_color == last_color: 178 | streak += 1 179 | else: 180 | if streak >= 3: 181 | var match_cells = [] 182 | for i in range(match_start, row): 183 | match_cells.append(hbox.get_child(column).get_child(i)) 184 | matches.append({ 185 | "cells": match_cells, 186 | "count": streak 187 | }) 188 | streak = 1 189 | match_start = row 190 | last_color = gem_cell.gem_color 191 | if streak >= 3: 192 | var match_cells = [] 193 | for i in range(match_start, num_rows): 194 | match_cells.append(hbox.get_child(column).get_child(i)) 195 | matches.append({ 196 | "cells": match_cells, 197 | "count": streak 198 | }) 199 | 200 | return matches 201 | 202 | func extract_gem_cells_from_matches(matches: Array) -> Array: 203 | var all_gem_cells = [] 204 | for match in matches: 205 | # `match["cells"]` is the array of gem cells for this particular match 206 | all_gem_cells += match["cells"] # Append all cells in this match to the master list 207 | return all_gem_cells 208 | 209 | func find_gem_indices(gem_cell:CommonGemCell) -> Dictionary: 210 | var parent_vbox = gem_cell.get_parent() # Assuming direct parent is a VBoxContainer 211 | var hbox = parent_vbox.get_parent() # Assuming direct parent of VBox is the HBoxContainer 212 | 213 | var vbox_index = -1 214 | var gem_index = -1 215 | 216 | # Get the index of the VBoxContainer in the HBoxContainer 217 | for i in range(hbox.get_child_count()): 218 | if hbox.get_child(i) == parent_vbox: 219 | vbox_index = i 220 | break 221 | 222 | # Get the index of the GemCell in the VBoxContainer 223 | for j in range(parent_vbox.get_child_count()): 224 | if parent_vbox.get_child(j) == gem_cell: 225 | gem_index = j 226 | break 227 | 228 | return {"column": vbox_index, "row": gem_index} 229 | 230 | func are_cells_adjacent(gemcell1:CommonGemCell, gemcell2:CommonGemCell) -> bool: 231 | var cell1 = find_gem_indices(gemcell1) 232 | var cell2 = find_gem_indices(gemcell2) 233 | var col1 = cell1.column 234 | var row1 = cell1.row 235 | var col2 = cell2.column 236 | var row2 = cell2.row 237 | 238 | # Check if cells are in the same row and adjacent columns 239 | if row1 == row2 and abs(col1 - col2) == 1: 240 | return true 241 | 242 | # Check if cells are in the same column and adjacent rows 243 | if col1 == col2 and abs(row1 - row2) == 1: 244 | return true 245 | 246 | # Cells are not adjacent 247 | return false 248 | 249 | # ========================================================= 250 | 251 | func calculate_score_for_matches(matches: Array) -> int: 252 | var score = 0 253 | for match in matches: 254 | var match_length = match["count"] 255 | # Define scoring logic, e.g., exponential growth for larger matches 256 | var match_score = match_length * match_length # Example: score grows quadratically with match length 257 | score += match_score * GEM_POINTS 258 | return score 259 | 260 | func calculate_scores_for_each_match(matches: Array) -> Dictionary: 261 | var scores = {} 262 | for match in matches: 263 | var count = match["count"] 264 | var score = count * GEM_POINTS 265 | for cell in match["cells"]: 266 | scores[cell] = score 267 | return scores 268 | 269 | # ========================================================= 270 | 271 | func new_game_explode_replace(hbox:HBoxContainer, colors:Array, delay:float): 272 | # A: 273 | for vbox in hbox.get_children(): 274 | for gem_cell in vbox.get_children(): 275 | gem_cell.explode_gem(gem_cell.gem_color, 0) 276 | # B: 277 | await delay_time(hbox, delay) 278 | # C: 279 | for vbox in hbox.get_children(): 280 | for gem_cell in vbox.get_children(): 281 | gem_cell.replace_gem(colors[randi() % colors.size()], 1) 282 | 283 | func delay_time(node: Node, time_sec: float) -> void: 284 | var tnode = node.get_parent() 285 | var timer = Timer.new() 286 | timer.wait_time = time_sec 287 | timer.one_shot = true 288 | tnode.add_child(timer) 289 | timer.start() 290 | await timer.timeout 291 | tnode.remove_child(timer) 292 | timer.queue_free() 293 | -------------------------------------------------------------------------------- /game_boards/all_common/common.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ctdsp5i8tkcyv 2 | -------------------------------------------------------------------------------- /game_boards/all_common/common_debug.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | class_name CommonDebug 3 | 4 | var CmnFunc = preload("res://game_boards/all_common/common.gd").new() 5 | 6 | func debug_print_column_ascii(column: VBoxContainer, column_index: int): 7 | var output = "" 8 | for i in range(column.get_child_count() - 1, -1, -1): # Print from top to bottom 9 | var gem_cell = column.get_child(i) as CommonGemCell 10 | if gem_cell != null: 11 | output += "[ " + Enums.get_color_name_by_value(gem_cell.gem_color).substr(0,1) + " ]" # Append each gem's color to the output string 12 | else: 13 | output += "[ ]" # Append empty brackets for null or missing gems 14 | print("Column ", column_index, " state: ", output) 15 | 16 | func debug_print_ascii_table(hbox:HBoxContainer, affected_cells: Array): 17 | var num_columns: int = hbox.get_child_count() 18 | var num_rows: int = hbox.get_child(0).get_child_count() # Assuming all columns have the same number of rows 19 | 20 | # Prepare a grid for ASCII output 21 | var grid = [] 22 | for i in range(num_rows): 23 | var row = [] 24 | for j in range(num_columns): 25 | row.append(" ") # Add a space to the row for each column 26 | grid.append(row) # Add the completed row to the grid 27 | 28 | # Mark the affected cells 29 | for cell in affected_cells: 30 | var indices = CmnFunc.find_gem_indices(cell) 31 | if indices["column"] != -1 and indices["row"] != -1: 32 | grid[indices["row"]][indices["column"]] = Enums.get_color_name_by_value(cell.gem_color).substr(0,1) 33 | 34 | # Print the ASCII grid 35 | # Header for column indices 36 | var header = "| | " # Start with space for row index column 37 | for i in range(num_columns): 38 | header += str(i) + " | " 39 | 40 | # Divider 41 | var divider = "|" 42 | for i in range(num_columns + 1): # +1 for the row index column 43 | divider += "---|" 44 | 45 | print(header) 46 | print(divider) 47 | 48 | # Print each row with row index and leading/trailing vertical bars 49 | for i in range(num_rows): 50 | var row_output = "| " + str(i) + " | " + " | ".join(grid[i]) + " |" 51 | print(row_output) 52 | 53 | # Closing divider 54 | print(divider) 55 | 56 | func debug_clear_debug_labels(hbox:HBoxContainer): 57 | for vbox in hbox.get_children(): 58 | for gem_cell in vbox.get_children(): 59 | gem_cell.debug_show_debug_panel(false) 60 | gem_cell.get_child(1).visible = true 61 | gem_cell.get_child(1).position = Enums.SRPITE_POS 62 | #var debug_name = Enums.get_color_name_by_value(gem_cell.gem_color).substr(0,1) 63 | #var debug_str = "[debug_clear_debug_labels] ["+debug_name+"] " + str(gem_cell.get_child(1).visible) 64 | #Enums.debug_print(debug_str, Enums.DEBUG_LEVEL.DEBUG) 65 | 66 | func debug_make_match_col(hbox:HBoxContainer, gemDict:Enums.GemDict): 67 | var col0:VBoxContainer = hbox.get_child(0) 68 | var col0_child4:CommonGemCell = col0.get_child(4) 69 | col0_child4.initialize(Enums.GemColor.PRP, gemDict) 70 | var col0_child5:CommonGemCell = col0.get_child(5) 71 | col0_child5.initialize(Enums.GemColor.PRP, gemDict) 72 | var col0_child6:CommonGemCell = col0.get_child(6) 73 | col0_child6.initialize(Enums.GemColor.PRP, gemDict) 74 | var col0_child7:CommonGemCell = col0.get_child(7) 75 | col0_child7.initialize(Enums.GemColor.PRP, gemDict) 76 | 77 | func debug_make_gem_grid(hbox:HBoxContainer, gemDict:Enums.GemDict): 78 | var size = hbox.get_child_count() 79 | for i in range(size): 80 | var vbox = hbox.get_child(i) 81 | for j in range(size): 82 | var gem = vbox.get_child(j) 83 | # Load the appropriate scene based on the checkerboard pattern 84 | gem.initialize(Enums.GemColor.PRP, gemDict) 85 | if (i + j) % 2 == 0: 86 | gem.initialize(Enums.GemColor.YLW, gemDict) 87 | gem.get_child(1).position = Enums.SRPITE_POS 88 | -------------------------------------------------------------------------------- /game_boards/all_common/common_debug.gd.uid: -------------------------------------------------------------------------------- 1 | uid://xkgshlmwk3ap 2 | -------------------------------------------------------------------------------- /game_boards/all_common/gem_cell.gdshader: -------------------------------------------------------------------------------- 1 | shader_type canvas_item; 2 | 3 | uniform vec4 line_color : source_color = vec4(1); 4 | uniform float line_thickness : hint_range(0, 10) = 7.0; 5 | 6 | void fragment() { 7 | vec2 size = TEXTURE_PIXEL_SIZE * line_thickness; 8 | 9 | float outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a; 10 | outline += texture(TEXTURE, UV + vec2(0, size.y)).a; 11 | 12 | outline += texture(TEXTURE, UV + vec2(size.x, 0)).a; 13 | 14 | outline += texture(TEXTURE, UV + vec2(0, -size.y)).a; 15 | 16 | outline += texture(TEXTURE, UV + vec2(-size.x, size.y)).a; 17 | 18 | outline += texture(TEXTURE, UV + vec2(-size.x, size.y * 0.5)).a; 19 | 20 | 21 | 22 | outline += texture(TEXTURE, UV + vec2(size.x, size.y)).a; 23 | outline += texture(TEXTURE, UV + vec2(size.x, size.y * 0.5)).a; 24 | 25 | 26 | outline += texture(TEXTURE, UV + vec2(-size.x, -size.y)).a; 27 | outline += texture(TEXTURE, UV + vec2(-size.x, -size.y * 0.5)).a; 28 | 29 | 30 | 31 | outline += texture(TEXTURE, UV + vec2(size.x, -size.y)).a; 32 | outline += texture(TEXTURE, UV + vec2(size.x, -size.y * 0.5)).a; 33 | 34 | 35 | outline = min(outline, 1.0); 36 | 37 | 38 | vec4 color = texture(TEXTURE, UV); 39 | COLOR = mix(color, line_color, outline - color.a); 40 | } -------------------------------------------------------------------------------- /game_boards/all_common/gem_cell.gdshader.uid: -------------------------------------------------------------------------------- 1 | uid://d4imir4ck82gq 2 | -------------------------------------------------------------------------------- /game_boards/board_food/assets/animated_cloud.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://d0yw6oyw3qib0"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://cnlqirgwr8d4" path="res://assets/bkgd/Background.png" id="1_p4wo5"] 4 | [ext_resource type="Texture2D" uid="uid://cfdjrsigqjjjk" path="res://assets/bkgd/Cloud_2.png" id="2_vo0va"] 5 | 6 | [sub_resource type="Animation" id="Animation_0x8pj"] 7 | resource_name = "move_cloud" 8 | length = 30.0 9 | loop_mode = 2 10 | tracks/0/type = "value" 11 | tracks/0/imported = false 12 | tracks/0/enabled = true 13 | tracks/0/path = NodePath("Sprite2D:position") 14 | tracks/0/interp = 1 15 | tracks/0/loop_wrap = true 16 | tracks/0/keys = { 17 | "times": PackedFloat32Array(0, 30), 18 | "transitions": PackedFloat32Array(1, 1), 19 | "update": 0, 20 | "values": [Vector2(64, 75), Vector2(1936, 75)] 21 | } 22 | 23 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_5m8mq"] 24 | _data = { 25 | &"move_cloud": SubResource("Animation_0x8pj") 26 | } 27 | 28 | [node name="AnimatedCloud" type="Node2D"] 29 | 30 | [node name="Debug-Background" type="TextureRect" parent="."] 31 | visible = false 32 | offset_right = 2000.0 33 | offset_bottom = 1390.0 34 | texture = ExtResource("1_p4wo5") 35 | expand_mode = 2 36 | 37 | [node name="Debug-Panel" type="Panel" parent="."] 38 | visible = false 39 | anchors_preset = 10 40 | anchor_right = 1.0 41 | offset_right = 2000.0 42 | offset_bottom = 150.0 43 | grow_horizontal = 2 44 | 45 | [node name="Sprite2D" type="Sprite2D" parent="."] 46 | position = Vector2(64, 75) 47 | texture = ExtResource("2_vo0va") 48 | 49 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 50 | libraries = { 51 | "": SubResource("AnimationLibrary_5m8mq") 52 | } 53 | autoplay = "move_cloud" 54 | -------------------------------------------------------------------------------- /game_boards/board_food/assets/board_square_0.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bh2knk60qbton"] 2 | 3 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mk81d"] 4 | bg_color = Color(0, 0, 0, 0.2) 5 | 6 | [node name="BoardSquare0" type="Control"] 7 | custom_minimum_size = Vector2(128, 128) 8 | layout_mode = 3 9 | anchors_preset = 0 10 | offset_right = 64.0 11 | offset_bottom = 64.0 12 | 13 | [node name="Panel" type="Panel" parent="."] 14 | layout_mode = 1 15 | anchors_preset = 15 16 | anchor_right = 1.0 17 | anchor_bottom = 1.0 18 | grow_horizontal = 2 19 | grow_vertical = 2 20 | theme_override_styles/panel = SubResource("StyleBoxFlat_mk81d") 21 | -------------------------------------------------------------------------------- /game_boards/board_food/assets/board_square_1.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://cry3vnlah6fkx"] 2 | 3 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xixw6"] 4 | bg_color = Color(1, 1, 1, 0.188235) 5 | 6 | [node name="BoardSquare1" type="Control"] 7 | custom_minimum_size = Vector2(128, 128) 8 | layout_mode = 3 9 | anchors_preset = 0 10 | offset_right = 64.0 11 | offset_bottom = 64.0 12 | 13 | [node name="Panel" type="Panel" parent="."] 14 | visible = false 15 | layout_mode = 1 16 | anchors_preset = 15 17 | anchor_right = 1.0 18 | anchor_bottom = 1.0 19 | grow_horizontal = 2 20 | grow_vertical = 2 21 | theme_override_styles/panel = SubResource("StyleBoxFlat_xixw6") 22 | -------------------------------------------------------------------------------- /game_boards/board_food/board_food.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | class_name GameBoard 3 | # SIGNALS 4 | signal props_updated_moves(moves:int) 5 | signal props_updated_score(score:int) 6 | signal props_updated_gemsdict(gems_dict:Dictionary) 7 | signal board_match_multi(match_cnt:int) 8 | # SCENES 9 | @onready var grid_container:GridContainer = $GridContainer 10 | @onready var hbox_container:HBoxContainer = $HBoxContainer 11 | #VARS 12 | var CmnFunc = preload("res://game_boards/all_common/common.gd").new() 13 | var CmnDbg = preload("res://game_boards/all_common/common_debug.gd").new() 14 | const GEM_COLOR_NAMES = [Enums.GemColor.RED, Enums.GemColor.ORG, Enums.GemColor.YLW, Enums.GemColor.GRN, Enums.GemColor.BLU, Enums.GemColor.PRP] 15 | const GEM_POINTS:int = 25 16 | var selected_cell_1:CommonGemCell = null 17 | var selected_cell_2:CommonGemCell = null 18 | var undo_cell_1:CommonGemCell = null 19 | var undo_cell_2:CommonGemCell = null 20 | var tweens_running_cnt:int = 0 21 | var board_props_moves:int = 0 22 | var board_props_score:int = 0 23 | 24 | # Called when the node enters the scene tree for the first time. 25 | func _ready(): 26 | # godot setup 27 | randomize() 28 | # A: populate board 29 | const brd_sq0 = "res://game_boards/board_food/assets/board_square_0.tscn" 30 | const brd_sq1 = "res://game_boards/board_food/assets/board_square_1.tscn" 31 | CmnFunc.fill_grid(hbox_container, grid_container, brd_sq0, brd_sq1) 32 | CmnFunc.fill_hbox(hbox_container, Enums.GemDict.FOOD, self._on_cell_click) 33 | # B: check board after init 34 | process_game_round() 35 | 36 | func new_game(): 37 | Enums.debug_print("Starting new game, resetting board.", Enums.DEBUG_LEVEL.INFO) 38 | # A: 39 | board_props_moves = 0 40 | board_props_score = 0 41 | emit_signal("props_updated_score", board_props_score) 42 | emit_signal("props_updated_moves", board_props_moves) 43 | # B: 44 | CmnFunc.new_game_explode_replace(hbox_container, GEM_COLOR_NAMES, Enums.EXPLODE_DELAY) 45 | # C: 46 | process_game_round() 47 | 48 | # ========================================================= 49 | 50 | # STEP 1: Handle input (=capture first & second selection), swap gems 51 | # @desc: calls `swap_gem_cells()` when 2 cells selected and are adjacent 52 | 53 | func _on_cell_click(gem_cell:CommonGemCell): 54 | Enums.debug_print("[_on_cell_click] gem_cell.......: "+JSON.stringify(CmnFunc.find_gem_indices(gem_cell)), Enums.DEBUG_LEVEL.INFO) 55 | Enums.debug_print("[_on_cell_click] ---------------------------------------------", Enums.DEBUG_LEVEL.INFO) 56 | 57 | # Clear first, we'll set later 58 | if selected_cell_1: 59 | selected_cell_1.play_selected_anim(false) 60 | if selected_cell_2: 61 | selected_cell_2.play_selected_anim(false) 62 | 63 | # STEP 1: Select CommonGemCell logic 64 | if not selected_cell_1: 65 | selected_cell_1 = gem_cell 66 | elif selected_cell_1 != gem_cell: 67 | if CmnFunc.are_cells_adjacent(selected_cell_1, gem_cell): 68 | selected_cell_2 = gem_cell 69 | else: 70 | selected_cell_1 = gem_cell 71 | selected_cell_2 = null 72 | 73 | # DEBUG 74 | if selected_cell_1: 75 | Enums.debug_print("[_on_cell_click] selected_cell_1: " + JSON.stringify(CmnFunc.find_gem_indices(selected_cell_1)), Enums.DEBUG_LEVEL.INFO) 76 | if Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 77 | selected_cell_1.debug_show_selnum(1) 78 | if selected_cell_2: 79 | Enums.debug_print("[_on_cell_click] selected_cell_2: " + JSON.stringify(CmnFunc.find_gem_indices(selected_cell_2)), Enums.DEBUG_LEVEL.INFO) 80 | if Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 81 | selected_cell_2.debug_show_selnum(2) 82 | 83 | # STEP 2: effect 84 | if selected_cell_1: 85 | selected_cell_1.play_selected_anim(true) 86 | 87 | # STEP 3: swap cells if adjacent 88 | if selected_cell_1 and selected_cell_2 and CmnFunc.are_cells_adjacent(selected_cell_1, selected_cell_2): 89 | undo_cell_1 = selected_cell_1 90 | undo_cell_2 = selected_cell_2 91 | swap_gem_cells(selected_cell_1, selected_cell_2) 92 | 93 | # STEP 2: Swap gems: capture current gems, move scenes via tween 94 | 95 | func swap_gem_cells(swap_cell_1:CommonGemCell, swap_cell_2:CommonGemCell): 96 | if not swap_cell_1 or not swap_cell_2: 97 | return 98 | 99 | # A: signal game controller 100 | swap_cell_1.play_audio_gem_move() 101 | swap_cell_2.play_audio_gem_move() 102 | 103 | # B: turn off anim/effects before moving 104 | swap_cell_1.play_selected_anim(false) 105 | swap_cell_2.play_selected_anim(false) 106 | 107 | # C: logially swap 108 | var gem_cell_1 = swap_cell_1.gem_color 109 | var gem_cell_2 = swap_cell_2.gem_color 110 | swap_cell_1.initialize(gem_cell_2, Enums.GemDict.FOOD) 111 | swap_cell_2.initialize(gem_cell_1, Enums.GemDict.FOOD) 112 | #debug_print_ascii_table([swap_cell_1,swap_cell_2]) 113 | 114 | # D: get position to restore to after move so tween sets/flows smoothly 115 | var orig_pos_cell_1 = swap_cell_1.sprite.global_position 116 | var orig_pos_cell_2 = swap_cell_2.sprite.global_position 117 | 118 | # E: re-position and tween 119 | call_deferred("setup_tween", swap_cell_2, orig_pos_cell_1, orig_pos_cell_2) 120 | call_deferred("setup_tween", swap_cell_1, orig_pos_cell_2, orig_pos_cell_1) 121 | 122 | # F: 123 | signal_game_props_count_gems() 124 | 125 | func setup_tween(gem_cell:CommonGemCell, start_pos:Vector2, end_pos:Vector2): 126 | gem_cell.sprite.global_position = start_pos # NOTE: Set initial position right before tweening 127 | tweens_running_cnt += 1 128 | var tween = get_tree().create_tween() 129 | tween.tween_property(gem_cell.sprite, "global_position", end_pos, Enums.TWEEN_TIME) 130 | tween.tween_callback(tween_completed) 131 | 132 | # STEP 3: Tween complete: clear vars/scan board 133 | 134 | func tween_completed(): 135 | Enums.debug_print("[tween_completed]: (counter="+str(tweens_running_cnt)+")", Enums.DEBUG_LEVEL.INFO) 136 | # A: update counter 137 | tweens_running_cnt -= 1 138 | 139 | # B: clear selections 140 | if selected_cell_1: 141 | selected_cell_1.debug_show_selnum(0) # DEBUG 142 | selected_cell_1 = null 143 | if selected_cell_2: 144 | selected_cell_2.debug_show_selnum(0) # DEBUG 145 | selected_cell_2 = null 146 | 147 | # C: once all tweens complete, check board 148 | if tweens_running_cnt == 0: 149 | process_game_round() 150 | 151 | # STEP 4: Check board, then explode first match found... (repeat until exhausted) 152 | 153 | func process_game_round(): 154 | Enums.debug_print("[process_game_round]: =====================================", Enums.DEBUG_LEVEL.INFO) 155 | Enums.debug_print("[process_game_round]: CHECKING BOARD... ", Enums.DEBUG_LEVEL.INFO) 156 | Enums.debug_print("[process_game_round]: =====================================", Enums.DEBUG_LEVEL.INFO) 157 | 158 | # A: 159 | # EX: 160 | # matches[ 161 | # { 162 | # "cells":["@Control@112:","@Control@113:","@Control@114:"], 163 | # "count":3}, 164 | # { 165 | # "cells":["@Control@119:","@Control@120:","@Control@121:"], 166 | # "count":3 167 | # } 168 | #] 169 | var matches = CmnFunc.get_all_matches(hbox_container) 170 | var gem_cells = CmnFunc.extract_gem_cells_from_matches(matches) 171 | Enums.debug_print("[process_game_round]: matches.. = "+JSON.stringify(matches), Enums.DEBUG_LEVEL.DEBUG) 172 | Enums.debug_print("[process_game_round]: gem_cells = "+str(gem_cells), Enums.DEBUG_LEVEL.DEBUG) 173 | if matches.size() > 0 and Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 174 | CmnDbg.debug_print_ascii_table(hbox_container, gem_cells) 175 | 176 | # B: 177 | var score = CmnFunc.calculate_score_for_matches(matches) 178 | board_props_score += score 179 | emit_signal("props_updated_score", board_props_score) 180 | 181 | # C: Update UI or game state as necessary 182 | signal_game_props_count_gems() 183 | 184 | # D: Handle resuolts: explode matches, or halt 185 | if matches.size() == 0: 186 | Enums.debug_print("[check_board_explode_matches]: No more matches. Board stable.", Enums.DEBUG_LEVEL.INFO) 187 | # A: 188 | # B: TODO: check for "NO MORE MOVES" 189 | # C: Reset undo cells or perform other cleanup here. 190 | if undo_cell_1 and undo_cell_2: 191 | swap_gem_cells(undo_cell_2, undo_cell_1) 192 | undo_cell_1 = null 193 | undo_cell_2 = null 194 | else: 195 | # A: clear undo (swap back) info upon successful match 196 | undo_cell_1 = null 197 | undo_cell_2 = null 198 | # B: 199 | board_props_moves += 1 200 | emit_signal("props_updated_moves", board_props_moves) 201 | # B: explode matched gems 202 | var match_scores = CmnFunc.calculate_scores_for_each_match(matches) 203 | explode_refill_gems(matches, match_scores) 204 | 205 | func explode_refill_gems(matches: Array, match_scores: Dictionary): 206 | Enums.debug_print("[explode_refill_gems]: !!!!!!!!!!!=====================================", Enums.DEBUG_LEVEL.INFO) 207 | Enums.debug_print("[explode_refill_gems]: *EXPLODING* gem_cell count: "+str(matches.size()), Enums.DEBUG_LEVEL.INFO) 208 | Enums.debug_print("[explode_refill_gems]: !!!!!!!!!!!=====================================", Enums.DEBUG_LEVEL.INFO) 209 | if Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 210 | CmnDbg.debug_print_ascii_table(hbox_container, CmnFunc.extract_gem_cells_from_matches(matches)) 211 | 212 | # A: explode selected 213 | for match in matches: 214 | for gem_cell in match["cells"]: 215 | var score = match_scores[gem_cell] 216 | gem_cell.explode_gem(gem_cell.gem_color, score) 217 | 218 | # B: Show game messages (ex: "Amazing!") 219 | emit_signal("board_match_multi", matches.size()) 220 | 221 | # TODO: FIXME: gem counts need to update faster (they currently update after the animation completes)!! 222 | # seemingly, this would work fine located here but its not - the UI update requires a frame update i guess? 223 | signal_game_props_count_gems() 224 | 225 | # B: let explode animation run 226 | await get_tree().create_timer(Enums.TWEEN_TIME).timeout 227 | 228 | # C: Dictionary to track columns and the number of gems to add in each column 229 | var columns_to_refill = {} 230 | for match in matches: 231 | for gem_cell in match["cells"]: 232 | var column_index = gem_cell.get_parent().get_index() 233 | var row_index = gem_cell.get_index() 234 | if column_index in columns_to_refill: 235 | columns_to_refill[column_index]["count"] += 1 236 | columns_to_refill[column_index]["highest"] = max(columns_to_refill[column_index]["highest"], row_index) 237 | else: 238 | columns_to_refill[column_index] = {"highest": row_index, "count": 1} 239 | 240 | # C: Process each column that needs refilling 241 | for column_index in columns_to_refill.keys(): 242 | var details = columns_to_refill[column_index] 243 | refill_column(column_index, details["highest"], details["count"]) 244 | 245 | # D: 246 | await get_tree().create_timer(Enums.EXPLODE_DELAY).timeout # let refill animations above complete (otherwise new, matching gems would start exploding before they're even in place!) 247 | process_game_round() 248 | 249 | func refill_column(column_index: int, highest_exploded_row: int, count_exploded: int): 250 | var column = hbox_container.get_child(column_index) 251 | var debug_str = "[refill_column] | colIdx: "+str(column_index)+" | hst_exp_row: "+str(highest_exploded_row)+" | count_exploded: "+str(count_exploded) 252 | Enums.debug_print(debug_str, Enums.DEBUG_LEVEL.DEBUG) 253 | 254 | # Move gems down from the row just above the first exploded row to the top 255 | # EXAMPLE: 256 | #| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 257 | #|---|---|---|---|---|---|---|---|---| 258 | #| 0 | | | | | | | | | 259 | #| 1 | G | G | G | | | | | | 260 | # = 261 | # EX: move gems from rowIdx=0 (0:0,0:2) down to rowIdx=1 262 | for i in range(highest_exploded_row - count_exploded, -1, -1): 263 | var source_gem_cell = column.get_child(i) 264 | var target_gem_cell = column.get_child(i + count_exploded) 265 | var rows_to_fall = count_exploded 266 | var debug_str2 = "[---------move] ["+str(i)+"] OLD->NEW: "+Enums.get_color_name_by_value(target_gem_cell.gem_color).substr(0,1)+ "->"+ Enums.get_color_name_by_value(source_gem_cell.gem_color).substr(0,1)+" ... rows_to_fall="+ str(rows_to_fall) 267 | Enums.debug_print(debug_str2, Enums.DEBUG_LEVEL.DEBUG) 268 | target_gem_cell.replace_gem(source_gem_cell.gem_color, rows_to_fall) 269 | 270 | # Refill the topmost cell(s) with new gems 271 | for i in range(count_exploded): 272 | var gem_cell = column.get_child(i) 273 | var random_color = GEM_COLOR_NAMES[randi() % GEM_COLOR_NAMES.size()] 274 | gem_cell.replace_gem(random_color) # Replace top gem with a new random gem 275 | var debug_str3 = "[-------refill] ["+str(i)+"] ADD: " + Enums.get_color_name_by_value(random_color) 276 | Enums.debug_print(debug_str3, Enums.DEBUG_LEVEL.DEBUG) 277 | 278 | func signal_game_props_count_gems(): 279 | var gems_dict = {} 280 | # Initialize dictionary with all gem types set to 0 281 | for color in Enums.GemColor.values(): 282 | gems_dict[Enums.get_color_name_by_value(color)] = 0 283 | 284 | # Assuming you have a way to iterate over all gem nodes 285 | # For example, if all gems are children of a node called "GemsContainer" 286 | for col in hbox_container.get_children(): 287 | for gem in col.get_children(): 288 | var color_name = Enums.get_color_name_by_value(gem.gem_color) 289 | gems_dict[color_name] += 1 290 | 291 | # Emit signal with the updated gems dictionary 292 | emit_signal("props_updated_gemsdict", gems_dict) 293 | -------------------------------------------------------------------------------- /game_boards/board_food/board_food.gd.uid: -------------------------------------------------------------------------------- 1 | uid://s1hljdhpacjy 2 | -------------------------------------------------------------------------------- /game_boards/board_food/board_food.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://x4qq2j3l7nvb"] 2 | 3 | [ext_resource type="Script" uid="uid://s1hljdhpacjy" path="res://game_boards/board_food/board_food.gd" id="1_4hho8"] 4 | [ext_resource type="PackedScene" uid="uid://bh2knk60qbton" path="res://game_boards/board_food/assets/board_square_0.tscn" id="2_5buol"] 5 | [ext_resource type="PackedScene" uid="uid://cry3vnlah6fkx" path="res://game_boards/board_food/assets/board_square_1.tscn" id="3_wwqts"] 6 | 7 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yj5kd"] 8 | bg_color = Color(0, 0, 0, 0.411765) 9 | 10 | [node name="Board" type="Node2D"] 11 | script = ExtResource("1_4hho8") 12 | 13 | [node name="Background" type="Panel" parent="."] 14 | visible = false 15 | offset_right = 1024.0 16 | offset_bottom = 1024.0 17 | theme_override_styles/panel = SubResource("StyleBoxFlat_yj5kd") 18 | 19 | [node name="GridContainer" type="GridContainer" parent="."] 20 | offset_right = 1024.0 21 | offset_bottom = 1024.0 22 | theme_override_constants/h_separation = 0 23 | theme_override_constants/v_separation = 0 24 | columns = 8 25 | 26 | [node name="BoardSquare0" parent="GridContainer" instance=ExtResource("2_5buol")] 27 | visible = false 28 | layout_mode = 2 29 | 30 | [node name="BoardSquare1" parent="GridContainer" instance=ExtResource("3_wwqts")] 31 | visible = false 32 | layout_mode = 2 33 | 34 | [node name="BoardSquare2" parent="GridContainer" instance=ExtResource("2_5buol")] 35 | visible = false 36 | layout_mode = 2 37 | 38 | [node name="BoardSquare3" parent="GridContainer" instance=ExtResource("3_wwqts")] 39 | visible = false 40 | layout_mode = 2 41 | 42 | [node name="HBoxContainer" type="HBoxContainer" parent="."] 43 | custom_minimum_size = Vector2(1024, 1024) 44 | offset_right = 512.0 45 | offset_bottom = 512.0 46 | theme_override_constants/separation = 0 47 | 48 | [node name="VBoxContainer0" type="VBoxContainer" parent="HBoxContainer"] 49 | custom_minimum_size = Vector2(128, 0) 50 | layout_mode = 2 51 | theme_override_constants/separation = 0 52 | 53 | [node name="VBoxContainer1" type="VBoxContainer" parent="HBoxContainer"] 54 | custom_minimum_size = Vector2(128, 0) 55 | layout_mode = 2 56 | theme_override_constants/separation = 0 57 | 58 | [node name="VBoxContainer2" type="VBoxContainer" parent="HBoxContainer"] 59 | custom_minimum_size = Vector2(128, 0) 60 | layout_mode = 2 61 | theme_override_constants/separation = 0 62 | 63 | [node name="VBoxContainer3" type="VBoxContainer" parent="HBoxContainer"] 64 | custom_minimum_size = Vector2(128, 0) 65 | layout_mode = 2 66 | theme_override_constants/separation = 0 67 | 68 | [node name="VBoxContainer4" type="VBoxContainer" parent="HBoxContainer"] 69 | custom_minimum_size = Vector2(128, 0) 70 | layout_mode = 2 71 | theme_override_constants/separation = 0 72 | 73 | [node name="VBoxContainer5" type="VBoxContainer" parent="HBoxContainer"] 74 | custom_minimum_size = Vector2(128, 0) 75 | layout_mode = 2 76 | theme_override_constants/separation = 0 77 | 78 | [node name="VBoxContainer6" type="VBoxContainer" parent="HBoxContainer"] 79 | custom_minimum_size = Vector2(128, 0) 80 | layout_mode = 2 81 | theme_override_constants/separation = 0 82 | 83 | [node name="VBoxContainer7" type="VBoxContainer" parent="HBoxContainer"] 84 | custom_minimum_size = Vector2(128, 0) 85 | layout_mode = 2 86 | theme_override_constants/separation = 0 87 | -------------------------------------------------------------------------------- /game_boards/board_food/game_food.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | # SCENES 3 | @onready var game_top_h_box:HBoxContainer = $ContTopBar/GameTopHBox 4 | @onready var game_stats:VBoxContainer = $ContGameStats/GameStats 5 | @onready var game_board:GameBoard = $ContBoard/Board 6 | @onready var animation_player:AnimationPlayer = $ContMessages/AnimationPlayer 7 | 8 | func _ready(): 9 | game_board.connect("props_updated_moves", self._on_props_updated_moves) 10 | game_board.connect("props_updated_score", self._on_props_updated_score) 11 | game_board.connect("props_updated_gemsdict", self._on_props_updated_gemsdict) 12 | game_board.connect("board_match_multi", self.on_board_match_multi) 13 | 14 | func _on_props_updated_gemsdict(gems_dict:Dictionary): 15 | # EX: `{ "RED": 9, "ORG": 11, "YLW": 14, "GRN": 9, "BLU": 9, "PRP": 12 }` 16 | game_stats.get_child(0).get_child(1).text = str(gems_dict["RED"]) 17 | game_stats.get_child(1).get_child(1).text = str(gems_dict["ORG"]) 18 | game_stats.get_child(2).get_child(1).text = str(gems_dict["YLW"]) 19 | game_stats.get_child(3).get_child(1).text = str(gems_dict["GRN"]) 20 | game_stats.get_child(4).get_child(1).text = str(gems_dict["BLU"]) 21 | game_stats.get_child(5).get_child(1).text = str(gems_dict["PRP"]) 22 | 23 | func _on_props_updated_score(score:int): 24 | game_top_h_box.get_child(0).get_child(1).text = str(score) 25 | 26 | func _on_props_updated_moves(moves:int): 27 | game_top_h_box.get_child(1).get_child(1).text = str(moves) 28 | 29 | func on_board_match_multi(match_cnt:int): 30 | # TODO: add more messages 31 | if match_cnt >= 2: 32 | animation_player.play("show_msg_amazing") 33 | 34 | func _on_newgame_button_pressed(): 35 | game_board.new_game() 36 | 37 | func _on_btn_quit_game(): 38 | # TODO: 20240515: convert to `signal()` for Main.tscn to hide all boards, etc. 39 | visible = false 40 | 41 | func _on_btn_clear_debug_labels_pressed(): 42 | game_board.debug_clear_debug_labels() 43 | 44 | func _on_btn_make_vert_pressed(): 45 | game_board.debug_make_gem_grid() 46 | #game_board.debug_make_match_col() 47 | -------------------------------------------------------------------------------- /game_boards/board_food/game_food.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dmid03epc35n3 2 | -------------------------------------------------------------------------------- /game_boards/board_food/game_food.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=25 format=3 uid="uid://b5bfm2244ywxk"] 2 | 3 | [ext_resource type="Script" uid="uid://dmid03epc35n3" path="res://game_boards/board_food/game_food.gd" id="1_ewnxx"] 4 | [ext_resource type="Texture2D" uid="uid://cnlqirgwr8d4" path="res://assets/bkgd/Background.png" id="1_h8otn"] 5 | [ext_resource type="PackedScene" uid="uid://x4qq2j3l7nvb" path="res://game_boards/board_food/board_food.tscn" id="2_2ltbx"] 6 | [ext_resource type="Texture2D" uid="uid://cwhjcn0y744nv" path="res://assets/gems/background-space.png" id="3_latsb"] 7 | [ext_resource type="Texture2D" uid="uid://b8biy2iputyhe" path="res://assets/gems/food/characters_0002.png" id="3_qywvx"] 8 | [ext_resource type="Texture2D" uid="uid://duau66qew6757" path="res://assets/gems/food/characters_0001.png" id="3_sh4xh"] 9 | [ext_resource type="Theme" uid="uid://c58sv51ac2qkl" path="res://themes/game_top_label_theme.tres" id="4_1evut"] 10 | [ext_resource type="Texture2D" uid="uid://vu6oui2n7024" path="res://assets/gems/food/characters_0003.png" id="4_2reex"] 11 | [ext_resource type="Theme" uid="uid://1cdmnqyil8gy" path="res://themes/game_stats_label_theme.tres" id="4_xf0vf"] 12 | [ext_resource type="PackedScene" uid="uid://d0yw6oyw3qib0" path="res://game_boards/board_food/assets/animated_cloud.tscn" id="5_4fg6e"] 13 | [ext_resource type="Texture2D" uid="uid://byliae6aa6ki2" path="res://assets/gems/food/characters_0005.png" id="5_g428h"] 14 | [ext_resource type="Texture2D" uid="uid://2vrsevjv4w43" path="res://assets/gems/food/characters_0007.png" id="6_ot4tf"] 15 | [ext_resource type="Texture2D" uid="uid://b1o34xq1pq82y" path="res://assets/gems/food/characters_0006.png" id="7_o4d3d"] 16 | [ext_resource type="AudioStream" uid="uid://ds53xomd2ha1b" path="res://assets/audio/Abstract2.ogg" id="8_7jpwb"] 17 | [ext_resource type="Texture2D" uid="uid://27rcw10bp2xt" path="res://assets/gui/ButtonText_Large_Green_Round.png" id="10_qtl06"] 18 | [ext_resource type="Texture2D" uid="uid://bebhmcgujnoxc" path="res://assets/gui/ButtonText_Large_GreyOutline_Round.png" id="11_bw3je"] 19 | [ext_resource type="Texture2D" uid="uid://dcow071sb2a7i" path="res://assets/gui/ButtonText_Large_Orange_Round.png" id="12_4fgvl"] 20 | [ext_resource type="Texture2D" uid="uid://chrsqb6yhlqeq" path="res://assets/gui/ButtonText_Large_Blue_Round.png" id="16_d1duj"] 21 | [ext_resource type="Theme" uid="uid://c68uhjmxln8ao" path="res://themes/game_msg_top.tres" id="17_j7spk"] 22 | [ext_resource type="Theme" uid="uid://duftrpb020ewi" path="res://themes/game_msg_btm.tres" id="18_p5dta"] 23 | 24 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_103kv"] 25 | bg_color = Color(0, 0, 0, 0.666667) 26 | 27 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_k3sk6"] 28 | bg_color = Color(0, 0, 0, 0.133333) 29 | 30 | [sub_resource type="Animation" id="Animation_3xeuw"] 31 | resource_name = "show_msg_amazing" 32 | tracks/0/type = "value" 33 | tracks/0/imported = false 34 | tracks/0/enabled = true 35 | tracks/0/path = NodePath("ContMessages/Msg-Amazing:visible") 36 | tracks/0/interp = 1 37 | tracks/0/loop_wrap = true 38 | tracks/0/keys = { 39 | "times": PackedFloat32Array(0, 1), 40 | "transitions": PackedFloat32Array(1, 1), 41 | "update": 1, 42 | "values": [true, false] 43 | } 44 | tracks/1/type = "value" 45 | tracks/1/imported = false 46 | tracks/1/enabled = true 47 | tracks/1/path = NodePath("ContMessages/Msg-Amazing/RTL-Btm-Amazing:theme_override_font_sizes/normal_font_size") 48 | tracks/1/interp = 1 49 | tracks/1/loop_wrap = true 50 | tracks/1/keys = { 51 | "times": PackedFloat32Array(0, 0.5, 1), 52 | "transitions": PackedFloat32Array(1, 1, 1), 53 | "update": 0, 54 | "values": [204, 240, 204] 55 | } 56 | tracks/2/type = "value" 57 | tracks/2/imported = false 58 | tracks/2/enabled = true 59 | tracks/2/path = NodePath("ContMessages/Msg-Amazing/RTL-Top-Amazing:theme_override_font_sizes/normal_font_size") 60 | tracks/2/interp = 1 61 | tracks/2/loop_wrap = true 62 | tracks/2/keys = { 63 | "times": PackedFloat32Array(0, 0.5, 1), 64 | "transitions": PackedFloat32Array(1, 1, 1), 65 | "update": 0, 66 | "values": [204, 240, 204] 67 | } 68 | 69 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_htlur"] 70 | _data = { 71 | &"show_msg_amazing": SubResource("Animation_3xeuw") 72 | } 73 | 74 | [node name="GameFood" type="Node2D"] 75 | script = ExtResource("1_ewnxx") 76 | 77 | [node name="Background" type="TextureRect" parent="."] 78 | offset_right = 2000.0 79 | offset_bottom = 1390.0 80 | texture = ExtResource("1_h8otn") 81 | expand_mode = 2 82 | 83 | [node name="Background2" type="TextureRect" parent="."] 84 | visible = false 85 | offset_right = 2000.0 86 | offset_bottom = 1390.0 87 | texture = ExtResource("3_latsb") 88 | expand_mode = 2 89 | 90 | [node name="DBGBkgdDimmer" type="Panel" parent="."] 91 | visible = false 92 | anchors_preset = 15 93 | anchor_right = 1.0 94 | anchor_bottom = 1.0 95 | offset_right = 2000.0 96 | offset_bottom = 1390.0 97 | grow_horizontal = 2 98 | grow_vertical = 2 99 | theme_override_styles/panel = SubResource("StyleBoxFlat_103kv") 100 | 101 | [node name="AudioGemMove" type="AudioStreamPlayer" parent="."] 102 | stream = ExtResource("8_7jpwb") 103 | 104 | [node name="ContTopClouds" type="Control" parent="."] 105 | layout_mode = 3 106 | anchors_preset = 0 107 | offset_right = 40.0 108 | offset_bottom = 40.0 109 | 110 | [node name="AnimatedCloud1" parent="ContTopClouds" instance=ExtResource("5_4fg6e")] 111 | 112 | [node name="AnimatedCloud2" parent="ContTopClouds" instance=ExtResource("5_4fg6e")] 113 | position = Vector2(1000, 75) 114 | 115 | [node name="AnimatedCloud3" parent="ContTopClouds" instance=ExtResource("5_4fg6e")] 116 | position = Vector2(-1000, 100) 117 | 118 | [node name="ContTopBar" type="Control" parent="."] 119 | layout_mode = 3 120 | anchors_preset = 10 121 | anchor_right = 1.0 122 | grow_horizontal = 2 123 | 124 | [node name="GameTopBkgd" type="Panel" parent="ContTopBar"] 125 | layout_mode = 1 126 | anchors_preset = 10 127 | anchor_right = 1.0 128 | offset_right = 2000.0 129 | offset_bottom = 150.0 130 | grow_horizontal = 2 131 | theme_override_styles/panel = SubResource("StyleBoxFlat_k3sk6") 132 | 133 | [node name="GameTopHBox" type="HBoxContainer" parent="ContTopBar"] 134 | custom_minimum_size = Vector2(2000, 150) 135 | layout_mode = 0 136 | offset_right = 2000.0 137 | offset_bottom = 150.0 138 | 139 | [node name="HBoxContainer1" type="HBoxContainer" parent="ContTopBar/GameTopHBox"] 140 | layout_mode = 2 141 | size_flags_horizontal = 3 142 | 143 | [node name="Label" type="Label" parent="ContTopBar/GameTopHBox/HBoxContainer1"] 144 | layout_mode = 2 145 | size_flags_horizontal = 3 146 | theme = ExtResource("4_1evut") 147 | text = "Score " 148 | horizontal_alignment = 2 149 | 150 | [node name="Value" type="Label" parent="ContTopBar/GameTopHBox/HBoxContainer1"] 151 | layout_mode = 2 152 | size_flags_horizontal = 3 153 | theme = ExtResource("4_1evut") 154 | text = "0" 155 | 156 | [node name="HBoxContainer2" type="HBoxContainer" parent="ContTopBar/GameTopHBox"] 157 | layout_mode = 2 158 | size_flags_horizontal = 3 159 | 160 | [node name="Label" type="Label" parent="ContTopBar/GameTopHBox/HBoxContainer2"] 161 | layout_mode = 2 162 | size_flags_horizontal = 3 163 | theme = ExtResource("4_1evut") 164 | text = "Moves " 165 | horizontal_alignment = 2 166 | 167 | [node name="Value" type="Label" parent="ContTopBar/GameTopHBox/HBoxContainer2"] 168 | layout_mode = 2 169 | size_flags_horizontal = 3 170 | theme = ExtResource("4_1evut") 171 | text = "0" 172 | 173 | [node name="ContGameStats" type="Control" parent="."] 174 | layout_mode = 3 175 | anchors_preset = 15 176 | anchor_right = 1.0 177 | anchor_bottom = 1.0 178 | grow_horizontal = 2 179 | grow_vertical = 2 180 | 181 | [node name="GameStatsBkgd" type="Panel" parent="ContGameStats"] 182 | layout_mode = 0 183 | offset_left = 75.0 184 | offset_top = 250.0 185 | offset_right = 425.0 186 | offset_bottom = 1274.0 187 | theme_override_styles/panel = SubResource("StyleBoxFlat_k3sk6") 188 | 189 | [node name="GameStats" type="VBoxContainer" parent="ContGameStats"] 190 | layout_mode = 0 191 | offset_left = 120.0 192 | offset_top = 280.0 193 | offset_right = 370.0 194 | offset_bottom = 1304.0 195 | theme_override_constants/separation = 40 196 | 197 | [node name="HBoxContainer1" type="HBoxContainer" parent="ContGameStats/GameStats"] 198 | layout_mode = 2 199 | theme_override_constants/separation = 25 200 | 201 | [node name="Control" type="Control" parent="ContGameStats/GameStats/HBoxContainer1"] 202 | custom_minimum_size = Vector2(128, 128) 203 | layout_mode = 2 204 | 205 | [node name="Sprite2D" type="Sprite2D" parent="ContGameStats/GameStats/HBoxContainer1/Control"] 206 | scale = Vector2(0.5, 0.5) 207 | texture = ExtResource("3_sh4xh") 208 | centered = false 209 | 210 | [node name="Label" type="Label" parent="ContGameStats/GameStats/HBoxContainer1"] 211 | layout_mode = 2 212 | size_flags_horizontal = 3 213 | theme = ExtResource("4_xf0vf") 214 | theme_override_font_sizes/font_size = 96 215 | text = "0" 216 | horizontal_alignment = 2 217 | vertical_alignment = 1 218 | 219 | [node name="HBoxContainer2" type="HBoxContainer" parent="ContGameStats/GameStats"] 220 | layout_mode = 2 221 | theme_override_constants/separation = 25 222 | 223 | [node name="Control" type="Control" parent="ContGameStats/GameStats/HBoxContainer2"] 224 | custom_minimum_size = Vector2(128, 128) 225 | layout_mode = 2 226 | 227 | [node name="Sprite2D" type="Sprite2D" parent="ContGameStats/GameStats/HBoxContainer2/Control"] 228 | scale = Vector2(0.5, 0.5) 229 | texture = ExtResource("3_qywvx") 230 | centered = false 231 | 232 | [node name="Label" type="Label" parent="ContGameStats/GameStats/HBoxContainer2"] 233 | layout_mode = 2 234 | size_flags_horizontal = 3 235 | theme = ExtResource("4_xf0vf") 236 | theme_override_font_sizes/font_size = 96 237 | text = "0" 238 | horizontal_alignment = 2 239 | vertical_alignment = 1 240 | 241 | [node name="HBoxContainer3" type="HBoxContainer" parent="ContGameStats/GameStats"] 242 | layout_mode = 2 243 | theme_override_constants/separation = 25 244 | 245 | [node name="Control" type="Control" parent="ContGameStats/GameStats/HBoxContainer3"] 246 | custom_minimum_size = Vector2(128, 128) 247 | layout_mode = 2 248 | 249 | [node name="Sprite2D" type="Sprite2D" parent="ContGameStats/GameStats/HBoxContainer3/Control"] 250 | scale = Vector2(0.5, 0.5) 251 | texture = ExtResource("4_2reex") 252 | centered = false 253 | 254 | [node name="Label" type="Label" parent="ContGameStats/GameStats/HBoxContainer3"] 255 | layout_mode = 2 256 | size_flags_horizontal = 3 257 | theme = ExtResource("4_xf0vf") 258 | theme_override_colors/font_color = Color(0.945098, 0.945098, 0.945098, 1) 259 | theme_override_font_sizes/font_size = 96 260 | text = "0" 261 | horizontal_alignment = 2 262 | vertical_alignment = 1 263 | 264 | [node name="HBoxContainer4" type="HBoxContainer" parent="ContGameStats/GameStats"] 265 | layout_mode = 2 266 | theme_override_constants/separation = 25 267 | 268 | [node name="Control" type="Control" parent="ContGameStats/GameStats/HBoxContainer4"] 269 | custom_minimum_size = Vector2(128, 128) 270 | layout_mode = 2 271 | 272 | [node name="Sprite2D" type="Sprite2D" parent="ContGameStats/GameStats/HBoxContainer4/Control"] 273 | scale = Vector2(0.5, 0.5) 274 | texture = ExtResource("5_g428h") 275 | centered = false 276 | 277 | [node name="Label" type="Label" parent="ContGameStats/GameStats/HBoxContainer4"] 278 | layout_mode = 2 279 | size_flags_horizontal = 3 280 | theme = ExtResource("4_xf0vf") 281 | theme_override_colors/font_color = Color(0.945098, 0.945098, 0.945098, 1) 282 | theme_override_font_sizes/font_size = 96 283 | text = "0" 284 | horizontal_alignment = 2 285 | vertical_alignment = 1 286 | 287 | [node name="HBoxContainer5" type="HBoxContainer" parent="ContGameStats/GameStats"] 288 | layout_mode = 2 289 | theme_override_constants/separation = 25 290 | 291 | [node name="Control" type="Control" parent="ContGameStats/GameStats/HBoxContainer5"] 292 | custom_minimum_size = Vector2(128, 128) 293 | layout_mode = 2 294 | 295 | [node name="Sprite2D" type="Sprite2D" parent="ContGameStats/GameStats/HBoxContainer5/Control"] 296 | scale = Vector2(0.5, 0.5) 297 | texture = ExtResource("6_ot4tf") 298 | centered = false 299 | 300 | [node name="Label" type="Label" parent="ContGameStats/GameStats/HBoxContainer5"] 301 | layout_mode = 2 302 | size_flags_horizontal = 3 303 | theme = ExtResource("4_xf0vf") 304 | theme_override_colors/font_color = Color(0.945098, 0.945098, 0.945098, 1) 305 | theme_override_font_sizes/font_size = 96 306 | text = "0" 307 | horizontal_alignment = 2 308 | vertical_alignment = 1 309 | 310 | [node name="HBoxContainer6" type="HBoxContainer" parent="ContGameStats/GameStats"] 311 | layout_mode = 2 312 | theme_override_constants/separation = 25 313 | 314 | [node name="Control" type="Control" parent="ContGameStats/GameStats/HBoxContainer6"] 315 | custom_minimum_size = Vector2(128, 128) 316 | layout_mode = 2 317 | 318 | [node name="Sprite2D" type="Sprite2D" parent="ContGameStats/GameStats/HBoxContainer6/Control"] 319 | scale = Vector2(0.5, 0.5) 320 | texture = ExtResource("7_o4d3d") 321 | centered = false 322 | 323 | [node name="Label" type="Label" parent="ContGameStats/GameStats/HBoxContainer6"] 324 | layout_mode = 2 325 | size_flags_horizontal = 3 326 | theme = ExtResource("4_xf0vf") 327 | theme_override_colors/font_color = Color(0.945098, 0.945098, 0.945098, 1) 328 | theme_override_font_sizes/font_size = 96 329 | text = "0" 330 | horizontal_alignment = 2 331 | vertical_alignment = 1 332 | 333 | [node name="ContBoard" type="Control" parent="."] 334 | layout_mode = 3 335 | anchors_preset = 0 336 | offset_right = 40.0 337 | offset_bottom = 40.0 338 | mouse_filter = 1 339 | 340 | [node name="DBGBoardRectArea" type="Panel" parent="ContBoard"] 341 | visible = false 342 | layout_mode = 0 343 | offset_left = 500.0 344 | offset_top = 250.0 345 | offset_right = 1524.0 346 | offset_bottom = 1274.0 347 | mouse_filter = 2 348 | theme_override_styles/panel = SubResource("StyleBoxFlat_103kv") 349 | 350 | [node name="Board" parent="ContBoard" instance=ExtResource("2_2ltbx")] 351 | position = Vector2(500, 250) 352 | 353 | [node name="BtnNewGame" type="TextureButton" parent="."] 354 | offset_left = 1600.0 355 | offset_top = 250.0 356 | offset_right = 2759.0 357 | offset_bottom = 608.0 358 | scale = Vector2(0.3, 0.3) 359 | texture_normal = ExtResource("10_qtl06") 360 | 361 | [node name="Label" type="Label" parent="BtnNewGame"] 362 | layout_mode = 1 363 | anchors_preset = 15 364 | anchor_right = 1.0 365 | anchor_bottom = 1.0 366 | grow_horizontal = 2 367 | grow_vertical = 2 368 | theme_override_font_sizes/font_size = 120 369 | text = "NEW GAME" 370 | horizontal_alignment = 1 371 | vertical_alignment = 1 372 | 373 | [node name="BtnQuitGame" type="TextureButton" parent="."] 374 | offset_left = 1659.0 375 | offset_top = 696.0 376 | offset_right = 2818.0 377 | offset_bottom = 1054.0 378 | scale = Vector2(0.25, 0.25) 379 | texture_normal = ExtResource("16_d1duj") 380 | 381 | [node name="Label" type="Label" parent="BtnQuitGame"] 382 | layout_mode = 1 383 | anchors_preset = 15 384 | anchor_right = 1.0 385 | anchor_bottom = 1.0 386 | grow_horizontal = 2 387 | grow_vertical = 2 388 | theme_override_font_sizes/font_size = 120 389 | text = "Quit" 390 | horizontal_alignment = 1 391 | vertical_alignment = 1 392 | 393 | [node name="BtnClearDebugLabels" type="TextureButton" parent="."] 394 | visible = false 395 | offset_left = 1657.0 396 | offset_top = 393.0 397 | offset_right = 2816.0 398 | offset_bottom = 751.0 399 | scale = Vector2(0.25, 0.25) 400 | texture_normal = ExtResource("11_bw3je") 401 | 402 | [node name="Label" type="Label" parent="BtnClearDebugLabels"] 403 | layout_mode = 1 404 | anchors_preset = 15 405 | anchor_right = 1.0 406 | anchor_bottom = 1.0 407 | grow_horizontal = 2 408 | grow_vertical = 2 409 | theme_override_font_sizes/font_size = 120 410 | text = "Clear Labels" 411 | horizontal_alignment = 1 412 | vertical_alignment = 1 413 | 414 | [node name="BtnMatchCol" type="TextureButton" parent="."] 415 | offset_left = 1656.0 416 | offset_top = 519.0 417 | offset_right = 2815.0 418 | offset_bottom = 877.0 419 | scale = Vector2(0.25, 0.25) 420 | texture_normal = ExtResource("12_4fgvl") 421 | 422 | [node name="Label" type="Label" parent="BtnMatchCol"] 423 | layout_mode = 1 424 | anchors_preset = 15 425 | anchor_right = 1.0 426 | anchor_bottom = 1.0 427 | grow_horizontal = 2 428 | grow_vertical = 2 429 | theme_override_font_sizes/font_size = 120 430 | text = "CHECKERED" 431 | horizontal_alignment = 1 432 | vertical_alignment = 1 433 | 434 | [node name="ContMessages" type="Control" parent="."] 435 | custom_minimum_size = Vector2(2000, 230) 436 | layout_mode = 3 437 | anchors_preset = 0 438 | offset_top = 540.0 439 | offset_right = 2000.0 440 | offset_bottom = 770.0 441 | mouse_filter = 2 442 | 443 | [node name="AnimationPlayer" type="AnimationPlayer" parent="ContMessages"] 444 | root_node = NodePath("../..") 445 | libraries = { 446 | "": SubResource("AnimationLibrary_htlur") 447 | } 448 | autoplay = "show_msg_amazing" 449 | 450 | [node name="Msg-Amazing" type="Control" parent="ContMessages"] 451 | visible = false 452 | custom_minimum_size = Vector2(2000, 230) 453 | layout_mode = 1 454 | anchors_preset = 8 455 | anchor_left = 0.5 456 | anchor_top = 0.5 457 | anchor_right = 0.5 458 | anchor_bottom = 0.5 459 | offset_left = -1000.0 460 | offset_top = -115.0 461 | offset_right = 1000.0 462 | offset_bottom = 115.0 463 | grow_horizontal = 2 464 | grow_vertical = 2 465 | mouse_filter = 1 466 | 467 | [node name="RTL-Btm-Amazing" type="RichTextLabel" parent="ContMessages/Msg-Amazing"] 468 | clip_contents = false 469 | custom_minimum_size = Vector2(2000, 259) 470 | layout_mode = 1 471 | anchors_preset = 14 472 | anchor_top = 0.5 473 | anchor_right = 1.0 474 | anchor_bottom = 0.5 475 | offset_top = -115.0 476 | offset_bottom = 144.0 477 | grow_horizontal = 2 478 | grow_vertical = 2 479 | theme = ExtResource("18_p5dta") 480 | theme_override_font_sizes/normal_font_size = 204 481 | bbcode_enabled = true 482 | text = "[center]Amazing![/center]" 483 | fit_content = true 484 | scroll_active = false 485 | autowrap_mode = 0 486 | shortcut_keys_enabled = false 487 | 488 | [node name="RTL-Top-Amazing" type="RichTextLabel" parent="ContMessages/Msg-Amazing"] 489 | clip_contents = false 490 | custom_minimum_size = Vector2(2000, 259) 491 | layout_mode = 1 492 | anchors_preset = 14 493 | anchor_top = 0.5 494 | anchor_right = 1.0 495 | anchor_bottom = 0.5 496 | offset_top = -115.0 497 | offset_bottom = 144.0 498 | grow_horizontal = 2 499 | grow_vertical = 2 500 | theme = ExtResource("17_j7spk") 501 | theme_override_font_sizes/normal_font_size = 204 502 | bbcode_enabled = true 503 | text = "[center]Amazing![/center]" 504 | fit_content = true 505 | scroll_active = false 506 | autowrap_mode = 0 507 | shortcut_keys_enabled = false 508 | 509 | [connection signal="pressed" from="BtnNewGame" to="." method="_on_newgame_button_pressed"] 510 | [connection signal="pressed" from="BtnQuitGame" to="." method="_on_btn_quit_game"] 511 | [connection signal="pressed" from="BtnClearDebugLabels" to="." method="_on_btn_clear_debug_labels_pressed"] 512 | [connection signal="pressed" from="BtnMatchCol" to="." method="_on_btn_make_vert_pressed"] 513 | -------------------------------------------------------------------------------- /game_boards/board_space/assets/animated_cloud.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://dxdf17h8p2cml"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://cnlqirgwr8d4" path="res://assets/bkgd/Background.png" id="1_7vsm5"] 4 | [ext_resource type="Texture2D" uid="uid://cfdjrsigqjjjk" path="res://assets/bkgd/Cloud_2.png" id="2_cb4gf"] 5 | 6 | [sub_resource type="Animation" id="Animation_0x8pj"] 7 | resource_name = "move_cloud" 8 | length = 30.0 9 | loop_mode = 2 10 | tracks/0/type = "value" 11 | tracks/0/imported = false 12 | tracks/0/enabled = true 13 | tracks/0/path = NodePath("Sprite2D:position") 14 | tracks/0/interp = 1 15 | tracks/0/loop_wrap = true 16 | tracks/0/keys = { 17 | "times": PackedFloat32Array(0, 30), 18 | "transitions": PackedFloat32Array(1, 1), 19 | "update": 0, 20 | "values": [Vector2(64, 75), Vector2(1936, 75)] 21 | } 22 | 23 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_5m8mq"] 24 | _data = { 25 | &"move_cloud": SubResource("Animation_0x8pj") 26 | } 27 | 28 | [node name="AnimatedCloud" type="Node2D"] 29 | 30 | [node name="Debug-Background" type="TextureRect" parent="."] 31 | visible = false 32 | offset_right = 2000.0 33 | offset_bottom = 1390.0 34 | texture = ExtResource("1_7vsm5") 35 | expand_mode = 2 36 | 37 | [node name="Debug-Panel" type="Panel" parent="."] 38 | visible = false 39 | anchors_preset = 10 40 | anchor_right = 1.0 41 | offset_right = 2000.0 42 | offset_bottom = 150.0 43 | grow_horizontal = 2 44 | 45 | [node name="Sprite2D" type="Sprite2D" parent="."] 46 | position = Vector2(64, 75) 47 | texture = ExtResource("2_cb4gf") 48 | 49 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 50 | libraries = { 51 | "": SubResource("AnimationLibrary_5m8mq") 52 | } 53 | autoplay = "move_cloud" 54 | -------------------------------------------------------------------------------- /game_boards/board_space/assets/board_square_0.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://blsn8j6rhmblk"] 2 | 3 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mk81d"] 4 | bg_color = Color(0, 0, 0, 0.2) 5 | 6 | [node name="BoardSquare0" type="Control"] 7 | custom_minimum_size = Vector2(128, 128) 8 | layout_mode = 3 9 | anchors_preset = 0 10 | offset_right = 64.0 11 | offset_bottom = 64.0 12 | 13 | [node name="Panel" type="Panel" parent="."] 14 | visible = false 15 | layout_mode = 1 16 | anchors_preset = 15 17 | anchor_right = 1.0 18 | anchor_bottom = 1.0 19 | grow_horizontal = 2 20 | grow_vertical = 2 21 | theme_override_styles/panel = SubResource("StyleBoxFlat_mk81d") 22 | -------------------------------------------------------------------------------- /game_boards/board_space/assets/board_square_1.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bcc1enoy26quk"] 2 | 3 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xixw6"] 4 | bg_color = Color(1, 1, 1, 0.188235) 5 | 6 | [node name="BoardSquare1" type="Control"] 7 | custom_minimum_size = Vector2(128, 128) 8 | layout_mode = 3 9 | anchors_preset = 0 10 | offset_right = 64.0 11 | offset_bottom = 64.0 12 | 13 | [node name="Panel" type="Panel" parent="."] 14 | layout_mode = 1 15 | anchors_preset = 15 16 | anchor_right = 1.0 17 | anchor_bottom = 1.0 18 | grow_horizontal = 2 19 | grow_vertical = 2 20 | theme_override_styles/panel = SubResource("StyleBoxFlat_xixw6") 21 | -------------------------------------------------------------------------------- /game_boards/board_space/assets/gem_cell.gdshader: -------------------------------------------------------------------------------- 1 | shader_type canvas_item; 2 | 3 | uniform vec4 line_color : source_color = vec4(1); 4 | uniform float line_thickness : hint_range(0, 10) = 7.0; 5 | 6 | void fragment() { 7 | vec2 size = TEXTURE_PIXEL_SIZE * line_thickness; 8 | 9 | float outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a; 10 | outline += texture(TEXTURE, UV + vec2(0, size.y)).a; 11 | 12 | outline += texture(TEXTURE, UV + vec2(size.x, 0)).a; 13 | 14 | outline += texture(TEXTURE, UV + vec2(0, -size.y)).a; 15 | 16 | outline += texture(TEXTURE, UV + vec2(-size.x, size.y)).a; 17 | 18 | outline += texture(TEXTURE, UV + vec2(-size.x, size.y * 0.5)).a; 19 | 20 | 21 | 22 | outline += texture(TEXTURE, UV + vec2(size.x, size.y)).a; 23 | outline += texture(TEXTURE, UV + vec2(size.x, size.y * 0.5)).a; 24 | 25 | 26 | outline += texture(TEXTURE, UV + vec2(-size.x, -size.y)).a; 27 | outline += texture(TEXTURE, UV + vec2(-size.x, -size.y * 0.5)).a; 28 | 29 | 30 | 31 | outline += texture(TEXTURE, UV + vec2(size.x, -size.y)).a; 32 | outline += texture(TEXTURE, UV + vec2(size.x, -size.y * 0.5)).a; 33 | 34 | 35 | outline = min(outline, 1.0); 36 | 37 | 38 | vec4 color = texture(TEXTURE, UV); 39 | COLOR = mix(color, line_color, outline - color.a); 40 | } -------------------------------------------------------------------------------- /game_boards/board_space/assets/gem_cell.gdshader.uid: -------------------------------------------------------------------------------- 1 | uid://lmcwjegybgau 2 | -------------------------------------------------------------------------------- /game_boards/board_space/assets/gem_cell_v2.gdshader: -------------------------------------------------------------------------------- 1 | shader_type canvas_item; 2 | 3 | uniform vec4 line_color : source_color = vec4(1, 1, 1, 1); 4 | uniform float line_thickness : hint_range(0, 10) = 4.0; 5 | 6 | void fragment() { 7 | vec2 size = TEXTURE_PIXEL_SIZE * line_thickness; 8 | float outline = 0.0; 9 | float total = 0.0; 10 | 11 | for (float x = -1.0; x <= 1.0; x += 1.0) { 12 | for (float y = -1.0; y <= 1.0; y += 1.0) { 13 | vec2 offset = vec2(x, y) * size; 14 | float sample_alpha = texture(TEXTURE, UV + offset).a; 15 | float weight = 1.0 - length(offset) / length(size); 16 | outline += sample_alpha * weight; 17 | total += weight; 18 | } 19 | } 20 | 21 | outline = outline / total; 22 | 23 | vec4 color = texture(TEXTURE, UV); 24 | COLOR = mix(color, line_color, outline - color.a); 25 | } 26 | -------------------------------------------------------------------------------- /game_boards/board_space/assets/gem_cell_v2.gdshader.uid: -------------------------------------------------------------------------------- 1 | uid://cj6egkdu2o08c 2 | -------------------------------------------------------------------------------- /game_boards/board_space/board_space.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | class_name GemBoardSpace 3 | # SIGNALS 4 | signal props_updated_moves(moves:int) 5 | signal props_updated_score(score:int) 6 | signal props_updated_gemsdict(gems_dict:Dictionary) 7 | signal board_match_multi(match_cnt:int) 8 | signal show_game_msg(msg:String) 9 | # SCENES 10 | @onready var grid_container:GridContainer = $GridContainer 11 | @onready var hbox_container:HBoxContainer = $HBoxContainer 12 | @onready var inactivity_timer:Timer = $InactivityTimer 13 | @onready var cont_debug_label:Label = $"../../ContDebug/VBoxContainer/ContDebugLabel" 14 | @onready var cont_debug_value:Label = $"../../ContDebug/VBoxContainer/ContDebugValue" 15 | # PRELOAD 16 | var CmnFunc = preload("res://game_boards/all_common/common.gd").new() 17 | var CmnDbg = preload("res://game_boards/all_common/common_debug.gd").new() 18 | # CONST 19 | const GEM_COLOR_NAMES = [Enums.GemColor.RED, Enums.GemColor.ORG, Enums.GemColor.YLW, Enums.GemColor.GRN, Enums.GemColor.BLU, Enums.GemColor.PRP] 20 | const GEM_POINTS:int = 25 21 | const GEM_DICT:Enums.GemDict = Enums.GemDict.SPACE 22 | # VARS 23 | var selected_cell_1:CommonGemCell = null 24 | var selected_cell_2:CommonGemCell = null 25 | var undo_cell_1:CommonGemCell = null 26 | var undo_cell_2:CommonGemCell = null 27 | var tweens_running_cnt:int = 0 28 | var board_props_moves:int = 0 29 | var board_props_score:int = 0 30 | 31 | # Called when the node enters the scene tree for the first time. 32 | func _ready(): 33 | # godot setup 34 | randomize() 35 | inactivity_timer.wait_time = Enums.HINT_DELAY # sync UI to logic 36 | # A: populate board 37 | const brd_sq0 = "res://game_boards/board_space/assets/board_square_0.tscn" 38 | const brd_sq1 = "res://game_boards/board_space/assets/board_square_1.tscn" 39 | CmnFunc.fill_grid(hbox_container, grid_container, brd_sq0, brd_sq1) 40 | 41 | func _process(_delta): 42 | cont_debug_label.text = "TIMER Left (secs)" 43 | cont_debug_value.text = str(round(inactivity_timer.time_left)) 44 | 45 | # NOTE: iOS [Xcode] has no cells if "CmnFunc.fill_hbox()" is in the _ready() func above 46 | # So, instead of having [game_space.gd] flip `visible` flag on this scene, let's do both of these here to alleviate the issue 47 | # Plus, even when calling both fill_grid funcs, then "process_game_round()" - it made the matching sound sin the background on main game launch, etc. 48 | func init_game(): 49 | # IMPORTANT: This game scene was just made visible before this func is called, 50 | # so give the engine a render frame to set the HBoxs or they wont exist yet 51 | call_deferred("init_game2") 52 | 53 | func init_game2(): 54 | # A: clear all GemCells 55 | for vbox in hbox_container.get_children(): 56 | for cell in vbox.get_children(): 57 | vbox.remove_child(cell) 58 | cell.queue_free() 59 | # B: 60 | emit_signal("show_game_msg", "Let's Play!") 61 | # C: Animation runtime for msg is 0.5-sec 62 | await CmnFunc.delay_time(self.get_child(0), 0.5) 63 | # D: do this hre instead of _ready() as iOS/Xcode wont fill cells when invisible or something like that 64 | CmnFunc.fill_hbox(hbox_container, GEM_DICT, self._on_cell_click) 65 | # E: check board after init 66 | await CmnFunc.delay_time(self, 0.25) 67 | process_game_round() 68 | # F: start timer 69 | inactivity_timer.start() 70 | 71 | func new_game(): 72 | Enums.debug_print("Starting new game, resetting board.", Enums.DEBUG_LEVEL.INFO) 73 | # A: 74 | board_props_moves = 0 75 | board_props_score = 0 76 | emit_signal("props_updated_score", board_props_score) 77 | emit_signal("props_updated_moves", board_props_moves) 78 | # B: 79 | CmnFunc.new_game_explode_replace(hbox_container, GEM_COLOR_NAMES, Enums.EXPLODE_DELAY) 80 | # C: 81 | process_game_round() 82 | 83 | # ========================================================= 84 | 85 | # STEP 1: Handle input (=capture first & second selection), swap gems 86 | # @desc: calls `swap_gem_cells()` when 2 cells selected and are adjacent 87 | 88 | func _on_cell_click(gem_cell:CommonGemCell): 89 | Enums.debug_print("[_on_cell_click] gem_cell.......: "+JSON.stringify(CmnFunc.find_gem_indices(gem_cell)), Enums.DEBUG_LEVEL.INFO) 90 | Enums.debug_print("[_on_cell_click] ---------------------------------------------", Enums.DEBUG_LEVEL.INFO) 91 | 92 | # A: Reset the inactivity_timer timer on any user input 93 | inactivity_timer.stop() 94 | inactivity_timer.start() 95 | 96 | # Clear first, we'll set later 97 | if selected_cell_1: 98 | selected_cell_1.play_selected_anim(false) 99 | if selected_cell_2: 100 | selected_cell_2.play_selected_anim(false) 101 | 102 | # STEP 1: Select CommonGemCell logic 103 | if not selected_cell_1: 104 | selected_cell_1 = gem_cell 105 | elif selected_cell_1 != gem_cell: 106 | if CmnFunc.are_cells_adjacent(selected_cell_1, gem_cell): 107 | selected_cell_2 = gem_cell 108 | else: 109 | selected_cell_1 = gem_cell 110 | selected_cell_2 = null 111 | 112 | # DEBUG 113 | if selected_cell_1: 114 | Enums.debug_print("[_on_cell_click] selected_cell_1: " + JSON.stringify(CmnFunc.find_gem_indices(selected_cell_1)), Enums.DEBUG_LEVEL.INFO) 115 | if Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 116 | selected_cell_1.debug_show_selnum(1) 117 | if selected_cell_2: 118 | Enums.debug_print("[_on_cell_click] selected_cell_2: " + JSON.stringify(CmnFunc.find_gem_indices(selected_cell_2)), Enums.DEBUG_LEVEL.INFO) 119 | if Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 120 | selected_cell_2.debug_show_selnum(2) 121 | 122 | # STEP 2: effect 123 | if selected_cell_1: 124 | selected_cell_1.play_selected_anim(true) 125 | 126 | # STEP 3: swap cells if adjacent 127 | if selected_cell_1 and selected_cell_2 and CmnFunc.are_cells_adjacent(selected_cell_1, selected_cell_2): 128 | undo_cell_1 = selected_cell_1 129 | undo_cell_2 = selected_cell_2 130 | swap_gem_cells(selected_cell_1, selected_cell_2) 131 | 132 | # STEP 2: Swap gems: capture current gems, move scenes via tween 133 | 134 | func swap_gem_cells(swap_cell_1:CommonGemCell, swap_cell_2:CommonGemCell): 135 | if not swap_cell_1 or not swap_cell_2: 136 | return 137 | 138 | # A: signal game controller 139 | swap_cell_1.play_audio_gem_move() 140 | swap_cell_2.play_audio_gem_move() 141 | 142 | # B: turn off anim/effects before moving 143 | swap_cell_1.play_selected_anim(false) 144 | swap_cell_2.play_selected_anim(false) 145 | 146 | # C: logially swap 147 | var gem_cell_1 = swap_cell_1.gem_color 148 | var gem_cell_2 = swap_cell_2.gem_color 149 | swap_cell_1.initialize(gem_cell_2, GEM_DICT) 150 | swap_cell_2.initialize(gem_cell_1, GEM_DICT) 151 | 152 | # D: get position to restore to after move so tween sets/flows smoothly 153 | var orig_pos_cell_1 = swap_cell_1.sprite.global_position 154 | var orig_pos_cell_2 = swap_cell_2.sprite.global_position 155 | 156 | # E: re-position and tween 157 | call_deferred("setup_tween", swap_cell_2, orig_pos_cell_1, orig_pos_cell_2) 158 | call_deferred("setup_tween", swap_cell_1, orig_pos_cell_2, orig_pos_cell_1) 159 | 160 | # F: 161 | signal_game_props_count_gems() 162 | 163 | func setup_tween(gem_cell:CommonGemCell, start_pos:Vector2, end_pos:Vector2): 164 | gem_cell.sprite.global_position = start_pos # NOTE: Set initial position right before tweening 165 | tweens_running_cnt += 1 166 | var tween = get_tree().create_tween() 167 | tween.tween_property(gem_cell.sprite, "global_position", end_pos, Enums.TWEEN_TIME) 168 | tween.tween_callback(tween_completed) 169 | 170 | # STEP 3: Tween complete: clear vars/scan board 171 | 172 | func tween_completed(): 173 | Enums.debug_print("[tween_completed]: (counter="+str(tweens_running_cnt)+")", Enums.DEBUG_LEVEL.INFO) 174 | # A: update counter 175 | tweens_running_cnt -= 1 176 | 177 | # B: clear selections 178 | if selected_cell_1: 179 | selected_cell_1.debug_show_selnum(0) # DEBUG 180 | selected_cell_1 = null 181 | if selected_cell_2: 182 | selected_cell_2.debug_show_selnum(0) # DEBUG 183 | selected_cell_2 = null 184 | 185 | # C: once all tweens complete, check board 186 | if tweens_running_cnt == 0: 187 | process_game_round() 188 | 189 | # STEP 4: Check board, then explode first match found... (repeat until exhausted) 190 | 191 | func process_game_round(): 192 | Enums.debug_print("[process_game_round]: =====================================", Enums.DEBUG_LEVEL.INFO) 193 | Enums.debug_print("[process_game_round]: CHECKING BOARD... ", Enums.DEBUG_LEVEL.INFO) 194 | Enums.debug_print("[process_game_round]: =====================================", Enums.DEBUG_LEVEL.INFO) 195 | 196 | # A: 197 | # EX: 198 | # matches[ 199 | # { 200 | # "cells":["@Control@112:","@Control@113:","@Control@114:"], 201 | # "count":3}, 202 | # { 203 | # "cells":["@Control@119:","@Control@120:","@Control@121:"], 204 | # "count":3 205 | # } 206 | #] 207 | var matches = CmnFunc.get_all_matches(hbox_container) 208 | var gem_cells = CmnFunc.extract_gem_cells_from_matches(matches) 209 | Enums.debug_print("[process_game_round]: matches.. = "+JSON.stringify(matches), Enums.DEBUG_LEVEL.DEBUG) 210 | Enums.debug_print("[process_game_round]: gem_cells = "+str(gem_cells), Enums.DEBUG_LEVEL.DEBUG) 211 | if matches.size() > 0 and Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 212 | CmnDbg.debug_print_ascii_table(hbox_container, gem_cells) 213 | 214 | # B: 215 | var score = CmnFunc.calculate_score_for_matches(matches) 216 | board_props_score += score 217 | emit_signal("props_updated_score", board_props_score) 218 | 219 | # C: Update UI or game state as necessary 220 | signal_game_props_count_gems() 221 | 222 | # D: Handle resuolts: explode matches, or halt 223 | if matches.size() == 0: 224 | Enums.debug_print("[check_board_explode_matches]: No more matches. Board stable.", Enums.DEBUG_LEVEL.INFO) 225 | # A: 226 | # B: TODO: check for "NO MORE MOVES" 227 | var brent = CmnFunc.check_for_possible_moves(hbox_container) 228 | print("CHECK FOR MOVES = ", str(brent)) 229 | # C: Reset undo cells or perform other cleanup here. 230 | if undo_cell_1 and undo_cell_2: 231 | swap_gem_cells(undo_cell_2, undo_cell_1) 232 | undo_cell_1 = null 233 | undo_cell_2 = null 234 | else: 235 | # A: clear undo (swap back) info upon successful match 236 | undo_cell_1 = null 237 | undo_cell_2 = null 238 | # B: 239 | board_props_moves += 1 240 | emit_signal("props_updated_moves", board_props_moves) 241 | # B: explode matched gems 242 | var match_scores = CmnFunc.calculate_scores_for_each_match(matches) 243 | explode_refill_gems(matches, match_scores) 244 | 245 | func explode_refill_gems(matches: Array, match_scores: Dictionary): 246 | Enums.debug_print("[explode_refill_gems]: !!!!!!!!!!!=====================================", Enums.DEBUG_LEVEL.INFO) 247 | Enums.debug_print("[explode_refill_gems]: *EXPLODING* gem_cell count: "+str(matches.size()), Enums.DEBUG_LEVEL.INFO) 248 | Enums.debug_print("[explode_refill_gems]: !!!!!!!!!!!=====================================", Enums.DEBUG_LEVEL.INFO) 249 | if Enums.current_debug_level == Enums.DEBUG_LEVEL.DEBUG: 250 | CmnDbg.debug_print_ascii_table(hbox_container, CmnFunc.extract_gem_cells_from_matches(matches)) 251 | 252 | # A: explode selected 253 | for match in matches: 254 | for gem_cell in match["cells"]: 255 | var score = match_scores[gem_cell] 256 | gem_cell.explode_gem(gem_cell.gem_color, score) 257 | 258 | # B: Show game messages (ex: "Amazing!") 259 | emit_signal("board_match_multi", matches.size()) 260 | 261 | # TODO: FIXME: gem counts need to update faster (they currently update after the animation completes)!! 262 | # seemingly, this would work fine located here but its not - the UI update requires a frame update i guess? 263 | signal_game_props_count_gems() 264 | 265 | # B: let explode animation run 266 | await get_tree().create_timer(Enums.TWEEN_TIME).timeout 267 | 268 | # C: Dictionary to track columns and the number of gems to add in each column 269 | var columns_to_refill = {} 270 | for match in matches: 271 | for gem_cell in match["cells"]: 272 | var column_index = gem_cell.get_parent().get_index() 273 | var row_index = gem_cell.get_index() 274 | if column_index in columns_to_refill: 275 | columns_to_refill[column_index]["count"] += 1 276 | columns_to_refill[column_index]["highest"] = max(columns_to_refill[column_index]["highest"], row_index) 277 | else: 278 | columns_to_refill[column_index] = {"highest": row_index, "count": 1} 279 | 280 | # C: Process each column that needs refilling 281 | for column_index in columns_to_refill.keys(): 282 | var details = columns_to_refill[column_index] 283 | refill_column(column_index, details["highest"], details["count"]) 284 | 285 | # D: 286 | await get_tree().create_timer(Enums.EXPLODE_DELAY).timeout # let refill animations above complete (otherwise new, matching gems would start exploding before they're even in place!) 287 | process_game_round() 288 | 289 | func refill_column(column_index: int, highest_exploded_row: int, count_exploded: int): 290 | var column = hbox_container.get_child(column_index) 291 | var debug_str = "[refill_column] | colIdx: "+str(column_index)+" | hst_exp_row: "+str(highest_exploded_row)+" | count_exploded: "+str(count_exploded) 292 | Enums.debug_print(debug_str, Enums.DEBUG_LEVEL.DEBUG) 293 | 294 | # Move gems down from the row just above the first exploded row to the top 295 | # EXAMPLE: 296 | #| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 297 | #|---|---|---|---|---|---|---|---|---| 298 | #| 0 | | | | | | | | | 299 | #| 1 | G | G | G | | | | | | 300 | # = 301 | # EX: move gems from rowIdx=0 (0:0,0:2) down to rowIdx=1 302 | for i in range(highest_exploded_row - count_exploded, -1, -1): 303 | var source_gem_cell = column.get_child(i) 304 | var target_gem_cell = column.get_child(i + count_exploded) 305 | var rows_to_fall = count_exploded 306 | var debug_str2 = "[---------move] ["+str(i)+"] OLD->NEW: "+Enums.get_color_name_by_value(target_gem_cell.gem_color).substr(0,1)+ "->"+ Enums.get_color_name_by_value(source_gem_cell.gem_color).substr(0,1)+" ... rows_to_fall="+ str(rows_to_fall) 307 | Enums.debug_print(debug_str2, Enums.DEBUG_LEVEL.DEBUG) 308 | target_gem_cell.replace_gem(source_gem_cell.gem_color, rows_to_fall) 309 | 310 | # Refill the topmost cell(s) with new gems 311 | for i in range(count_exploded): 312 | var gem_cell = column.get_child(i) 313 | var random_color = GEM_COLOR_NAMES[randi() % GEM_COLOR_NAMES.size()] 314 | gem_cell.replace_gem(random_color) # Replace top gem with a new random gem 315 | var debug_str3 = "[-------refill] ["+str(i)+"] ADD: " + Enums.get_color_name_by_value(random_color) 316 | Enums.debug_print(debug_str3, Enums.DEBUG_LEVEL.DEBUG) 317 | 318 | func signal_game_props_count_gems(): 319 | var gems_dict = {} 320 | # Initialize dictionary with all gem types set to 0 321 | for color in Enums.GemColor.values(): 322 | gems_dict[Enums.get_color_name_by_value(color)] = 0 323 | 324 | # Assuming you have a way to iterate over all gem nodes 325 | # For example, if all gems are children of a node called "GemsContainer" 326 | for col in hbox_container.get_children(): 327 | for gem in col.get_children(): 328 | var color_name = Enums.get_color_name_by_value(gem.gem_color) 329 | gems_dict[color_name] += 1 330 | 331 | # Emit signal with the updated gems dictionary 332 | emit_signal("props_updated_gemsdict", gems_dict) 333 | 334 | # === Following are for buttons that arent on Food-Board 335 | 336 | func debug_make_gem_grid(): 337 | CmnDbg.debug_make_gem_grid(hbox_container, GEM_DICT) 338 | signal_game_props_count_gems() 339 | 340 | func debug_clear_debug_labels(): 341 | CmnDbg.debug_clear_debug_labels(hbox_container) 342 | 343 | func _on_inactivity_timer_timeout(): 344 | # A: Deselect all (e.g.: maybe one gem was clicked on and is just pulsating on screen) 345 | # TODO: ^^^ 346 | # B: Call the highlight function on timeout 347 | # WIP: highlight available moves after short delay 348 | #cont_debug_label.text += "- highlight_first_swap! \n" 349 | CmnFunc.highlight_first_swap(hbox_container) 350 | # C: Restart timer 351 | inactivity_timer.start() 352 | -------------------------------------------------------------------------------- /game_boards/board_space/board_space.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ehf6y6rrjy5l 2 | -------------------------------------------------------------------------------- /game_boards/board_space/board_space.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://b02gonq6mjgh8"] 2 | 3 | [ext_resource type="Script" uid="uid://ehf6y6rrjy5l" path="res://game_boards/board_space/board_space.gd" id="1_oexew"] 4 | [ext_resource type="PackedScene" uid="uid://bh2knk60qbton" path="res://game_boards/board_food/assets/board_square_0.tscn" id="2_j0p23"] 5 | [ext_resource type="PackedScene" uid="uid://cry3vnlah6fkx" path="res://game_boards/board_food/assets/board_square_1.tscn" id="3_hqege"] 6 | 7 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yj5kd"] 8 | bg_color = Color(0, 0, 0, 0.411765) 9 | 10 | [node name="BoardSpace" type="Node2D"] 11 | script = ExtResource("1_oexew") 12 | 13 | [node name="Background" type="Panel" parent="."] 14 | visible = false 15 | offset_right = 1024.0 16 | offset_bottom = 1024.0 17 | theme_override_styles/panel = SubResource("StyleBoxFlat_yj5kd") 18 | 19 | [node name="GridContainer" type="GridContainer" parent="."] 20 | offset_right = 1024.0 21 | offset_bottom = 1024.0 22 | theme_override_constants/h_separation = 0 23 | theme_override_constants/v_separation = 0 24 | columns = 8 25 | 26 | [node name="BoardSquare0" parent="GridContainer" instance=ExtResource("2_j0p23")] 27 | visible = false 28 | layout_mode = 2 29 | 30 | [node name="BoardSquare1" parent="GridContainer" instance=ExtResource("3_hqege")] 31 | visible = false 32 | layout_mode = 2 33 | 34 | [node name="BoardSquare2" parent="GridContainer" instance=ExtResource("2_j0p23")] 35 | visible = false 36 | layout_mode = 2 37 | 38 | [node name="BoardSquare3" parent="GridContainer" instance=ExtResource("3_hqege")] 39 | visible = false 40 | layout_mode = 2 41 | 42 | [node name="HBoxContainer" type="HBoxContainer" parent="."] 43 | custom_minimum_size = Vector2(1024, 1024) 44 | offset_right = 512.0 45 | offset_bottom = 512.0 46 | theme_override_constants/separation = 0 47 | 48 | [node name="VBoxContainer0" type="VBoxContainer" parent="HBoxContainer"] 49 | custom_minimum_size = Vector2(128, 0) 50 | layout_mode = 2 51 | theme_override_constants/separation = 0 52 | 53 | [node name="VBoxContainer1" type="VBoxContainer" parent="HBoxContainer"] 54 | custom_minimum_size = Vector2(128, 0) 55 | layout_mode = 2 56 | theme_override_constants/separation = 0 57 | 58 | [node name="VBoxContainer2" type="VBoxContainer" parent="HBoxContainer"] 59 | custom_minimum_size = Vector2(128, 0) 60 | layout_mode = 2 61 | theme_override_constants/separation = 0 62 | 63 | [node name="VBoxContainer3" type="VBoxContainer" parent="HBoxContainer"] 64 | custom_minimum_size = Vector2(128, 0) 65 | layout_mode = 2 66 | theme_override_constants/separation = 0 67 | 68 | [node name="VBoxContainer4" type="VBoxContainer" parent="HBoxContainer"] 69 | custom_minimum_size = Vector2(128, 0) 70 | layout_mode = 2 71 | theme_override_constants/separation = 0 72 | 73 | [node name="VBoxContainer5" type="VBoxContainer" parent="HBoxContainer"] 74 | custom_minimum_size = Vector2(128, 0) 75 | layout_mode = 2 76 | theme_override_constants/separation = 0 77 | 78 | [node name="VBoxContainer6" type="VBoxContainer" parent="HBoxContainer"] 79 | custom_minimum_size = Vector2(128, 0) 80 | layout_mode = 2 81 | theme_override_constants/separation = 0 82 | 83 | [node name="VBoxContainer7" type="VBoxContainer" parent="HBoxContainer"] 84 | custom_minimum_size = Vector2(128, 0) 85 | layout_mode = 2 86 | theme_override_constants/separation = 0 87 | 88 | [node name="InactivityTimer" type="Timer" parent="."] 89 | wait_time = 10.0 90 | one_shot = true 91 | 92 | [connection signal="timeout" from="InactivityTimer" to="." method="_on_inactivity_timer_timeout"] 93 | -------------------------------------------------------------------------------- /game_boards/board_space/game_space.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | # VARS 3 | var CmnFunc = preload("res://game_boards/all_common/common.gd").new() 4 | # SCENES 5 | @onready var game_top_h_box:HBoxContainer = $ContTopBar/GameTopHBox 6 | @onready var game_stats:VBoxContainer = $ContGameStats/GameStats 7 | @onready var game_board:GemBoardSpace = $ContBoard/GemBoard 8 | @onready var animation_player:AnimationPlayer = $ContMessages/AnimationPlayer 9 | @onready var center_container:CenterContainer = $ContMessages/CenterContainer 10 | @onready var label_msg_btm:RichTextLabel = $ContMessages/CenterContainer/LabelMsgBtm 11 | @onready var label_msg_top:RichTextLabel = $ContMessages/CenterContainer/LabelMsgTop 12 | 13 | func _ready(): 14 | # A: 15 | game_board.connect("props_updated_moves", self._on_props_updated_moves) 16 | game_board.connect("props_updated_score", self._on_props_updated_score) 17 | game_board.connect("props_updated_gemsdict", self._on_props_updated_gemsdict) 18 | game_board.connect("board_match_multi", self._on_board_match_multi) 19 | game_board.connect("show_game_msg", self._on_show_game_msg) 20 | # B: 21 | center_container.visible = false 22 | 23 | # ========================================================= 24 | 25 | func _on_props_updated_gemsdict(gems_dict:Dictionary): 26 | # EX: `{ "RED": 9, "ORG": 11, "YLW": 14, "GRN": 9, "BLU": 9, "PRP": 12 }` 27 | game_stats.get_child(0).get_child(1).text = str(gems_dict["RED"]) 28 | game_stats.get_child(1).get_child(1).text = str(gems_dict["ORG"]) 29 | game_stats.get_child(2).get_child(1).text = str(gems_dict["YLW"]) 30 | game_stats.get_child(3).get_child(1).text = str(gems_dict["GRN"]) 31 | game_stats.get_child(4).get_child(1).text = str(gems_dict["BLU"]) 32 | game_stats.get_child(5).get_child(1).text = str(gems_dict["PRP"]) 33 | 34 | func _on_props_updated_score(score:int): 35 | game_top_h_box.get_child(0).get_child(1).text = str(score) 36 | 37 | func _on_props_updated_moves(moves:int): 38 | game_top_h_box.get_child(1).get_child(1).text = str(moves) 39 | 40 | func _on_show_game_msg(msg:String): 41 | label_msg_btm.text = msg 42 | label_msg_top.text = msg 43 | animation_player.play("show_msg_game") 44 | await CmnFunc.delay_time(self, 0.5) 45 | center_container.visible = false 46 | 47 | func _on_board_match_multi(match_cnt:int): 48 | # TODO: add more messages 49 | if match_cnt >= 2: 50 | animation_player.play("show_msg_amazing") 51 | 52 | func _on_btn_newgame_pressed(): 53 | game_board.new_game() 54 | 55 | func _on_btn_quit_game(): 56 | # TODO: 20240515: convert to `signal()` for Main.tscn to hide all boards, etc. 57 | visible = false 58 | 59 | func _on_btn_checkerboard(): 60 | game_board.debug_make_gem_grid() 61 | #game_board.debug_make_match_col() 62 | 63 | func _on_btn_debug_pressed(): 64 | game_board.debug_clear_debug_labels() 65 | 66 | # ========================================================= 67 | 68 | func init_game(): 69 | game_board.init_game() 70 | -------------------------------------------------------------------------------- /game_boards/board_space/game_space.gd.uid: -------------------------------------------------------------------------------- 1 | uid://5l0onkp06f8c 2 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://juut7p425bob" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /main.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var game_board_1 = $GameFood 4 | @onready var game_board_2 = $GameSpace 5 | 6 | func _on_btn_board_1_pressed(): 7 | game_board_1.visible = true 8 | game_board_2.visible = false 9 | 10 | func _on_btn_board_2_pressed(): 11 | game_board_1.visible = false 12 | game_board_2.visible = true 13 | game_board_2.init_game() 14 | -------------------------------------------------------------------------------- /main.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ye86ym028re8 2 | -------------------------------------------------------------------------------- /main.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=10 format=3 uid="uid://mu2k87xf3lma"] 2 | 3 | [ext_resource type="Script" uid="uid://ye86ym028re8" path="res://main.gd" id="1_73dvc"] 4 | [ext_resource type="Texture2D" uid="uid://cnlqirgwr8d4" path="res://assets/bkgd/Background.png" id="1_t1b1c"] 5 | [ext_resource type="FontFile" uid="uid://dlhwrp5jwkrll" path="res://assets/fonts/Acme-Regular.ttf" id="2_j1i6k"] 6 | [ext_resource type="Texture2D" uid="uid://27rcw10bp2xt" path="res://assets/gui/ButtonText_Large_Green_Round.png" id="3_nqt0h"] 7 | [ext_resource type="Texture2D" uid="uid://c4hpyl2askghn" path="res://assets/gui/Box_Blue_Rounded.png" id="4_wttq0"] 8 | [ext_resource type="Texture2D" uid="uid://dcow071sb2a7i" path="res://assets/gui/ButtonText_Large_Orange_Round.png" id="6_2tan1"] 9 | [ext_resource type="PackedScene" uid="uid://b5bfm2244ywxk" path="res://game_boards/board_food/game_food.tscn" id="6_hsxpn"] 10 | [ext_resource type="PackedScene" uid="uid://bkaimvifjwkai" path="res://game_boards/board_space/game_space.tscn" id="7_w5d02"] 11 | 12 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_uhytr"] 13 | bg_color = Color(0, 0, 0, 0.133333) 14 | 15 | [node name="Main" type="Node2D"] 16 | script = ExtResource("1_73dvc") 17 | 18 | [node name="Background" type="TextureRect" parent="."] 19 | offset_right = 2000.0 20 | offset_bottom = 1390.0 21 | texture = ExtResource("1_t1b1c") 22 | expand_mode = 2 23 | 24 | [node name="GameTopBkgd" type="Panel" parent="."] 25 | anchors_preset = 10 26 | anchor_right = 1.0 27 | offset_right = 2000.0 28 | offset_bottom = 350.0 29 | grow_horizontal = 2 30 | theme_override_styles/panel = SubResource("StyleBoxFlat_uhytr") 31 | 32 | [node name="RTL-Title" type="RichTextLabel" parent="GameTopBkgd"] 33 | custom_minimum_size = Vector2(2000, 250) 34 | layout_mode = 2 35 | offset_top = 50.0 36 | offset_right = 2000.0 37 | offset_bottom = 300.0 38 | grow_horizontal = 2 39 | theme_override_colors/default_color = Color(0.223529, 0.223529, 0.223529, 1) 40 | theme_override_colors/font_outline_color = Color(0.772549, 0.843137, 0.988235, 0.882353) 41 | theme_override_constants/outline_size = 50 42 | theme_override_fonts/normal_font = ExtResource("2_j1i6k") 43 | theme_override_font_sizes/normal_font_size = 210 44 | bbcode_enabled = true 45 | text = "[center]MATCH 3[/center]" 46 | scroll_active = false 47 | shortcut_keys_enabled = false 48 | 49 | [node name="TextureRect" type="TextureRect" parent="."] 50 | offset_left = 542.0 51 | offset_top = 409.0 52 | offset_right = 2051.0 53 | offset_bottom = 1919.0 54 | scale = Vector2(0.6, 0.6) 55 | texture = ExtResource("4_wttq0") 56 | 57 | [node name="BtnBoard1" type="TextureButton" parent="."] 58 | offset_left = 651.0 59 | offset_top = 584.0 60 | offset_right = 1810.0 61 | offset_bottom = 942.0 62 | scale = Vector2(0.6, 0.6) 63 | texture_normal = ExtResource("3_nqt0h") 64 | 65 | [node name="Label" type="Label" parent="BtnBoard1"] 66 | layout_mode = 1 67 | anchors_preset = 15 68 | anchor_right = 1.0 69 | anchor_bottom = 1.0 70 | offset_left = 6.66675 71 | offset_right = 6.66675 72 | grow_horizontal = 2 73 | grow_vertical = 2 74 | theme_override_font_sizes/font_size = 120 75 | text = "BOARD 1" 76 | horizontal_alignment = 1 77 | vertical_alignment = 1 78 | 79 | [node name="BtnBoard2" type="TextureButton" parent="."] 80 | offset_left = 659.0 81 | offset_top = 945.0 82 | offset_right = 1818.0 83 | offset_bottom = 1303.0 84 | scale = Vector2(0.6, 0.6) 85 | texture_normal = ExtResource("6_2tan1") 86 | 87 | [node name="Label" type="Label" parent="BtnBoard2"] 88 | layout_mode = 1 89 | anchors_preset = 15 90 | anchor_right = 1.0 91 | anchor_bottom = 1.0 92 | offset_left = 6.66675 93 | offset_right = 6.66675 94 | grow_horizontal = 2 95 | grow_vertical = 2 96 | theme_override_font_sizes/font_size = 120 97 | text = "BOARD 2" 98 | horizontal_alignment = 1 99 | vertical_alignment = 1 100 | 101 | [node name="GameFood" parent="." instance=ExtResource("6_hsxpn")] 102 | visible = false 103 | 104 | [node name="GameSpace" parent="." instance=ExtResource("7_w5d02")] 105 | visible = false 106 | 107 | [connection signal="pressed" from="BtnBoard1" to="." method="_on_btn_board_1_pressed"] 108 | [connection signal="pressed" from="BtnBoard2" to="." method="_on_btn_board_2_pressed"] 109 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="Godot Match 3" 14 | run/main_scene="res://main.tscn" 15 | config/features=PackedStringArray("4.4", "GL Compatibility") 16 | config/icon="res://icon.svg" 17 | 18 | [autoload] 19 | 20 | Enums="*res://enums.gd" 21 | 22 | [display] 23 | 24 | window/size/viewport_width=2000 25 | window/size/viewport_height=1390 26 | window/stretch/mode="canvas_items" 27 | window/handheld/orientation=4 28 | 29 | [rendering] 30 | 31 | renderer/rendering_method="gl_compatibility" 32 | renderer/rendering_method.mobile="gl_compatibility" 33 | textures/vram_compression/import_etc2_astc=true 34 | -------------------------------------------------------------------------------- /themes/debug_label_theme.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Theme" load_steps=2 format=3 uid="uid://hahh0mrfx2q1"] 2 | 3 | [ext_resource type="FontFile" uid="uid://bylgyjavx5yts" path="res://assets/fonts/Quicksand-Regular.ttf" id="1_jo8de"] 4 | 5 | [resource] 6 | default_font = ExtResource("1_jo8de") 7 | default_font_size = 18 8 | -------------------------------------------------------------------------------- /themes/game_msg_btm.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Theme" load_steps=2 format=3 uid="uid://duftrpb020ewi"] 2 | 3 | [ext_resource type="FontFile" uid="uid://dlhwrp5jwkrll" path="res://assets/fonts/Acme-Regular.ttf" id="1_65jam"] 4 | 5 | [resource] 6 | RichTextLabel/colors/default_color = Color(0.807843, 0.647059, 0, 1) 7 | RichTextLabel/colors/font_outline_color = Color(0.364706, 0.270588, 0.00784314, 1) 8 | RichTextLabel/colors/font_shadow_color = Color(0, 0, 0, 0.411765) 9 | RichTextLabel/constants/outline_size = 75 10 | RichTextLabel/constants/shadow_offset_x = 3 11 | RichTextLabel/constants/shadow_offset_y = 3 12 | RichTextLabel/font_sizes/normal_font_size = 204 13 | RichTextLabel/fonts/normal_font = ExtResource("1_65jam") 14 | -------------------------------------------------------------------------------- /themes/game_msg_top.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Theme" load_steps=2 format=3 uid="uid://c68uhjmxln8ao"] 2 | 3 | [ext_resource type="FontFile" uid="uid://dlhwrp5jwkrll" path="res://assets/fonts/Acme-Regular.ttf" id="1_fu7ax"] 4 | 5 | [resource] 6 | RichTextLabel/colors/default_color = Color(0.807843, 0.647059, 0, 1) 7 | RichTextLabel/colors/font_outline_color = Color(1, 1, 1, 1) 8 | RichTextLabel/constants/outline_size = 15 9 | RichTextLabel/font_sizes/normal_font_size = 204 10 | RichTextLabel/fonts/normal_font = ExtResource("1_fu7ax") 11 | -------------------------------------------------------------------------------- /themes/game_stats_label_theme.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Theme" load_steps=2 format=3 uid="uid://1cdmnqyil8gy"] 2 | 3 | [ext_resource type="FontFile" uid="uid://bylgyjavx5yts" path="res://assets/fonts/Quicksand-Regular.ttf" id="1_mun42"] 4 | 5 | [resource] 6 | default_font = ExtResource("1_mun42") 7 | Label/colors/font_color = Color(0.945098, 0.945098, 0.945098, 1) 8 | Label/colors/font_outline_color = Color(0, 0, 0, 0.411765) 9 | Label/colors/font_shadow_color = Color(0, 0, 0, 0.411765) 10 | Label/constants/shadow_offset_x = 3 11 | Label/constants/shadow_offset_y = 3 12 | Label/font_sizes/font_size = 84 13 | -------------------------------------------------------------------------------- /themes/game_top_label_theme.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Theme" load_steps=2 format=3 uid="uid://c58sv51ac2qkl"] 2 | 3 | [ext_resource type="FontFile" uid="uid://bylgyjavx5yts" path="res://assets/fonts/Quicksand-Regular.ttf" id="1_0i4hy"] 4 | 5 | [resource] 6 | default_font = ExtResource("1_0i4hy") 7 | Label/colors/font_color = Color(0.945098, 0.945098, 0.945098, 1) 8 | Label/colors/font_outline_color = Color(0, 0, 0, 0.411765) 9 | Label/colors/font_shadow_color = Color(0, 0, 0, 0.411765) 10 | Label/constants/shadow_offset_x = 3 11 | Label/constants/shadow_offset_y = 3 12 | Label/font_sizes/font_size = 72 13 | --------------------------------------------------------------------------------