├── .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 | Logo 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 | |[![GodotEngine](https://img.shields.io/badge/Godot_4.3.x_stable-blue?logo=godotengine&logoColor=white)](https://godotengine.org/)|`4.3`|`1.x`| 73 | |[![GodotEngine](https://img.shields.io/badge/Godot_4.4.x_stable-blue?logo=godotengine&logoColor=white)](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 | ![use_template](images/use_template.png) 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 | ![bus_layout](images/bus_layout.png) 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 | ![global_effects_parameters](images/global_effects_default.png) 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 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 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 --------------------------------------------------------------------------------