experimental/penalty_rate.s

Download file

Release 2026-11-04-r2 · SHA256 0f08e66a5c0685b3e01b86b1a06a8653547c98a7796b85b0a21e3f248a3dd3da · Click a line number for a direct link.

1| Penaltys0=100%,1=50%,2=Off. Existing native Rules/D056 remains independent.2| +0 native high-event admission11F78 (after pause/native eligibility), +4 whole-fight commit after the native HV chance.3| Free RAMF006; stored in the combined preference record bits5..6.4    .equ RATE,0xFFFFF0065    .text6    .globl _start7_start:8    bra.w event9    bra.w fight1011event:12    move.w %sr,-(%sp)13    movem.l %d0-%d1/%a0,-(%sp)14    cmpi.w #1,RATE15    beq.s eligible_event16    cmpi.w #2,RATE17    bne.w native_event               | default/invalid adds no RNG draw18eligible_event:19    btst #7,0xFFFFC2EC20    bne.w native_event               | replay/menu/paused foreign view guard21    cmpi.w #0x12,%d022    beq.s ordinary23    cmpi.w #0x16,%d024    bcs.w native_event25    cmpi.w #0x24,%d026    bhi.w native_event               | zero-duration, fight pair and penalty shots stay native27    btst #0,%d028    bne.w native_event29ordinary:30    btst #4,0x63(%a3)31    bne.w native_event               | already pending: do not reroll or consume RNG32    lea 0xFFFFC3A4,%a033    moveq #31,%d134queue_slot:35    tst.w (%a0)+36    dbeq %d1,queue_slot37    bne.w native_event               | full queue cannot admit another call38    cmpi.w #2,RATE39    beq.s reject40    moveq #2,%d041    jsr 0x11086                     | exactly one real native RNG draw,0 or142    tst.w %d043    beq.s native_event44reject:45    | The original D0 must be read before restoring it; the comparison below46    | chooses native injury-without-penalty event14, rather than losing stoppage.47    cmpi.w #0x12,2(%sp)48    beq.s injury_only49    movem.l (%sp)+,%d0-%d1/%a050    move.w (%sp)+,%sr51    jmp 0x11FEC                     | unwind the existing native D1/A0/A1 frame52injury_only:53    movem.l (%sp)+,%d0-%d1/%a054    move.w (%sp)+,%sr55    move.w #0x14,%d056    addi.w #200,0xFFFFB89C57    jmp 0x11F7E                     | native injury-only report and required stoppage58native_event:59    movem.l (%sp)+,%d0-%d1/%a060    move.w (%sp)+,%sr61    addi.w #200,0xFFFFB89C          | exact displaced instruction and native flags62    jmp 0x11F7E6364fight:65    move.w %sr,-(%sp)66    movem.l %d0-%d1,-(%sp)67    cmpi.w #2,RATE68    beq.s no_fight69    cmpi.w #1,RATE70    bne.s native_fight71    moveq #2,%d072    jsr 0x1108673    tst.w %d074    bne.s no_fight75native_fight:76    movem.l (%sp)+,%d0-%d177    move.w (%sp)+,%sr78    movea.l %a3,%a479    moveq #5,%d080    movea.l #0xFFFFB04A,%a381    jmp 0x2004FA82no_fight:83    movem.l (%sp)+,%d0-%d184    move.w (%sp)+,%sr85    jmp 0x20013E                     | original no-fight return, pair never started86