├── .gitattributes
├── .github
├── bug_report.md
└── feature_request.md
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── icon.svg
└── images
├── bus_layout.png
├── download_zip.png
├── global_camera.png
├── global_clock_parameters.png
├── global_effects_default.png
├── gradients
├── ammo8.png
├── borkfest.png
├── coffee.png
├── dreamscapes.png
├── funkyfutures.png
├── goosebumps_gold.png
├── nyx8.png
├── oil6.png
├── pollen8.png
├── rust_gold.png
├── slso8.png
├── submerged_chimera.png
└── winter_wonderland.png
├── import_godot.png
├── object_pool_node.png
├── object_pool_parameters.png
└── use_template.png
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Normalize EOL for all files that Git considers text files.
2 | * text=auto eol=lf
--------------------------------------------------------------------------------
/.github/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ""
5 | labels: "\U0001F41B bug"
6 | assignees: ""
7 | ---
8 |
9 | Godot version: x.x.x
10 |
11 | **Describe the bug**
12 | A clear and concise description of what the bug is.
13 |
14 | **To Reproduce**
15 | Steps to reproduce the behavior:
16 |
17 | 1. Go to '...'
18 | 2. Click on '....'
19 | 3. Scroll down to '....'
20 | 4. See error
21 |
22 | **Expected behavior**
23 | A clear and concise description of what you expected to happen.
24 |
25 | **Screenshots**
26 | If applicable, add screenshots to help explain your problem.
27 |
28 | **Desktop (please complete the following information):**
29 |
30 | - OS: [e.g. iOS]
31 | - Browser [e.g. chrome, safari]
32 | - Version [e.g. 22]
33 |
34 | **Smartphone (please complete the following information):**
35 |
36 | - Device: [e.g. iPhone6]
37 | - OS: [e.g. iOS8.1]
38 | - Browser [e.g. stock browser, safari]
39 | - Version [e.g. 22]
40 |
41 | **Additional context**
42 | Add any other context about the problem here.
43 |
--------------------------------------------------------------------------------
/.github/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ""
5 | labels: "⭐ feature"
6 | assignees: ""
7 | ---
8 |
9 | **Is your feature request related to a problem? Please describe.**
10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
11 |
12 | **Describe the solution you'd like**
13 | A clear and concise description of what you want to happen.
14 |
15 | **Describe alternatives you've considered**
16 | A clear and concise description of any alternative solutions or features you've considered.
17 |
18 | **Additional context**
19 | Add any other context or screenshots about the feature request here.
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/visualstudio,csharp,godot,visualstudiocode
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,csharp,godot,visualstudiocode
3 |
4 | ### Csharp ###
5 | ## Ignore Visual Studio temporary files, build results, and
6 | ## files generated by popular Visual Studio add-ons.
7 | ##
8 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
9 |
10 | # User-specific files
11 | *.rsuser
12 | *.suo
13 | *.user
14 | *.userosscache
15 | *.sln.docstates
16 |
17 | # User-specific files (MonoDevelop/Xamarin Studio)
18 | *.userprefs
19 |
20 | # Mono auto generated files
21 | mono_crash.*
22 |
23 | # Build results
24 | [Dd]ebug/
25 | [Dd]ebugPublic/
26 | [Rr]elease/
27 | [Rr]eleases/
28 | x64/
29 | x86/
30 | [Ww][Ii][Nn]32/
31 | [Aa][Rr][Mm]/
32 | [Aa][Rr][Mm]64/
33 | bld/
34 | [Bb]in/
35 | [Oo]bj/
36 | [Ll]og/
37 | [Ll]ogs/
38 |
39 | # Visual Studio 2015/2017 cache/options directory
40 | .vs/
41 | # Uncomment if you have tasks that create the project's static files in wwwroot
42 | #wwwroot/
43 |
44 | # Visual Studio 2017 auto generated files
45 | Generated\ Files/
46 |
47 | # MSTest test Results
48 | [Tt]est[Rr]esult*/
49 | [Bb]uild[Ll]og.*
50 |
51 | # NUnit
52 | *.VisualState.xml
53 | TestResult.xml
54 | nunit-*.xml
55 |
56 | # Build Results of an ATL Project
57 | [Dd]ebugPS/
58 | [Rr]eleasePS/
59 | dlldata.c
60 |
61 | # Benchmark Results
62 | BenchmarkDotNet.Artifacts/
63 |
64 | # .NET Core
65 | project.lock.json
66 | project.fragment.lock.json
67 | artifacts/
68 |
69 | # ASP.NET Scaffolding
70 | ScaffoldingReadMe.txt
71 |
72 | # StyleCop
73 | StyleCopReport.xml
74 |
75 | # Files built by Visual Studio
76 | *_i.c
77 | *_p.c
78 | *_h.h
79 | *.ilk
80 | *.meta
81 | *.obj
82 | *.iobj
83 | *.pch
84 | *.pdb
85 | *.ipdb
86 | *.pgc
87 | *.pgd
88 | *.rsp
89 | *.sbr
90 | *.tlb
91 | *.tli
92 | *.tlh
93 | *.tmp
94 | *.tmp_proj
95 | *_wpftmp.csproj
96 | *.log
97 | *.tlog
98 | *.vspscc
99 | *.vssscc
100 | .builds
101 | *.pidb
102 | *.svclog
103 | *.scc
104 |
105 | # Chutzpah Test files
106 | _Chutzpah*
107 |
108 | # Visual C++ cache files
109 | ipch/
110 | *.aps
111 | *.ncb
112 | *.opendb
113 | *.opensdf
114 | *.sdf
115 | *.cachefile
116 | *.VC.db
117 | *.VC.VC.opendb
118 |
119 | # Visual Studio profiler
120 | *.psess
121 | *.vsp
122 | *.vspx
123 | *.sap
124 |
125 | # Visual Studio Trace Files
126 | *.e2e
127 |
128 | # TFS 2012 Local Workspace
129 | $tf/
130 |
131 | # Guidance Automation Toolkit
132 | *.gpState
133 |
134 | # ReSharper is a .NET coding add-in
135 | _ReSharper*/
136 | *.[Rr]e[Ss]harper
137 | *.DotSettings.user
138 |
139 | # TeamCity is a build add-in
140 | _TeamCity*
141 |
142 | # DotCover is a Code Coverage Tool
143 | *.dotCover
144 |
145 | # AxoCover is a Code Coverage Tool
146 | .axoCover/*
147 | !.axoCover/settings.json
148 |
149 | # Coverlet is a free, cross platform Code Coverage Tool
150 | coverage*.json
151 | coverage*.xml
152 | coverage*.info
153 |
154 | # Visual Studio code coverage results
155 | *.coverage
156 | *.coveragexml
157 |
158 | # NCrunch
159 | _NCrunch_*
160 | .*crunch*.local.xml
161 | nCrunchTemp_*
162 |
163 | # MightyMoose
164 | *.mm.*
165 | AutoTest.Net/
166 |
167 | # Web workbench (sass)
168 | .sass-cache/
169 |
170 | # Installshield output folder
171 | [Ee]xpress/
172 |
173 | # DocProject is a documentation generator add-in
174 | DocProject/buildhelp/
175 | DocProject/Help/*.HxT
176 | DocProject/Help/*.HxC
177 | DocProject/Help/*.hhc
178 | DocProject/Help/*.hhk
179 | DocProject/Help/*.hhp
180 | DocProject/Help/Html2
181 | DocProject/Help/html
182 |
183 | # Click-Once directory
184 | publish/
185 |
186 | # Publish Web Output
187 | *.[Pp]ublish.xml
188 | *.azurePubxml
189 | # Note: Comment the next line if you want to checkin your web deploy settings,
190 | # but database connection strings (with potential passwords) will be unencrypted
191 | *.pubxml
192 | *.publishproj
193 |
194 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
195 | # checkin your Azure Web App publish settings, but sensitive information contained
196 | # in these scripts will be unencrypted
197 | PublishScripts/
198 |
199 | # NuGet Packages
200 | nupkg/
201 | *.nupkg
202 | # NuGet Symbol Packages
203 | *.snupkg
204 | # The packages folder can be ignored because of Package Restore
205 | **/[Pp]ackages/*
206 | # except build/, which is used as an MSBuild target.
207 | !**/[Pp]ackages/build/
208 | # Uncomment if necessary however generally it will be regenerated when needed
209 | #!**/[Pp]ackages/repositories.config
210 | # NuGet v3's project.json files produces more ignorable files
211 | *.nuget.props
212 | *.nuget.targets
213 |
214 | # Microsoft Azure Build Output
215 | csx/
216 | *.build.csdef
217 |
218 | # Microsoft Azure Emulator
219 | ecf/
220 | rcf/
221 |
222 | # Windows Store app package directories and files
223 | AppPackages/
224 | BundleArtifacts/
225 | Package.StoreAssociation.xml
226 | _pkginfo.txt
227 | *.appx
228 | *.appxbundle
229 | *.appxupload
230 |
231 | # Visual Studio cache files
232 | # files ending in .cache can be ignored
233 | *.[Cc]ache
234 | # but keep track of directories ending in .cache
235 | !?*.[Cc]ache/
236 |
237 | # Others
238 | ClientBin/
239 | ~$*
240 | *~
241 | *.dbmdl
242 | *.dbproj.schemaview
243 | *.jfm
244 | *.pfx
245 | *.publishsettings
246 | orleans.codegen.cs
247 |
248 | # Including strong name files can present a security risk
249 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
250 | #*.snk
251 |
252 | # Since there are multiple workflows, uncomment next line to ignore bower_components
253 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
254 | #bower_components/
255 |
256 | # RIA/Silverlight projects
257 | Generated_Code/
258 |
259 | # Backup & report files from converting an old project file
260 | # to a newer Visual Studio version. Backup files are not needed,
261 | # because we have git ;-)
262 | _UpgradeReport_Files/
263 | Backup*/
264 | UpgradeLog*.XML
265 | UpgradeLog*.htm
266 | ServiceFabricBackup/
267 | *.rptproj.bak
268 |
269 | # SQL Server files
270 | *.mdf
271 | *.ldf
272 | *.ndf
273 |
274 | # Business Intelligence projects
275 | *.rdl.data
276 | *.bim.layout
277 | *.bim_*.settings
278 | *.rptproj.rsuser
279 | *- [Bb]ackup.rdl
280 | *- [Bb]ackup ([0-9]).rdl
281 | *- [Bb]ackup ([0-9][0-9]).rdl
282 |
283 | # Microsoft Fakes
284 | FakesAssemblies/
285 |
286 | # GhostDoc plugin setting file
287 | *.GhostDoc.xml
288 |
289 | # Node.js Tools for Visual Studio
290 | .ntvs_analysis.dat
291 | node_modules/
292 |
293 | # Visual Studio 6 build log
294 | *.plg
295 |
296 | # Visual Studio 6 workspace options file
297 | *.opt
298 |
299 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
300 | *.vbw
301 |
302 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
303 | *.vbp
304 |
305 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
306 | *.dsw
307 | *.dsp
308 |
309 | # Visual Studio 6 technical files
310 |
311 | # Visual Studio LightSwitch build output
312 | **/*.HTMLClient/GeneratedArtifacts
313 | **/*.DesktopClient/GeneratedArtifacts
314 | **/*.DesktopClient/ModelManifest.xml
315 | **/*.Server/GeneratedArtifacts
316 | **/*.Server/ModelManifest.xml
317 | _Pvt_Extensions
318 |
319 | # Paket dependency manager
320 | .paket/paket.exe
321 | paket-files/
322 |
323 | # FAKE - F# Make
324 | .fake/
325 |
326 | # CodeRush personal settings
327 | .cr/personal
328 |
329 | # Python Tools for Visual Studio (PTVS)
330 | __pycache__/
331 | *.pyc
332 |
333 | # Cake - Uncomment if you are using it
334 | # tools/**
335 | # !tools/packages.config
336 |
337 | # Tabs Studio
338 | *.tss
339 |
340 | # Telerik's JustMock configuration file
341 | *.jmconfig
342 |
343 | # BizTalk build output
344 | *.btp.cs
345 | *.btm.cs
346 | *.odx.cs
347 | *.xsd.cs
348 |
349 | # OpenCover UI analysis results
350 | OpenCover/
351 |
352 | # Azure Stream Analytics local run output
353 | ASALocalRun/
354 |
355 | # MSBuild Binary and Structured Log
356 | *.binlog
357 |
358 | # NVidia Nsight GPU debugger configuration file
359 | *.nvuser
360 |
361 | # MFractors (Xamarin productivity tool) working folder
362 | .mfractor/
363 |
364 | # Local History for Visual Studio
365 | .localhistory/
366 |
367 | # Visual Studio History (VSHistory) files
368 | .vshistory/
369 |
370 | # BeatPulse healthcheck temp database
371 | healthchecksdb
372 |
373 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
374 | MigrationBackup/
375 |
376 | # Ionide (cross platform F# VS Code tools) working folder
377 | .ionide/
378 |
379 | # Fody - auto-generated XML schema
380 | FodyWeavers.xsd
381 |
382 | # VS Code files for those working on multiple tools
383 | .vscode/*
384 | !.vscode/settings.json
385 | !.vscode/tasks.json
386 | !.vscode/launch.json
387 | !.vscode/extensions.json
388 | *.code-workspace
389 |
390 | # Local History for Visual Studio Code
391 | .history/
392 |
393 | # Windows Installer files from build outputs
394 | *.cab
395 | *.msi
396 | *.msix
397 | *.msm
398 | *.msp
399 |
400 | # JetBrains Rider
401 | *.sln.iml
402 |
403 | ### Godot ###
404 | # Godot 4+ specific ignores
405 | .godot/
406 |
407 | # Godot-specific ignores
408 | .import/
409 | export.cfg
410 | export_presets.cfg
411 | .generated/
412 | # Imported translations (automatically generated from CSV files)
413 | *.translation
414 |
415 | # Mono-specific ignores
416 | .mono/
417 | data_*/
418 | mono_crash.*.json
419 |
420 | ### VisualStudioCode ###
421 | !.vscode/*.code-snippets
422 |
423 | # Local History for Visual Studio Code
424 |
425 | # Built Visual Studio Code Extensions
426 | *.vsix
427 |
428 | ### VisualStudioCode Patch ###
429 | # Ignore all local history of files
430 | .history
431 | .ionide
432 |
433 | ### VisualStudio ###
434 |
435 | # User-specific files
436 |
437 | # User-specific files (MonoDevelop/Xamarin Studio)
438 |
439 | # Mono auto generated files
440 |
441 | # Build results
442 |
443 | # Visual Studio 2015/2017 cache/options directory
444 | # Uncomment if you have tasks that create the project's static files in wwwroot
445 |
446 | # Visual Studio 2017 auto generated files
447 |
448 | # MSTest test Results
449 |
450 | # NUnit
451 |
452 | # Build Results of an ATL Project
453 |
454 | # Benchmark Results
455 |
456 | # .NET Core
457 |
458 | # ASP.NET Scaffolding
459 |
460 | # StyleCop
461 |
462 | # Files built by Visual Studio
463 |
464 | # Chutzpah Test files
465 |
466 | # Visual C++ cache files
467 |
468 | # Visual Studio profiler
469 |
470 | # Visual Studio Trace Files
471 |
472 | # TFS 2012 Local Workspace
473 |
474 | # Guidance Automation Toolkit
475 |
476 | # ReSharper is a .NET coding add-in
477 |
478 | # TeamCity is a build add-in
479 |
480 | # DotCover is a Code Coverage Tool
481 |
482 | # AxoCover is a Code Coverage Tool
483 |
484 | # Coverlet is a free, cross platform Code Coverage Tool
485 |
486 | # Visual Studio code coverage results
487 |
488 | # NCrunch
489 |
490 | # MightyMoose
491 |
492 | # Web workbench (sass)
493 |
494 | # Installshield output folder
495 |
496 | # DocProject is a documentation generator add-in
497 |
498 | # Click-Once directory
499 |
500 | # Publish Web Output
501 | # Note: Comment the next line if you want to checkin your web deploy settings,
502 | # but database connection strings (with potential passwords) will be unencrypted
503 |
504 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
505 | # checkin your Azure Web App publish settings, but sensitive information contained
506 | # in these scripts will be unencrypted
507 |
508 | # NuGet Packages
509 | # NuGet Symbol Packages
510 | # The packages folder can be ignored because of Package Restore
511 | # except build/, which is used as an MSBuild target.
512 | # Uncomment if necessary however generally it will be regenerated when needed
513 | # NuGet v3's project.json files produces more ignorable files
514 |
515 | # Microsoft Azure Build Output
516 |
517 | # Microsoft Azure Emulator
518 |
519 | # Windows Store app package directories and files
520 |
521 | # Visual Studio cache files
522 | # files ending in .cache can be ignored
523 | # but keep track of directories ending in .cache
524 |
525 | # Others
526 |
527 | # Including strong name files can present a security risk
528 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
529 |
530 | # Since there are multiple workflows, uncomment next line to ignore bower_components
531 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
532 |
533 | # RIA/Silverlight projects
534 |
535 | # Backup & report files from converting an old project file
536 | # to a newer Visual Studio version. Backup files are not needed,
537 | # because we have git ;-)
538 |
539 | # SQL Server files
540 |
541 | # Business Intelligence projects
542 |
543 | # Microsoft Fakes
544 |
545 | # GhostDoc plugin setting file
546 |
547 | # Node.js Tools for Visual Studio
548 |
549 | # Visual Studio 6 build log
550 |
551 | # Visual Studio 6 workspace options file
552 |
553 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
554 |
555 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
556 |
557 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
558 |
559 | # Visual Studio 6 technical files
560 |
561 | # Visual Studio LightSwitch build output
562 |
563 | # Paket dependency manager
564 |
565 | # FAKE - F# Make
566 |
567 | # CodeRush personal settings
568 |
569 | # Python Tools for Visual Studio (PTVS)
570 |
571 | # Cake - Uncomment if you are using it
572 | # tools/**
573 | # !tools/packages.config
574 |
575 | # Tabs Studio
576 |
577 | # Telerik's JustMock configuration file
578 |
579 | # BizTalk build output
580 |
581 | # OpenCover UI analysis results
582 |
583 | # Azure Stream Analytics local run output
584 |
585 | # MSBuild Binary and Structured Log
586 |
587 | # NVidia Nsight GPU debugger configuration file
588 |
589 | # MFractors (Xamarin productivity tool) working folder
590 |
591 | # Local History for Visual Studio
592 |
593 | # Visual Studio History (VSHistory) files
594 |
595 | # BeatPulse healthcheck temp database
596 |
597 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
598 |
599 | # Ionide (cross platform F# VS Code tools) working folder
600 |
601 | # Fody - auto-generated XML schema
602 |
603 | # VS Code files for those working on multiple tools
604 |
605 | # Local History for Visual Studio Code
606 |
607 | # Windows Installer files from build outputs
608 |
609 | # JetBrains Rider
610 |
611 | ### VisualStudio Patch ###
612 | # Additional files built by Visual Studio
613 |
614 | # End of https://www.toptal.com/developers/gitignore/api/visualstudio,csharp,godot,visualstudiocode
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contribution
2 |
3 | Existing issues marked with a [help wanted tag](https://github.com/ninetailsrabbit/indie-blueprint/labels/help%20wanted) are the best candidates for contributions. Issues with that tag are either not prioritised, or are in need of help with someone with more expertise within a certain area
4 |
5 | ## Reporting bugs
6 |
7 | 1. **[Follow the template for bug reports.](https://github.com/ninetailsrabbit/indie-blueprint/issues/new?assignees=ninetailsrabbit&labels=%F0%9F%90%9B+bug&projects=&template=bug_report.md&title)**
8 | 2. **Golden rule** Open _one_ ussie for _one_ bug .
9 | 3. [Search for existing reports first.](https://github.com/ninetailsrabbit/indie-blueprint/issues) If you found a similar issue in the tracker - better share your problem in the existing thread.
10 | 4. Besides the platform, specify as many specifics as you can _(if relevant)_. CPU/GPU, input methods _(controller, mouse)_ and so on.
11 | 5. A simple reproduction project helps more than any reproduction steps. Include it whenever you can. Examining the problem first-hand is the easiest way to solve it.
12 |
13 | ## Proposing features
14 |
15 | 1. **[Follow the template for feature requests.](https://github.com/ninetailsrabbit/indie-blueprint/issues/new?assignees=ninetailsrabbit&labels=%E2%AD%90+feature&projects=&template=feature_request.md&title)**
16 | 2. [Search for existing proposals first.](https://github.com/ninetailsrabbit/indie-blueprint/issues)
17 | 3. Request something with a real-world use-case. Abstract features may not be considered.
18 | 4. If you are capable of implementing said feature, include some code that demonstrates the finer details/nuances of said feature.
19 |
20 | ## Thanks you for contributing mindfully!
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 N9
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Indie Blueprint (WIP)
5 |
6 |
7 | This blueprint includes essential features, optimized settings, and best practices to help you create amazing indie games
8 |
9 | ·
10 | Report Bug
11 | ·
12 | Request Features
13 |
14 |
15 |
16 |
17 |
18 |
19 | - [Other plugins 🎫](#other-plugins-)
20 | - [Create a new repository from template 📘](#create-a-new-repository-from-template-)
21 | - [Modules 🧩](#modules-)
22 | - [Toolbox](#toolbox)
23 | - [Audio](#audio)
24 | - [Camera transition](#camera-transition)
25 | - [Scene transition](#scene-transition)
26 | - [Global clock](#global-clock)
27 | - [Object pool](#object-pool)
28 | - [RPG](#rpg)
29 | - [Save](#save)
30 | - [Configuration ⚙️](#configuration-️)
31 | - [Default bus layout](#default-bus-layout)
32 | - [Input map](#input-map)
33 | - [Physics layers 2D \& 3D](#physics-layers-2d--3d)
34 | - [Autoloads 🔽](#autoloads-)
35 | - [GameGlobals 🗳️](#gameglobals-️)
36 | - [Delay func](#delay-func)
37 | - [Wait](#wait)
38 | - [GlobalGameEvents 🌐](#globalgameevents-)
39 | - [Preloader](#preloader)
40 | - [Global Effects ✨](#global-effects-)
41 | - [Fade in \& out](#fade-in--out)
42 | - [Flash](#flash)
43 | - [Frame Freeze](#frame-freeze)
44 | - [Gamepad Controller Manager 🎮](#gamepad-controller-manager-)
45 | - [Controller connected \& disconnected](#controller-connected--disconnected)
46 | - [Gamepad names and buttons](#gamepad-names-and-buttons)
47 | - [Current controller information](#current-controller-information)
48 | - [Methods](#methods)
49 | - [Persistence 💾](#persistence-)
50 | - [SettingsManager](#settingsmanager)
51 | - [Game settings](#game-settings)
52 | - [Signals](#signals)
53 | - [Properties](#properties)
54 | - [Update a config section](#update-a-config-section)
55 | - [Components 🧩](#components-)
56 |
57 | # Other plugins 🎫
58 |
59 | - 💎 Create Match3 games with [Match3 Board](https://github.com/ninetailsrabbit/match3-board)
60 | - ⛰️ Generate procedural terrain with [Terrainy](https://github.com/ninetailsrabbit/Terrainy)
61 | - 🔘 Finite state machine with [FSM](https://github.com/ninetailsrabbit/node-finite-state-machine)
62 | - 🎲 Generate loot in your game with [Lootie](https://github.com/ninetailsrabbit/Lootie)
63 | - 🏠 Easily design and build basic 3D spaces with [Room creator](https://github.com/ninetailsrabbit/room-creator)
64 |
65 | ---
66 |
67 | # Create a new repository from template 📘
68 |
69 | To better understand what branch to choose from for which Godot version, please refer to this table:
70 | |Godot Version|indie-blueprint-save Branch|indie-blueprint-save Version|
71 | |---|---|--|
72 | |[](https://godotengine.org/)|`4.3`|`1.x`|
73 | |[](https://godotengine.org/)|`main`|`1.x`|
74 |
75 | Go to the [template](https://github.com/ninetailsrabbit/indie-blueprint) and create a new repository from it
76 |
77 | 
78 |
79 | ---
80 |
81 | # Modules 🧩
82 |
83 | This template contains fully functional modules individually. They can be disabled or enabled on the `Project -> Plugins` tab in your project
84 |
85 | ## Toolbox
86 |
87 | General utilities that does not belongs to a particular place and are sed as static classes that can be accessed at any time even if they are not in the scene tree.
88 |
89 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-toolbox)
90 |
91 | ## Audio
92 |
93 | Easily control game audio with features like volume adjustments, playlists, crossfading, and sound pools.
94 |
95 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-audio)
96 |
97 | ## Camera transition
98 |
99 | This camera transition system allows you to smoothly transition between 2D/3D cameras in your game.
100 |
101 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-camera-transitioner)
102 |
103 | ## Scene transition
104 |
105 | This scene transitioner implifies scene switching in your Godot project, adding polish and visual flair to your game's level changes.
106 |
107 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-scene-transition)
108 |
109 | ## Global clock
110 |
111 | Manipulate the day, hour, minutes and access this information globally in your game. Create a game-ready day & night system in no time and don't worry about it.
112 |
113 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-global-clock)
114 |
115 | ## Object pool
116 |
117 | The object pool pattern is a software creational design pattern that uses a set of initialized objects kept ready to use – a 'pool' – rather than allocating and destroying them on demand.
118 |
119 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-pool)
120 |
121 | ## RPG
122 |
123 | A set of components that can be used as basic building blocks for the construction of role playing games.
124 |
125 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-rpg)
126 |
127 | ## Save
128 |
129 | This save system provides a convenient way to manage save files in your Godot project. It leverages the `SavedGame` resource, which can be extended for your specific game data.
130 |
131 | [Read the documentation](https://github.com/ninetailsrabbit/indie-blueprint-save)
132 |
133 | # Configuration ⚙️
134 |
135 | This template starts with some initial configurations that you need to know to get the most out of it.
136 |
137 | ## Default bus layout
138 |
139 | There is a default bus layout to use in your project that are sufficient for any small-medium indie game, you can extend it or modify based on your use case but here's a good place to start
140 |
141 | 
142 |
143 | - `Master`: The master bus where all the other inherit froms
144 | - `Music`: Mainly used to play looping music in your game
145 | - `SFX/EchoSFX`: Sound effects like gun shots, hits, footsteps and so on. When you want to add an echo effect to the effect use the “EchoSFX” bus.
146 | - `Voice`: Dialogues, ai voice effects, breath.
147 | - `UI`: User interface sounds, button clicks, hover, transition animations, etc.
148 | - `Ambient`: Ambient sounds like wind, nature, ocean, house interior and other stuff
149 |
150 | ## Input map
151 |
152 | This project comes with very simple predefined input maps to avoid interfering with your game in a tedious way. You can use the `MotionInput` helper class to use it even more easily
153 |
154 | - All the inputs have gamepad support
155 | - `WASD` movement with the keys `move_forward`, `move_back`, `move_right`, `move_left`
156 | - `WASD` keys as been added to the existing ui input maps `ui_up`, `ui_down`, `ui_right`, `ui_left`
157 | - The input action `debug_metrics` **_Shift+P_** opens the performance metrics when `hardware_information.tscn` it's on the scene tree
158 | - Pause with `P`
159 | - Interact with `E`
160 |
161 | ## Physics layers 2D & 3D
162 |
163 | - `Layer 1`: It's named **World**
164 | - `Layer 2`: It's named **Player**
165 | - `Layer 3`: It's named **Enemies**
166 | - `Layer 4`: It's named **Hitboxes**, `hitboxes` are collision areas that `hurtboxes` detects to implement a damage or impact system.
167 | - `Layer 5`: It's named **Shakeables** and is used by `TraumaCauser & TraumaDetector` that can apply a shaking effect to the camera.
168 | - `Layer 6`: It's named **Interactables**
169 | - `Layer 7`: It's named **Grabbables**
170 |
171 | # Autoloads 🔽
172 |
173 | A bunch of autoloads are ready to use for common operation in videogames to manage audio, global variables, signals, gamepad support, persistence, etc.
174 |
175 | ## GameGlobals 🗳️
176 |
177 | This singletons works to share data across nodes, they are always on the scene tree and can be accesed anywhere. This is the place where you can create functions and variables that need to be accessed globally.
178 |
179 | ```swift
180 | extends Node
181 |
182 | const world_collision_layer: int = 1
183 | const player_collision_layer: int = 2
184 | const enemies_collision_layer: int = 4
185 | const hitboxes_collision_layer: int = 8
186 | const shakeables_collision_layer: int = 16
187 | const interactables_collision_layer: int = 32
188 | const grabbables_collision_layer: int = 64
189 | const bullets_collision_layer: int = 128
190 | const playing_cards_collision_layer: int = 256
191 | const ladders_collision_layer: int = 512
192 |
193 |
194 | func delay_func(callable: Callable, time: float, deferred: bool = true)
195 |
196 | func wait(seconds: float = 1.0)
197 |
198 | ```
199 |
200 | ### Delay func
201 |
202 | You can delay any function call by an amount of time:
203 |
204 | ```swift
205 | // An anonymous lambda delayed by 1.5 seconds
206 | GameGlobals.delay_func(func(): print("test"), 1.5)
207 |
208 | // An existing function that needs arguments delaying by 2 seconds
209 | GameGlobals.delay_func(print_text.bind("test"), 2.0)
210 | ```
211 |
212 | ### Wait
213 |
214 | You can create a time delay in any line of code, just use the function wait like:
215 |
216 | ```swift
217 | `GameGlobals.wait(2.5) // Waits 2.5 seconds before continue the execution
218 | ```
219 |
220 | ## GlobalGameEvents 🌐
221 |
222 | `GlobalGameEvents` contains all the global signals by which any node or script can connect. This is where you should place those events that you want multiple nodes to listen to.
223 |
224 | ## Preloader
225 |
226 | The `Preloader` autoload take advantage of [preload](https://docs.godotengine.org/en/stable/classes/class_@gdscript.html#class-gdscript-method-preload) function. This autoload is the place to centralise all the assets and resources your game needs.
227 |
228 | Just preload once on game initialization and have them available always in the game.
229 |
230 | ```swift
231 | // In this singleton will live all the preloads for your game, shaders, scenes, audio streams, etc.
232 | // Just preload once on game initialization and have them available always in the game
233 | class_name Preloader
234 |
235 | // Pixel Art UI Layout
236 | const WorldSelectionScene: PackedScene = preload("res://ui/menus/layouts/pixel_art/world_selection.tscn")
237 | const WorldSaveSlotPanelScene: PackedScene = preload("res://ui/menus/layouts/pixel_art/components/world_save_slot_panel.tscn")
238 | ```
239 |
240 | ## Global Effects ✨
241 |
242 | The `GlobalEffects` autoload located in `res://autoload/effects/global_effects.tscn` contains a few screen effects commonly used in game dev are available for quick use.
243 |
244 | This autoload scene contains few parameters which are used as default values when no arguments are passed to functions.
245 |
246 | 
247 |
248 | ### Fade in & out
249 |
250 | Widely used for changing scenes or reflecting changes in an action. When the effect is finished, the used nodes are removed from the tree.
251 |
252 | ```swift
253 | // When out_duration or out_color are not provided, is assigned the values of in_duration and in_color respectively
254 | func fade_in_out(
255 | in_duration: float = default_fade_duration,
256 | in_color: Color = default_fade_color,
257 | out_duration: float = 0.0,
258 | out_color = null
259 | ) -> void:
260 |
261 |
262 | // When in_duration or in_color are not provided, is assigned the values of out_duration and out_color respectively
263 | func fade_out_in(
264 | out_duration: float = default_fade_duration,
265 | out_color: Color = default_fade_color,
266 | in_duration: float = 0.0,
267 | in_color = null
268 | ) -> void:
269 | ```
270 |
271 | ### Flash
272 |
273 | A quick screen colour display that can be used multiple times. When the effect is finished, the used nodes are removed from the tree.
274 |
275 | ```swift
276 | func flash(
277 | color: Color = default_flash_color,
278 | duration: float = default_flash_duration,
279 | initial_transparency: int = default_flash_transparency
280 | ) -> ColorRect:
281 |
282 |
283 | func flashes(
284 | colors: PackedColorArray = [],
285 | flash_duration: float = default_flash_duration,
286 | initial_transparency: int = default_flash_transparency
287 | ) -> Array[ColorRect]:
288 | ```
289 |
290 | ### Frame Freeze
291 |
292 | Start a frame freeze in the scene to simulate slow-motion effects. You can provide the time scale (> 1 faster, < 1 sloow), the duration and enable frame freeze effect also for the audio.
293 |
294 | Only one frame freeze can be active, you have to wait for it to finish to start another one.
295 |
296 | ```swift
297 | func frame_freeze(
298 | time_scale: float = default_frame_freeze_time_scale,
299 | duration: float = default_frame_freeze_duration,
300 | scale_audio: bool = default_scale_audio
301 | ) -> void:
302 | ```
303 |
304 | ## Gamepad Controller Manager 🎮
305 |
306 | The `GamepadControllerManager` allows you to manipulate and obtain information from connected game controllers.
307 |
308 | This autoloads mainly helps you to detect gamepads connected to your game. **It does not contains actions remapping** so it's only for detection. This manager automatically detects when a joy it's connected & disconnected and update the current controller name.
309 |
310 | More information about gamepad names on [https://github.com/mdqinc/SDL_GameControllerDB]()
311 |
312 | ### Controller connected & disconnected
313 |
314 | This signals are emitted when a new or existing controller is connected & disconnected
315 |
316 | ```swift
317 | controller_connected(device_id, controller_name:String)
318 | controller_disconnected(device_id, previous_controller_name:String, controller_name: String)
319 | ```
320 |
321 | ### Gamepad names and buttons
322 |
323 | ```swift
324 | const DeviceGeneric = "generic"
325 | const DeviceKeyboard = "keyboard"
326 | const DeviceXboxController = "xbox"
327 | const DeviceSwitchController = "switch"
328 | const DeviceSwitchJoyconLeftController = "switch_left_joycon"
329 | const DeviceSwitchJoyconRightController = "switch_right_joycon"
330 | const DevicePlaystationController = "playstation"
331 | const DeviceLunaController = "luna"
332 |
333 | const XboxButtonLabels = ["A", "B", "X", "Y", "Back", "Home", "Menu", "Left Stick", "Right Stick", "Left Shoulder", "Right Shoulder", "Up", "Down", "Left", "Right", "Share"]
334 | const SwitchButtonLabels = ["B", "A", "Y", "X", "-", "", "+", "Left Stick", "Right Stick", "Left Shoulder", "Right Shoulder", "Up", "Down", "Left", "Right", "Capture"]
335 | const PlaystationButtonLabels = ["Cross", "Circle", "Square", "Triangle", "Select", "PS", "Options", "L3", "R3", "L1", "R1", "Up", "Down", "Left", "Right", "Microphone"]
336 | ```
337 |
338 | ### Current controller information
339 |
340 | ```swift
341 | var current_controller_guid
342 | var current_controller_name := DeviceKeyboard
343 | var current_device_id := 0
344 | var connected: bool = false
345 | ```
346 |
347 | ### Methods
348 |
349 | ```swift
350 |
351 | func has_joypad() -> bool
352 |
353 | // Array of device ids
354 | func joypads() -> Array[int]
355 |
356 |
357 | func start_controller_vibration(weak_strength = default_vibration_strength, strong_strength = default_vibration_strength, duration = default_vibration_duration)
358 |
359 | func stop_controller_vibration()
360 |
361 |
362 | func current_controller_is_generic() -> bool
363 |
364 | func current_controller_is_luna() -> bool
365 |
366 | func current_controller_is_keyboard() -> bool
367 |
368 | func current_controller_is_playstation() -> bool
369 |
370 | func current_controller_is_xbox() -> bool
371 |
372 | func current_controller_is_switch() -> bool
373 |
374 | func current_controller_is_switch_joycon() -> bool
375 |
376 | func current_controller_is_switch_joycon_right() -> bool
377 |
378 | func current_controller_is_switch_joycon_left() -> bool
379 | ```
380 |
381 | ## Persistence 💾
382 |
383 | ### SettingsManager
384 |
385 | This template already has an easily expandable default configuration. This configuration is saved in an `.ini` or `.cfg` file according to your choice.
386 |
387 | In principle this autoload works automatically and saves and loads the configuration of each game both on entry and exit.
388 |
389 | #### Game settings
390 |
391 | The options are defined in the `IndieBlueprintGameSettings` file where each setting name is defined as a constant and its default value is added to the dictionary.
392 |
393 | ```swift
394 | class_name IndieBlueprintGameSettings
395 |
396 | // ConfigFile sections
397 | const KeybindingsSection: StringName = &"keybindings"
398 | const GraphicsSection: StringName = &"graphics"
399 | const AudioSection: StringName = &"audio"
400 | const ControlsSection: StringName = &"controls"
401 | const AccessibilitySection: StringName = &"accessibility"
402 | const LocalizationSection: StringName = &"localization"
403 | const AnalyticsSection: StringName = &"analytics"
404 |
405 |
406 | // Setting properties
407 | //This settings are used as keys for the configuration file .ini or .cfg
408 |
409 | const FpsCounterSetting: StringName = &"fps_counter"
410 | const MaxFpsSetting: StringName = &"max_fps"
411 | const WindowDisplaySetting: StringName = &"display"
412 | const WindowDisplayBorderlessSetting: StringName = &"borderless"
413 | const WindowResolutionSetting: StringName = &"resolution"
414 | const IntegerScalingSetting: StringName = &"integer_scaling"
415 | const VsyncSetting: StringName = &"vsync"
416 | const Scaling3DMode: StringName = &"scaling_3d_mode"
417 | const Scaling3DValue: StringName = &"scaling_3d_value"
418 | const QualityPresetSetting: StringName = &"quality_preset"
419 |
420 | const MouseSensivitySetting: StringName = &"mouse_sensitivity"
421 | const ReversedMouseSetting: StringName = &"reversed_mouse"
422 | const ControllerVibrationSetting: StringName = &"controller_vibration"
423 |
424 | const ScreenBrightnessSetting: StringName = &"screen_brightness"
425 | const PhotosensitivitySetting: StringName = &"photosensitive"
426 | const ScreenShakeSetting: StringName = &"screenshake"
427 | const DaltonismSetting: StringName = &"daltonism"
428 |
429 | const AllowTelemetrySetting: StringName = &"allow_telemetry"
430 |
431 | const CurrentLanguageSetting: String = "current_language"
432 | const VoicesLanguageSetting: String = "voices_language"
433 | const SubtitlesLanguageSetting: String = "subtitles_language"
434 | const SubtitlesEnabledSetting: StringName = &"subtitles"
435 |
436 | const MutedAudioSetting: StringName = &"muted"
437 |
438 | const DefaultInputMapActionsSetting: StringName = &"default_input_map_actions"
439 |
440 |
441 | // Default settings
442 | static var DefaultSettings: Dictionary = {
443 | IndieBlueprintGameSettings.MutedAudioSetting: false,
444 | IndieBlueprintGameSettings.FpsCounterSetting: false,
445 | IndieBlueprintGameSettings.MaxFpsSetting: 0,
446 | IndieBlueprintGameSettings.WindowDisplaySetting: DisplayServer.window_get_mode(),
447 | IndieBlueprintGameSettings.WindowResolutionSetting: DisplayServer.window_get_size(),
448 | IndieBlueprintGameSettings.WindowDisplayBorderlessSetting: DisplayServer.window_get_flag(DisplayServer.WINDOW_FLAG_BORDERLESS),
449 | IndieBlueprintGameSettings.IntegerScalingSetting: 1 if ProjectSettings.get_setting("display/window/stretch/scale_mode") == "integer" else 0,
450 | IndieBlueprintGameSettings.VsyncSetting: DisplayServer.window_get_vsync_mode(),
451 | IndieBlueprintGameSettings.Scaling3DMode: Viewport.SCALING_3D_MODE_BILINEAR,
452 | IndieBlueprintGameSettings.Scaling3DValue: 1.0,
453 | IndieBlueprintGameSettings.QualityPresetSetting: IndieBlueprintHardwareDetector.auto_discover_graphics_quality(),
454 | IndieBlueprintGameSettings.MouseSensivitySetting: 3.0,
455 | IndieBlueprintGameSettings.ReversedMouseSetting: false,
456 | IndieBlueprintGameSettings.ControllerVibrationSetting: true,
457 | IndieBlueprintGameSettings.ScreenBrightnessSetting: 1.0,
458 | IndieBlueprintGameSettings.PhotosensitivitySetting: false,
459 | IndieBlueprintGameSettings.ScreenShakeSetting: true,
460 | IndieBlueprintGameSettings.DaltonismSetting: IndieBlueprintWindowManager.DaltonismTypes.No,
461 | IndieBlueprintGameSettings.CurrentLanguageSetting: TranslationServer.get_locale(),
462 | IndieBlueprintGameSettings.VoicesLanguageSetting: TranslationServer.get_locale(),
463 | IndieBlueprintGameSettings.SubtitlesLanguageSetting: TranslationServer.get_locale(),
464 | IndieBlueprintGameSettings.SubtitlesEnabledSetting: false,
465 | IndieBlueprintGameSettings.AllowTelemetrySetting: false,
466 | // Dictionary[StringName, Array[InputEvent]
467 | IndieBlueprintGameSettings.DefaultInputMapActionsSetting: {}
468 | }
469 |
470 | static var FpsLimits: Array[int] = [0, 30, 60, 90, 144, 240, 300]
471 | ```
472 |
473 | ### Signals
474 |
475 | ```swift
476 | reset_to_default_settings
477 |
478 | created_settings
479 |
480 | loaded_settings
481 |
482 | removed_setting_file
483 |
484 | updated_setting_section(section: String, key: String, value: Variant)
485 | ```
486 |
487 | ### Properties
488 |
489 | ```swift
490 | // The file path where the settings file will be saved
491 | var settings_file_path: String = OS.get_user_data_dir() + "/settings.%s" % FileFormat
492 |
493 | // When enabled, the file it's encrypted
494 | var use_encription: bool = false
495 |
496 | // When enabled, it includes the ui_ actions that comes by default in Godot
497 | var include_ui_keybindings: bool = false
498 |
499 | // When enabled, load the settings automatically when the node is ready
500 | var load_on_start: bool = true
501 | ```
502 |
503 | ### Update a config section
504 |
505 | To update the value of an option you must know in which section it is stored and what type of value it is.
506 |
507 | By default, this template provides you the following sections in the `IndieBlueprintGameSettings` file:
508 |
509 | ```swift
510 | class_name IndieBlueprintGameSettings
511 |
512 | const KeybindingsSection: StringName = &"keybindings"
513 | const GraphicsSection: StringName = &"graphics"
514 | const AudioSection: StringName = &"audio"
515 | const ControlsSection: StringName = &"controls"
516 | const AccessibilitySection: StringName = &"accessibility"
517 | const LocalizationSection: StringName = &"localization"
518 | const AnalyticsSection: StringName = &"analytics"
519 | ```
520 |
521 | In the `SettingsManager` there are functions to directly update one of these sections by default
522 |
523 | ```swift
524 | func update_audio_section(key: String, value: Variant) -> void
525 |
526 | func update_keybindings_section(key: String, value: Variant) -> void
527 |
528 | func update_graphics_section(key: String, value: Variant) -> void
529 |
530 | func update_accessibility_section(key: String, value: Variant) -> void
531 |
532 | func update_controls_section(key: String, value: Variant) -> void
533 |
534 | func update_analytics_section(key: String, value: Variant) -> void
535 |
536 | func update_localization_section(key: String, value: Variant) -> void
537 |
538 |
539 | // Example updating volume value from a slider
540 |
541 | func audio_slider_drag_ended(volume_changed: bool):
542 | if volume_changed:
543 | IndieBlueprintAudioManager.change_volume(target_bus, value)
544 |
545 | IndieBlueprintSettingsManager.update_audio_section(IndieBlueprintAudioManager.MusicBus, value) // Here is where the setting is updated
546 |
547 | ```
548 |
549 | # Components 🧩
550 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | | Version | Godot Version | Branch | Supported |
6 | | ------- | ------------- | ----------- | ------------------ |
7 | | 1.x | 4.x | `godot-4.x` | :white_check_mark: |
8 |
9 | ## Reporting a Vulnerability
10 |
11 | Please [raise an issue](https://github.com/ninetailsrabbit/indie-blueprint/issues) in case you find a security issue.
12 |
--------------------------------------------------------------------------------
/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
24 |
--------------------------------------------------------------------------------
/images/bus_layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/bus_layout.png
--------------------------------------------------------------------------------
/images/download_zip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/download_zip.png
--------------------------------------------------------------------------------
/images/global_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/global_camera.png
--------------------------------------------------------------------------------
/images/global_clock_parameters.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/global_clock_parameters.png
--------------------------------------------------------------------------------
/images/global_effects_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/global_effects_default.png
--------------------------------------------------------------------------------
/images/gradients/ammo8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/ammo8.png
--------------------------------------------------------------------------------
/images/gradients/borkfest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/borkfest.png
--------------------------------------------------------------------------------
/images/gradients/coffee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/coffee.png
--------------------------------------------------------------------------------
/images/gradients/dreamscapes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/dreamscapes.png
--------------------------------------------------------------------------------
/images/gradients/funkyfutures.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/funkyfutures.png
--------------------------------------------------------------------------------
/images/gradients/goosebumps_gold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/goosebumps_gold.png
--------------------------------------------------------------------------------
/images/gradients/nyx8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/nyx8.png
--------------------------------------------------------------------------------
/images/gradients/oil6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/oil6.png
--------------------------------------------------------------------------------
/images/gradients/pollen8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/pollen8.png
--------------------------------------------------------------------------------
/images/gradients/rust_gold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/rust_gold.png
--------------------------------------------------------------------------------
/images/gradients/slso8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/slso8.png
--------------------------------------------------------------------------------
/images/gradients/submerged_chimera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/submerged_chimera.png
--------------------------------------------------------------------------------
/images/gradients/winter_wonderland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/gradients/winter_wonderland.png
--------------------------------------------------------------------------------
/images/import_godot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/import_godot.png
--------------------------------------------------------------------------------
/images/object_pool_node.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/object_pool_node.png
--------------------------------------------------------------------------------
/images/object_pool_parameters.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/object_pool_parameters.png
--------------------------------------------------------------------------------
/images/use_template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninetailsrabbit/indie-blueprint-docs/c4ffe5020ee6ccb8663795aa15a1041f485e2eef/images/use_template.png
--------------------------------------------------------------------------------