Active Time Battle
A battle system in which each combatant's turn comes due on its own timer, running in real time, rather than in rounds.
On this page
In Active Time Battle, every combatant has its own clock and acts when it comes due, so faster combatants act more often and the clock keeps running while the player picks a command. Final Fantasy IV counts each timer down, with a length set by the ratio of a reference agility to the combatant’s1,2; Final Fantasy V keeps the countdown with a different length3; and Final Fantasy VI fills a gauge instead4.
- CountdownFinal Fantasy IV (1991). The clocks run in real time, at a pace the battle speed option sets.1,2Final Fantasy V (1992). Heavier equipment makes a character wait longer between turns, and more agility less.5,3
- GaugeFinal Fantasy VI (1994). (speed + 20) × 1.5 × 64 ÷ 16 added every 2 frames, paused only when wait mode and the time-stop flag are both set; the speed setting slows only monsters.6,4
#Origin
Square’s United States patent on “active time battle” names Hironobu Sakaguchi and Hiroyuki Ito as its inventors7. Takashi Tokita recalled that the idea came to Ito while watching a Formula One race, as cars of different speeds overtook one another8. Sakaguchi, in 2023, thought it was Ito’s idea, and said the first prototype wasn’t fun until the programmer Kiyoshi Yoshii refined it9. Nintendo and Square Enix both say the system began with Final Fantasy IV10.
Games
| Game | Year | How | Note |
|---|---|---|---|
| Final Fantasy IV | 1991 | Countdown | the clocks run in real time, at a pace the battle speed option sets |
| Final Fantasy V | 1992 | Countdown | heavier equipment makes a character wait longer between turns, and more agility less |
| Final Fantasy VI | 1994 | Gauge | (speed + 20) × 1.5 × 64 ÷ 16 added every 2 frames, paused only when wait mode and the time-stop flag are both set; the speed setting slows only monsters |
Every claim about this mechanic, by game (6)
References
- ^ abAt the start of a battle, each combatant's base timer duration is 50 times a reference party member's modified agility over 10 times its own modified agility, at least 1; the reference is the first present party member whose character ID is 1 or $0B, or failing that the first present one, so a combatant with twice the agility waits half as long between turns.Codeeverything8215, FF4 disassembly
How we know
493@8d44: clr_axy 494 stx $c7 495@8d49: lda $3540,y 496 bne @8d5f 497 lda $c7 498 bne @8d7a 499 lda $2000,x 500 and #$1f 501 cmp #$01 502 beq @8d7a 503 cmp #$0b
battle/init.asm lines 493–503 at a360e2e · upstream ↗ 518@8d7a: lda $2015,x ⋮ 521 ldx #$0032 522 stx $393f 523 jsr Mult16 ⋮ 533 lda $2015,x 534 sta $df 535 lda #$0a 536 sta $e1 537 jsr Mult8 ⋮ 542 jsr Div16 543 ldx $3949 544 bne @8dbf ⋮
battle/init.asm lines 518–550 at a360e2e · upstream ↗ $1015 modified agility
notes/ff4j-sfc-ram-map.txt#L722 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ ab
BattleMainwaits 1, 2, 4, 6, 8, or 11 frames by the battle speed setting (BattleSpeedTblplus one), holding while the game is paused or in wait mode, then decrements every combatant's timers (DecTimers) and runs a pending action. An action timer's duration is the base duration times a speed modifier over 16, and 16 is the normal modifier.Codeeverything8215, FF4 disassemblyHow we know
1021BattleMain: 1022@85d9: lda $16ac ; battle speed 1023 tax 1024 lda f:BattleSpeedTbl,x 1025 inc 1026 sta $3538 1027 stz $38e6 1028@85e8: lda #$02 ; battle graphics $02: wait one frame 1029 jsr ExecBtlGfx 1030 lda $38d9 1031 ora $38da 1032 bne @85e8 ; branch if paused or wait mode ⋮
battle/battle.asm lines 1021–1033 at a360e2e · upstream ↗ 1067@8649: jsr DecTimers ⋮ 1081@866d: jsr GetPendingAction ⋮ 1085 jsr DoAction
battle/battle.asm lines 1067–1085 at a360e2e · upstream ↗ 1476; not stopped 1477@96d6: inx3 ; next timer 1478 lda #6 ; loop through 6 timers ⋮ 1504 dec $2a04,x ; decrement counter
battle/battle.asm lines 1476–1504 at a360e2e · upstream ↗ 367; battle speed constants 368BattleSpeedTbl: 369@ff06: .byte 0,1,3,5,7,10
battle/battle_data.asm lines 367–369 at a360e2e · upstream ↗ 282ApplySpeedMod: 283@9fd8: ldx $a9 ; base duration 284 stx $393d 285 ldx $3979 ; multiplier 286 stx $393f 287 jsr Mult16 ⋮ 290 ldx #$0010 291 stx $3947 292 jsr Div16 293 ldx $3949 294 stx $ab ; mod. duration
battle/timer_dur.asm lines 282–298 at a360e2e · upstream ↗ 898 lda #$01 ; auto-battle speed modifier 899 sta $203b,x 900 bra @9086 901@9081: lda #$10 ; normal speed modifier 902 sta $203b,x
battle/init.asm lines 898–902 at a360e2e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abFinal Fantasy IV and V both give each combatant a timer that counts down to its turn. Final Fantasy IV sets its length from a ratio, 50 times a reference party member's agility over 10 times the combatant's; Final Fantasy V sets it to 120 plus equipment weight ÷ 8 minus agility.Codeeverything8215, FF4 disassembly · everything8215, FF5 disassembly
How we know
521 ldx #$0032 ⋮ 535 lda #$0a ⋮ 542 jsr Div16 ⋮ 548 sta $2060,x
battle/init.asm lines 518–550 at a360e2e · upstream ↗ 1477@96d6: inx3 ; next timer 1478 lda #6 ; loop through 6 timers ⋮ 1504 dec $2a04,x ; decrement counter
battle/battle.asm lines 1476–1504 at a360e2e · upstream ↗ 5407 jsr ShiftDivide_8 ;weight/8 5408 clc 5409 adc #$78 ;+120 5410 sec 5411 sbc Agility ;-agi
src/battle/battle-main.asm lines 5405–5416 at 997c87d · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abFinal Fantasy V counts each combatant's ATB timer down by one per tick from 120 + weight ÷ 8 − agility; Final Fantasy VI instead adds a constant built from speed to a gauge every 2 frames and gives the turn when the gauge overflows.Codeeverything8215, FF5 disassembly · everything8215, FF6 disassembly
How we know
5409 adc #$78 ;+120 5410 sec 5411 sbc Agility ;-agi
src/battle/battle-main.asm lines 5405–5416 at 997c87d · upstream ↗ 4740 lda CurrentTimer,X ⋮ 4742 dec CurrentTimer,X 4743 lda CurrentTimer,X 4744 bne TimerActive 4745FlagTimer: ;flag EnableTimer when CurrentTimer hits 0
src/battle/battle-main.asm lines 4740–4745 at 997c87d · upstream ↗ 91; [ increment atb gauge counter ] ⋮ 98 adc near wTargetProp2::w7e3ac8,x ; add atb constant 99 sta near wTargetProp1::w7e3218,x 100 shorta 101 bcc _11ba ; return if it didn't overflow
src/battle/atb.asm lines 91–104 at 8130132 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^A combatant's ATB timer is set to 120 + equipment weight ÷ 8 − agility, at least 1, adjusted for haste or slow, and
UpdateTimercounts it down by one each tick and flags it when it reaches 0, when the turn comes due. The battle speed setting sets a wait of 0, 15, 30, 60, 120, or 240 when a character's turn arrives.Codeeverything8215, FF5 disassemblyHow we know
5397;initialize ATB (A: character index 0-12) 5398.proc ResetATB ⋮ 5406 lda CharStruct::EqWeight,X 5407 jsr ShiftDivide_8 ;weight/8 5408 clc 5409 adc #$78 ;+120 5410 sec 5411 sbc Agility ;-agi 5412 beq :+ 5413 bcs :++ 5414: lda #$01 ;min 1 5415: jsr HasteSlowMod ⋮
src/battle/battle-main.asm lines 5397–5416 at 997c87d · upstream ↗ 4721;Advances a status/atb timer if that status is supposed to be checked this tick ⋮ 4725.proc UpdateTimer ⋮ 4740 lda CurrentTimer,X 4741 beq FlagTimer 4742 dec CurrentTimer,X 4743 lda CurrentTimer,X 4744 bne TimerActive 4745FlagTimer: ;flag EnableTimer when CurrentTimer hits 0
src/battle/battle-main.asm lines 4721–4748 at 997c87d · upstream ↗ 11470 and #$0F ;battle mode and speed 11471 tax 11472 lda f:BattleSpeedTbl,X 11473 sta ATBWaitTime
src/battle/battle-main.asm lines 11470–11473 at 997c87d · upstream ↗ 5336;Waits when a character's turn arrives (amount depending on battle speed setting) 5337.proc ATBWait ⋮ 5342 lda ATBWaitLeft 5343 beq DoneWaiting 5344 dec 5345 sta ATBWaitLeft
src/battle/battle-main.asm lines 5336–5349 at 997c87d · upstream ↗ 24789; d0/ecf2: battle speed constants 24790BattleSpeedTbl: 24791 .byte 0,15,30,60,120,240,0,0 ; active 24792 .byte 0,15,30,60,120,240,0,0 ; wait
src/battle/battle-main.asm lines 24789–24792 at 997c87d · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^Each combatant's ATB gauge constant is (speed + 20) times 1.5 times a haste, normal, or slow constant of 84, 64, or 32, over 16; for monsters the speed term is first scaled by 255 − 24 × the battle speed setting, over 255, so the setting slows only the monsters. Every 2 frames
UpdateBattleTimeadds each present combatant's constant to its gauge, and a gauge that overflows gives that combatant a turn. It skips the update only when wait mode is on and the battle-time-stopped flag is also set, since it ANDs the two.Codeeverything8215, FF6 disassemblyrevisedHow we know
1437; [ update atb gauge constant ] ⋮ 1439CalcSpeed: 1440@09d2: php 1441 ldy #$20 1442 lda near wTargetProp3::w7e3ef8,x 1443 bit #STATUS3::SLOW 1444 bne @09e4 1445 ldy #$40 ; y = haste/normal/slow constant (32/64/82) 1446 bit #STATUS3::HASTE 1447 beq @09e4 1448 ldy #$54 ⋮ 1454 lsr ⋮
src/battle/action_1.asm lines 1435–1470 at 8130132 · upstream ↗ 4; [ update battle time ] ⋮ 6UpdateBattleTime: ⋮ 10 lda near w7e2f41 ; check if battle time is stopped by battle program 11 and near w7e3a8f ; wait mode 12 bne @118b 13 lda near w7e3a6c ; previous frame counter value 14 ldx #2 15@112e: cmp $0e ; current frame counter value 16 beq @1190 ; return if less than 2 frames have elapsed
src/battle/atb.asm lines 4–16 at 8130132 · upstream ↗ 91; [ increment atb gauge counter ] ⋮ 97 lda near wTargetProp1::w7e3218,x ; atb gauge % 98 adc near wTargetProp2::w7e3ac8,x ; add atb constant 99 sta near wTargetProp1::w7e3218,x 100 shorta 101 bcc _11ba ; return if it didn't overflow ⋮ 105@11d1: stz near wTargetProp1::w7e3218_H,x ; clear atb gauge % ⋮ 116 jsr SetFlag0 ; set $3aa0.7 (allow battle menu to open) ⋮ 121; [ open battle menu (character) or add action to advance wait queue (monster) ] ⋮ 149_120e: jmp _c24e66 ; add action to advance wait queue
src/battle/atb.asm lines 91–149 at 8130132 · upstream ↗ 75@2481: and #$07 ; battle speed 76 asl3 77 sta $ee 78 asl 79 adc $ee 80 not_a 81 sta near w7e3a90 ; set battle speed constant
src/battle/init.asm lines 75–81 at 8130132 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^Square's United States patent on "active time battle", in which enemies keep acting on their own timers while the player enters commands, names Hironobu Sakaguchi and Hiroyuki Itou as inventors. It was filed on 16 March 1992 and granted on 21 February 1995; Google Patents gives its priority date as 16 July 1991, from Japanese application 3-199828.PublisherUS patent 5,390,937 (Active Time Battle)
How we know
The movements of the player character and enemy character, i.e., their actions in combat, are executed repeatedly without interruption while time is passing at a fixed rate. This shall be referred to as "active time battle".
description · archived copy ↗ an enemy character on a display screen may launch an attack against a player character on the same screen, even while the player character is in the process of inputting a command, at elapse of a set time period specific to the enemy character.
abstract · archived copy ↗ Inventor Hironobu Sakaguchi Hiroyuki Itou … Filing date 1992-03-16 Publication date 1995-02-21
bibliographic data · archived copy ↗ JP3-199828
priority applications · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-23.
- ^Takashi Tokita told 1UP that the idea of Active Time Battle came from the planner Hiroyuki Ito, who was watching a Formula One race and saw the cars overtake one another: from that came characters whose speed differs by type. Tokita said it also let the team build enemies like those of shooting and action games, which change shape or fight as a wall closes in.Interview1UP, Tokita on FFIV
How we know
The planner, Hiroyuki Itoh, who directed Final Fantasy XII, was watching a Formula One race, and he saw all the cars surpass each other. From this, we thought of an interesting idea where character speed would differ depending on the type of character it was. That's where the initial idea came from.
page 3, answer on the inspiration for Active Time Battle · archived copy ↗ So, like in shooting and action games, there are instances where the enemies will change shape, or fight as a wall is closing in on them -- that was a new kind of enemy structure we were able to implement.
page 3, next answer · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-23.
- ^Hironobu Sakaguchi, in Square Enix's 2023 anniversary interview as transcribed by Nova Crystallis, said he thought it was Hiroyuki Ito who came up with Active Time Battle, because the move to the Super Famicom called for something special. The prototype wasn't fun, he said, and the programmer Kiyoshi Yoshii refined the system until it was in good shape.InterviewNova Crystallis, FF 35th anniversary interview, part 2
How we know
I think it was Hiroyuki Ito. We always try to do something new with the battle system, not just with the story and the setting. With the move to the Super Famicom for FFIV, we felt we really had to do something special, so he came up with ATB (Active Time Battle). The prototype was no good.
section "The secrets behind the creation of 'Active Time Battle'", Sakaguchi's answer · archived copy ↗ When we programmed a test, it just wasn't fun. The programmer was a guy called Yoshii
same section, Sakaguchi · archived copy ↗ But he concentrated really hard and refined the system. And it was in good shape by the end.
same section, Sakaguchi's last answer · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-23.
- ^Time always flows in battle: a player who doesn't act is attacked by the enemy regardless, and some enemies transform as time passes. Nintendo's page says the system, a standard of later Final Fantasy games, was used first in this game, and Square Enix's that Active Time Battle appeared from this game on.PublisherNintendo, VC Final Fantasy IV · Square Enix, FFIV official page
How we know
バトル中はつねに時間が流れており、こちらが行動しないと敵から一方的に攻められてしまいます。また、時間の経過とともに変身する敵がいるなど、さまざまなことが起こります。 … のちの『FF』シリーズで定番となるこのシステムは、このゲームで最初に使われました。
game introduction, battle paragraph · archived copy ↗ 今作からバトル中も時間が流れる「アクティブタイムバトル」が登場しました。
game.json, detail_content · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-23.
Sources
Code
- everything8215. 2022. “Final Fantasy IV Disassembly.” Commit a360e2e. everything8215/ff4 @ a360e2e · licence, all uses
- everything8215. 2026. “Final Fantasy V Disassembly.” Commit 997c87d. everything8215/ff5 @ 997c87d · licence, all uses
- everything8215. 2026. “Final Fantasy VI Disassembly.” Commit 8130132. everything8215/ff6 @ 8130132 · licence, all uses
Primary
- Hironobu, Sakaguchi, and Itou, Hiroyuki. 1995. “US 5,390,937: Video game apparatus, method and device for controlling same.” United States patent 5,390,937, filed 16 March 1992, Japanese priority application 3-199828 of 16 July 1991; Google Patents page. Square Co., Ltd. (assignee). original · archived · licence, all uses
- Jeremy, Parish, and Tokita, Takashi. 2011. “A Conversation With the Creator of Final Fantasy IV (Takashi Tokita interview).” 1UP.com, A Conversation With the Creator of Final Fantasy IV, page 3 of 5. Ziff Davis. original · archived · licence, all uses
- Hironobu, Sakaguchi,, Shibuya, Kazuko, Kitase, Yoshinori, and Nova Crystallis. 2023. “Final Fantasy 35th Anniversary Special Interview (Part 2 of 2 Transcription).” Nova Crystallis; a transcription of Square Enix's video interview released in 2023. Nova Crystallis. original · archived · licence, all uses
- Co., Nintendo and Ltd. 2009. “VC ファイナルファンタジーIV (Wii Virtual Console product page).” Nintendo Wii Virtual Console, VC ファイナルファンタジーIV, game introduction page. Nintendo Co., Ltd. original · archived · licence, all uses
- Co., Square Enix and Ltd. 2025. “ファイナルファンタジーIV (Square Enix official game page, game.json).” SQUARE ENIX official game detail page for Final Fantasy IV, data file game.json. Square Enix Co., Ltd. original · archived · licence, all uses