All writing

Every WCW/nWo Revenge fighter, ranked by the game's own damage math

All 62 fighters in WCW/nWo Revenge, ranked by running each real move table through the game's damage formula. Scott Norton comes first, and the field is flatter than expected.

WCW/nWo Revenge has 90 roster slots, 62 real fighters and twenty-five years of argument about which of them is best. With the damage formula decoded, each fighter's move table can now be run through the game's own arithmetic, and this is the ranking that comes out.

Who counts as a fighter#

Two mechanical filters reduce the 90 roster slots in the ROM to the list that gets ranked.

  • Thirteen slots are not wrestlers. Managers and valets have placeholder move tables worth 329 to 590 damage in total, against 1,765 to 2,172 for a real fighter. The cut-off is the largest relative jump in the sorted sums, a factor of three here. A fixed threshold would not transfer to other games: 1,200 suits Revenge but falls on the median of No Mercy. That leaves 77.
  • Fifteen more are duplicates that share another slot's parameter file, mostly the same fighter under a second name. One is a valet, Sister Sherri, on Sting's file. That leaves 62 distinct fighters.

Why not a weighted score#

Tier lists usually normalise a few columns, weight them and add them up. The weights are a preference, since nothing says how much an ability byte should count against a whole move table. Normalising and rescaling also put 100 at the top and 0 at the bottom by construction, so a score of 100 means only "best of these 62". With the engine decoded, none of this is needed. The Rating of the AKI Anvil computes the ranking below in the browser for any supported cartridge, and there is nothing to configure.

Scoring with the engine's formula#

The damage formula comes from the write-up on the pin mechanic. Every fighter's move table runs through it against one standard opponent, the roster average, so all fighters are compared under the same conditions.

The ranking index
# a fresh limb has condition 50, so the condition term is exactly the
# move's base damage:  (50 + 50) * base / 100 == base

damage_per_move = max(0, base)
                + max(0, (my attack[limb] - their defence[limb]) * base / 10)

# each term is clipped at zero, as the engine clips it. Two things the
# engine does are left out on purpose: the spirit term (both sides sit at
# the same spirit here, so it is zero) and integer truncation (the average
# opponent has fractional defence, so this stays in floats)

# average that over the moves that carry damage, against the average
# defence of the 62-fighter field:

deals   = mean over my moves of damage_per_move        # health points
takes   = mean over the five limbs of the damage the   # health points
          average attacker's average move does to me

moves_to_finish = 255 / deals      # how long I need to empty someone
moves_i_survive = 255 / takes      # how long I last

index = moves_i_survive / moves_to_finish

Deals and takes are both in health points. Dividing 255 health by each gives the moves a fighter needs to finish an opponent and the moves they survive, and the index is the ratio of the two. Above 1.0, a fighter outlasts the time they need to win. The damage term was checked against the ROM in the pin write-up, while the averaging is this article's own arithmetic. An independent recomputation from the raw tables reproduces all 62 rows.

The ranking#

Scott Norton comes first with an index of 1.184. He needs 17.4 moves to finish the average opponent and survives 20.5, so his reputation among players as a hidden gem holds up. Goldberg is 8th, Sting 12th and Hollywood Hogan 24th.

