Difference between revisions of "Creating a GameMode"
Line 1: | Line 1: | ||
+ | {{NewBuild|The plain and simple basic <code>BaseGameMode</code> example described here will cause null dereference exceptions.}} | ||
+ | |||
Gamemodes define rules about what should happen on a level. They are set in a level file. Typically when making a gamemode, you'll want to inherit the class from either <code>BaseGameMode</code>, <code>VersusGameMode</code>, or <code>TeamVersusGameMode</code>. Or, if you're just adding something very simple to an existing gamemode, you can also inherit from <code>Campaign</code>, <code>Survival</code>, <code>Deathmatch</code>, etc. | Gamemodes define rules about what should happen on a level. They are set in a level file. Typically when making a gamemode, you'll want to inherit the class from either <code>BaseGameMode</code>, <code>VersusGameMode</code>, or <code>TeamVersusGameMode</code>. Or, if you're just adding something very simple to an existing gamemode, you can also inherit from <code>Campaign</code>, <code>Survival</code>, <code>Deathmatch</code>, etc. | ||
+ | |||
+ | == Basic plain gamemode == | ||
The most basic plain gamemode you can make is this: | The most basic plain gamemode you can make is this: | ||
Line 31: | Line 35: | ||
</pre> | </pre> | ||
− | === | + | At this point you probably also want to add a HUD so you know what's happening. To do this, we have to do a few things: |
+ | |||
+ | * Instantiate a <code>HUD</code> object using the GUI builder | ||
+ | * Return the object in the <code>GetHUD()</code> method | ||
+ | * Update the HUD in the <code>UpdateWidgets(...)</code> method | ||
+ | * Render the HUD in the <code>RenderWidgets(...)</code> method | ||
+ | |||
+ | This looks roughly like this: | ||
+ | |||
+ | <pre> | ||
+ | HUD@ m_hud; | ||
+ | |||
+ | BasicGamemode(Scene@ scene) | ||
+ | { | ||
+ | super(scene); | ||
+ | @m_hud = HUD(m_guiBuilder, null); | ||
+ | } | ||
+ | |||
+ | HUD@ GetHUD() override { return m_hud; } | ||
+ | |||
+ | void UpdateWidgets(int ms, GameInput& gameInput, MenuInput& menuInput) override | ||
+ | { | ||
+ | m_hud.Update(ms); | ||
+ | BaseGameMode::UpdateWidgets(ms, gameInput, menuInput); | ||
+ | } | ||
+ | |||
+ | void RenderWidgets(PlayerRecord@ player, int idt, SpriteBatch& sb) override | ||
+ | { | ||
+ | m_hud.Draw(sb, idt); | ||
+ | BaseGameMode::RenderWidgets(player, idt, sb); | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | == Functions == | ||
+ | Further, you can implement any function you'd like from the below list in your class, and they will be called as events. | ||
+ | |||
+ | <pre> | ||
+ | void Start(uint8, SValue@, StartMode) | ||
+ | SValue@ Save() | ||
+ | |||
+ | void AddPlayer(uint8) | ||
+ | void RemovePlayer(uint8, bool) | ||
+ | |||
+ | void UpdateFrame(int, GameInput&, MenuInput&) | ||
+ | void UpdatePausedFrame(int, GameInput&, MenuInput&) | ||
+ | void PreRenderFrame(int) | ||
+ | void RenderFrame(int, SpriteBatch&) | ||
− | + | void ResizeWindow(int, int, float) | |
− | + | void Paused(bool) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | vec2 GetCameraPos(int) | ||
+ | vec4 GetVignette(int) | ||
+ | // Advanced methods | ||
+ | void LobbyCreated(bool loadingSave) | ||
+ | void LobbyInviteAccepted() | ||
+ | void LobbyEntered() | ||
− | + | void LobbyDataUpdate() | |
+ | void LobbyMemberDataUpdate(uint8) | ||
+ | void LobbyList(array<uint64>@) | ||
− | + | void SetMenuState(MenuState) | |
− | + | bool MenuBack() | |
− | + | void ShowMessage(MenuMessage) | |
− | + | ||
− | + | void OnBindingInput(ControllerType, int) | |
− | + | void ChatMessage(uint8, string) | |
− | + | </pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Category:Guides]] | [[Category:Guides]] |
Revision as of 15:42, 24 June 2017
Note
This article is describing features that are currently unreleased, but will be released in a future patch.
- The plain and simple basic
BaseGameMode
example described here will cause null dereference exceptions.
Gamemodes define rules about what should happen on a level. They are set in a level file. Typically when making a gamemode, you'll want to inherit the class from either BaseGameMode
, VersusGameMode
, or TeamVersusGameMode
. Or, if you're just adding something very simple to an existing gamemode, you can also inherit from Campaign
, Survival
, Deathmatch
, etc.
Basic plain gamemode
The most basic plain gamemode you can make is this:
[GameMode] class BasicGamemode : BaseGameMode { BasicGamemode(Scene@ scene) { super(scene); } }
The above script will simply spawn a player in the map without any weapons and no HUD. If we wanted to give the player a few weapons for example, we'd add the following override provided by BaseGameMode
:
void SpawnPlayer(int i, vec2 pos = vec2(), int unitId = 0, uint team = 0) override { BaseGameMode::SpawnPlayer(i, pos, unitId, team); // Give weapons g_players[i].AddWeapon("weapons/smg.sval"); g_players[i].AddWeapon("weapons/railgun.sval"); // Give ammo g_players[i].GiveAmmo("weapons/ammo/bolts.sval", 30); g_players[i].GiveAmmo("weapons/ammo/bullets.sval", 500); }
At this point you probably also want to add a HUD so you know what's happening. To do this, we have to do a few things:
- Instantiate a
HUD
object using the GUI builder - Return the object in the
GetHUD()
method - Update the HUD in the
UpdateWidgets(...)
method - Render the HUD in the
RenderWidgets(...)
method
This looks roughly like this:
HUD@ m_hud; BasicGamemode(Scene@ scene) { super(scene); @m_hud = HUD(m_guiBuilder, null); } HUD@ GetHUD() override { return m_hud; } void UpdateWidgets(int ms, GameInput& gameInput, MenuInput& menuInput) override { m_hud.Update(ms); BaseGameMode::UpdateWidgets(ms, gameInput, menuInput); } void RenderWidgets(PlayerRecord@ player, int idt, SpriteBatch& sb) override { m_hud.Draw(sb, idt); BaseGameMode::RenderWidgets(player, idt, sb); }
Functions
Further, you can implement any function you'd like from the below list in your class, and they will be called as events.
void Start(uint8, SValue@, StartMode) SValue@ Save() void AddPlayer(uint8) void RemovePlayer(uint8, bool) void UpdateFrame(int, GameInput&, MenuInput&) void UpdatePausedFrame(int, GameInput&, MenuInput&) void PreRenderFrame(int) void RenderFrame(int, SpriteBatch&) void ResizeWindow(int, int, float) void Paused(bool) vec2 GetCameraPos(int) vec4 GetVignette(int) // Advanced methods void LobbyCreated(bool loadingSave) void LobbyInviteAccepted() void LobbyEntered() void LobbyDataUpdate() void LobbyMemberDataUpdate(uint8) void LobbyList(array<uint64>@) void SetMenuState(MenuState) bool MenuBack() void ShowMessage(MenuMessage) void OnBindingInput(ControllerType, int) void ChatMessage(uint8, string)