Mechanic · structure & scoring · role-playing game
Battle transition
The screen effect that carries the game from the map into a battle, such as a mosaic, a zoom or a swirl.
On this page
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
| Game | Year | How | Note |
|---|---|---|---|
| Final Fantasy VI | 1994 | Mosaic | town and dungeon battles open with 32 frames of mosaic, blocks stepping up to 8 and then 16 pixels |
| Final Fantasy VI | 1994 | Zoom | world map battles zoom the Mode 7 plane in and out over 34 frames as the screen darkens |
| EarthBound | 1994 | Window swirl | 6 swirls drawn from 126 window shapes, tinted by who strikes first |
Every claim about this mechanic, by game (1)
References
- ^ 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 countersrc/field/reset.asm line 287 at 8130132 · upstream ↗ - ^ 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 ↗ - ^ 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, 0465In 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–862SWIRL_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–96451 BOSS_FRANK = 448include/constants/enemy_groups.asm line 451 at 68aec5c · upstream ↗ 51 JSL BATTLE_SWIRL_SEQUENCEsrc/battle/init_scripted.asm line 51 at 68aec5c · upstream ↗ - ^ 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 = 448include/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 ↗
Sources
Code
- everything8215. 2026. “Final Fantasy VI Disassembly.” Commit 8130132. everything8215/ff6 @ 8130132 · licence, all uses
- Herringway. 2026. “ebsrc: Source code recreation for the game Earthbound.” Commit 68aec5c. Herringway/ebsrc @ 68aec5c · licence, all uses
- n.d. “EarthBound (USA).” · licence, all uses
Secondary
- SNESdev Wiki contributors. n.d. “PPU registers.” SNESdev Wiki. Version oldid 1507. original · archived · licence, all uses