Project Description

Student: Robert Marney, 2002-03

Back to Title



Title: Making Combos


Background: A fighting game pits two players against each other, each controlling a character with a unique set of moves. When a series of moves is guaranteed after the first move connects, the series is called a "combo." The possible combos are either determined by hardcoded trees of which moves link into which, or by making moves stun an opponent long enough for the player to connect another move. To set up a combo usually requires a "counter," a move guaranteed after an opponent's move is blocked. This program, when given the list of possible moves for the given players, will generate a list of the best combos and a list of reasonable counters, sorted by damage dealt and reliability.

Game designers, due either to time pressures, poorly trained testers, or excessive game system complexity, often design move link trees or stun times that are too good. This can result in anything from a combo that exposes weaknesses in the game code, to an infinite series of linked moves that can provide an instant win for the player who has learned it. Often the only way to fix a game's combo system is to wait until a problem combo is discovered, remove the problem, and send out replacement copies or an online update at great expense. Although there is a long tradition of finding combos from human trial and error, nothing like this has been attempted with a computer, which will greatly speed up the process of fixing an existing broken tree.


Description: The algorithm uses a system of "free trees", trees that can have any number of unrestricted links. Free trees are not designed for fast storage and retrieval, but for freeform one-way linking: one node (a single move) can have any number of children and parents. From a text file containing the relevant data for a character's moves, the program creates a master list of moves for each character, each move linking to the next move in the master list and any other moves that are specified links in the text file. The algorithm crawls through the list of moves and their links, as well as more freeform links, to create a combo for each step along the tree.

The new combos are then sorted by damage and reliability: for example, a combo that could be escaped partway through by the other player will rank lower than one that is truly guaranteed. A similar process is used to create the starting "counter" move: all moves that will connect are put into a list which is sorted by damage and time advantage. Because of the free tree structure, an infinite loop may be created; detecting and removing these loops is a primary function of this program.


Possible Graphics: For my poster I developed a small portion of the move tree for Virtua Fighter 4, the game the algorithm is currently being tested on:


The results can easily be organized into charts of damage from different starters and of combos from different starters, but both of these depend on the raw text data, which the algorithm will output in future builds.