Knowledge Base
HomeProductsCommunityReviewsSocial
Old Knowledge Base
Old Knowledge Base
  • Knowledge Base
    • Getting to know us
  • Where to Buy
    • Become a Sponsor
    • Heathen License Agreement
  • General
    • 🔎Table of Contents
    • 🤩Getting Started
      • Indie Check List
      • Sourcing Resources
        • 🧙‍♂️Community
        • 🧞‍♂️Managed Services
        • 📣Marketing
        • 🧪Testing
    • 🧞Tips and Tricks
      • Fundamentals
        • Development Phases
      • Unity
        • Package Manager Installs
          • Missing asset after update
        • Unity Release Version
      • Unreal
        • Unity to Unreal
        • Quick Start
    • 📐Design
      • ☝️Quick Start
      • 🥾Bootstraping
      • 🤑Monetization
        • What not to do
        • Models
          • Free
          • Free to Play
          • Pay to Play
          • Pay to Win
          • Play to Earn
        • Tools
          • 😡Artificial Scarcity
          • 🤑Bundles
          • 🤔Community Marketplace
          • 🤑Expansions
          • 😡Fear of Missing Out (FOMO)
          • 😡Gatcha Mechanics
          • 🤔Microtransactions (MTX)
          • 😡NFT
            • 😡Blockchain
          • 🤔No Spend Cap
          • 😡Premium Currency
          • 🤔Season
          • 🤑Subscription
          • 😡Surprise Mechanics
      • 🎮Multiplayer
        • Networking Tools
        • Terminology
      • 🤹Multi-Scene Architecture
      • 🌐Project Architecture
      • 😊Player Motivation
    • 🏗️Development
      • ☝️Quick Start
      • ☎️Callbacks & Delegates
      • ❔Conditional Compilation
      • 🪳Debugging
      • 🚧DevOps
        • ☕Team Collaboration
        • 🛂Git Control & Unity
      • ⁉️Error Handling
        • System Dialog
        • Reporting
      • 🤯IntelliSense
      • 🪶Lambda Expressions
      • 🤹‍♀️Multi Platform Projects
      • 📑Namespace and Using
      • 🎮Unity's "New" Input System
      • 🔼Updating Visual Studio and C#
      • 💡Visual Scripting
    • ⚠️Publishers
    • 🧪Testing
      • 👋Introduction
      • ✏️Writing Formal Tests
    • 🧙‍♂️Community
      • ☝️Quick Start
    • 📣Marketing
      • ☝️Quick Start
      • 📌Tips and Tactics
      • 🤓Market Research
    • 📆Release
    • 🗺️Live
  • Steam
    • ☝️Quick Start
    • 🏆Achievements
    • 🌳Branches
    • 🗣️Community Hub
    • ⬆️Uploading to Steam
    • ☁️Cloud Save
    • 🆔CSteamID
    • 🔎Discovery Queue
    • 🕹️Downloadable Content
    • 🚫Early Access
    • 🖱️Input
    • 📦Inventory
      • 🔨Crafting System
      • 🛠️Item Definition Tools
      • 💸Microtransactions
      • 🎁Promo Items
    • 🚢Launch
    • 🥇Leaderboards
      • 🗣️Advanced Profiles
    • 🎮Multiplayer
      • ☝️Getting Started
      • 🧪Dev and Test
      • 🧑‍⚖️Authentication
      • 🛋️Lobby
      • 🧑‍🤝‍🧑Matchmaking
      • 🧑‍🔧Rich Presence
      • 💬Room Systems
      • 💁Steam Game Server
        • 👷Builds
        • ⚙️Configuration
        • 📋Server Browser
        • 🐧Setup Linux
      • 🗣️Terminology
    • 🤹Multi-Platform Project
    • 🧪Playtest
    • 🛋️Remote Play
    • 👀Reviews
    • 🏃Running a Build
    • 💶Sales
    • ⭐Stats
    • 🔑Steam API Key
    • 📃steam_appid.txt
    • 🖥️Steam Deck
    • ⚙️Steamworks
    • 🤯Store Page
    • 🛠️Workshop
      • Creating an Item
      • In-Game Browser
      • Subscribed Items
    • 🧑‍🏫User Information
      • Unity User Tools
      • Unreal User Tools
    • 🗣️Voice
  • Toolkit for Steamworks
    • Introduction
    • Maintenance Cycle
    • F.A.Q
    • Unity
      • ⚠️Known Issues
      • Unity Asset Refund Policy
      • Installation
        • Networking Integrations
      • Getting Started
      • Debugging
      • Learning
      • API Extensions
        • App.Client
        • App.Server
        • App.Web
        • Authentication
        • BigPicture.Client
        • Clans.Client
        • Friends.Client
        • Input.Client
        • Inventory.Client
        • Leaderboards.Client
        • Matchmaking.Client
        • Overlay.Client
        • Parties.Client
        • RemotePlay.Client
        • RemoteStorage.Client
        • Screenshots.Client
        • StatsAndAchievements.Client
        • StatsAndAchievements.Server
        • User.Client
        • UserGeneratedContent.Client
        • Utilities
        • Utilities.Client
        • Voice.Client
      • Objects
        • Classes
          • Achievement Data
          • Achievement Object
          • App Data
          • Authentication Session
          • Authentication Ticket
          • Avg Rate Stat
          • Chat Room
          • Clan Chat Msg
          • Clan Data
          • Currency
          • Data Model
          • DLC Data
          • Downloadable Content Object
          • Favorite Game
          • Float Stat
          • Game Data
          • Input Action
          • Input Action Data
          • Input Action Set
          • Input Action Set Data
          • Input Action Set Layer
          • Input Action Update
          • Input Controller Data
          • Int Stat
          • Inventory Result
          • Item Data
          • Item Definition
          • Item Detail
          • Leaderboard Data
          • Leaderboard Entry
          • Leaderboard Object
          • Lobby Chat Msg
          • Lobby Data
          • Lobby Game Server
          • Lobby Member Data
          • Party Beacon Details
          • Rank Change
          • Remote Storage File
          • Stat Data
          • Steam Game Server Configuration
          • UGC Query
          • User Data
          • Steam Settings
            • Colors
            • Game Client
              • Inventory Settings
            • Game Server
          • User Leave Data
          • Workshop Item
          • Workshop Item Data
          • Workshop Item Data Create Status
          • Workshop Item Key Value Tag
          • Workshop Item Preview File
        • Components
          • Friend Manager
          • Game Server Browser Manager
          • Input Action Event
          • Input Action Glyph
          • Input Action Name
          • Inventory Manager
          • Item Shopping Cart Manager
          • Leaderboard Manager
          • Leaderboard User Entry
          • Overlay Manager
          • Steam Game Server Events
          • Steam Input Manager
          • Steamworks Event Triggers
          • UGC Query Manager
          • Voice Recorder
          • Voice Stream
        • Enums
          • Friend Dialog
          • Inventory Item Type
          • Language Codes
          • Overlay Dialog
          • Sample Rate Method
          • Valve Price Categories
        • Prefabs
          • 📦Clan Chat
          • 📦Clan List
          • 📦Clan Member Count
          • 📦Friend Avatar
          • 📦Friend Groups
          • 📦Friend List
          • 📦Friend Name
          • 📦Friend Profile
          • 📦Selectable Friend ID
        • Programming Tools
          • IChatMessage
          • ILeaderboardEntryDisplay
          • IUserProfile
          • IWorkshopBrowserItemTemplate
          • LobbyMemberSlot
          • User Invite Button
        • UI Components
          • Chat Auto Join
          • Chat Stream
          • Clan Chat Director
          • Clan Chat Member Counter
          • Clan Chat Member List
          • Clan List
          • Clan Profile
          • Friend Group
          • Friend Groups Display
          • Friend Invite Dropdown
          • Friend List
          • Friend Profile
            • Image Field
            • Message Options
            • Text Field
          • Input Action Glyph
          • Input Action Name
          • Leaderboard Entry UI Record
          • Leaderboard UI List
          • Lobby Chat Director
          • Lobby Member Slot
          • Lobby Manager
          • Party Lobby Control
          • Quick Match Lobby Control
          • Rich Presence Reader
          • Rich Presence Setter
          • Set Achievement Description
          • Set Achievement Icon
          • Set Achievement Name
          • Set User Avatar
          • Set User Id Input Field
          • Set User Id Label
          • Set User Name
          • Toggle Event Helper
          • Workshop Browser Simple Item Record
      • Legacy
        • Troubleshooting
        • Getting Started
          • GameObject Initialization
          • ScriptableObject Initialization
          • API Initialization
        • Build Upload Tool
        • Debugging Tools
          • Testing
        • Components
          • Steamworks Behaviour
          • Steamworks Creator
          • Steam System Events
    • Unreal
      • What's New!
      • Installation
      • Getting Started
      • Updating Steamworks SDK
      • Packaging
      • Game Instance
      • Sockets Net Driver
      • Online Subsystem
      • Data Assets
        • Achievement
        • Downloadable Content
        • Inventory Item
        • Leaderboard
        • Stat
      • Widgets
        • BP_FriendsListDisplay
        • BP_FriendsListEntry
        • BP_FriendsListGroup
        • BP_SteamAvatarImage
        • BP_SteamUserName
      • Blueprint Nodes
        • Functions
          • 🔵Add Favorite Game
          • 🔵Add History Game
          • 🔵Add Promo Item
          • 🔵Add Request Lobby List Filter
          • 🔵Advertise Game
          • 🔵Associate with Clan
          • 🔵Attach Leaderboard UGC
          • 🔵Begin Auth Session
          • 🔵Cancel Auth Ticket
          • 🔵Check Result Steam ID
          • 🔵Clear All Key Values
          • 🔵Clear Achievement
          • 🔵Clear Rich Presence
          • 🔵Client Initialize
          • 🔵Client Run Callbacks
          • 🔵Client Should Restart
          • 🔵Compue New Player Compatibility
          • 🔵Consume Item
          • 🔵Create Lobby
          • 🔵Decompress Voice
          • 🔵Delete Lobby Data
          • 🔵Deserialize Result
          • 🔵Destroy Result
          • 🔵Download Leaderboard Entries
          • 🔵Download Leaderboard Entries for Users
          • 🔵End Auth Session
          • 🔵Exchange Items
          • 🔵Find Leaderboard
          • 🔵Find or Create Leaderboard
          • 📂Game Server Browser
            • 🔵Ping Server
            • 🔵Player Details
            • 🔵Request Server List
            • 🔵Server Rules
          • 🔵Generate Items
          • 🔵Get Achievement
          • 🔵Get Achievement by Index
          • 🔵Get Achievement Icon
          • 🔵Get Achievement Is Achieved
          • 🔵Get All Items
          • 🔵Get App Build ID
          • 🔵Get App Id
          • 🔵Get App Owner
          • 🔵Get Auth Session Ticket
          • 🔵Get Auth Ticket for Web API
          • 🔵Get Available Game Languages
          • 🔵Get Available Voice
          • 🔵Get Coplay Friends
          • 🔵Get Current Beta Name
          • 🔵Get Current Game Language
          • 🔵Get DLC Count
          • 🔵Get DLC Data By Index
          • 🔵Get DLC Download Progress
          • 🔵Get Earliest Purchase
          • 🔵Get Favorite Game
          • 🔵Get Friends
          • 🔵Get Friend Coplay Game
          • 🔵Get Friend Coplay Time
          • 🔵Get Friend Count from Source
          • 🔵Get Friend Game Played
          • 🔵Get Friend Groups
          • 🔵Get Friend Group Members
          • 🔵Get Friend Group Name
          • 🔵Get Friend Persona Name
          • 🔵Get Followed
          • 🔵Get Installed Depots
          • 🔵Get Item Definition Properties
          • 🔵Get Item Price
          • 🔵Get Items with Price
          • 🔵Get Items by ID
          • 🔵Get Launch Command Line
          • 🔵Get Launch Query Param
          • 🔵Get Leaderboard Display Type
          • 🔵Get Leaderboard Entry Count
          • 🔵Get Leaderboard Name
          • 🔵Get Leaderboard Sort Method
          • 🔵Get Lobby Chat Entry
          • 🔵Get Lobby Data
          • 🔵Get Lobby Data by Index
          • 🔵Get Lobby Game Server
          • 🔵Get Lobby Members
          • 🔵Get Lobby Member by Index
          • 🔵Get Lobby Member Data
          • 🔵Get Lobby Member Limit
          • 🔵Get Lobby Owner
          • 🔵Get Most Achieved Achievement Info
          • 🔵Get My Steam Avatar
          • 🔵Get My Steam ID
          • 🔵Get My Steam Level
          • 🔵Get Num Items with Price
          • 🔵Get Persona Name
          • 🔵Get Persona State
          • 🔵Get Player Nickname
          • 🔵Get Public IP
          • 🔵Get Result Item Property
          • 🔵Get Result Items
          • 🔵Get Result Status
          • 🔵Get Result Timestamp
          • 🔵Get Stat
          • 🔵Get Steam ID
          • 🔵Get User Achievement
          • 🔵Get User Float Stat
          • 🔵Get User Int Stat
          • 🔵Get User Restrictions
          • 🔵Get Rich Presence
          • 🔵Get User Rich Presence
          • 🔵Get User Rich Presence Key by Index
          • 🔵Get User Steam Avatar
          • 🔵Get Voice
          • 🔵Get Voice Optimal Sample Rate
          • 🔵Grant Promo Items
          • 🔵Has Friend
          • 🔵Id is Me
          • 🔵Id is Valid
          • 🔵Indicate Achievement Progress
          • 🔵Install DLC
          • 🔵Invite User To Game
          • 🔵Invite User to Lobby
          • 🔵Initialize
          • 🔵Is App Installed
          • 🔵Is Behind NAT
          • 🔵Is Cybercafe
          • 🔵Is DLC Installed
          • 🔵Is Lobby Owner
          • 🔵Is Low Violence
          • 🔵Is Phone Identifying
          • 🔵Is Phone Requiring Verification
          • 🔵Is Phone Verified
          • 🔵Is Steam Initialized
          • 🔵Is Subscribed
          • 🔵Is Subscribed App
          • 🔵Is Subscribed from Family Sharing
          • 🔵Is Subscribed from Free Weekend
          • 🔵Is Timed Trial
          • 🔵Is Two Factor Enabled
          • 🔵Is VAC Banned
          • 🔵Join Lobby
          • 🔵Leave Lobby
          • 🔵Load Item Definitions
          • 🔵Logged On
          • 🔵Log Off
          • 🔵Log On
          • 🔵Log On Anonymous
          • 🔵Mark Content Corrupt
          • 🔵Quick Match
          • 🔵Remove Favorite Game
          • 🔵Remove History Game
          • 🔵Remove Property
          • 🔵Reply to Friend Message
          • 🔵Request Current Stats
          • 🔵Request Eligible Promo Item Definitions IDs
          • 🔵Request Friend Rich Presence
          • 🔵Request Lobby Data
          • 🔵Request Lobby List
          • 🔵Request Prices
          • 🔵Request Store Auth URL
          • 🔵Request User Group Status
          • 🔵Request User Information
          • 🔵Request User Stats
          • 🔵Reset All Stats
          • 🔵Run Callbacks
          • 🔵Secure
          • 🔵Send Lobby Chat
          • 🔵Serialize Result
          • 🔵Set Achievement
          • 🔵Set Advertise Server Active
          • 🔵Set Bot Player Count
          • 🔵Set Dedicated Server
          • 🔵Set Description
          • 🔵Set Game Data
          • 🔵Set Game Tags
          • 🔵Set In-Game Voice Speaking
          • 🔵Set Key Value
          • 🔵Set Map Name
          • 🔵Set Listen for Friends Messages
          • 🔵Set Lobby Data
          • 🔵Set Lobby Game Server
          • 🔵Set Lobby Joinable
          • 🔵Set Lobby Member Data
          • 🔵Set Lobby Member Limit
          • 🔵Set Lobby Owner
          • 🔵Set Lobby Type
          • 🔵Set Max Player Count
          • 🔵Set Mod Directory Name
          • 🔵Set Name
          • 🔵Set Password Protected
          • 🔵Set Persona Name
          • 🔵Set Played with User
          • 🔵Set Product
          • 🔵Set Property
          • 🔵Set Region
          • 🔵Set Rich Presence
          • 🔵Set Stats
          • 🔵Set Spectator Name
          • 🔵Set Spectator Port
          • 🔵Set User Achievement
          • 🔵Set User Float Stat
          • 🔵Set User Int Stat
          • 🔵Shutdown
          • 🔵Start Purchase
          • 🔵Start Update Property
          • 🔵Start Voice Recording
          • 🔵Steam ID Tools
          • 🔵Stop Voice Recording
          • 🔵Store Stats
          • 🔵Store User Stats
          • 🔵Submit Update Property
          • 🔵Transfer Item Quantity
          • 🔵Trigger Item Drop
          • 🔵Uninstall DLC
          • 🔵Update Avg Rate Stat
          • 🔵Update User Avg Rate Stat
          • 🔵Upload Leaderboard Score
          • 🔵User Has License for App
          • 🔵Was Restart Requested
        • Events
          • 🔻Dlc Installed
          • 🔻Friend Chat Msg
          • 🔻Friend Rich Presence Update
          • 🔻Game Overlay Activated
          • 🔻Inventory Item Definition Update
          • 🔻Inventory Results Ready
          • 🔻Lobby Chat Msg
          • 🔻Lobby Chat Update
          • 🔻Lobby Data Update
          • 🔻Lobby Game Created
          • 🔻Lobby Join Requested
          • 🔻Micro Txn Authorization Response
          • 🔻Persona State Change
          • 🔻Rich Presence Join Requested
          • 🔻Servers Connected
          • 🔻Server Connect Failure
          • 🔻Server Disconnected
          • 🔻Ticket for Web API Response
        • Types
          • 🟩Achievement Status
          • 🟩Auth Ticket Data
          • 🟩Chat Entry
          • 🟩Decompress Voice Result
          • 🟩Float Stat
          • 🟩Game Server Item Wrapper
          • 🟩Game Server Player Details Wrapper
          • 🟩Global Achievement Status
          • 🟩Item Count
          • 🟩Item Detail
          • 🟩Item Detail With Properties
          • 🟩Item Price
          • 🟩Item With Price
          • 🟩Int Stat
          • 🟩Key Value Pair
          • 🟩Leaderboard Entry
          • 🟩Lobby Data
          • 🟩Lobby Game Server
          • 🟩Server Achievement Status
          • 🟩Server Stat Float Value
          • 🟩Server Stat Int Value
          • 🟩User Achievement Status
          • 🟩Voice Result
          • 🟩Voice Available Result
        • Enumerators
          • 🟨UEBeginAuthSessionResult
          • 🟨UEChatRoomEnterResponse
          • 🟨UEFriendFlags
          • 🟨UEChatEntryType
          • 🟨UEChatMemberStateChange
          • 🟨UELeaderboardDataRequest
          • 🟨UELeaderboardDisplayType
          • 🟨UELeaderboardSortMethod
          • 🟨UELobbyComparison
          • 🟨UELobbyDistanceFilter
          • 🟨UELobbyType
          • 🟨UEResult
          • 🟨UESteamCurrencyCode
          • 🟨UEServerMode
          • 🟨UEUserHasLicenseForAppResult
          • 🟨UEVoiceResult
      • C++
  • Toolkit for Physics
    • Unity
      • Installation
      • Core Features
        • Ballistics Tools
        • Buoyancy Tools
        • Force Effect Framework
        • Physics Data extended
        • Verlet Integration
      • Sample Scenes
        • Fantasy Style Ballistic Simulation
        • (3D) Deterministic Bounce Prediction
        • (2D) Deterministic Bounce Prediction
        • 1 Buoyancy Example
        • 1 Force Effect Fields
        • 2 Spherical Gravity
        • 3 Multi-body Gravity
        • 1 Verlet Spring Simple Transforms
        • 2 Verlet Spring Skinned Mesh
      • API
        • Ballistics
        • Buoyancy
        • Force Effects
        • Maths
        • Mesh Tools
      • Components
        • Ballistic Aim
        • Ballistic Path Line Render
        • Ballistic Path Follow
        • Buoyant Body
        • Buoyant Body Drag
        • Constant Acceleration
        • Constant Angular Velocity
        • Constant Linear Velocity
        • Force Effect Source
          • Force Effect Direction
          • Force Effect Field
        • Force Effect Reciever
        • Physics Data
        • Surface Tool
        • Trick Shot
        • Trick Shot Line
        • Verlet Spring
      • Objects
        • Force Effect
          • Attract Effect
          • Gravity Effect
          • Repulse Effect
          • Suspend Effect
          • Tractor Effect
          • Wind Effect
        • Point Volume
        • Verlet Hierarchy
        • Verlet Hierarchy Settings
        • Verlet Particle
      • Enums
        • Calculation Mode
  • Toolkit for UI & UX
    • Introduction
    • Unity
      • Installation
      • Learning
        • Sample Scenes
          • Command Parser Example
          • Cursor System Scene
          • Drag and Drop (Behaviours)
          • Drag and Drop (Inventory Example)
          • Drag and Drop (Spell Bar Example)
          • Log Sample Scene
          • Screenshot Sample Scene
        • Core Concepts
          • Command System
          • Cursor System
          • Drag and Drop System
          • Interaction Tools
          • Logging & Feedback
          • Scene Tools
          • Selection System
          • Tooltip System
          • Window System
        • uGUI Extras
          • Key Collection
          • Ligature Tools
          • Tree View Collection
      • API
        • Cursors
        • Json
        • Log
        • Scenes
        • Screenshot
        • Selection
        • Trello
        • Windows
      • Components
        • Action Hold
        • Border Handle
        • Button Cursor State
        • Change Cursor Default State
        • Command Director
        • Cursor Animator
        • Drag Item
        • Drop Container
        • Key Hold
        • Mouse Over Cursor State
        • Move Handle
        • Play On Click
        • Play On Demand
        • Play On Down
        • Play On Enter
        • Play On Exit
        • Play On Up
        • Pointer Hold
        • Scenes Manager
        • Selectable Object
        • Selection Manager
        • Tooltip Trigger
        • Tooltip Window Controller
        • Window
        • Window Clamping Bounds
        • Window Focus Change Event Data
      • Objects
        • Command Data
        • Command Library
        • Cursor Animation
        • Cursor State
        • DragAndDropItemChangeData
        • LogData
      • Enums
        • Clear Drop Behaviour
        • Drag Effect
        • Drag End Behaviours
        • Grab Handle
        • Mask Mode
        • Recieve Mode
        • Window Snap To Location
  • More Heathen Tools
    • 🎨Art Assets
      • Breakable
        • Wood Props
          • Installation
    • ⚙️System Core
      • Installation
      • Learning
        • Asset Developers
      • Command Line
      • Game Events
      • Scriptable Tags
      • Scriptable Variables
      • Heathen Behaviour
      • Heathen UI Behaviour
    • 📋Tips for Asset Developers
      • Editor Coroutines
      • Package Manger in C#
      • Session State Values
  • Codex
    • Introduction
      • Article Design Guide
        • Evolution
          • Early Period
          • Middle Period
          • Late Period
      • Codex Organization
    • Irish
      • Folklore
        • Introduction
        • Characters
          • Déithe
            • Cacht
            • Lugh
            • Dag Dia
              • Donn
              • Nuada
              • Ogma
            • Mother?
              • Banba
                • Appearance
                • Name
              • Érui
                • Appearance
                • Name
              • Fódla
                • Appearance
                • Name
            • Father ?
              • Éthur Mac Cuill
              • Céthur Mac Gréine
              • Téthur Mac Cecht
        • Concepts
          • Binding Tablet
          • Druids
          • Sociaty
          • Patron Gods
          • Bile
          • Time
        • Food
          • Elderberry Capers
          • Elderberry Wine
          • Mead
        • Peoples
          • Fomóire
          • Research Note
            • Hunter Gathers
            • Neolithic Farmers
            • Bronze Age
        • Locations
          • Lughmhagh
          • Temair
            • Name
      • Research
        • Historical Backdrop
        • Disambiguation
          • Banshee
          • Celt
          • Gods and Goddesses
          • Lebor Gabála Érenn
          • Milesians
          • Mother Goddess
          • Sovereignty Goddess
          • The Morrígan
          • Triple Persona
          • Tuatha Dé
          • Wicker Man Sacrafice
        • Links
          • Social Factors
          • Lugh
            • Name
          • Ogma
          • Astronomy
          • Time
        • Sources
        • WIP
          • Artefacts
          • Beings
            • Cannon
              • Belgae
              • Fomorians
              • Síog
              • Tuatha Dé Danann
            • Derivative
              • Milesians
              • Muintir Nemid
          • Characters
            • Cannon
            • Derivative
          • Concepts
          • Events
          • Languages
          • Music
          • Places
          • Sources
          • Stories
          • Styles
