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.
Stats[]
Battle[]
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[]
As there is 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 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