Creating an Inventory System for an RPG Game in Godot 2D

Welcome back to our game development blog! Today, we’ll be tackling the creation of an inventory system for an RPG game in Godot 2D. An inventory system is a crucial component of RPGs, allowing players to manage items they collect throughout their adventure. This tutorial will guide you through creating a basic inventory system, including adding, removing, and using items.


Setting Up the Project


Before diving into the inventory system, let’s set up a basic project in Godot:


1. Create a New Project

Open Godot and create a new project. Name it something like “RPGInventorySystem”.

2. Set Up the Player Scene

Create a new 2D scene and add a KinematicBody2D node for the player.

Add a Sprite and CollisionShape2D to represent the player visually and physically.

Save the scene as Player.tscn.


Step 1: Creating the Inventory Data Structure


We’ll start by defining the data structure for the inventory:


1. Create an Inventory Script

Create a new script called Inventory.gd and attach it to an autoload (singleton) in the Project Settings under the “AutoLoad” tab. This script will manage the inventory data:


extends Node


var inventory = []


func add_item(item):

    inventory.append(item)


func remove_item(item):

    inventory.erase(item)


func use_item(item):

    if item in inventory:

        item.use()

        remove_item(item)


Step 2: Creating Item Scenes


Next, we’ll create a generic item scene that can be extended for different item types:


1. Create an Item Scene

Create a new 2D scene with an Area2D node as the root. This will be the base item scene.

Add a Sprite and CollisionShape2D to represent the item visually and physically.

Save the scene as Item.tscn.

2. Item Script

Attach a new script to the Area2D node called Item.gd:


extends Area2D


var item_name = ""

var item_effect = ""


func _on_Item_body_entered(body):

    if body.name == "Player":

        Inventory.add_item(self)

        queue_free()


func use():

    print("Using item: " + item_name)

    # Define item effects here


3. Connect Signals

Connect the body_entered signal of the CollisionShape2D node to the script:


func _ready():

    $CollisionShape2D.connect("body_entered", self, "_on_Item_body_entered")


Step 3: Displaying the Inventory UI


To manage the inventory, we need a UI to display the items:


1. Create an Inventory UI Scene

Create a new scene with a Control node as the root. This will be our inventory UI.

Add a VBoxContainer to organize the items vertically.

Save the scene as InventoryUI.tscn.

2. Inventory UI Script

Attach a new script to the Control node called InventoryUI.gd:


extends Control


onready var item_list = $VBoxContainer


func _ready():

    update_inventory()


func update_inventory():

    item_list.clear()

    for item in Inventory.inventory:

        var item_button = Button.new()

        item_button.text = item.item_name

        item_button.connect("pressed", self, "_on_ItemButton_pressed", [item])

        item_list.add_child(item_button)


func _on_ItemButton_pressed(item):

    Inventory.use_item(item)

    update_inventory()


Step 4: Integrating Inventory with Player


Finally, we need to integrate the inventory system with the player:


1. Player Script

Ensure the player script includes inventory management. For instance, pressing a key to open the inventory:


extends KinematicBody2D


func _ready():

    set_process(true)


func _process(delta):

    if Input.is_action_just_pressed("open_inventory"):

        toggle_inventory()


func toggle_inventory():

    var inventory_ui = get_node("/root/InventoryUI")

    inventory_ui.visible = !inventory_ui.visible


2. Binding Inventory Input

Bind the inventory action to a key press. Open the Input Map in the Project Settings and add a new action called open_inventory. Assign a key, such as I, to this action.


Step 5: Testing the Inventory System


With everything set up, it’s time to test the inventory system:


1. Place the Player and Items

Instance the Player.tscn and Item.tscn scenes in the main scene.

Place a few items around the player for testing.

2. Run the Game

Run the game and test picking up items, opening the inventory, and using items. Check if the inventory UI updates accordingly and if the items function as expected.


Conclusion


You’ve successfully implemented a basic inventory system for an RPG player character in Godot 2D! This system includes adding, removing, and using items, as well as displaying the inventory in a UI. From here, you can expand the system by adding features like item stacking, categorization, or more complex item effects.


Stay Connected


Follow our blog for more tutorials, tips, and insights into game development with Godot and other engines. Share your experiences and any challenges you encounter in the comments below. Let’s continue to learn and create amazing games together!


Summary of Steps


1. Set Up the Project: Create a new project and set up the player scene.

2. Create the Inventory Data Structure: Implement functions for adding, removing, and using items.

3. Create Item Scenes: Create a generic item scene that can be extended.

4. Display the Inventory UI: Set up a UI to display and manage the inventory.

5. Integrate Inventory with Player: Ensure the player can interact with the inventory.

6. Test the Inventory System: Place the player and items in the scene and test.


Happy developing!

Comments

Popular posts from this blog

Creating 2D Character Movement in Godot: A Step-by-Step Tutorial

Exploring “Papers, Please”: A Tale of Morality and Bureaucracy