Powered by GitBook
On this page
  • Introduction
  • When
  • Define
  • Stories
  • Environments
  1. General
  2. Testing

Writing Formal Tests

Before you code or even design the solution ... you define the problem and how to prove its solved.

PreviousIntroductionNextCommunity

Last updated 2 years ago

Like what your seeing?

Consider supporting us as a and get instant access to all our Unity assets, exclusive tools and assets, escalated support and issue tracking and our gratitude. These articles are made possible by our ... become a sponsor today!

Introduction

This article will help you break down the process of creating tests for your game or app in a structured and formal way. Note that testing is not limited to the code and is a rather broad topic covering many levels of the design and development process. In this article we break down the creation of your formal test cases. These are the tests that you must "pass" to know the game is complete and of a sufficient level of quality to be released.

When

Their are different schools of though as to when tests should be written. Most professional software engineers will tell you that you should define your test before your software design and thus much before you start writing any code. The act of creating the tests that will prove a thing is or is not complete to the quality standard is the best way to understand what you need to build before you try to actually build it.

That said most game development is less "engineered" and more "hacked" and hopefully later cleaned up in production. As a result tests are usually defined at the end of the phase and very likely will be expanded, reduced or otherwise modified over the phase of the game. Ideally the bulk of your "engineering" will be done with good test cases driving that technical design and implementation.

