PATCH Solution

WRONG OP

PATCH wrong alu operator

In-game screenshot of WRONG OP
In-game view
FamilyPATCH Graph0.486 DifficultyHard Ring03 IDzp45_operator

Prerequisites

CROSSFADE

Unlocks

DELTA ENCODER

Patch choices mixop=sub
Accepted keysCALC Editable slots1 Rulenonzero

Walkthrough

The decode uses the right constant but the wrong operation, so it can never reproduce the stored targets. Only the marked decode op can move. Find the single operation that turns the real key into the stored targets, then TEST.

The constant is fixed, so this is not a mask hunt. Line the key up against the targets and ask which operation maps one to the other. The targets are the key minus the constant, so the decode has to subtract.

Valid Patch Combos

  • mixop=sub

Reject Battery

  • CALD
  • CALE
  • DALC
  • CAL
  • CALCC

Editable Slot Options

  • mixop: add, sub, xor, or
Broken Listing
; WRONG OP: a PATCH job. Each byte is decoded against the SAME constant and then
; compared to a stored target. The constant is right; the OPERATION is wrong. The
; stored targets were produced by one specific operator, and no other operator can
; reproduce them from the real key, so swapping the constant would get you nowhere.
; Only the marked decode op (label "mixop") is yours to edit; the constant, the
; target table, and the verdict are frozen.
;
; The real key is CALC. The targets were made by SUBTRACTING the constant from
; each byte, so the decode has to subtract, not add. Read the targets against the
; key and the operation reveals itself.
;
; r0 = 1 on accept; rule: nonzero. SHIPPED op is "add", which pushes every byte
; the wrong way and bounces the real key.

        len   r2
        cmp   r2, 4
        jnz   bad

        mov   r7, 0
loop:   cmp   r7, 4
        jge   ok
        ldb   r0, [r7]
mixop:  add   r0, 0x07      ; SHIPPED BROKEN: wrong operation -> want sub

        cmp   r7, 0
        jz    t0
        cmp   r7, 1
        jz    t1
        cmp   r7, 2
        jz    t2
        mov   r1, 0x3C      ; target for position 3
        jmp   chk
t0:     mov   r1, 0x3C
        jmp   chk
t1:     mov   r1, 0x3A
        jmp   chk
t2:     mov   r1, 0x45
        jmp   chk
chk:    cmp   r0, r1
        jnz   bad
        inc   r7
        jmp   loop

ok:     mov   r0, 1
        ret
bad:    mov   r0, 0
        ret