FANDOM


Thorn is a boss in Final Fantasy IX. He is fought in Alexandria Castle along with Zorn. Additionally, Thorn appears as a dummied enemy in a cinematic fight in Mount Gulug.

StatsEdit

Battle Edit

The battle will end when one of them is defeated. The two will 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 out and the spell will not be cast.

Strategy Edit

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

AI Script Edit

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

Function Thorn_Loop
   if ( !initflag )
      set thorn = SV_FunctionEnemy
      set hplimitdeath = 65535L - SV_FunctionEnemy[HP]
      set SV_FunctionEnemy[MAX_HP] = 65535L
      set SV_FunctionEnemy[HP] = 65535L
      set hp = 65535L
      set initflag = TRUE
   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 = TRUE
         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 ( thornpoweron )
         if ( GetAttacker == SV_FunctionEnemy )
            set thornpoweron = FALSE
      if ( waitingpowerzorn )
         if ( GetAttacker == SV_FunctionEnemy )
            set waitingpowerzorn = FALSE
         if ( zorn[STAND_ANIMATION] == 0 )
            set SV_FunctionEnemy[PREVENT_ATTACK] = 1
            set waitingpowerzorn = FALSE
      if ( SV_FunctionEnemy[STAND_ANIMATION] == 0 )
         set SV_FunctionEnemy[ATB] = SV_FunctionEnemy[MAX_ATB]
   Wait( 1 )
   loop

Function Thorn_ATB
   set jumpstate = [ zorn[STAND_ANIMATION] ; thorn[STAND_ANIMATION] ]
   if ( jumpstate == [ 0 ; 0 ] || jumpstate == [ 1 ; 0 ] )
      set SV_Target = SV_FunctionEnemy
      Attack( Continue0-1 )
   elseif ( jumpstate == [ 0 ; 1 ] )
      set SV_Target = RandomInTeam(SV_PlayerTeam)
      if ( thornpoweron )
         Attack( Light Flare )
      else
         Attack( No action )
   elseif ( jumpstate == [ 1 ; 1 ] )
      if ( thornpoweron )
      set SV_Target = RandomInTeam(SV_PlayerTeam)
         Attack( Light Flare )
      else
         if ( !zornpoweron )
            set SV_Target = zorn
            Attack( Power Zorn )
            set waitingpowerzorn = TRUE
         else
            set SV_Target = RandomInTeam(SV_PlayerTeam)
            Attack( No action )
   set SV_Target = RandomInTeam(SV_PlayerTeam)
   Attack( No action )


Function Thorn_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 == [ 1 ; 0 ] )
      if ( !zornpoweron )
         set SV_Target = zorn
         Attack( Power Zorn )
         set waitingpowerzorn = TRUE
   elseif ( jumpstate == [ 0 ; 1 ] )
      if ( thornpoweron )
         set thornpoweron = FALSE
         BattleDialog( "The flare 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 = zorn
         Attack( Power Zorn )
         set waitingpowerzorn = TRUE
      if ( thornpoweron )
         set thornpoweron = FALSE
         BattleDialog( "The flare power has been neutralized." )


Function Thorn_CounterEx
   if ( GetAttacker == SV_FunctionEnemy )
      if ( GetAttackId == Continue0-1 )
         set SV_FunctionEnemy[PREVENT_ATTACK] = 1
      return
   if ( GetAttacker == zorn )
      if ( GetAttackId == Power Thorn )
         set zorn[PREVENT_ATTACK] = 1
         set thorn[PREVENT_ATTACK] = 1
         set SV_FunctionEnemy[ATB] = 0
         set thornpoweron = 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 ( thornpoweron )
      set thornpoweron = FALSE
      BattleDialog( "The flare power has been neutralized." )
   set SV_FunctionEnemy[STAND_ANIMATION] = 0
   set SV_FunctionEnemy[PREVENT_ATTACK] = 1

Gallery Edit

Related enemies Edit