Define

Before you can write a test to prove something you need to have a structured understanding of what it is ... or rather what it should be. Their are a ton of ways to go about this but most are some variation of the following

Stories

As you close in on the end of preproduction you should have a really good idea of what the resulting game should be. As with anything their are multiple ways to accomplish this, a common approach is via "User Stories" or "Player Workflows", both effectively meaning to "map" the players path through your game.

As you define these paths you can more effectively identify the major areas and features of your game to build your tests around. With an understanding of those "key features" you can pick out key "user story" points that define those features it is those "story" elements you will use as the bases for writing your tests. The following bullet list shows a hypothetical breakdown of a game, this splits out the game into areas composed of features and below each feature highlights the "story" points that define the feature.

The example is of course not complete and is just a demonstration of the hierarchal organization created by this process.

  • (area) System Level

    • (feature) Steam Initialization

      • (story) User Settings requires Steam API to read stored settings data off Steam Remote Storage.

      • (story) Validation Process requires Steam API in order to validate Steam initialized as the expected App ID

    • Exception handling/reporting (feature)

      • (story) ...

    • Feedback gathering (feature)

      • (story) ...

    • Splash and Loading (feature)

      • (story) ...

  • Main Menu (area)

    • (feature) Quick Match

      • (story) Player in a group with a friend can with a single gesture find a suitable lobby for them and their friend or if none found create a suitable lobby

      • (story) Player not in any group can with a single gesture find a suitable lobby or if none create a suitable lobby

  • Single Player (area)

  • Multi Player (area)

Environments

You will define a selection of environments you expect your game or app to execute on. For a typical game project an environment definition will describe.

  • Hardware configuration such as RAM, CPU and Graphics

  • Operating System

  • Any relevant drivers or supporting software

  • Any relevant periphery such as monitor resolutions and ratios, controllers, etc.

Ideally you would have an understanding of all significant environments e.g. every possible variation however this is not usually practical or in many cases even possible. You should focus on having environments that describe your "upper and lower bound" meaning the least powerful and most powerful machines you expect your game will run on. In addition to the upper and lower you should try and represent a "most common" slice of what you expect your game will be ran on.

🧪
✏️
GitHub Sponsor
GitHub Sponsors
preproduction
production