Final Fantasy Wiki
Advertisement

Template:Sideicon

Zorn is a boss in Final Fantasy IX fought in Alexandria Castle along with Thorn.

Stats

Battle

The battle will end when one of them is defeated. Zorn and Thorn take turns charging up the other to cast a powerful spell on the party, but if the "charged" twin is attacked, the charge is canceled and the spell will not be cast.

Strategy

As the player has a time limit for the fight, it is best to target Thorn instead of Zorn, since he has less HP.

AI script

Using global variable zorn
Using global variable thorn
Using global variable zornpoweron
Using global variable thornpoweron
Using global variable endflag

Function Zorn_Loop
   if ( !initflag )
      set zorn = SV_FunctionEnemy
      set hplimitdeath = 65535L - SV_FunctionEnemy[HP]
      set SV_FunctionEnemy[MAX_HP] = 65535L
      set SV_FunctionEnemy[HP] = 65535L
      set hp = 65535L
      set initflag = 1
   else
      if ( endflag )
         while ( GetBattleState != 1 )
            Wait( 1 )
         Wait( 20 )
      set SV_Target = SV_FunctionEnemy
         if ( SV_FunctionEnemy[STAND_ANIMATION] )
            AttackSpecial( Withdraw1 )
         else
            AttackSpecial( Withdraw0 )
         set SV_FunctionEnemy[DEFEATED_ON] = 1
         while ( IsAttacking != 0 )
            Wait( 1 )
         RunBattleCode( End Battle, Escape )
      if ( SV_FunctionEnemy[HP] < hplimitdeath )
         set endflag = 1
         while ( IsAttacking != 0 )
            Wait( 1 )
         RunBattleCode( Disable ATB )
         while ( GetBattleState != 1 )
            Wait( 1 )
      set SV_Target = SV_FunctionEnemy
         if ( SV_FunctionEnemy[STAND_ANIMATION] )
            AttackSpecial( Withdraw1 )
         else
            AttackSpecial( Withdraw0 )
         set SV_FunctionEnemy[DEFEATED_ON] = 1
         while ( IsAttacking != 0 )
            Wait( 1 )
      if ( zornpoweron )
         if ( GetAttacker == SV_FunctionEnemy )
            set zornpoweron = FALSE
      if ( waitingpowerthorn )
         if ( GetAttacker == SV_FunctionEnemy )
            set waitingpowerthorn = FALSE
         if ( thorn[STAND_ANIMATION] == 0 )
            set SV_FunctionEnemy[PREVENT_ATTACK] = 1
            set waitingpowerthorn = FALSE
      if ( SV_FunctionEnemy[STAND_ANIMATION] == 0 )
         set SV_FunctionEnemy[ATB] = SV_FunctionEnemy[MAX_ATB]
   Wait( 1 )
   loop

Function Zorn_ATB
   set jumpstate = [ zorn[STAND_ANIMATION] ; thorn[STAND_ANIMATION] ]
   if ( jumpstate == [ 0 ; 0 ] || jumpstate == [ 0 ; 1 ] )
      set SV_Target = SV_FunctionEnemy
      Attack( Continue0-1 )
   elseif ( jumpstate == [ 1 ; 0 ] )
      if ( zornpoweron )
         set SV_Target = SV_PlayerTeam
         Attack( Meteorite )
      else
         set SV_Target = RandomInTeam(SV_PlayerTeam)
         Attack( No action )
   elseif ( jumpstate == [ 1 ; 1 ] )
      if ( zornpoweron )
         set SV_Target = SV_PlayerTeam
         Attack( Meteorite )
      else
         if ( !thornpoweron )
            set SV_Target = thorn
            set waitingpowerthorn = TRUE
            Attack( Power Thorn )
         else
            set SV_Target = RandomInTeam(SV_PlayerTeam)
            Attack( No action )
   set SV_Target = RandomInTeam(SV_PlayerTeam)
   Attack( No action )


Function Zorn_Counter
   if ( ( GetAttackCommandId == Skill ) && ( GetAttackId == What's That?! ) )
      return
   if ( SV_FunctionEnemy[HP] < hp )
      set hp = SV_FunctionEnemy[HP]
      if ( GetAttackCommandId == Eidolon || GetAttackId == Six Dragons )
         return
   else
      set hp = SV_FunctionEnemy[HP]
      return
   set jumpstate = [ zorn[STAND_ANIMATION] ; thorn[STAND_ANIMATION] ]
   if ( jumpstate == [ 0 ; 0 ] )
      set SV_Target = SV_FunctionEnemy
      Attack( Continue0-1 )
   elseif ( jumpstate == [ 0 ; 1 ] )
      if ( !thornpoweron )
         set SV_Target = thorn
         Attack( Power Thorn )
         set waitingpowerthorn = TRUE
   elseif ( jumpstate == [ 1 ; 0 ] )
      if ( zornpoweron )
         set zornpoweron = FALSE
         BattleDialog( "The meteor power has been neutralized." )
      set SV_FunctionEnemy[STAND_ANIMATION] = 0
      set SV_FunctionEnemy[PREVENT_ATTACK] = 1
   elseif ( jumpstate == [ 1 ; 1 ] )
      set SV_FunctionEnemy[STAND_ANIMATION] = 0
      set SV_FunctionEnemy[PREVENT_ATTACK] = 1
      if ( !zornpoweron && !thornpoweron )
         set SV_Target = thorn
         Attack( Power Thorn )
         set waitingpowerthorn = TRUE
      if ( zornpoweron )
         set zornpoweron = FALSE
         BattleDialog( "The meteor power has been neutralized." )


Function Zorn_CounterEx
   if ( GetAttacker == SV_FunctionEnemy )
      if ( GetAttackId == Continue0-1 )
         set SV_FunctionEnemy[PREVENT_ATTACK] = 1
      return
   if ( GetAttacker == thorn )
      if ( GetAttackId == Power Zorn )
         set zorn[PREVENT_ATTACK] = 1
         set thorn[PREVENT_ATTACK] = 1
         set SV_FunctionEnemy[ATB] = 0
         set zornpoweron = TRUE
      return
   if ( SV_FunctionEnemy[HP] < hp )
      set hp = SV_FunctionEnemy[HP]
      if ( GetAttackCommandId == Eidolon || GetAttackId == Six Dragons )
         return
   else
      set hp = SV_FunctionEnemy[HP]
      return
   if ( zornpoweron )
      set zornpoweron = FALSE
      BattleDialog( "The meteor power has been neutralized." )
   set SV_FunctionEnemy[STAND_ANIMATION] = 0
   set SV_FunctionEnemy[PREVENT_ATTACK] = 1


Gallery

Related enemies

Advertisement