On this page
  1. Related
  2. Games
  3. References
  4. Sources

Button mashing decides a contest by press count. In Tecmo Super Bowl, when a human-controlled player collides with a computer-controlled one, a large enough lead in hitting power wins at once; otherwise the human needs 2 A presses in a 64-frame hold1, and two humans compare their counts. Two computer players settle it by hitting power and random rolls instead2.

  • Press countTecmo Super Bowl (1991). A human needs 2 A presses in a 64-frame hold to beat a computer player, unless 32 more HP wins at once.1,2

Games

GameYearHowNote
Tecmo Super Bowl1991Press counta human needs 2 A presses in a 64-frame hold to beat a computer player, unless 32 more HP wins at once
Every claim about this mechanic, by game (2)

References

  1. ^ abAn 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.Codebruddog/Tecmo_Super_Bowl_NES_Disassemblyrevised
    How we know
    530@offense_colliding_defender:                                      ;                                                       ; /OFFENSIVE PLAYER COLLIDING WITH DEFENDER START/
    531	LOAD_CUR_PLAYER_MOVEMENT_STATUS                               ; IS PLAYER DIVING FOR TACKLE/ CHOP BLOCKING?  
    532	AND #(PLAYER_DIVE_TACKLE_BITFLAG+PLAYER_CHOP_BLOCK_BITFLAG)                                                
    ⋮
    535	JMP OFFENSE_DIVING_FOR_TACKLE                                 ; YES->OFFENSE PLAYER DIVING FOR TACKLE COLLISION
    ⋮
    540	JMP OFFENSIVE_CHOP_BLOCK_COLLISION                            ; YES-> OFFENSIVE PLAYER CHOP BLOCK
    ⋮
    548@check_defender_diving_chop_block:                                ; CHECK FOR DEFENDER DIVING OR CHOPPING
    549	LDA (defender_addr),Y                                         ; DOES DEFENDER MOVEMENT = DIVING FOR TACKLE OR CHOP BLOCKING?
    550	AND #(PLAYER_DIVE_TACKLE_BITFLAG+PLAYER_CHOP_BLOCK_BITFLAG)                                              
    551	BEQ START_OF_NORMAL_COLLISION_OFF_DEF                         ; NO-> NORMAL PLAYER COLLISION
    
    Bank21_22_play_commands_on_field_logic.asm lines 530–551 at f3bae0e · upstream ↗
    570START_OF_NORMAL_COLLISION_OFF_DEF:                                ; NORMAL OFF AND DEF PLAYER COLLISION
    ⋮
    574	LDY #<(CHECK_COL_TYPE_MAN_OR_COM-1)                           ; SET COLLISION ADDR = CHECK COLLISION TYPE (MAN,COM)
    
    Bank21_22_play_commands_on_field_logic.asm lines 570–576 at f3bae0e · upstream ↗
    749CHECK_COL_TYPE_MAN_OR_COM:                                        ; CHECK COLLISION TYPE (MAN,COM)                     
    ⋮
    752	AND #PLAYER_MAN_COM_BITFLAG                                   ; 
    753	BEQ @com_vs_com_check                                         ; NO->CHECK FOR MAN DEFENDER
    ⋮
    757	AND #PLAYER_MAN_COM_BITFLAG                                   ; 
    758	BEQ @man_vs_com_jump_popcorn_check                            ; NO->MAN VS COM POPCORN CHECK JUMP
    ⋮
    761	JMP MAN_VS_MAN_GRAPPLE_START                                  ; YES->MAN V MAN GRAPPLE START
    ⋮
    764	JMP MAN_VS_COM_POPCORN_CHECK                                  ; JUMP->MAN VS COM POPCORN CHECK
    ⋮
    766@com_vs_com_check:                                                ; CHECK FOR MAN DEFENDER GRAPPLE
    ⋮
    768	AND #PLAYER_MAN_COM_BITFLAG                                   ; 
    ⋮
    770	JMP PAUSE_COLL_CHECK_RECHECK_COLL_TYPE                         ; *** should never reach here
    
    Bank21_22_play_commands_on_field_logic.asm lines 749–770 at f3bae0e · upstream ↗
    987PAUSE_COLL_CHECK_RECHECK_COLL_TYPE:                               ; *** should never reach here
    988	LDY #<(CHECK_COL_TYPE_MAN_OR_COM-1)                           ; SET COMMAND ADDR = CHECK COLLISION TYPE (MAN,COM)
    989	LDX #>(CHECK_COL_TYPE_MAN_OR_COM-1)                           ; 
    990	JSR UPDATE_LOCAL_PLAYER_COMMAND_ADDR_IF_VALID                          ; LOAD COMMAND ADDRESS AND UPDATE COMMAND COUNTER ( TARGET: $3E $3F)                    
    
    Bank21_22_play_commands_on_field_logic.asm lines 987–991 at f3bae0e · upstream ↗
    10MAN_VS_COM_POPCORN_THRESHOLD		                = $20		                                    ; 50 HP differential	
    
    Bank21_22_play_commands_on_field_logic.asm line 10 at f3bae0e · upstream ↗
    1001MAN_VS_COM_POPCORN_CHECK:                                         ; MAN VS COM POPCORN CHECK
    ⋮
    1003	LDY #HP_INDEX                                                 ; MAN HP - COM HP 
    1004	LDA (CURRENT_PLAYER_ADDR),Y                                   ;   
    1005	SEC                                                           ;
    1006	SBC (com_addr ),Y                                             ; 
    1007	BCC @man_vs_com_grapple_check                                 ; COM HP >MAN? YES->MAN VS COM GRAPPLE CHECK
    1008	CMP #MAN_VS_COM_POPCORN_THRESHOLD                             ; MAN HP 50 HP MORE THAN COM? 
    1009	BCS @com_popcorned_or_outapped                                            ; YES->COM THROWN
    ⋮
    1015	RETURN_PLAYER_ACTIONS_IN_NUM_FRAMES[frames] 64
    1016	LDY #players_taps                                             ; LOAD MAN PRESSES
    1017	LDA (CURRENT_PLAYER_ADDR),Y                                   ; 
    1018	CMP #com_total_taps                                           ; MAN PRESSES > (COM PRESSES = 2)
    ⋮
    
    Bank21_22_play_commands_on_field_logic.asm lines 1001–1019 at f3bae0e · upstream ↗
    998players_taps      = EXTRA_PLAYER_RAM_3
    999com_total_taps    = $02
    
    Bank21_22_play_commands_on_field_logic.asm lines 998–999 at f3bae0e · upstream ↗
    606COUNT_PRESSES_GRAPPLE_IF_MAN:                                     ; SET GRAPPLES PRESSES TO ZERO, CHECK FOR MAN OR COM   
    607	RETURN_PLAYER_ACTIONS_IN_1_FRAME
    608	LDA #$00                                                      ; SET COLLISION PRESSES  =  ZERO
    609	LDY #presses                                                  ; 
    ⋮
    615@count_man_a_presses:                                             ; GRAPPLE COLLISION MAN BUTTON PRESS LOOP                         
    616	RETURN_PLAYER_ACTIONS_IN_1_FRAME                           
    617	JSR GET_PLAYER_JOY_PRESS                                      ; GET P1 OR P2 JOYPAD PRESS()
    ⋮
    619	LDY #presses                                                  ; PRESSES++
    ⋮
    624	JMP @count_man_a_presses                                      ; JUMP->GRAPPLE COLLISION MAN BUTTON PRESS LOOP
    
    Bank21_22_play_commands_on_field_logic.asm lines 606–624 at f3bae0e · upstream ↗
    1043MAN_VS_MAN_GRAPPLE_START:                                         ; MAN V MAN GRAPPLE START
    ⋮
    1047	RETURN_PLAYER_ACTIONS_IN_NUM_FRAMES[frames] 64
    ⋮
    1049	LDY #players_taps                                             ; DEFENSE PRESSES >= OFFENSE PRESSES 
    1050	LDA (defender_addr),Y                                         ; 
    1051	CMP (CURRENT_PLAYER_ADDR),Y                                   ; 
    1052	BCS @defense_wins_man_man_grapple                             ; YES->DEFENSE WINS GRAPPLE
    ⋮
    1060@defense_wins_man_man_grapple:                                    ; DEFENSE WINS MAN GRAPPLE
    1061	TAX                                                           ; DID DEFENSE TIE OFFENSE?  
    1062	BEQ @defense_wins_man_man_grapple_equal_presses               ; YES->DEFENSE WINS GRAPPLE EQUAL PRESSES
    ⋮
    1069@defense_wins_man_man_grapple_equal_presses:                      ; DEFENSE TIES MAN GRAPPLE EQUAL PRESSES
    1070	LDY #<(PLAYER_ON_GRND_CHECK_TACKLE_IF_BALL_CARRIER-1)         ; SET DEFENDER COMMAND ADDR = PLAYER FLATTENED,IF PLAYER BALL CARRIER CHECK FOR TACKLE 
    ⋮
    1074	JMP PLAYER_ON_GRND_CHECK_TACKLE_IF_BALL_CARRIER               ; JUMP->PLAYER FLATTENED,IF PLAYER BALL CARRIER CHECK FOR TACKLE  
    
    Bank21_22_play_commands_on_field_logic.asm lines 1043–1074 at f3bae0e · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

    Revised after a check by a second AI model, 2026-10-22.

    In the claim ledger

  2. ^ abWhen 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.Codebruddog/Tecmo_Super_Bowl_NES_Disassembly
    How we know
    1263SET_PLAYER_HP_AND_SKIN_COLOR:                       ; SET PLAYER HITTING POWER
    1264	LDY #HITTING_POWER_INDEX                        ; SET SKILL INDEX = HITTING POWER INDEX
    1265	JSR GET_PLAYER_SKILL                            ; GET PLAYER SKILL ( Y= SKILL INDEX)
    1266	TAX                                             ;
    1267	LDA HITTING_POWER_VALS,X                        ; LOAD HITTING POWER FROM HITTING POWER TABLE
    
    Bank27_misc.asm lines 1263–1269 at f3bae0e · upstream ↗
    5435HITTING_POWER_VALS:                                                  ; HITTING_POWER_VALUES:
    5436	.DB $00, $04, $08, $0C, $10, $14, $18, $1C
    5437	.DB $20, $24, $28, $2C, $30, $34, $38, $3C
    
    Bank31_fixed_bank.asm lines 5435–5437 at f3bae0e · upstream ↗
    4COM_VS_COM_OFF_HP_THRESH_1                          = $10                                           ; 25 HP
    5COM_VS_COM_OFF_HP_THRESH_2                          = $20                                           ; 50 HP
    ⋮
    7COM_VS_COM_DEF_HP_THRESH_1                          = $F0                                           ; 25 HP
    8COM_VS_COM_DEF_HP_THRESH_2                          = $E0                                           ; 50 HP
    
    Bank21_22_play_commands_on_field_logic.asm lines 4–8 at f3bae0e · upstream ↗
    55MEDIUM_COM_COM_OL_THROW_CHANCE                      = $AA                                           ; 33% dont throw                                                                  
    56HIGH_COM_COM_OL_THROW_CHANCE                        = $CD 	                                        ; 20% dont throw
    ⋮
    60MEDIUM_COM_COM_DEF_THROW_CHANCE                     = $AA                                           ; 66% chance player busts in vs continue grapple                                                                  
    61HIGH_COM_COM_DEF_THROW_CHANCE                       = $CD 		                                    ; 20% dont throw
    
    Bank21_22_play_commands_on_field_logic.asm lines 55–61 at f3bae0e · upstream ↗
    777COM_V_COM_COLLIDED_START:                                         ; COM VS COM GRAPPLE START 
    778	LOAD_CUR_PLAYER_HITTING_POWER                                 ; PLAYER HP- TARGET HP 
    779	SEC                                                           ; 
    780	SBC (defense_addr),Y                                          ; 
    781	BCC COM_DEF_HP_MORE_THAN_OFF                                  ; DEFENSE HP > OFFENSE HP? YES-> DEFENSE HP > OFFENSE
    ⋮
    787	CMP #COM_VS_COM_OFF_HP_THRESH_1                               ; OFFENSE HP > DEFENSE HP BY >= 4 NOTCHES (25HP)?
    788	BCC COM_VS_COM_LONG_GRAPPLE_START                             ; NO-> COM V COM NORMAL GRAPPLE
    ⋮
    791	CMP #COM_VS_COM_OFF_HP_THRESH_2                               ; OFFENSE HP > DEFENSE HP BY >=8 NOTCHES (50HP)?
    ⋮
    801	CMP #COM_VS_COM_DEF_HP_THRESH_1 +1                            ; DEFENSE HP < 4 NOTCHES GREATER? 
    802	BCS COM_VS_COM_LONG_GRAPPLE_START                             ; YES->COM V COM NORMAL GRAPPLE
    ⋮
    805	CMP #COM_VS_COM_DEF_HP_THRESH_2 +1                            ; DEFENSE HP >= 8 NOTCHES MORE THAN OFFENSE HP
    
    Bank21_22_play_commands_on_field_logic.asm lines 777–810 at f3bae0e · upstream ↗
    817COM_VS_COM_SET_RANDOM_GRAPPLE_TIME:                               ; NORMAL GRAPPLE TIME DELAY START
    818	RETURN_PLAYER_ACTIONS_IN_NUM_FRAMES[frames] 8
    819	JSR UPDATE_RANDOM_1                                           ; UPDATE RANDOM $3B AND LOAD VALUE() = SET FRAMES TO WAIT = RANDOM 0-0xFF FRAMES (0-4.2 sec) 
    ⋮
    824	AND #$3F                                                      ; 
    ⋮
    826	JSR UPDATE_RANDOM_1                                           ; UPDATE RANDOM $3B AND LOAD VALUE() 
    827	BMI DEFENSE_WINS_COM_COM_GRAPPLE                               ; 50%->COM V COM DEFENDER WINS, BUSTS IN WITH OFFENSE RANDOMLY THROWN ON GROUND
    
    Bank21_22_play_commands_on_field_logic.asm lines 817–827 at f3bae0e · upstream ↗
    862MEDIUM_CHANCE_DEF_COM_THROWN:                                     ; OFFENSE HP > DEFENSE BY > 4 NOTCHES <8
    ⋮
    867	JSR UPDATE_RANDOM_3                                           ; UPDATE RANDOM $3D AND LOAD VALUE()
    868	CMP #MEDIUM_COM_COM_OL_THROW_CHANCE                           ; 
    869	BCC @defender_thrown                                          ; 60% -> COM DEFENDER THROWN, OFFENSIVE PLAYER FLATTENED OR STAYS STANDING 
    870	JMP COM_VS_COM_SET_RANDOM_GRAPPLE_TIME                        ; 40% -> COM V COM NORMAL GRAPPLE
    
    Bank21_22_play_commands_on_field_logic.asm lines 862–870 at f3bae0e · upstream ↗
    895HIGH_CHANCE_DEF_COM_THROWN:                                       ; OFFENSE HP > DEFENSE BY 8 NOTCHES
    ⋮
    901	CMP #HIGH_COM_COM_OL_THROW_CHANCE                                                      ; 
    902	BCS DELAY_THEN_NORMAL_GRAPPLE                                 ; 25% ->64(1 SEC) FRAME DELAY THEN JUMP TO NORMAL GRAPPLE
    ⋮
    922DELAY_THEN_NORMAL_GRAPPLE:                                      ; 64 (~1 SEC) FRAME DELAY THEN JUMP TO COM V COM GRAPPLE
    923	RETURN_PLAYER_ACTIONS_IN_NUM_FRAMES[frames] 64
    924	JMP COM_VS_COM_SET_RANDOM_GRAPPLE_TIME                        ; JUMP -> COM V COM NORMAL GRAPPLE
    
    Bank21_22_play_commands_on_field_logic.asm lines 895–924 at f3bae0e · upstream ↗
    926MEDIUM_CHANCE_OFF_COM_THROWN:                                     ; DEFENSE HP > OFFFENSE BY > 4 NOTCHES <8
    ⋮
    932	CMP #MEDIUM_COM_COM_DEF_THROW_CHANCE                          ; 
    933	BCC @offense_thrown                                           ; 66%-> DEFENDER WINS GRAPPLE OFFENSIVE PLAYER THROWN
    ⋮
    958HIGH_CHANCE_OFF_COM_THROWN:                                       ; OFFENSIVE PLAYER THROWN DEFENSE HP > OFFFENSE BY > 8 NOTHCES
    ⋮
    964	CMP #HIGH_COM_COM_DEF_THROW_CHANCE                            ; 
    965	BCS DELAY_THEN_NORMAL_GRAPPLE                                 ; 20% ->(~1 SEC) FRAME DELAY THEN JUMP TO COM V COM GRAPPLE
    
    Bank21_22_play_commands_on_field_logic.asm lines 926–965 at f3bae0e · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

Sources

Code