The Mover is an enemy from Final Fantasy IX. It appears in threes and has unique death behavior compared to other enemies in the game.

Stats[edit | edit source]

Middle

Right

Left

Battle[edit | edit source]

Movers are exceptionally dangerous when all three are present, as they can align into a formation that triggers the lethal Delta Attack spell. Destroying at least one of the Movers will eliminate this threat.

For some reason, Movers can't die from a White Magic spell, an item or a Mug: their AI specifically prevents it by setting their HP to 1 (or one more than their death threshold to be accurate). Two movers can't die together (they can all die together, but not just two of them). Using a spell that should kill exactly two Movers, will kill only one, while the other's HP is set to the threshold. Any attack after that will kill it, even a 0-damage Minus Strike.

Spells countered with Return Magic also can't kill Movers unless they die together, because the death of one Mover is actually a counter, and it is not possible to counter a counter.

AI script[edit | edit source]

Function Mover_Loop
   if ( !initflag )
      set initflag = TRUE
      set mover1 = SV_EnemyTeam[ENEMY_ID] ==$ 0
      set mover2 = SV_EnemyTeam[ENEMY_ID] ==$ 1
      set mover3 = SV_EnemyTeam[ENEMY_ID] ==$ 2
      set mover1[SHADOW] = 0
      set mover2[SHADOW] = 0
      set mover3[SHADOW] = 0
      set hplimitdeath = 65535L - SV_FunctionEnemy[HP]
      set mover1[MAX_HP] = 65535L
      set mover2[MAX_HP] = 65535L - SV_FunctionEnemy[HP] / 2
      set mover3[MAX_HP] = 65535L
      set mover1[HP] = 65535L
      set mover2[HP] = mover2[MAX_HP]
      set mover3[HP] = 65535L
      RunBattleCode( Enable ATB )
      while ( GetBattleState != 4 )
         Wait( 1 )
   if ( waitingcounter && ( GetAttacker == SV_FunctionEnemy ) )
      set waitingcounter = FALSE
   Wait( 1 )
   loop


Function Mover_ATB
   if ( firstdown || seconddown )
      set SV_Target = RandomInTeam(SV_PlayerTeam)
      if ( ( GetRandom % 3 ) && ( SV_FunctionEnemy[MP] >= 24 ) )
         Attack( Firaga )
      else
         Attack( Virus Combo )
   elseif ( SV_FunctionEnemy[STAND_ANIMATION] == 0 )
      if ( GetRandom & 1 )
         set SV_Target = RandomInTeam(SV_PlayerTeam)
         Attack( Virus Combo )
      else
         set SV_Target = SV_FunctionEnemy
         Attack( Continue1 )
   else
      set SV_Target = SV_FunctionEnemy
      Attack( Continue2 )


