The Shaggy Dev
Custom cursors in Godot
updated
Text version and code snippets: shaggydev.com/2024/10/14/godot-transparent-popups
Wishlist Unto Deepest Depths: store.steampowered.com/app/3106600/Unto_Deepest_Depths?utm_source=yt
Wishlist Unto Deepest Depths at: store.steampowered.com/app/3106600/Unto_Deepest_Depths?utm_source=yt
Read this video at shaggydev.com/2024/09/25/udd-unit-selection
Text version: shaggydev.com/2024/09/04/unto-deepest-depths-devlog
Wishlist the game here: store.steampowered.com/app/3106600/Unto_Deepest_Depths?utm_source=yt
What I'm making: 00:00
Game architecture: 02:26
Code breakdown: 07:00
Wishlist here: store.steampowered.com/app/3106600/Unto_Deepest_Depths
New devlog series starts soon!
Text version and code snippets: shaggydev.com/2024/06/19/small-gdscript-tips
Text version: shaggydev.com/2024/05/15/flash-development
Big thanks to Internet Archive for providing many long lost references!
- More reading and sources -
The United States of Mobile Gaming: statista.com/chart/995/gamers-in-the-the-united-states
The 5 Most Important Things to Consider When Getting Your Flash Game Sponsored: gamedevelopment.tutsplus.com/the-5-most-important-things-to-consider-when-getting-your-flash-game-sponsored--gamedev-8559a
SteamBirds: By the Numbers: web.archive.org/web/20120221143256/http://www.andymoore.ca/2010/03/steambirds-by-the-numbers
Where's the Cash for Flash: web.archive.org/web/20150425232801/http://www.gamasutra.com/view/feature/3924/wheres_the_cash_for_flash.php?page=1
Thoughts on Flash: web.archive.org/web/20170615060422/apple.com/hotnews/thoughts-on-flash
Flashpoint Archive: flashpointarchive.org
Ruffle Emulator: https://ruffle.rs/
discord.gg/udafrsSzcy
Text version: shaggydev.com/2024/04/02/7drl-2024-devlog
The game: theshaggydev.itch.io/par-for-the-corpse
AStarGrid2D: youtu.be/QRr_P_uqz8w
00:00 What I made
01:00 How the levels are made
04:55 How the ball works
Text version and code snippets: shaggydev.com/2024/01/09/dev-console
The Expression class: docs.godotengine.org/en/stable/classes/class_expression.html
More on Expressions: docs.godotengine.org/en/stable/tutorials/scripting/evaluating_expressions.html
Text version with code snippets: shaggydev.com/2023/11/28/godot-4-advanced-state-machines
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-4/advanced-state-machines
00:00 Dependency injection
02:50 Composition
07:15 Hierarchical state machines
09:25 How to do multiple things at once
10:30 Sharing data between states
Text version: shaggydev.com/2023/10/08/godot-4-state-machines
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-4/state-machines
Simple state management: 00:00
Node-based states: 02:22
A few examples: 08:00
Theory video: youtu.be/-ZP2Xm-mY4E
00:00 - What I'm making
01:40 - Unit data
04:35 - Artwork
08:33 - Unit AI
Text version: shaggydev.com/2023/09/04/tactics-devlog-ii
The previous devlog: youtu.be/8fLbf7n9I9I
An introduction to Utility AI: youtu.be/78AcS_0lQSM
GDC talks of interest:
gdcvault.com/play/1012410/Improving-AI-Decision-Modeling-Through
gdcvault.com/play/1021848/Building-a-Better-Centaur-AI
Text version: shaggydev.com/2023/07/04/tactics-engine-devlog
Elemechs video: youtube.com/watch?v=GYFnyiwa9iw
What I'm making: 00:00
Level structure: 01:28
Unit structure: 06:00
Godot 3 vs 4: 08:22
Actions: 10:33
Text post: shaggydev.com/2023/06/05/godot-wild-jam-57
Flame Forged: theshaggydev.itch.io/flame-forged
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-4/volume-sliders
Text version: shaggydev.com/2023/05/22/volume-sliders
Further reading
- docs.godotengine.org/en/stable/tutorials/audio/audio_buses.html
- docs.godotengine.org/en/stable/classes/class_%40globalscope.html#class-globalscope-method-linear-to-db
Decisions are hard: 00:00
Utility AI: 01:13
Scoring actions: 03:04
Refining the process: 06:03
Text post: shaggydev.com/2023/04/19/utility-ai
Further reading
An Introduction to Utility Theory - Game AI Pro - http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter09_An_Introduction_to_Utility_Theory.pdf
Improving AI Decision Modeling Through Utility Theory - gdcvault.com/play/1012410/Improving-AI-Decision-Modeling-Through
Building a Better Centaur: AI at Massive Scale - gdcvault.com/play/1021848/Building-a-Better-Centaur-AI
Text version and code snippets: shaggydev.com/2023/03/07/gdscript1-to-gdscript2-part2
Part 1: youtube.com/watch?v=8BgAeN4RRR4
Signals: docs.godotengine.org/en/latest/classes/class_signal.html
Y-sorting: docs.godotengine.org/en/latest/classes/class_canvasitem.html#class-canvasitem-property-y-sort-enabled
Documentation comments: docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_documentation_comments.html
Tween: docs.godotengine.org/en/latest/classes/class_tween.html
SceneTreeTween: docs.godotengine.org/en/3.5/classes/class_scenetreetween.html
Performance monitors: docs.godotengine.org/en/stable/tutorials/scripting/debug/custom_performance_monitors.html
Migrating from Godot 3: docs.godotengine.org/en/stable/tutorials/migrating/upgrading_to_godot_4.html
Text version and code snippets: shaggydev.com/2023/02/02/godot-4-lambda-functions
Godot docs: docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#lambda-functions
Corrections:
01:09 This only applies to local variables where the lambda is declared, such as the variable and lambda inside of _ready() in this example. Changes to variables declared at a higher scope are not subject to this, such as moving the variable declaration outside of the _ready() function.
Text version: shaggydev.com/2023/01/16/code-smells
Martin Folwer on code smells: martinfowler.com/bliki/CodeSmell.html
Basic usage: 00:00
Customizing the heuristic: 01:26
Using diagonals: 02:24
Jumping: 02:58
Text version: shaggydev.com/2022/12/19/godot-astargrid2d
Sample code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-4/astargrid2d
AStarGrid2D documentation: docs.godotengine.org/en/latest/classes/class_astargrid2d.html
Introduction to A*: redblobgames.com/pathfinding/a-star/introduction.html
A* Heuristics: https://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
Intro: 00:00
What is a graph?: 00:42
Graph rewriting: 02:30
Generating a graph: 04:09
Common uses: 05:26
Text version: shaggydev.com/2022/11/20/graph-rewriting
And here's a few links you might want to check out regarding implementation:
Metazelda Algorithm: web.archive.org/web/20210628151946/bytten-studio.com/devlog/2012/11/30/lock-and-key-puzzle-generation
Graph Grammar based Procedural Generation for a Roguelike: youtube.com/watch?v=RAtdFKiqs34
Unexplored's generation method: aiandgames.com/2021/01/28/unexploreds-secret-cyclic-dungeon-generation
Text post and code snippets: shaggydev.com/2022/10/24/gdscript1-to-gdscript2
Doc links:
Callables: docs.godotengine.org/en/latest/classes/class_callable.html
Await: docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#awaiting-for-signals
Annotations: docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#annotations
Exports: docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_exports.html
Text version of this content: shaggydev.com/2022/09/27/godot-4-setter-getter
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-4/setget
Text version: shaggydev.com/2022/09/15/godot-4-beta
The application hierarchy: 00:00
Managing data and logic: 02:32
Use components: 04:01
Dependency injection: 04:38
On design patterns: 05:59
The final tip: 07:37
Text writeup: shaggydev.com/2022/09/13/flexible-code
What is Elemechs? 00:00
Art pipeline: 01:37
Mechs and actions: 03:53
Action design: 07:28
Turn and team management: 09:04
Level editor: 10:21
Level design: 11:59
AI: 14:15
Sound and music: 15:34
Elemechs: theshaggydev.itch.io/elemechs
Text version: shaggydev.com/2022/08/16/mech-jam-iii
Kaiju Klash is a turn-based fighter where you build your own giant monster and fight to climb the ranks of the arena against other perilous, and sometimes wacky, monster combinations. Each monster part offers unique stats and abilities so you can fight how you want!
Steam page: store.steampowered.com/app/2112500?utm_source=homepage&utm_campaign=sdyt
Better float comparison: 00:00
Wrapping values: 00:53
Smoother interpolation: 01:14
Custom errors and warnings: 01:32
Mapping values to a range: 01:58
Code snippets: shaggydev.com/2022/08/02/more-gdscript-tips
-Documentation links-
Floats in Godot: docs.godotengine.org/en/stable/classes/class_float.html
is_equal_approx: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-is-equal-approx
is_zero_approx: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-is-zero-approx
wrapf: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-wrapf
wrapi: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-wrapi
smoothstep: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-smoothstep
push_error: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-push-error
push_warning: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-push-warning
range_lerp: docs.godotengine.org/en/stable/classes/class_%40gdscript.html#class-gdscript-method-range-lerp
Project setup: 00:00
Recording, playing, and saving audio: 00:52
Real-time volume monitoring: 02:16
Real-time frequency monitoring: 03:22
Changing the recording device: 04:13
Text version: shaggydev.com/2022/07/14/godot-microphone
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/microphone
Godot docs on recording: docs.godotengine.org/en/stable/tutorials/audio/recording_with_microphone.html
Miziziziz repo: github.com/Miziziziz/ScreamHorrorGame
Spectrum analyzer devblog: godotengine.org/article/godot-32-will-get-new-audio-features
The most fundamental thing: 00:00
Correcting player mistakes: 01:02
Custom jump functions: 03:08
Closing thoughts: 04:52
Text version and full code snippets: shaggydev.com/2022/06/29/platformer-tips
Math for Game Programmers: Building a Better Jump - youtube.com/watch?v=hG9SzQxaCm8
GMTK Platformer Toolkit - gmtk.itch.io/platformer-toolkit
Correction: 04:50 Unfortunately, this video is no longer available.
How to Calculate the Perfect GRAVITY and JUMP FORCE - youtube.com/watch?v=K9g8TTFjIlY
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/scene-transitions
Text version: shaggydev.com/2022/06/13/godot-scene-transitions
Correction: 00:03 See the pinned comment for the equivalent syntax in Godot 4!
Text version of this video: shaggydev.com/2022/06/01/observer-pattern
More info on the observer pattern: gameprogrammingpatterns.com/observer.html
Background and motivation: 00:00
The observer pattern: 01:34
Observables in practice: 02:52
Global access via an event bus: 05:02
The event bus in practice: 05:31
Final thoughts and further reading: 06:04
Text version: shaggydev.com/2022/05/18/godot-os-class
Documentation: docs.godotengine.org/en/stable/classes/class_os.html
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/os-class
Text version of this video's contents: shaggydev.com/2022/05/04/clean-code
Intro: 00:00
Via the editor: 00:24
Via code: 01:23
Objects with holes: 03:25
Text version: shaggydev.com/2022/04/13/sprite-collision-polygons
Sample project: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/sprite-collision-polygons
Documentation for BitMap: docs.godotengine.org/en/latest/classes/class_bitmap.html
Text version of this video: shaggydev.com/2022/03/25/godot-code-editor-settings
Godot docs for external editors: docs.godotengine.org/en/stable/tutorials/editor/external_editor.html
Definition and example: 00:00
Other uses: 03:11
Quest generation: 04:00
The main limitation: 05:48
Where's the code?: 06:41
Text version of this video: shaggydev.com/2022/03/16/generative-grammars
Sample source code to compare: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/screen-shake
Text version of this post: shaggydev.com/2022/02/23/screen-shake-godot
Godot documentation: docs.godotengine.org/en/stable/classes/class_opensimplexnoise.html
Intro: 00:00
Hierarchical state machines: 01:46
Dependency injection: 03:36
More options: 05:22
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/advanced-state-machine
Text version of this video: shaggydev.com/2022/02/13/advanced-state-machines-godot
Video on FuncRefs: youtu.be/f5oE2cqxv3M
Intro: 00:00
Gameplay: 00:20
Graphics: 01:25
Audio: 02:14
Polish: 02:56
Misc Tech Stuff: 03:42
Text version: shaggydev.com/2022/02/09/kaiju-klash
Check out Kaiju Klash: theshaggydev.itch.io/kaiju-klash
Check out all the submissions here: itch.io/jam/kaijujam
Intro: 00:00
Static bodies: 00:30
Rigid bodies: 01:32
Running the sample: 02:42
Godot 3 documentation: docs.godotengine.org/en/3.5/classes/class_geometry.html#class-geometry-method-offset-polyline-2d
Godot 4 documentation (renamed but functions the same): docs.godotengine.org/en/stable/classes/class_geometry2d.html#class-geometry2d-method-offset-polyline
Polygon2D video: youtu.be/-N-4hbGWeGo
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/line2d-physics
Text version: shaggydev.com/2022/01/25/line2d-physics
Donut Roll (the game showed at the end): theshaggydev.itch.io/donut-roll
Custom string casting: 00:00
Fixed export options: 00:32
Safe lines: 00:59
Large number readability: 01:41
Stepify: 01:51
Code snippets and text version of this video: shaggydev.com/2022/01/13/gdscript-tips
Link to the Godot documentation on stepfiy: docs.godotengine.org/en/stable/classes/class_@gdscript.html#class-gdscript-method-stepify
Text version of this video: shaggydev.com/2022/01/04/setget
Official documentation: docs.godotengine.org/en/stable/getting_started/scripting/gdscript/gdscript_basics.html#setters-getters
Intro: 00:00
Definition: 00:56
Big key locks: 01:43
Small key locks: 02:38
Stateful locks: 03:49
A sample technique for generating content: 04:36
Limitations: 07:14
Spatial methodologies: 09:09
Conclusion: 10:57
Video transcript and code snippets shown in the video available here: shaggydev.com/2021/12/17/lock-key-dungeon-generation
Metazelda repo: bytten-studio.com/devlog//2012/11/30/lock-and-key-puzzle-generation
IRDC 2014 - Roguey-Locks and the Three Graphs: youtube.com/watch?v=uP3horC38IE
Unexplored's unique cyclic graph generation technique: aiandgames.com/2021/01/28/unexploreds-secret-cyclic-dungeon-generation
Intro and first-class functions: 00:00
Funcref overview: 01:31
Sample project: 02:10
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/funcref
Text post: shaggydev.com/2021/11/28/funcref
Godot documentation: docs.godotengine.org/en/stable/classes/class_funcref.html
Intro: 00:00
The enumerator method: 00:53
Technique overview: 01:45
Player and state manager breakdown: 03:33
Individual states: 05:40
Conclusion and running the project: 06:58
Theory video: youtu.be/-ZP2Xm-mY4E
Part three of this series: youtu.be/DPxIMVC0oZA
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/the-state-pattern
Transcript: shaggydev.com/2021/11/15/state-machines-godot
Intro: 00:00
Life without state machines: 00:54
Finite state machines: 02:38
Using enumerators: 04:55
The state pattern: 06:09
Final thoughts and where to go next: 10:28
Game Programming Patterns: gameprogrammingpatterns.com/state.html
Video transcript: shaggydev.com/2021/11/01/state-machines-intro
Artwork by Kenney: https://www.kenney.nl/
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/class-name-introduction
Text version of this tutorial: shaggydev.com/2021/10/19/godot-class-name
Artwork provided by Kenney: kenney.nl
Intro: 00:00
Base usage: 00:29
Other uses: 01:18
Gotcha #1 - The global namespace 01:59
Gotcha #2 - Cyclic dependencies 02:52
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/polygon2d-physics-body
Transcript: shaggydev.com/2021/10/11/polygon2d-physics-body
Godot Bordered Polygon2D Plugin: github.com/arypbatista/godot-bordered-polygon-2d
Intro: 00:00
The Polygon2D node: 00:51
Project setup: 01:48
The static body scene: 02:26
The rigid body scene: 03:01
Results: 05:00
Final thoughts: 05:22
Last week's video on using a hardware cursor in Godot: youtube.com/watch?v=TLSg7qIUKQk
Source code: github.com/theshaggydev/the-shaggy-dev-projects/tree/main/projects/godot-3/animating-hardware-cursors
Text version of this video: shaggydev.com/2021/09/28/custom-cursors
Project motivation: 00:00
Project setup: 00:40
Code explanation: 01:15
First experiment results: 02:22
Lower framerate experiment: 02:55
Final thoughts: 03:44