├── .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 |
10 | Start Screen
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | Board 1 (Food)
19 |
20 |
21 |
22 |
23 |
24 | Board 2 (Space)
25 |
26 |
27 |
28 |
29 |
30 |
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 |
--------------------------------------------------------------------------------