DHC v9.3.4 additive combo-breaker implementation sources
Prepared 2026-10-06. These are modification sources, not game ROMs.
Published v9.3.3 mechanics/presentation are retained; current qualification
binds the component and candidate separately. Native addresses are MVC1-specific.
Credits: artfuldodger2468 for repeat/corner report; N41 for retained native
palette/layout research. Palette authors and PalMod credits are in their notes.

SOURCE src/v934/combo_breaker_02.s
BYTES 11649
SHA256 2c45a5ef434c226dc38d6e8b76c52790edd6f36e869084f90b581ca3d55aa370

/* Bounded MVC1 adaptation of XCOTA's one-bar deliberate LK+MP breaker.
 * REMIX0001 only; proved ordinary normal-contact route only, never captures,
 * projectiles, committed specials/Hypers, CPU, DUO or a pending handoff.
 * v934 paid response refreshes only proved flight flags and native recoil.
 * Private16B FF2F60..6F: two8B ownerL/timeB/idB/lastClockW lanes.
 * NativeColorCache FF2F70..76 is never read/written by this helper.
 * Native106 remains untouched: immunity is a finite owner-validated lease.
 */
        .text
        .globl cb_reset,cb_clock,cb_input,cb_contact_hook,cb_damage_hook
        .globl cb_protected,cb_end
        .equ STATE,0xFF2F60
        .equ CLOCK,0xFF4488
cb_reset:       bra.w reset_body
        .org 0x20,0xFF
cb_clock:       bra.w clock_body
        .org 0x40,0xFF
cb_input:       bra.w input_body
        .org 0x60,0xFF
cb_contact_hook: bra.w contact_body
        .org 0x80,0xFF
cb_damage_hook:  bra.w damage_body
        .org 0xA0,0xFF
cb_protected:    bra.w query_body
        .org 0xC0,0xFF
contact_body:
        move.w %sr,-(%sp)
        tst.b (STATE+4).l
        bne.s contact_check
        tst.b (STATE+12).l
        beq.s contact_native
contact_check:
        move.l %d0,-(%sp)
        bsr.w cb_protected
        tst.b %d0
        beq.s contact_restore
        move.l (%sp)+,%d0
        move.w (%sp)+,%ccr
        rts
contact_restore:
        move.l (%sp)+,%d0
contact_native:
        move.w (%sp)+,%ccr
        jmp (0x3FB80C).l
damage_body:
        move.w %sr,-(%sp)
        tst.b (STATE+4).l
        bne.s damage_check
        tst.b (STATE+12).l
        beq.s damage_native
damage_check:
        move.l %d0,-(%sp)
        bsr.w cb_protected
        tst.b %d0
        beq.s damage_restore
        move.l (%sp)+,%d0
        move.w (%sp)+,%ccr
        rts
damage_restore:
        move.l (%sp)+,%d0
damage_native:
        move.w (%sp)+,%ccr
        jmp (0x3FB856).l
query_body:
        move.w %sr,-(%sp)
        movem.l %d1-%d3/%a0/%a3,-(%sp)
        bsr.w point
        tst.b %d0
        beq.s query_done
        cmpa.l (%a3),%a6
        bne.s query_no
        move.b 4(%a3),%d0
        beq.s query_no
        cmpi.b #40,%d0
        bhi.s query_no
        move.b 5(%a3),%d0
        cmp.b 0x53(%a6),%d0
        bne.s query_no
        moveq #1,%d0
        bra.s query_done
query_no:       moveq #0,%d0
query_done:
        movem.l (%sp)+,%d1-%d3/%a0/%a3
        move.w (%sp)+,%ccr
        rts

reset_body:
        move.w %sr,-(%sp)
        clr.l (STATE).l
        clr.l (STATE+4).l
        clr.l (STATE+8).l
        clr.l (STATE+12).l
        move.w (%sp)+,%ccr
        rts

/* Canonical live current point; never dereference a foreign A6. D2 side,
 * A3 private lane, D0 boolean. Unknown styles/rules and native forms refuse. */
point:
        cmpi.w #1,(0xFF2FFE).l
        bne.w no
        cmpi.w #0x800,(0xFF4000).l
        bne.w no
        move.l %a6,%d1
        subi.l #0xFF3000,%d1
        bcs.w no
        cmpi.l #0xC00,%d1
        bhi.w no
        move.w %d1,%d2
        andi.w #0x3FF,%d2
        bne.w no
        lsr.w #8,%d1
        lsr.w #2,%d1
        move.w %d1,%d2
        andi.w #1,%d2
        cmp.b 2(%a6),%d2
        bne.w no
        cmpi.b #1,(%a6)
        bne.w no
        tst.b 0x281(%a6)
        bne.w no
        tst.b 0x16B(%a6)
        bne.w no
        tst.w 0x270(%a6)
        ble.w no
        move.w 0x52(%a6),%d0
        btst #0,%d0
        bne.w no
        cmpi.w #2,%d0
        bcs.w no
        cmpi.w #0x2C,%d0
        bhi.w no
        cmpi.w #0x22,%d0
        beq.w no
        move.w %d2,%d0
        lsl.w #3,%d0
        lea (0xFF40C8).l,%a0
        cmpa.l 0(%a0,%d0.w),%a6
        bne.w no
        lea (STATE).l,%a3
        adda.w %d0,%a3
        moveq #1,%d0
        rts
