Room DatabaseWorld

The world is stored as discrete data records rather than a contiguous spatial map; the active record is loaded into a shared UI shell.

The world is discrete data records loaded into one shared shell, not a contiguous space.

How room database works in Godot

The world is stored as records, not a contiguous map. A pointer selects the active record; a loader pours it into one shared UI shell. This is the data backbone behind room_transition.

Resourceprimitive

Each location is a RoomData resource — description, exits, items present. The map is an array of these, edited as data.

class_name RoomData extends Resource
@export var id: String
@export var description: String
@export var exits: Dictionary
@export var items: Array[String]

Dictionaryprimitive

Index rooms by id for O(1) lookup. current_room is just a key — travel is changing which key the shell reads from.

var rooms := {}   # id -> RoomData
var current := "foyer"
func room(): return rooms[current]

Node (autoload)node

A loader in GameState reads the active record and populates the shared UI — description label, exit buttons, item list — from data.

func load_room(id):
    current = id
    room_loaded.emit(rooms[id])

In short: Array of RoomData Resources; current_room pointer in GameState; loader reads record and populates description, exits, and item list

Retro games that use room database

15 catalogued game(s) use this mechanic, spanning 1989–1997.

Related world mechanics

▶ Explore Room Database interactively — see every game + the Godot system