| Tecmo Super Bowl stores each player rating as a 4-bit index from 0 to 15, two to a byte. The player data screen shows an index as 6, 13, 19, 25, 31, 38, 44, 50, 56, 63, 69, 75, 81, 88, 94, or 100. When the game reads a rating, it adds the player's condition (bad 0, average 1, good 2, excellent 3) less 1 and clamps the result to 0–15, so a bad player plays one step down and an excellent one two steps up. | Bank31_fixed_bank.asm L5039–5050Bank31_fixed_bank.asm L5063–5075constants_variables/constants.asm L128–131Bank25_leaders_player_data_pro_bowl_abbrev.asm L2726–2728Bank25_leaders_player_data_pro_bowl_abbrev.asm L2245–2249 | Code |
On the field each player carries a current speed and a max speed. The max speed (MS) rating picks a max speed of 21 to 36 for an offensive player and 37 to 52 for a defender, one per step. Running speed (RS) sets the starting current speed, 14 to 29, and rushing power (RP) sets a countdown of 13 frames at step 0 down to 1 at steps 14 and 15. On each frame a player is moving, the countdown drops by 1; when it reaches 0 it reloads, and the current speed rises by 1 unless it has reached max speed. A computer-controlled defense facing a human-controlled offense loads differently: it adds CPU_DEF_MS_BOOST to its max speed and to its RS and RP steps, capping the steps at 15. | Bank27_misc.asm L1211–1238Bank27_misc.asm L1146–1158Bank27_misc.asm L1241–1261Bank27_misc.asm L1308–1314Bank31_fixed_bank.asm L5427–5433Bank21_22_play_commands_on_field_logic.asm L423–434Bank21_22_play_commands_on_field_logic.asm L440–475Bank21_22_play_commands_on_field_logic.asm L11366–11370 | Code |
| When two computer-controlled players collide, the game compares their hitting power (HP), loaded from a table at 4 per rating step (0 to 60). If neither leads by 16 (4 steps), they hold for 8 frames plus random waits of up to 255, 255, and 63 frames, and one random bit picks the winner. With a lead of 16 to 31, the stronger player wins when a random byte is under 170 (computed: 66%); otherwise they grapple as before. With a lead of 32 or more, the stronger player wins on a byte under 205 (computed: 80%); otherwise they hold 64 frames and then grapple. | Bank27_misc.asm L1263–1269Bank31_fixed_bank.asm L5435–5437Bank21_22_play_commands_on_field_logic.asm L4–8Bank21_22_play_commands_on_field_logic.asm L55–61Bank21_22_play_commands_on_field_logic.asm L777–810Bank21_22_play_commands_on_field_logic.asm L817–827Bank21_22_play_commands_on_field_logic.asm L862–870Bank21_22_play_commands_on_field_logic.asm L895–924Bank21_22_play_commands_on_field_logic.asm L926–965 | Code |
An ordinary collision (not a dive or a chop block) between a human-controlled and a computer-controlled player goes to MAN_VS_COM_POPCORN_CHECK. If the human player's HP is at least 32 higher (8 rating steps), the computer player is thrown at once; otherwise both hold for 64 frames while the game counts the human's A presses, and 2 or more throw the computer player, and fewer throw the human. Between two human players, both players' presses count over the same 64 frames. The defender wins with at least as many presses as the offensive player; if neither pressed, both go down. | Bank21_22_play_commands_on_field_logic.asm L530–551Bank21_22_play_commands_on_field_logic.asm L570–576Bank21_22_play_commands_on_field_logic.asm L749–770Bank21_22_play_commands_on_field_logic.asm L987–991Bank21_22_play_commands_on_field_logic.asm L10Bank21_22_play_commands_on_field_logic.asm L1001–1019Bank21_22_play_commands_on_field_logic.asm L998–999Bank21_22_play_commands_on_field_logic.asm L606–624Bank21_22_play_commands_on_field_logic.asm L1043–1074 | Code |
| Each side picks one of eight slots. The offense's slot reads a play id (0 to 63) from its playbook, and before the snap the game reads the defense's play from a 64-row table: the row is the offense's play id, and the column is the defense's slot. In all 64 rows, the entry in column id ÷ 8, the play's group, is a defensive play that appears nowhere else in the table, one of 11 such plays (computed from the table by the atlas). The playbook-change screen offers slot k only the plays of group k (ids k × 8 to k × 8 + 7), so for a playbook set there, that column is the slot the offense called. | Bank19_20_on_field_gameplay_loop.asm L3061–3115Bank17_18_main_game_loop.asm L2979–2983Bank17_18_main_game_loop.asm L2885–2890Bank15_faces_playbooks.asm L2812–2876 | Code |
Reactions 128 and 177 are player scripts used only by the 11 guess-only defensive plays (computed by the atlas over bank 4). Reaction 128 waits for the snap, sets the player's running-speed rating to 15, adds 48 to his max speed and 48 to his hitting power, moves, and then loops a runRush command; reaction 177 stands for 30 frames after the snap and then jumps into reaction 128's boosts. Execution 188, one of the 11, gives reactions 128 to 134 to its first seven players. The script command the disassembly's macro calls boostRS emits $E3, which the command table maps to the routine that adds to max speed. | Bank5_6_off_def_play_data.asm L4811–4819Bank5_6_off_def_play_data.asm L5200–5204Bank5_6_off_def_play_data.asm L5281–5284macros/play_data_macros.asm L258–276macros/play_data_macros.asm L350–352Bank21_22_play_commands_on_field_logic.asm L383–409macros/play_data_macros.asm L329–330Bank21_22_play_commands_on_field_logic.asm L4321–4329Bank21_22_play_commands_on_field_logic.asm L3131–3135Bank21_22_play_commands_on_field_logic.asm L3212–3216Bank21_22_play_commands_on_field_logic.asm L4421–4428Bank19_20_on_field_gameplay_loop.asm L3233–3237Bank4_def_spec_play_pointers_data.asm L2252–2259 | Code |
| When a pass reaches its target, Tecmo Super Bowl adds the passer's pass control (PC) value, 61 to 91 at 2 per step, to the receiver's reception (REC) value, also 61 to 91. With no defender near the ball, a random byte forced into 128–255, times that sum and divided by 256, gives a roll from half the sum to one less than it; 79 or more is a catch, and less is incomplete. Each of up to three nearby defenders in turn subtracts his interception (INT) value, 51 to 81, from the sum (floored at 0) for a roll made the same way: under 51 is an interception, under 80 is incomplete, and 80 or more passes the ball to the next defender's check. A pass that clears every check is a catch. | Bank21_22_play_commands_on_field_logic.asm L184–187Bank21_22_play_commands_on_field_logic.asm L5675–5703Bank21_22_play_commands_on_field_logic.asm L5972–5974Bank21_22_play_commands_on_field_logic.asm L11465–11472Bank21_22_play_commands_on_field_logic.asm L5481–5492Bank21_22_play_commands_on_field_logic.asm L5502–5547Bank21_22_play_commands_on_field_logic.asm L5713–5754Bank31_fixed_bank.asm L4054–4077 | Code |
When the target isn't close enough to the ball, nearby defenders can still intercept: each in turn subtracts his INT value from the variable the code names PASS_CONTROL_VALUE and rolls as for a covered pass, intercepting under 14; otherwise the pass is incomplete. This path doesn't call ADD_PASS_CONTROL_SKILL_AND_REC_SKILL, the routine that stores the passer's value in that variable (the close-target and the jump-or-dive paths call it), so it uses whatever player-command argument was last stored there. The disassembly marks it "***MAJOR BUG!!". | Bank21_22_play_commands_on_field_logic.asm L5675–5682Bank21_22_play_commands_on_field_logic.asm L5451–5470Bank21_22_play_commands_on_field_logic.asm L5552–5588Bank21_22_play_commands_on_field_logic.asm L187 | Code |
A computer-controlled defense picks its slot at random, 0 to 7, except on third and fourth down. There, with under 25 eighths of a yard to the first-down line (3 yards or less), it calls a run slot (0–3) when a sum of random bytes is under 205 (computed: 80%) and a pass slot (4–7) otherwise. As the atlas reads it, the check meant to favor passes on longer yardage compares the distance's high byte with 57 ($39), and that byte is at most 3 on a 100-yard field, so every longer third or fourth down also gets a random slot. | Bank12_13_sim_update_stats.asm L4342–4372Bank12_13_sim_update_stats.asm L4123–4153Bank12_13_sim_update_stats.asm L4285–4296Bank12_13_sim_update_stats.asm L3468Bank20_playcall.asm L1864–1946constants_variables/field_locations.asm L22–30 | Code |