no:     moveq #0,%d0
        rts

/* No new permanent work on cold frames beyond two bounded timer reads.
 * Clock de-dup precedes pause/freeze tests, so skipped ticks never catch up.
 * Invalid mode, role, character, death or malformed lease clears immediately. */
clock_body:
        move.w %sr,-(%sp)
        tst.b (STATE+4).l
        bne.s clock_active
        tst.b (STATE+12).l
        beq.w clock_done
clock_active:
        movem.l %d0-%d3/%d7/%a0/%a3/%a6,-(%sp)
        lea (STATE).l,%a3
        moveq #1,%d7
clock_lane:
        tst.b 4(%a3)
        beq.s clock_next
        move.l %a3,-(%sp)
        movea.l (%a3),%a6
        bsr.w point
        move.l %a3,%d3
        movea.l (%sp)+,%a3
        cmp.l %a3,%d3
        bne.s clock_clear
        tst.b %d0
        beq.s clock_clear
        cmpa.l (%a3),%a6
        bne.s clock_clear
        cmpi.b #40,4(%a3)
        bhi.s clock_clear
        move.b 5(%a3),%d0
        cmp.b 0x53(%a6),%d0
        bne.s clock_clear
        move.w (CLOCK).l,%d0
        cmp.w 6(%a3),%d0
        beq.s clock_next
        move.w %d0,6(%a3)
        tst.b (0xFF4115).l
        bne.s clock_next
        tst.b (0xFF400A).l
        bne.s clock_next
        tst.w 0x106(%a6)
        bgt.s clock_next
        subq.b #1,4(%a3)
        bne.s clock_next
clock_clear:
        clr.l (%a3)
        clr.l 4(%a3)
clock_next:
        addq.l #8,%a3
        dbra %d7,clock_lane
        movem.l (%sp)+,%d0-%d3/%d7/%a0/%a3/%a6
clock_done:
        move.w (%sp)+,%ccr
        rts

/* Input Boolean D0, all other GPRs/entryCCR preserved. Deliberate exact120
 * chord; a fresh LK or MP edge is required and a770 XF chord never spends. */
