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

Stats[edit | edit source]

Battle[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

Related enemies[edit | edit source]

Community content is available under CC-BY-SA unless otherwise noted.