Statistics¶
How a mission is scored. The game counts events per player in six categories (StatAdd(human, group, index, n)
from scripts; the code adds the same way): each event's count times its points (CfgSetStatValue(group, index,
points)) makes the category's score, shown as a percentage of the category's maximum (CfgSetStatTypeMax,
which global.lua sets per level from PointsMatrix). Harmony counts against the player: its score is the maximum
minus the points (Inventory, unlockables and statistics).
What is complete
All six categories, all 45 event slots and every level row of PointsMatrix are listed. Each event's meaning is
read from the code that counts it (confirmed (code), one inferred); six slots have no engine caller. How
global.lua turns a level's mission and bonus values into maxima is not traced.
75 entries. Data: research/references/statistics.yaml.
category¶
6 entries.
| Id | Group | Category | Max |
|---|---|---|---|
mission |
0 | mission |
10000 |
bonus |
1 | bonus |
|
style |
2 | style |
2000 |
combat |
3 | combat |
5000 |
crime |
4 | crime |
3000 |
harmony |
5 | harmony |
4000 |
event¶
45 entries.
| Id | Group | Category | Index | What | Points | Also set by | Counted by scripts |
|---|---|---|---|---|---|---|---|
0-0 |
0 | mission |
0 | No engine caller found | 1000 | level99.lua |
|
0-1 |
0 | mission |
1 | A player knocks out an enemy gang member of category 13 | 1000 | ||
0-2 |
0 | mission |
2 | No engine caller found | 500 | ||
1-0 |
1 | bonus |
0 | No engine caller found | 100 | ||
1-1 |
1 | bonus |
1 | No engine caller found | 250 | ||
1-2 |
1 | bonus |
2 | No engine caller found | 500 | ||
1-3 |
1 | bonus |
3 | A flawless break-in or a spray tag finished cleanly | 1000 | ||
2-0 |
2 | style |
0 | A counter (tackle, grab or block counter) | 75 | ||
2-1 |
2 | style |
1 | A hat picked up for the first time (hat byte +0x10b = 1) |
200 | level11_chapter6.lua |
|
2-2 |
2 | style |
2 | The same, hat byte +0x10b = 2 |
150 | ||
2-3 |
2 | style |
3 | A thrown human damages a car or breaks an object; a knife throw adds 5 | 60 | ||
2-4 |
2 | style |
4 | No engine caller found | 150 | ||
2-5 |
2 | style |
5 | A thrown human falls far (anims 422, 425, 428; inferred) | 150 | ||
2-6 |
2 | style |
6 | A tandem attack | 100 | ||
2-7 |
2 | style |
7 | A thrown human is knocked out by a moving vehicle | 150 | ||
2-8 |
2 | style |
8 | A thrown human smashes a glass pane | 100 | ||
2-9 |
2 | style |
9 | A wall throw | 150 | ||
2-10 |
2 | style |
10 | A stealth kill | 100 | ||
2-11 |
2 | style |
11 | A bottle smashed on someone | 75 | ||
2-12 |
2 | style |
12 | A grabbed human handcuffed | 30 | ||
3-0 |
3 | combat |
0 | A running charge or dive that lands | 6 | ||
3-1 |
3 | combat |
1 | A cross strike, a grounded or mounting strike, a rage or special attack | 4 | ||
3-2 |
3 | combat |
2 | A square strike, a grab or mount combo strike, an object throw | 1 | ||
3-3 |
3 | combat |
3 | A power strike in a grab or mount, a weapon finisher | 7 | ||
3-4 |
3 | combat |
4 | A grab or mount reversal | 20 | ||
3-5 |
3 | combat |
5 | A snap attack | 3 | ||
3-6 |
3 | combat |
6 | A throw, or a thrown human hitting someone; a molotov hit | 5 | ||
3-7 |
3 | combat |
7 | A player knocks out an enemy gang member | 5 | ||
4-0 |
4 | crime |
0 | The first assault on a civilian, bum or dealer | 50 | ||
4-1 |
4 | crime |
1 | A store break-in (once per store) | 300 | ||
4-2 |
4 | crime |
2 | A civilian, bum or dealer knocked out | 5 | ||
4-3 |
4 | crime |
3 | The first assault on a cop | 25 | ||
4-4 |
4 | crime |
4 | A cop knocked out | 250 | ||
4-5 |
4 | crime |
5 | A civilian, bum or dealer mugged | 100 | ||
4-6 |
4 | crime |
6 | A cop mugged | 300 | ||
4-7 |
4 | crime |
7 | A gang member mugged | 200 | ||
4-8 |
4 | crime |
8 | An owned item picked up (shoplifting) | 100 | ||
4-9 |
4 | crime |
9 | A breakable object broken | 5 | ||
4-10 |
4 | crime |
10 | A glass pane smashed | 50 | ||
4-11 |
4 | crime |
11 | Car parts newly damaged | 10 | ||
5-0 |
5 | harmony |
0 | An AI Warrior handcuffed | 100 | ||
5-1 |
5 | harmony |
1 | Every 2 s, each AI Warrior still cuffed | 5 | ||
5-2 |
5 | harmony |
2 | An AI Warrior knocked out | 200 | ||
5-3 |
5 | harmony |
3 | Every 2 s, each AI Warrior still down | 10 | ||
5-4 |
5 | harmony |
4 | Scripts only (StatAdd(player, 5, 4, 1)) |
50 | global.lua, level11_chapter3.lua, level60.lua |
level¶
24 entries.
| Id | Level | Mission | Bonus | Style | Combat | Crime | Harmony |
|---|---|---|---|---|---|---|---|
level-0 |
0 | 10 | 0 | 5000 | 10000 | 5000 | 5000 |
level-2 |
2 | 11 | 3.5 | 2000 | 15000 | 2000 | 10000 |
level-3 |
3 | 9 | 0 | 5000 | 15000 | 2000 | 5000 |
level-5 |
5 | 15 | 4 | 10000 | 10000 | 2000 | 5000 |
level-9 |
9 | 10 | 0 | 10000 | 5000 | 5000 | 5000 |
level-11 |
11 | 13 | 7 | 10000 | 15000 | 5000 | 2000 |
level-14 |
14 | 6 | 5.5 | 10000 | 5000 | 10000 | 2000 |
level-20 |
20 | 18 | 3.5 | 10000 | 10000 | 5000 | 2000 |
level-31 |
31 | 17 | 1 | 10000 | 10000 | 2000 | 5000 |
level-34 |
34 | 6 | 3.5 | 2000 | 5000 | 10000 | 5000 |
level-51 |
51 | 20 | 6 | 10000 | 20000 | 2000 | 10000 |
level-52 |
52 | 9 | 3 | 10000 | 15000 | 2000 | 10000 |
level-54 |
54 | 10 | 0 | 2000 | 5000 | 2000 | 10000 |
level-55 |
55 | 5 | 0 | 2000 | 5000 | 2000 | 10000 |
level-80 |
80 | 5 | 0 | 2000 | 5000 | 2000 | 2000 |
level-81 |
81 | 5 | 0 | 5000 | 15000 | 2000 | 10000 |
level-82 |
82 | 11 | 0 | 5000 | 10000 | 10000 | 2000 |
level-83 |
83 | 10 | 0 | 5000 | 10000 | 5000 | 2000 |
level-84 |
84 | 6 | 0 | 10000 | 10000 | 2000 | 10000 |
level-86 |
86 | 10 | 0 | 5000 | 15000 | 2000 | 5000 |
level-87 |
87 | 8 | 0 | 2000 | 10000 | 5000 | 5000 |
level-92 |
92 | 7 | 2.5 | 5000 | 15000 | 10000 | 2000 |
level-93 |
93 | 11 | 0 | 5000 | 15000 | 10000 | 10000 |
level-99 |
99 | 6 | 0 | 2000 | 5000 | 2000 | 2000 |
Sources and evidence¶
Evidence levels used: confirmed-code.
- config_preload2.lua, CfgSetStatValue and CfgSetStatTypeMax; global.lua, PointsMatrix
Fields¶
| Field | Type | Hand-written | Meaning |
|---|---|---|---|
id |
str | A category's name, <group>-<index> for an event, level-<n> for a level. |
|
kind |
str | category, event or level. |
|
group |
int | The category's number: StatAdd's group and CfgSetStatValue's table. |
|
category |
str | Mission, bonus, style, combat, crime or harmony. | |
index |
int | The event's index in its category. | |
meaning |
str | yes | What the game counts there, in our words. |
points |
int | Points per event (CfgSetStatValue in config_preload2.lua). |
|
max |
int | The category's default maximum (CfgSetStatTypeMax in config_preload2.lua). |
|
set_by |
list | Other scripts that set the event's points. | |
added_by |
list | Scripts that count the event with StatAdd. |
|
level |
int | A level's number in PointsMatrix. |
|
mission |
float | The level's mission value (PointsMatrix). |
|
bonus |
float | Its bonus value. | |
style |
int | Its style maximum (Pts.STYLE_*). |
|
combat |
int | Its combat maximum (Pts.COMBAT_*). |
|
crime |
int | Its crime maximum (Pts.CRIME_*). |
|
harmony |
int | Its harmony maximum (Pts.HARM_*). |
|
source |
str | yes | Where the entry comes from: a script and binding, an address, a chunk. |
evidence |
str | yes | How we know: confirmed-code, confirmed-runtime, inferred or speculative (evidence levels). |
notes |
str | yes | Our own short notes. |