input_body:
        move.w %sr,-(%sp)
        /* Cheap pure canonical/chord rejection before fourteen-register save.
         * No foreign A6 memory read occurs even for public arbitrary callers. */
        move.l %a6,%d0
        subi.l #0xFF3000,%d0
        bcs.w input_quick_no
        cmpi.l #0xC00,%d0
        bhi.w input_quick_no
        andi.w #0x3FF,%d0
        bne.w input_quick_no
        move.w 0xD0(%a6),%d0
        andi.w #0x0770,%d0
        cmpi.w #0x0120,%d0
        bne.w input_quick_no
        move.w 0xD4(%a6),%d0
        andi.w #0x0120,%d0
        beq.w input_quick_no
        movem.l %d1-%d7/%a0-%a6,-(%sp)
        bsr.w point
        tst.b %d0
        beq.w input_no
        tst.b 3(%a6)
        beq.w input_no
        cmpi.w #12,6(%a6)
        bne.w input_no
        cmpi.b #0x36,0xB0(%a6)
        bne.w input_no
        cmpi.b #4,0xF0(%a6)
        bhi.w input_no
        btst #0,0xF0(%a6)
        bne.w input_no
        tst.b 0xE7(%a6)
        bne.w input_no
        tst.b 0xEB(%a6)
        bne.w input_no
        tst.b 0x267(%a6)
        bne.w input_no
        tst.b (0xFF400A).l
        bne.w input_no
        tst.b (0xFF4115).l
        bne.w input_no
        tst.b (0xFF4038).l
        bne.w input_no
        tst.b (0xFF2F84).l
        bne.w input_no
        tst.b (0xFF2FBC).l
        bne.w input_no
        tst.b 4(%a3)
        bne.w input_no
        cmpi.b #1,0x274(%a6)
        bcs.w input_no
        cmpi.b #3,0x274(%a6)
        bhi.w input_no
        /* Native reciprocal reserve must be safely benched, not tagging. */
        move.l %a6,%d0
        eori.l #0x800,%d0
        cmp.l 0x284(%a6),%d0
        bne.w input_no
        movea.l %d0,%a2
        cmpa.l 0x284(%a2),%a6
        bne.w input_no
        move.b 2(%a6),%d0
        cmp.b 2(%a2),%d0
        bne.w input_no
        tst.b 0x281(%a2)
        beq.w input_no
        /* C0 must be the canonical opposing CURRENT point, before constructor. */
        move.w %d2,%d0
        eori.w #1,%d0
        lsl.w #3,%d0
        lea (0xFF40C8).l,%a0
        movea.l 0(%a0,%d0.w),%a4
        cmpa.l 0xC0(%a6),%a4
        bne.w input_no
        move.l %a4,%d1
        subi.l #0xFF3000,%d1
        bcs.w input_no
        cmpi.l #0xC00,%d1
        bhi.w input_no
        andi.w #0x3FF,%d1
        bne.w input_no
        cmpi.b #1,(%a4)
        bne.w input_no
        tst.b 0x281(%a4)
        bne.w input_no
        tst.b 0x16B(%a4)
        bne.w input_no
        tst.w 0x270(%a4)
        ble.w input_no
        move.b 2(%a4),%d0
        eori.b #1,%d0
        cmp.b 2(%a6),%d0
        bne.w input_no
        cmpa.l 0xC0(%a4),%a6
        bne.w input_no
        cmpa.l 0x98(%a6),%a4
        bne.w input_no
        /* Native hit record is ROM data, NOT a projectile actor pointer.
         * Its value can differ from the opponent's current record as a normal
         * advances. Ownership98 and native ordinary action28 are authoritative. */
        move.l 0x8C(%a6),%d0
        beq.w input_no
        cmpi.b #0x28,0xB0(%a4)
        bne.w input_no
        tst.w 6(%a4)
        bne.w input_no
        tst.b 0x261(%a4)
        bne.w input_no
        tst.b 0x269(%a4)
        bne.w input_no
        tst.b 0x267(%a4)
        bne.w input_no
        tst.b 0xE7(%a4)
        bne.w input_no
        /* Stock Gold War Machine dispatch29330 sets armorEB1 every frame.
         * This attacker-only exception retains ordinary28/phase0 ownership
         * above and every capture/Hyper refusal below. Other modes stay closed. */
        tst.b 0xEB(%a4)
        beq.s enemy_armor_checked
        cmpi.w #0x28,0x52(%a4)
        bne.w input_no
        cmpi.b #1,0xEB(%a4)
        bne.w input_no
enemy_armor_checked:
        /* Refuse any reciprocal native capture pointer, independently of F0. */
        cmpa.l 0xA4(%a6),%a4
        bne.s check_ac
        cmpa.l 0xA4(%a4),%a6
        beq.w input_no
check_ac:
        cmpa.l 0xAC(%a6),%a4
        bne.s admitted
        cmpa.l 0xAC(%a4),%a6
        beq.w input_no
admitted:
        /* Native28 is shared by normals and some Hypers. Use the frozen
         * broad native command/form classifier, never infer Hyper from B0. */
        moveq #0,%d3
        move.b 0xE6(%a4),%d3
        movea.l %a4,%a2
        jsr (0x3DF800).l
        tst.b %d0
        bne.w input_no
        /* All refusal paths precede the native spender; one whole bar only.
         * Constructor controls animation/state; explicit velocities escape.
         * No native attack/effect pool is swept or globally retired. */
        moveq #1,%d0
        jsr (0x1CDFE).l
        /* Fresh flight eligibility and native non-damaging attacker recoil. */
        jsr (0x3FF460).l
        move.l %a3,-(%sp)
        jsr (0x177B6).l
        movea.l (%sp)+,%a3
        move.l #0x00040000,%d0
        tst.b 0xB3(%a6)
        beq.s victim_right
        neg.l %d0
victim_right:
        move.l %d0,0x14(%a6)
        clr.l 0x18(%a6)
        move.l #0xFFF90000,0x1C(%a6)
        move.l #0x00006000,0x20(%a6)
        /* Native reaction has a separate movement accumulator. Clear only
         * our retiring victim's hit trajectory; preserve native boosts. */
        clr.l 0xF8(%a6)
        clr.l 0xFC(%a6)
        clr.l 0x188(%a6)
        clr.l 0x18C(%a6)
        move.l %a6,(%a3)
        move.b #40,4(%a3)
        move.b 0x53(%a6),5(%a3)
        move.w (CLOCK).l,6(%a3)
        /* Consume only the accepted pair in all inherited normalized forms. */
        andi.w #0xFEDF,0xD0(%a6)
        andi.w #0xFEDF,0xD2(%a6)
        andi.w #0xFEDF,0xD4(%a6)
        andi.w #0xFEDF,0xD6(%a6)
        andi.w #0xFEDF,0xD8(%a6)
        andi.w #0xFEDF,0xDA(%a6)
        andi.w #0xFEDF,0xE0(%a6)
        andi.w #0xFEDF,0xEC(%a6)
        /* Presentation is one-shot after real paid recovery/lease and input consumption.
         * The UI reuses the native side message bank; activation3 owns a finite
         * native flash/background and Tech Hit cue without a fighter Hyper. */
        jsr (0x3FEE00).l
        moveq #3,%d0
        jsr (0x3FB700).l
        moveq #1,%d0
        bra.s input_done
