On this page
  1. Related
  2. Games
  3. References
  4. Sources

A battle transition covers the cut from the map to a fight. Final Fantasy VI breaks a town or dungeon map into mosaic blocks over 32 frames1, and on the world map zooms the Mode 7 plane in and out over 34 frames as the screen darkens2. EarthBound spins a run of window shapes over the screen3 and tints them by who strikes first4.

  • MosaicFinal Fantasy VI (1994). Town and dungeon battles open with 32 frames of mosaic, blocks stepping up to 8 and then 16 pixels.1
  • ZoomFinal Fantasy VI (1994). World map battles zoom the Mode 7 plane in and out over 34 frames as the screen darkens.2
  • Window swirlEarthBound (1994). 6 swirls drawn from 126 window shapes, tinted by who strikes first.3,4

Games

GameYearHowNote
Final Fantasy VI1994Mosaictown and dungeon battles open with 32 frames of mosaic, blocks stepping up to 8 and then 16 pixels
Final Fantasy VI1994Zoomworld map battles zoom the Mode 7 plane in and out over 34 frames as the screen darkens
EarthBound1994Window swirl6 swirls drawn from 126 window shapes, tinted by who strikes first
Every claim about this mechanic, by game (1)

References

  1. ^ abCodeeverything8215, FF6 disassemblybattle.asm 25–61, 65–68; reset.asm 287; +2 files
    How we know
    25; [ battle blur/sound ]
    ⋮
    27.proc BattleMosaic
    28        lda     $078a                   ; branch if battle sound effect is disabled
    29        and     #$40
    30        bne     :+
    31        lda     #SFX::BATTLE_SFX
    32        jsr     PlaySfx
    33:       lda     $078a                   ; return if battle blur is disabled
    34        bmi     Done
    35        stz     $46                     ; clear frame counter
    36Loop:   jsr     WaitVblank
    37        lda     $46
    ⋮
    
    src/field/battle.asm lines 25–61 at 8130132 · upstream ↗
    65; [ execute battle ]
    ⋮
    67.proc ExecBattle
    68        jsr     BattleMosaic
    
    src/field/battle.asm lines 65–68 at 8130132 · upstream ↗
    287        inc     $46                     ; increment vblank counter
    
    src/field/reset.asm line 287 at 8130132 · upstream ↗

    4 more excerpts on the claim page

  2. ^ abCodeeverything8215, FF6 disassemblymove.asm 1398–1433, 1436–1442, 880–898, 587–590, 808–810; rotate.asm 884–886; +1 files
    How we know
    1398; [ battle zoom and sound effect ]
    ⋮
    1400BattleZoom:
    ⋮
    1407        lda     #SFX::BATTLE_SFX
    1408        sta     hAPUIO1
    ⋮
    1411        lda     #$03
    1412        sta     hTM
    1413        stz     hTS
    1414        ldx     #0
    1415@2228:  lda     f:BattleZoomTbl,x       ; zoom level
    1416        sta     $8c
    1417        lda     f:BattleZoomTbl+1,x     ; screen brightness
    1418        sta     hINIDISP
    ⋮
    
    src/world/move.asm lines 1398–1433 at 8130132 · upstream ↗
    1436; battle zoom data (2 bytes each, zoom level then screen brightness)
    1437BattleZoomTbl:
    1438@224e:  .word   $0f85,$0f70,$0f5c,$0f3a,$0f2d,$0f23,$0f19,$0f18
    1439        .word   $0f1b,$0f29,$0f32,$0f3d,$0f53,$0f5c,$0f64,$0f6d
    1440        .word   $0f6d,$0f6c,$0f69,$0f68,$0f65,$0f5f,$0f5c,$0f58
    1441        .word   $0d4e,$0c49,$0b44,$0938,$0831,$072b,$051d,$0416
    1442        .word   $030f,$0100
    
    src/world/move.asm lines 1436–1442 at 8130132 · upstream ↗
    880        beq     @1e1f                   ; branch if battles are disabled
    ⋮
    884        jsl     CheckBattleWorld_ext
    ⋮
    886        beq     @1e1c                   ; branch if no random battle
    ⋮
    898        jsr     BattleZoom
    
    src/world/move.asm lines 880–898 at 8130132 · upstream ↗

    4 more excerpts on the claim page

  3. ^ abCodeHerringway/ebsrc · “EarthBound (USA)”bank0e.asm 464–465; C4A67E.asm 11–86; +4 files
    How we know
    src/bankconfig/common/bank0e.asm at 68aec5c
    Our readingeach 4 bytes: frames per shape, first shape, shape count, 0465

    In the cartridge (“EarthBound (USA)”): the swirl table, 7 four-byte entries. We don't reproduce the bytes.

    src/unknown/C4/C4A67E.asm at 68aec5c
    Our readingoptions bit 0 → SWIRL_REVERSED; entry → FRAMES_UNTIL_NEXT_SWIRL_FRAME, SWIRL_FRAMES_LEFT, SWIRL_HDMA_TABLE_ID52–86
    2SWIRL_POINTER_TABLE:
    3	.WORD .LOWORD(SWIRL_DATA_0)
    4	.WORD .LOWORD(SWIRL_DATA_1)
    
    src/data/battle/swirl_pointers.asm lines 1–128 at 68aec5c · upstream ↗
    src/overworld/battle_swirl_sequence.asm at 68aec5c
    Our readinginitiative → color and music; group ≥ BOSS_FRANK → swirl 312–96
    451	BOSS_FRANK = 448
    
    include/constants/enemy_groups.asm line 451 at 68aec5c · upstream ↗
    51	JSL BATTLE_SWIRL_SEQUENCE
    
    src/battle/init_scripted.asm line 51 at 68aec5c · upstream ↗

    Claim page

  4. ^ abCodeHerringway/ebsrc · SNESdev Wiki, “PPU registers”battle_swirl_sequence.asm 12–91; hardware.asm 70–94; +1 files
    How we know
    12	LDA #$0001
    13	STA $16
    14	LDA #$0004
    15	STA @SWIRL_RED
    16	STA @SWIRL_GREEN
    17	LDY #$0000
    18	STY @SWIRL_BLUE
    19	LDA BATTLE_INITIATIVE
    20	BEQ @UNKNOWN0
    21	CMP #INITIATIVE::PARTY_FIRST
    22	BEQ @UNKNOWN1
    23	CMP #INITIATIVE::ENEMIES_FIRST
    ⋮
    
    src/overworld/battle_swirl_sequence.asm lines 12–91 at 68aec5c · upstream ↗
    70.ENUM CGWSEL_BITS
    ⋮
    75	COLOUR_MATH_ENABLE_ALWAYS = 0 << 4
    76	COLOUR_MATH_ENABLE_MATHWIN = 1 << 4
    ⋮
    79	SUBSCREEN_BGOBJ_ENABLE = 1 << 1
    80	SUBSCREEN_BGOBJ_DISABLE = 0 << 1
    ⋮
    85.ENUM CGADSUB_BITS
    86	COLOUR_MATH_ADDSUB = 1 << 7
    87	COLOUR_MATH_DIV2 = 1 << 6
    
    include/hardware.asm lines 70–94 at 68aec5c · upstream ↗
    451	BOSS_FRANK = 448
    
    include/constants/enemy_groups.asm line 451 at 68aec5c · upstream ↗
    +--------- Operator type (0 = add, 1 = subtract) … |+-------- Half color math
    CGADSUB - Color math designation ($2131 write) · archived copy ↗
    |||| +-- Addend (0 = fixed color, 1 = subscreen) … ||++------ Sub screen color window transparent region … 1 |Outside color window … The sub-screen setting is for masking color math.
    CGWSEL - Color addition select ($2130 write) · archived copy ↗

    Claim page

Sources

Code

Secondary