| Separate real keeper attacking G/SOG from the native overloaded GA/SA bytes.
| Transient only: six keepers x (G,SOG) at FFF800; no save-format changes.
 .include "season-symbols.inc"
 .equ COUNTS,0xFFFFF800
 .equ MAGIC,0xFFFFF80C
 .text
 .globl _start
_start:
 bra.w clear
 bra.w goal
 bra.w shot
 bra.w adjust
 bra.w game_reset
clear:
 clr.l COUNTS
 clr.l COUNTS+4
 clr.l COUNTS+8
 move.w #0x474B,MAGIC
 rts
| A2 real attacking team, D0 real roster. D1-D3/A0-A1 are caller-saved here.
| A0 -> own keeper G byte, carry clear if valid keeper, set otherwise.
locate:
 cmpi.w #2,%d0
 bhi.s invalid
 moveq #0,%d1
 lea 0xFFFFC331,%a1
 cmpa.w #0xC6CE,%a2
 beq.s side
 moveq #6,%d1
 lea 0xFFFFC333,%a1
 cmpa.w #0xCA32,%a2
 bne.s invalid
side:
 moveq #0,%d2
 move.b (%a1),%d2
 cmpi.w #31,%d2
 bhi.s invalid
 lsl.w #2,%d2
 lea GK_TAB,%a1
 .if WITH_TRANSFERS
 jsr 0x236030
 .endif
 moveq #0,%d3
 move.b 2(%a1,%d2.w),%d3
 cmp.w %d3,%d0
 bcc.s invalid
 add.w %d0,%d1
 add.w %d0,%d1
 lea COUNTS,%a0
 adda.w %d1,%a0
 andi #0xFE,%ccr
 rts
invalid:
 ori #1,%ccr
 rts
track:
 btst #4,0xFFFFC2EA
 bne.s track_done
 btst #7,0xFFFFC2EC
 bne.s track_done
 bsr.s locate
 bcs.s track_done
 cmpi.w #0x474B,MAGIC
 beq.s initialized
 bsr.w clear
initialized:
 addq.b #1,(%a0)
track_done:
 rts
goal:
 move.w 0x18(%a2),%d0              | exact displaced native scoring roster
 move.w %sr,-(%sp)
 movem.l %d1-%d3/%a0-%a1,-(%sp)
 bsr.s track
 movem.l (%sp)+,%d1-%d3/%a0-%a1
 move.w (%sp)+,%ccr
 move.b %d0,(%a0)+                  | exact displaced goal-log write
 jmp 0x1496A
shot:
 clr.w %d0
 move.b 0x66(%a3),%d0              | exact displaced native real shooter
 move.w %sr,-(%sp)
 movem.l %d1-%d3/%a0-%a1,-(%sp)
 btst #4,0xFFFFC2EA
 bne.s shot_done
 btst #7,0xFFFFC2EC
 bne.s shot_done
 bsr.w locate
 bcs.s shot_done
 cmpi.w #0x474B,MAGIC
 beq.s shot_initialized
 bsr.w clear
shot_initialized:
 addq.b #1,1(%a0)
shot_done:
 movem.l (%sp)+,%d1-%d3/%a0-%a1
 move.w (%sp)+,%ccr
 jmp 0x13022
| Postgame: A1 team, D1 roster, D2 rawGA/D3 rawSA -> actual defensive GA/SA.
adjust:
 movem.l %d0/%d4/%a0,-(%sp)
 cmpi.w #0x474B,MAGIC
 bne.s adjusted
 move.w %d1,%d0
 add.w %d0,%d0
 cmpa.w #0xC6CE,%a1
 beq.s adjust_side
 addq.w #6,%d0
adjust_side:
 lea COUNTS,%a0
 adda.w %d0,%a0
 moveq #0,%d4
 move.b (%a0)+,%d4
 sub.w %d4,%d2
 move.b (%a0),%d4
 sub.w %d4,%d3
adjusted:
 movem.l (%sp)+,%d0/%d4/%a0
 rts

| Preserve real-game keeper attack counters through another game's highlights.
game_reset:
 btst #4,0xFFFFC2EA
 beq.s real_game_reset
 move.l COUNTS,-(%sp)
 move.l COUNTS+4,-(%sp)
 move.l COUNTS+8,-(%sp)
 move.w MAGIC,-(%sp)
 jsr 0x169D0
 move.w (%sp)+,MAGIC
 move.l (%sp)+,COUNTS+8
 move.l (%sp)+,COUNTS+4
 move.l (%sp)+,COUNTS
 rts
real_game_reset:
 jsr 0x169D0
 bsr.w clear
 rts
