| Persistent statistics keep the current club's slot identity after preseason.
| No ownership edits are allowed after GP1, so the identity is fixed all season.
season_record_a1:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0/%a2-%a6,-(%sp)
    bsr.w pointer
    movea.l %a0,%a1
    movem.l (%sp)+,%d0-%d7/%a0/%a2-%a6
    move.w (%sp)+,%sr
    rts

| D0 club,D1 slot -> D0=1 eligible actual skater,0 empty/G. Other GPRs kept.
| Off returns1 so native fixed 800-row ranking remains exactly unchanged.
season_skater:
    move.w %sr,-(%sp)
    movem.l %d1-%d7/%a0-%a6,-(%sp)
    move.w %d0,%d7
    bsr.w enabled
    beq.s season_eligible
    move.w %d7,%d0
    bsr.w uid
    tst.l %d0
    bmi.s season_ineligible
    lea 0x239B80,%a0
    tst.b (%a0,%d0.w)
    beq.s season_ineligible
season_eligible:
    moveq #1,%d0
    bra.s season_eligibility_done
season_ineligible:
    moveq #0,%d0
season_eligibility_done:
    movem.l (%sp)+,%d1-%d7/%a0-%a6
    move.w (%sp)+,%sr
    tst.l %d0
    rts

| Map goal/assist weights ONCE per simulated club, not for every shot.
| Transient F180..F1BF is free during season.dist (ROWBUF endsF163).
| These are modal buffers in UI/stats, whose lifetimes never overlap dist.
| D0club,A0 originalgoal globaltable,A1 originalassist globaltable; all GPR/SR kept.
season_prepare:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    move.w %d0,%d7
    bsr.w enabled
    beq.w season_prepared
    move.l %a0,0xFFFFF1B8
    move.l %a1,0xFFFFF1BC
    movea.l %a0,%a4
    movea.l %a1,%a5
    lea 0xFFFFF182,%a6
    moveq #0,%d4
    moveq #0,%d5
    moveq #0,%d3
season_prepare_slot:
    move.w %d7,%d0
    move.w %d3,%d1
    bsr.w uid
    clr.b (%a6)
    clr.b 28(%a6)
    tst.l %d0
    bmi.s season_prepare_next
    lea 0x239B80,%a0
    tst.b (%a0,%d0.w)
    beq.s season_prepare_next
    divu.w #26,%d0
    move.w %d0,%d1
    mulu.w #28,%d1
    swap %d0
    add.w %d0,%d1
    moveq #0,%d2
    move.b 2(%a4,%d1.w),%d2
    move.b %d2,(%a6)
    add.w %d2,%d4
    move.b 2(%a5,%d1.w),%d2
    move.b %d2,28(%a6)
    add.w %d2,%d5
season_prepare_next:
    addq.l #1,%a6
    addq.w #1,%d3
    cmpi.w #26,%d3
    blo.s season_prepare_slot
    move.w %d4,0xFFFFF180
    move.w %d5,0xFFFFF19C
season_prepared:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts

| Same native weighted loop, RNG count and exact final flags as season.pick.
| A0 original32x28 table,D6club -> D0slot. Prepared club tables replace oldrow.
season_pick:
    move.w %sr,-(%sp)
    move.l %d0,-(%sp)
    bsr.w enabled
    beq.s season_pick_original
    move.l (%sp)+,%d0
    move.w (%sp)+,%sr
    movem.l %d1-%d3/%a0,-(%sp)
    cmpa.l 0xFFFFF1B8,%a0
    bne.s season_pick_assist
    lea 0xFFFFF180,%a0
    bra.s season_pick_row
season_pick_assist:
    lea 0xFFFFF19C,%a0
    bra.s season_pick_row
season_pick_original:
    move.l (%sp)+,%d0
    move.w (%sp)+,%sr
    movem.l %d1-%d3/%a0,-(%sp)
    move.w %d6,%d1
    mulu.w #28,%d1
    adda.w %d1,%a0
season_pick_row:
    move.w (%a0)+,%d0
    jsr 0x11086
    moveq #0,%d1
season_pick_select:
    moveq #0,%d2
    move.b (%a0,%d1.w),%d2
    sub.w %d2,%d0
    bmi.s season_pick_chosen
    addq.w #1,%d1
    cmpi.w #25,%d1
    blt.s season_pick_select
season_pick_chosen:
    move.w %d1,%d0
    movem.l (%sp)+,%d1-%d3/%a0
    rts
