| Complete displaced native walker contracts. Native 26-slot loops never
| reinterpret a transferred slot as an original-club identity.
player_load:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s player_load_old
    move.w 14(%sp),%d1
    move.w 0xFFFFC330,%d0
    btst #6,0x62(%a3)
    beq.s player_load_team
    move.w 0xFFFFC332,%d0
player_load_team:
    bsr.w pointer
    adda.w (%a0),%a0
    move.l %a0,32(%sp)
    move.w #0xFFFF,14(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
player_load_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    adda.w (%a0),%a0
player_load_next:
    adda.w (%a0),%a0
    addq.w #8,%a0
    dbra %d3,player_load_next
    subq.w #8,%a0
    rts
selection_attribute:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s selection_old
    move.w 2(%sp),%d1
    andi.w #0xFFF0,60(%sp)
    tst.w %d1
    bne.s selection_slot
    ori.w #4,60(%sp)
selection_slot:
    move.w 0x28(%a2),%d0
    bsr.w pointer
    adda.w (%a0),%a0
    move.l %a0,36(%sp)
    move.w #0xFFFF,6(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
selection_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    movea.l 0x1E(%a2),%a1
    adda.w (%a1),%a1
    move.w %d0,%d1
    subq.w #8,%a1
selection_next:
    addq.w #8,%a1
    adda.w (%a1),%a1
    dbra %d1,selection_next
    rts
goalkeeper_name:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s goalkeeper_old
    move.w 2(%sp),%d1
    subq.w #1,%d1
    move.w %sr,%d0
    andi.w #31,%d0
    andi.w #0xFFE0,60(%sp)
    or.w %d0,60(%sp)
    move.w 0x28(%a2),%d0
    bsr.w pointer
    move.l %a0,36(%sp)
    move.w #0xFFFF,10(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
goalkeeper_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    movea.l 0x1E(%a2),%a1
    adda.w (%a1),%a1
    move.w %d0,%d2
    subq.w #1,%d2
    bra.s goalkeeper_test
goalkeeper_next:
    adda.w (%a1),%a1
    addq.w #8,%a1
goalkeeper_test:
    dbra %d2,goalkeeper_next
    rts
roster_number:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s roster_number_old
    move.w 2(%sp),%d1
    lsr.w #1,%d1
    move.w %sr,%d0
    andi.w #31,%d0
    andi.w #0xFFE0,60(%sp)
    or.w %d0,60(%sp)
    move.w 0x28(%a2),%d0
    bsr.w pointer
    adda.w (%a0),%a0
    addq.l #8,%a0
    move.l %a0,36(%sp)
    move.w #0xFFFF,2(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
roster_number_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    movea.l 0x1E(%a2),%a1
    adda.w (%a1),%a1
    lsr.w #1,%d0
roster_number_next:
    adda.w (%a1),%a1
    addq.w #8,%a1
    dbra %d0,roster_number_next
    rts
| SHARED native text token entry17986: D1.W already identifies the slot.
| Keeper token17982 loadscache+26 first; skater token17952 enters17986 directly.
| Never patch over17986 via a17982-wide hook: that branch would enter operands.
| Original shared address-only walker preserves the entire incoming SR.
keeper_label:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s keeper_label_old
    movea.l 36(%sp),%a0
    move.w 6(%sp),%d1
    move.w 0x28(%a0),%d0
    bsr.w pointer
    move.l %a0,36(%sp)
    move.w #0xFFFF,6(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
keeper_label_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    movea.l 0x1E(%a1),%a1
    adda.w (%a1),%a1
    bra.s keeper_label_test
keeper_label_next:
    adda.w (%a1),%a1
    addq.w #8,%a1
keeper_label_test:
    dbra %d1,keeper_label_next
    rts
profile_number:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s profile_number_old
    movea.l 32(%sp),%a0
    move.w 2(%sp),%d1
    move.w 0x28(%a0),%d0
    bsr.w pointer
    moveq #0,%d1
    move.w (%a0),%d1
    adda.w %d1,%a0
    move.l %a0,32(%sp)
    move.l %d1,4(%sp)
    move.w #0xFFFF,2(%sp)
    andi.w #0xFFF0,60(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
profile_number_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    movea.l 0x1E(%a0),%a0
    move.w (%a0),%d1
    ext.l %d1
    adda.l %d1,%a0
profile_number_next:
    move.w (%a0),%d1
    ext.l %d1
    adda.l %d1,%a0
    addq.l #8,%a0
    dbra %d0,profile_number_next
    subq.l #8,%a0
    rts

| The native receiver ranking iterates26 records sequentially. Resolve each
| current slot before its sentinel check; an empty current slot terminates.
receiver_record:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s receiver_original
    move.w 0x28(%a0),%d0
    move.w 6(%sp),%d1
    bsr.w pointer
    move.l %a0,40(%sp)
    cmpi.w #2,(%a0)
    move.w %sr,%d0
    andi.w #15,%d0
    andi.w #0xFFF0,60(%sp)
    or.w %d0,60(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    beq.s receiver_end
    jmp 0xEE8A
receiver_original:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    cmpi.w #2,(%a2)
    beq.s receiver_end
    jmp 0xEE8A
receiver_end:
    jmp 0xEF4C

| Native player-detail attribute renderer. D0.W is club*4, D1.W roster slot.
| Keep MOVE.W's flags and exhausted D0 loop count, return actual record in A2.
profile_record_a2:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s profile_record_old
    move.w 2(%sp),%d0
    lsr.w #2,%d0
    move.w 6(%sp),%d1
    andi.w #0xFFF0,60(%sp)
    tst.w %d1
    bne.s profile_record_slot
    ori.w #4,60(%sp)
profile_record_slot:
    bsr.w pointer
    move.l %a0,40(%sp)
    move.w #0xFFFF,2(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
profile_record_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    adda.w (%a2),%a2
    move.w %d1,%d0
    bra.s profile_record_test
profile_record_next:
    adda.w (%a2),%a2
    addq.w #8,%a2
profile_record_test:
    dbra %d0,profile_record_next
    rts

| Native line editor obtains its zero-based selected slot at FAF8C first.
| The original ADDAn/ADDQn/DBRA sequence preserves the caller's entire SR.
editor_record_a2:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s editor_record_old
    move.w 2(%sp),%d1
    move.w 0xFFFFBF14,%d0
    bsr.w pointer
    move.l %a0,40(%sp)
    move.w #0xFFFF,2(%sp)
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
editor_record_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    bra.s editor_record_test
editor_record_next:
    adda.w (%a2),%a2
    addq.w #8,%a2
editor_record_test:
    dbra %d0,editor_record_next
    rts