input_no:      moveq #0,%d0
input_done:
        movem.l (%sp)+,%d1-%d7/%a0-%a6
        move.w (%sp)+,%ccr
        rts
input_quick_no:
        moveq #0,%d0
        move.w (%sp)+,%ccr
        rts
cb_end:


SOURCE src/v934/breaker_response_02.s
BYTES 3297
SHA256 eb6e9cb5f04c24b70c0eabae27dfd7874bf998be1463946229e5159a22781f90

/* v9.3.4 paid normal-hit breaker response.
 * Entry: A6 validated defender, A4 canonical live normal attacker, A5 native
 * global base. Called only after the original exact admission and one-bar
 * spend. Preserve every entry GPR/CCR, including A3's private lease lane.
 * Retire the attack through native guard recoil, not damage/throw/knockdown.
 * Recoil is finite, uses an owned immutable benign record, and enters the
 * native phase which counts recovery before allowing fresh controls.
 */
        .text
        .globl breaker_response_begin,breaker_response_end
breaker_response_begin:
        move.w %sr,-(%sp)
        movem.l %d0-%d7/%a0-%a6,-(%sp)
        movea.l %a6,%a3
        movea.l %a4,%a6
        moveq #0x24,%d0
        cmpi.b #4,0xB4(%a6)
        bne.s response_construct
        moveq #0x26,%d0
response_construct:
        jsr (0x1797A).l
        cmpi.b #0x26,0xB0(%a6)
        beq.s response_air
        /* Native standing/crouching guard-hit animation, without hit damage. */
        moveq #0x0A,%d0
        moveq #6,%d1
        cmpi.b #2,0xB4(%a6)
        bne.s response_ground_animation
        moveq #0x0E,%d1
response_ground_animation:
        jsr (0x135E6).l
        clr.l 0x14(%a6)
        clr.l 0x18(%a6)
        lea response_ground_stream(%pc),%a0
        move.l %a0,0x158(%a6)
        andi.b #0xCF,0x86(%a6)
        move.b 0xB3(%a6),%d0
        eori.b #1,%d0
        move.b %d0,0x9F(%a6)
        bra.s response_owned_recoil
response_air:
        moveq #0x0C,%d0
        moveq #4,%d1
        jsr (0x135E6).l
        /* Native airguard integrates twice. Opposed acceleration reaches
         * zero symmetrically; do not retain a normal's old launch velocity. */
        move.l #0x00060000,%d0
        move.l #0xFFFFA000,%d1
        tst.b 0xB3(%a6)
        beq.s response_air_velocity
        neg.l %d0
        neg.l %d1
response_air_velocity:
        move.l %d0,0x14(%a6)
        move.l %d1,0x18(%a6)
response_owned_recoil:
        /* Native helpers may use A3; retrieve the original A6 from MOVEM. */
        movea.l 56(%sp),%a3
        lea response_benign_record(%pc),%a0
        move.l %a0,0x8C(%a6)
        move.l %a3,0x98(%a6)
        move.w #2,8(%a6)
        move.b #24,0x101(%a6)
        /* The old normal contact delay85 skips native input dispatch. Both
         * participants have retired that contact; the opening owns its pause. */
        clr.b 0x85(%a6)
        /* Refresh only the stock ordinary-jump permissions, plus its airguard
         * history. 177B6 otherwise skips this startup and inherits locks. */
        movea.l %a3,%a6
        clr.b 0x85(%a6)
        clr.b 0x110(%a6)
        clr.b 0xBA(%a6)
        clr.b 0x140(%a6)
        clr.b 0x141(%a6)
        move.b #0x11,0x112(%a6)
        clr.w 0x152(%a6)
        clr.b 0x332(%a6)
        clr.b 0x155(%a6)
        movem.l (%sp)+,%d0-%d7/%a0-%a6
        move.w (%sp)+,%ccr
        rts
        /* Native158 format: positive pixels per tick, FF terminator. */
response_ground_stream:
        .byte 8,8,8,8,8,8,8,8,8,8,8,8,0xFF
        .balign 2
response_benign_record:
        /* Native bit80 disables contact-based transfer to the other fighter:
         * the attacker must recoil itself even while both pushboxes touch. */
        .byte 0,0,0,0x80
        .space 28,0
breaker_response_end:


