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