A new version of the Inventory System is available. This release includes various refinements to existing systems to flesh out more combat-related functionality.
Inventory Ammo Provider
The GGAmmoProvider component is responsible for providing ammunition to equipped weapons. Previously, it only had a “simple” strategy: Creating ammunition out of thin air. The new GGAmmoProviderInventoryStrategy pulls ammunition from items in the inventory it’s connected to. This allows players to pick up ammunition from loot boxes and item spawns
Weapon and Combat Refinements
The MyRangedWeapon2D class, which powers the two example guns in the Multiplayer Interaction Demo has received some ammo consumption refinements to go with the Inventory Ammo Provider mechanic and now emits signals when firing/reloading. Melee weapons and projectiles now use the GGHurtBox component to deal damage. The HurtBox applies damages to a HitBox, which is then processed by a DamageCalculator strategy to update the HealthStats component.
The new Ghost “Enemy” spawns as part of the Multiplayer Interaction Demo, and can receive damage from both melee and ranged weapons. When taking hits, the amount of damage floats above the character/object, which is all handled on the server and replicated to clients for multiplayer by a new set of classes.
Changelog
Features:
Added a new configurable MyEntitySpawner2D to spawn the Ghost
Added the GGAmmoProviderInventoryStrategy, along with some ammo and projectile rework.
Added configurable target (defaults to “_blank”) for the GGRichTextURLOpener.
Added GGFloatingNotifier component to inform the GGFloatingDisplay component to display floating numbers for server and clients.
Melee Weapons now each have dedicated scenes.
Ranged Weapons were reworked for improved ammo handling and signal emission when firing and reloading.
Bug fixes:
Corrected the Drag-and-Drop configuration for the Inventory In-Game Menu UI integration.
Ensure damage calculation only runs server-side.
Various corrections to the netfox implementation of the character scene.
The Tour instructions now correctly show that CMD (instead of CTRL) is the drag-and-drop modifier on Mac.
The Inventory System Deep Dive and Architecture Guide helps game developers implement advanced multiplayer inventories using Godot Engine. The PDF Guide contains over 500 pages of code walkthroughs, diagrams, and explains concepts related to inventories, items, and more.
For some reason, my Godot game would no longer launch on the Steam Deck. I could hear it running as if it were running in the background, but the screen kept showing the Steam Deck’s UI. Since it’s all Linux I figured it should be possible to just drop to the command line and launch …
Are you using @onready to reference nodes? There’s a better way! Here’s a simple example of how many tutorials use @onready to reference nodes: That script is attached to a CanvasLayer node with a ProgressBar called HealthBar. And yet, when running the scene, it will throw an error: This is because there’s actually a spelling …
I had a setup with nested CanvasLayer nodes. Toggling the visibility of the root CanvasLayer doesn’t hide any nested CanvasLayer nodes. My solution was to listen to the visibility_changed signal, find any CanvasLayer child nodes, and apply the same visibility to them.
I’m wrapping up development on version 1 of the Inventory System, which is currently at v1.18.1. All core functionality is in place, and it provides many quality-of-life features. The guide covers and walks through most of the code base, and the demo projects show off a lot of use cases. This first version has been …
Inventory System v1.17 available
A new version of the Inventory System is available. This release includes various refinements to existing systems to flesh out more combat-related functionality.
Inventory Ammo Provider
The GGAmmoProvider component is responsible for providing ammunition to equipped weapons. Previously, it only had a “simple” strategy: Creating ammunition out of thin air. The new GGAmmoProviderInventoryStrategy pulls ammunition from items in the inventory it’s connected to. This allows players to pick up ammunition from loot boxes and item spawns
Weapon and Combat Refinements
The MyRangedWeapon2D class, which powers the two example guns in the Multiplayer Interaction Demo has received some ammo consumption refinements to go with the Inventory Ammo Provider mechanic and now emits signals when firing/reloading. Melee weapons and projectiles now use the GGHurtBox component to deal damage. The HurtBox applies damages to a HitBox, which is then processed by a DamageCalculator strategy to update the HealthStats component.
The new Ghost “Enemy” spawns as part of the Multiplayer Interaction Demo, and can receive damage from both melee and ranged weapons. When taking hits, the amount of damage floats above the character/object, which is all handled on the server and replicated to clients for multiplayer by a new set of classes.
Changelog
Features:
Bug fixes:
The Inventory System Deep Dive and Architecture Guide helps game developers implement advanced multiplayer inventories using Godot Engine. The PDF Guide contains over 500 pages of code walkthroughs, diagrams, and explains concepts related to inventories, items, and more.
Related Posts
Launching Godot Games on Steam Deck from the command line via Remote Shell
For some reason, my Godot game would no longer launch on the Steam Deck. I could hear it running as if it were running in the background, but the screen kept showing the Steam Deck’s UI. Since it’s all Linux I figured it should be possible to just drop to the command line and launch …
Ditch @onready, use @export instead
Are you using @onready to reference nodes? There’s a better way! Here’s a simple example of how many tutorials use @onready to reference nodes: That script is attached to a CanvasLayer node with a ProgressBar called HealthBar. And yet, when running the scene, it will throw an error: This is because there’s actually a spelling …
Toggling Visibility of Nested CanvasLayers
I had a setup with nested CanvasLayer nodes. Toggling the visibility of the root CanvasLayer doesn’t hide any nested CanvasLayer nodes. My solution was to listen to the visibility_changed signal, find any CanvasLayer child nodes, and apply the same visibility to them.
Inventory System v1.18.1 available (and v2 progress update)
I’m wrapping up development on version 1 of the Inventory System, which is currently at v1.18.1. All core functionality is in place, and it provides many quality-of-life features. The guide covers and walks through most of the code base, and the demo projects show off a lot of use cases. This first version has been …