#WrestlerkgAbilities5sMove damageDealsTakesIndex
1Scott Norton1523322,02814.7012.421.184
2Chris Benoit99.83112,12314.5712.561.160
3Giant244.93421,96014.5512.701.145
4Saturn106.6302,06414.1212.501.129
5Eddy Guerrero933012,17214.0712.521.124
6Diamond Dallas Page106.6302,00214.0612.561.120
7Scott Steiner106.63012,00014.1912.701.117
8Goldberg129.33221,95114.0312.641.110
9Juventud Guerrera74.83011,94714.0412.681.107
10Rick Steiner112.53621,87213.5812.331.101
11Psychosis90.7282,12313.9612.681.101
12Sting114.3341,96713.7012.581.089
13Chris Jericho102.1302,00213.5312.441.088
14Rey Mysterio Jr.70.32612,06014.4413.301.086
15Raven107.5281,84713.5712.521.083
16Scott Hall130.2281,92313.5812.541.083
17Lex Luger122.53021,91213.6412.601.083
18Wrath134.7272,09813.6512.681.077
19Booker T1173211,85113.2812.371.074
20AKI man109.8251,98213.5912.861.057
21Kevin Nash166.52811,88813.8013.091.055
22Buff Bagwell114.32611,96913.4912.811.053
23Dean Malenko98302,03313.1512.561.047
24Hollywood Hogan124.73111,86713.3212.741.045
25Curt Hennig118.82811,90813.1012.541.045
26Brian Adams146.1271,95413.1212.561.045
27La Parka105.2292,01613.2812.741.043
28Reese163.3241,86413.1712.661.040
29Ultimo Dragon79.43012,07612.9812.641.027
30Disco Inferno108.9281,89212.6612.441.018
31Bret Hart106.1291,81112.6612.471.015
32Roddy Piper103291,76512.4812.401.007
33Kanyon114.3251,97912.7412.681.005
34Glacier111.12411,82413.0013.030.998
35Meng140.6271,86012.8112.840.998
36Konnan113.4251,99812.7612.840.994
37Executioner117.9192,02513.7613.890.991
38Dr. Frank127221,98313.2013.580.972
39Han Zo Mon94.8222,08213.1413.540.970
40Barbarian136.1251,90312.4512.840.970
41Macho Man Randy Savage104.3281,83712.5612.980.967
42Maya Inca Boy119.7202,04012.4712.910.966
43Fit Finley104.8271,82012.4312.870.966
44Jim Neidhart123.8241,94012.3712.840.963
45Alex Wright98.9241,89512.3012.810.960
46Sick Boy113.4201,93812.5813.150.957
47Jekel122.9181,95513.0113.610.956
48Yugi Nagata104.3251,82812.2012.790.954
49Kidman83.9172,00713.0113.650.953
50Kim Chee159.7221,88012.5513.280.945
51Chavo Guerrero Jr.89.8191,94212.6113.400.941
52Van Hammer124.7201,99012.4513.400.929
53British Bulldog114.8211,91212.1213.150.921
54Shogun109.8201,86312.5713.650.921
55Stevie Ray132.4201,82312.2213.280.920
56Hawk Hana119.7191,93212.5613.820.909
57Ming Chee119.7211,94411.9613.360.895
58Lodi99.8171,86812.1613.650.891
59Riggs101.6171,86812.1613.650.891
60Brickowski109.8201,95012.1913.860.880
61Dake Ken104.8191,88211.9513.610.878
62Larry Zbysko109.3181,77311.7113.400.874
Abilities is the sum of the ten parameter bytes and 5s is how many of them are maxed. Move damage is the total across all 279 moves. Deals and Takes are health points per move against the average opponent, averaged over the entries that carry damage (53 to 169 of the 279). Everything is computed from the ROM.

Norton's parameter file reads 3 5 5 1 2 for offence and 3 4 4 2 4 for defence. That is 33 points, with two maxed offence values that only Giant, Norton, Luger and Goldberg have. Together with a move table near the top of the field, it puts him first.

A flat roster#

The roster is much flatter than the arguments suggest. Damage per move ranges from 11.71 to 14.70, a spread of 25 %, and the index from 0.874 to 1.184, about 35 %. No fighter deals double what another does. The ability bytes change a move's damage by a few percent either way, and the move's base damage does the rest.

Against the engine's order, the ability-byte total is off by 6.5 places on average and the move-table total by 16.0, while the two disagree with each other by 18.4. The stat sheet the game shows is a fair guide to what the engine does. The move-table totals are not.

Method and sources#

Everything was computed from a dump of my own cartridge with the AKI Anvil, and bin/strength.js <rom> prints the same table on the command line. The damage formula was read out of the game code and then executed in a MIPS interpreter against the cartridge's own memory image. No ROM data is reproduced here.

The ranking covers the three games whose per-wrestler move tables are decoded: World Tour, Virtual Pro-Wrestling 64 and Revenge. WrestleMania 2000, Virtual Pro-Wrestling 2 and No Mercy instead hold one shared move table of 1,702, 2,302 and 2,136 entries, which each wrestler's moveset points into. All of those movesets decode (58 of 58, 98 of 98 and 64 of 64), so the same ranking is possible there. It has not been built yet.

PropertyValue
ROMWCW/nWo Revenge (USA)
Product codeNW2E
SHA-25666c137d326565c6f31f992daba8f67c0aee7f025a142dd249d27019708014b60
Roster90 slots, 77 with a real move table, 62 distinct fighters
Fresh limb condition50, so the condition term is exactly the move's base damage

So the long argument has an answer: Scott Norton, by a narrow margin over Chris Benoit. More telling is how little separates the rest of the roster, and that the stat screen was a fair guide all along.