Skip to content

Taxonomies ​

The five taxonomies: code, data, values, evidence and differences

A project names many things: functions, files, fields, findings and the places where the port differs from the original. When every agent and every person uses the same names for the same kinds of thing, a search finds all of them, and a reader knows at once what a label means. This page gives GameFrame's shared names for five sets of things. Use them in labels, in findings, in the data dictionary and in commit messages.

The kinds of game have their own taxonomy in A taxonomy of games.

Kinds of code ​

Every function in a game's binaries belongs to one of these kinds. Label library and runtime code first, so that tracing skips it (Recognising an engine).

KindWhat it isHow to recognise itLabel prefix
Game rulesThe behaviour the game is about: the simulation, the agents, combat, scoringUses the game's own structures and tables; called from the main loopnone, or the system's name
InterfaceMenus, windows, the HUD, text and input handlingDraws text and sprites, reads input, calls the rules through commandsui_
EngineDrawing, sound, files, resources, the object system, an interpreterShared with other games of the engine; often named by a released sourceeng_
MiddlewareA licensed library for one job: video, sound, physics, compressionIts version string, its DLL or its constant tables (Middleware)the library, such as bink_, zlib_
Runtime libraryThe C runtime and the C++ standard libraryMatches the compiler's library by signaturecrt_, std_
Compiler helpersCode the compiler added: 64-bit arithmetic, stack checks, exception tablesShort, called from everywhere, no game data__ names as the compiler gives them
ProtectionCopy protection, packers, integrity and debugger checksRuns before the game, or around it (Packed and protected code)prot_
Debug and dead codeLogging, consoles, test menus and code nothing callsFormat strings, assertions, no callersdbg_

Kinds of data ​

Every file, block of memory and message holds one of these kinds of data. The kind decides what the port does with it.

KindExamplesWhat the port does
AssetsPictures, models, sounds, music, fontsReads the player's own copy at run time (What a project can ship)
Rule tablesUnit and item statistics, prices, growth rates, AI weightsReads them from the player's files, and never changes their values
ScriptsBytecode, compiled scripts, trigger listsRuns them with a ported interpreter (Script interpreters)
Levels and mapsTile maps, sector maps, object placements, event scriptsReads them, and keeps the order of every list in them
SavesThe world state written by the gameReads and writes the original's format, if the project loads old saves
SettingsConfiguration files, registry values, command-line switchesReads them as inputs (Inputs)
Derived dataCaches, compiled shaders, index files the game rebuildsMay rebuild them in its own way, if nothing visible depends on them
MessagesNetwork packets, replays, recordingsUses the original's format where another program reads it

Kinds of values ​

A value's kind tells you its unit, its range and how it may change. Give every entry in the data dictionary one of these kinds, written in lower case as in the first column.

KindTypical formWhat to record
PositionIntegers in the game's units, fixed point, or floatsThe unit (pixels, tiles, sub-pixels, metres), the origin and the axis directions
AngleA byte or a 16-bit value for a full turn, degrees, or radiansSteps per full turn, the direction, and where zero points
TimeTicks, frames, milliseconds, days of a calendarThe length of one unit, and what counts it (the timer, the main loop, the calendar)
CountIntegers for lives, ammunition, money or stockThe width, whether it is signed, and the largest value the game allows
RatioFixed point or floats for a rate, a chance or a share, such as growth per tickThe scale (out of 1, 100, 256 or 65536), and the precision of each step
IdentifierAn index into a table, a hash of a name, a handle with a generationThe table it indexes, or the hash function
FlagsBits in a byte or a wordThe meaning of each bit
EnumerationA small integer from a fixed listEvery value and its meaning, often from a table of names
Random stateOne or more words of a generator's stateThe generator and every caller (Library behaviour)
ReferenceA pointer, or an offset fixed up when a file loadsWhat it points to, and what replaces it in a save
TextBytes in an encoding, or an index into a string tableThe encoding and the length limit (Text and encodings)

Kinds of evidence ​

Every claim carries one evidence label. Writing findings gives the full rules.

LabelMeaning
observedRead in the code or the data
measuredProduced by running the original, with the inputs named
inferredA reasoned guess, with what would confirm it
unknownAn open question

Kinds of difference ​

Every place where the port does not do what the original does is one of these kinds. The kind goes in the code comment and in the deviations ledger, docs/DEVIATIONS.md, which tools/triage/deviations.py writes from those comments.

KindMeaningMarked as
Not portedA part of the original the port leaves out, such as a protection check or a dead debug menua comment containing not ported
DeviationA change that the project chose, such as a larger screen or a fixed crash, with the reasona comment containing Deviation:
Not yet verifiedCode written from the evidence but not yet compared with the originalan open item in the project's checklist
Known differenceA difference found by a test and not yet fixeda failing or skipped test, with an issue
Original bug keptA bug in the original that the port copies, because players or saves depend on ita comment that names the bug, with no deviation

Using the names ​

  • Label prefixes go in labels/names.tsv, so that a search for crt_ lists the whole runtime.
  • The kinds of value go in the kind column of the data dictionary.
  • Findings use the evidence labels in every table.
  • A commit that changes behaviour says which kind of difference it adds or removes.

Code: Apache 2.0. Content: CC0 1.0. No game material: bring your own copy.