Ok now that I’m attempting to actually do it, looks like there are more functions and events that need mapping that I didn’t realise when just reading the documentation. The next immediate issue I ran into is missing a mapping for “CreateLobby”.
EDIT: Rather than bulk out the thread here, I’ve attempted to follow due process and put the full list of functions in a new feature request here:
opened 02:23AM - 30 Jul 25 UTC
feature request
**Is your feature request related to a problem? Please describe (REQUIRED):**
Th… is is a new round of mappings required to continue multilayer development to utilise Steam's lobby and matchmaking features.
**Describe the solution you'd like (REQUIRED):**
There is a list of functions that need mapping, below.
**Describe alternatives you've considered (REQUIRED):**
We are implementing functionality that is not yet implemented from the Steam extension for Defold. I'm testing out the functionality as its implemented while the Defold team provides the mappngs.
**Additional context (OPTIONAL):**
Discussion is here: https://forum.defold.com/t/steam-multiplayer-api/80588/9
Ok now that I'm attempting to actually do it, looks like there are more functions and events that need mapping that I didn't realise when just reading the documentation. The next immediate issue I ran into is missing a mapping for "CreateLobby".
I "cheated" and use ChatGPT to assess the situation and make a complete list, but it's been extremely correct on this topic so far and this will likely save us many incremental back and forths as I try a bit, run into a roadblock, etc. etc.
---
Here is a comprehensive, focused list of **Steamworks API functions and callbacks** that should be mapped in Defold's Steam extension (`extension-steam`) in order to fully support **Steam lobbies and friend joining via lobbies**.
Each entry includes the original Steamworks symbol and a suggested Lua binding name consistent with the existing Defold Steam API.
---
## 🧱 Core API Functions to Bind
### 🟩 **Lobby Management**
| Steamworks C++ Function | Suggested Lua Binding | Description |
| ----------------------------------------- | --------------------------------------------------------- | -------------------------- |
| `ISteamMatchmaking::CreateLobby(...)` | `steam.matchmaking_create_lobby(lobby_type, max_players)` | Creates a lobby |
| `ISteamMatchmaking::JoinLobby(CSteamID)` | `steam.matchmaking_join_lobby(lobby_id)` | Joins an existing lobby |
| `ISteamMatchmaking::LeaveLobby(CSteamID)` | `steam.matchmaking_leave_lobby(lobby_id)` | Leaves the specified lobby |
---
### 🟦 **Lobby Data Management**
| Steamworks Function | Suggested Lua Binding | Description |
| --------------------------------------------- | ------------------------------------------------------------ | --------------------------------------- |
| `ISteamMatchmaking::SetLobbyData(...)` | `steam.matchmaking_set_lobby_data(lobby_id, key, value)` | Sets key-value data for the lobby |
| `ISteamMatchmaking::GetLobbyData(...)` | `steam.matchmaking_get_lobby_data(lobby_id, key)` | Retrieves a specific key from the lobby |
| `ISteamMatchmaking::GetLobbyDataCount(...)` | `steam.matchmaking_get_lobby_data_count(lobby_id)` | (Optional) Gets the number of keys |
| `ISteamMatchmaking::GetLobbyDataByIndex(...)` | `steam.matchmaking_get_lobby_data_by_index(lobby_id, index)` | (Optional) Enumerates keys |
---
### 🟨 **Lobby Member Information**
| Steamworks Function | Suggested Lua Binding | Description |
| ------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------ |
| `ISteamMatchmaking::GetNumLobbyMembers(CSteamID)` | `steam.matchmaking_get_num_lobby_members(lobby_id)` | Returns member count |
| `ISteamMatchmaking::GetLobbyMemberByIndex(CSteamID, i)` | `steam.matchmaking_get_lobby_member_by_index(lobby_id, index)` | Gets the `SteamID` of a member |
---
### 🔄 **Lobby Messaging (Optional but Valuable)**
| Steamworks Function | Suggested Lua Binding | Description |
| ------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------- |
| `ISteamMatchmaking::SendLobbyChatMsg(...)` | `steam.matchmaking_send_lobby_chat_msg(lobby_id, message)` | Sends a chat message to all lobby members |
| `ISteamMatchmaking::GetLobbyChatEntry(...)` | `steam.matchmaking_get_lobby_chat_entry(...)` | Retrieves received messages |
---
## 🔔 Required Callbacks to Map
These allow the Lua code to react to the result of lobby operations.
| Callback Struct | Event Constant | Description |
| -------------------------- | ------------------------------------------ | -------------------------------------------------------- |
| `LobbyCreated_t` | `steam.CALLBACK_LOBBY_CREATED` | Fired after `CreateLobby()` call completes |
| `LobbyEnter_t` | `steam.CALLBACK_LOBBY_ENTERED` | Fired when local user successfully joins a lobby |
| `GameLobbyJoinRequested_t` | `steam.CALLBACK_GAME_LOBBY_JOIN_REQUESTED` | Fired when a user clicks “Join Game” via Steam friends |
| `LobbyChatUpdate_t` | `steam.CALLBACK_LOBBY_CHAT_UPDATE` | Fired when a player joins, leaves, or is kicked |
| `LobbyChatMsg_t` | `steam.CALLBACK_LOBBY_CHAT_MSG` | Fired when a lobby message is received (if chat is used) |
---
## 📌 Optional but Useful Additions
These aren't strictly required, but they're common in games with lobby-based matchmaking:
| Function | Purpose |
| --------------------------------------------------------- | ----------------------------------------------- |
| `ISteamMatchmaking::RequestLobbyList()` | Enables you to query lobbies from other players |
| `ISteamMatchmaking::AddRequestLobbyListStringFilter(...)` | Filters lobby results |
| `ISteamMatchmaking::GetLobbyByIndex(...)` | Lets you enumerate found lobbies |
| `ISteamMatchmaking::RequestLobbyData(CSteamID)` | Requests updated data for a lobby |
| `ISteamMatchmaking::SetLobbyJoinable(CSteamID, bool)` | Makes lobby joinable or not (host-only) |
Steam Documentation reference for matchmaking:
[https://partner.steamgames.com/doc/api/ISteamMatchmaking](https://partner.steamgames.com/doc/api/ISteamMatchmaking)
---
Thanks for your help so far guys. So far it’s going smoothly with this approach of implementing as we go.
2 Likes