Function Mover_Counter
   if ( ( GetAttackCommandId == Skill ) && ( GetAttackId == What's That?! ) )
      return
   if ( ( GetAttackCommandId == Item ) || ( GetAttackCommandId == Wht Mag ) || ( GetAttackCommandId == Dbl Wht ) || ( GetAttackCommandId == Steal ) )
      set downlist = 0
      if ( mover1[HP] < hplimitdeath )
         set downlist = 4
      if ( mover2[HP] < hplimitdeath )
         set downlist |= 1
      if ( mover3[HP] < hplimitdeath )
         set downlist |= 2
      if ( downlist & 4 )
         set mover1[HP] = hplimitdeath
      if ( !firstdown && ( downlist & 1 ) )
         set mover2[HP] = hplimitdeath
      if ( !seconddown && ( downlist & 2 ) )
         set mover3[HP] = hplimitdeath
      if ( downlist == 7 )
         set alldown = TRUE
         if ( #( SV_EnemyTeam & mover2 ) )
            set mover2[HP] = 0
         if ( #( SV_EnemyTeam & mover3 ) )
            set mover3[HP] = 0
         if ( #( SV_EnemyTeam & mover1 ) )
            set mover1[HP] = 0
   set downlist = 0
   set SV_Target = SV_FunctionEnemy
   if ( alldown )
      return
   if ( waitingcounter )
      if ( mover1[HP] < hplimitdeath )
         set mover1[HP] = hplimitdeath
      if ( ( mover2[HP] < hplimitdeath ) && !firstdown )
         set mover2[HP] = hplimitdeath
      if ( ( mover3[HP] < hplimitdeath ) && !seconddown )
         set mover3[HP] = hplimitdeath
      return
   if ( firstdown )
      if ( seconddown )
         if ( mover1[HP] < hplimitdeath )
            set alldown = TRUE
            if ( #( SV_EnemyTeam & mover2 ) )
               set mover2[HP] = 0
            if ( #( SV_EnemyTeam & mover3 ) )
               set mover3[HP] = 0
            if ( #( SV_EnemyTeam & mover1 ) )
               set mover1[HP] = 0
         return
      if ( mover1[HP] < hplimitdeath )
         if ( mover3[HP] < hplimitdeath )
            set alldown = TRUE
            if ( #( SV_EnemyTeam & mover2 ) )
               set mover2[HP] = 0
            if ( #( SV_EnemyTeam & mover3 ) )
               set mover3[HP] = 0
            if ( #( SV_EnemyTeam & mover1 ) )
               set mover1[HP] = 0
            return
         set mover1[HP] = mover3[HP]
         set mover3[HP] = hplimitdeath - 1
      if ( mover3[HP] >= hplimitdeath )
         return
      set mover1[STAND_ANIMATION] = 0
      set waitingcounter = TRUE
      set downlist = 2
      Attack( Spin )
   if ( seconddown )
      if ( mover1[HP] < hplimitdeath )
         if ( mover2[HP] < hplimitdeath )
            set alldown = TRUE
            if ( #( SV_EnemyTeam & mover2 ) )
               set mover2[HP] = 0
            if ( #( SV_EnemyTeam & mover3 ) )
               set mover3[HP] = 0
            if ( #( SV_EnemyTeam & mover1 ) )
               set mover1[HP] = 0
            return
         set mover1[HP] = mover2[HP]
         set mover2[HP] = hplimitdeath - 1
      if ( mover2[HP] >= hplimitdeath )
         return
      set mover1[STAND_ANIMATION] = 0
      set waitingcounter = TRUE
      set downlist = 1
      Attack( Spin )
   if ( mover1[HP] < hplimitdeath )
      set downlist = 4
   if ( mover2[HP] < hplimitdeath )
      set downlist |= 1
   if ( mover3[HP] < hplimitdeath )
      set downlist |= 2
   if ( ( downlist == 0 ) && ( mover1[STAND_ANIMATION] == 1 ) )
      set waitingcounter = TRUE
      set SV_Target = GetAttacker
      Attack( Delta Attack )
   elseif ( downlist == 1 )
      set mover1[STAND_ANIMATION] = 0
      set waitingcounter = TRUE
      set downlist = 1
      Attack( Spin )
   elseif ( downlist == 4 )
      set mover1[HP] = mover3[HP]
      set mover3[HP] = hplimitdeath - 1
   elseif ( downlist == 2 )
      set mover1[STAND_ANIMATION] = 0
      set waitingcounter = TRUE
      set downlist = 2
      Attack( Spin )
   elseif ( downlist == 5 )
      set mover1[HP] = mover3[HP]
      set mover3[HP] = hplimitdeath - 1
   elseif ( downlist == 6 )
      set mover1[HP] = mover2[HP]
      set mover2[HP] = hplimitdeath - 1
   elseif ( downlist == 3 )
      set mover1[STAND_ANIMATION] = 0
      set waitingcounter = TRUE
      set downlist = 3
      Attack( Spin )
   elseif ( downlist == 7 )
      set alldown = TRUE
      if ( #( SV_EnemyTeam & mover2 ) )
         set mover2[HP] = 0
      if ( #( SV_EnemyTeam & mover3 ) )
         set mover3[HP] = 0
      if ( #( SV_EnemyTeam & mover1 ) )
         set mover1[HP] = 0


Function Mover_CounterEx
   if ( GetAttackCommandId == Enemy Counter )
      set SV_FunctionEnemy[PREVENT_ATTACK] = 1
      if ( downlist & 1 )
         set firstdown = TRUE
         set mover2[TARGETABLE] = 0
         set mover1[MODEL_OFF] = 12
      if ( downlist & 2 )
         set seconddown = TRUE
         set mover3[TARGETABLE] = 0
         set mover1[MODEL_OFF] = 48
   set downlist = 0
   if ( mover1[HP] < hplimitdeath )
      set downlist = 4
   if ( mover2[HP] < hplimitdeath )
      set downlist |= 1
   if ( mover3[HP] < hplimitdeath )
      set downlist |= 2
   if ( downlist & 4 )
      set mover1[HP] = hplimitdeath
   if ( !firstdown && ( downlist & 1 ) )
      set mover2[HP] = hplimitdeath
   if ( !seconddown && ( downlist & 2 ) )
      set mover3[HP] = hplimitdeath
   if ( downlist == 7 )
      set alldown = TRUE
      if ( #( SV_EnemyTeam & mover2 ) )
         set mover2[HP] = 0
      if ( #( SV_EnemyTeam & mover3 ) )
         set mover3[HP] = 0
      if ( #( SV_EnemyTeam & mover1 ) )
         set mover1[HP] = 0


Tetra Master[edit | edit source]

Tetra Master
Mover
#050
Location: Treno, Card Stadium


Gallery[edit | edit source]

Mover FFIX Art.jpg
FFIX Delta Attack.png
Community content is available under CC-BY-SA unless otherwise noted.