Computes all possible states of a procedurally-generated finite state machine and performs simple optimizations to eliminate duplicate states.
Originally written to generate state machines for simple web browser games, but may have other uses.
This is a NPM package without any runtime NPM dependencies. It targets NodeJS 16.11.1 or newer on the following operating systems:
- Ubuntu 20.04
- Ubuntu 18.04
- macOS 11 (Big Sur)
- macOS 10.15 (Catalina)
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
It is likely also possible to use this package as part of a web browser application through tools such as webpack. This has not been tested, however.
If your application uses Malfunction as a runtime dependency, install it like any other NPM package:
npm install --save malfunction
If Malfunction is used when building your application and not at runtime, install it as a development dependency:
npm install --save-dev malfunction
First, you must define a game source object which describes your finite state machine. This project provides some examples:
A game source object includes:
- An initial game state from which to start.
- A function which compares two game states to determine whether they represent the same game state.
- A function which compares two game states to determine whether they would appear identical to the player(s).
- A function which compares two links to determine whether they would appear identical to player(s).
- A function which lists the links from a game state to other game states.
From this, the malfunction
function will crawl the entire graph of possible
choices and generate a list of the distinct game states which were identified:
import { malfunction } from "malfunction";
const gameArtifact = malfunction(gameSource);
console.log(gameArtifact);
{
states: [
{
state: `Example Game State A`,
links: [
{
link: `Example Link A`,
stateIndex: 1234,
},
...
],
},
...
],
}