What the hell is that?
Zidane Tribal
The Prison Cage is a boss from Final Fantasy IX. The party fights it twice in the Evil Forest, once with Garnet imprisoned in it, and once with Vivi.
Contents
Stats
#12
#14
Formations
| |||||||
---|---|---|---|---|---|---|---|
???? |
| ||||||
???? |
|
Battle
The Prison Cage will use its Absorb ability to drain HP from whichever character it has imprisoned, both curing itself and hurting its prisoner. The player must keep the imprisoned character alive. During the second battle, Vivi will use Fire on Prison Cage at regular intervals.
During the first fight, both Zidane and Steiner will be in the party, giving the player the first opportunity to use Steiner's Sword Arts ability. Zidane will begin the first fight entering Trance.
AI script
First battle
Using global variable zidane
Using global variable steiner
Using global variable garnetendflag
Using global variable prisonendflag
Using global variable cagedgarnet
Using global variable prisoncage
Using global variable garnetdeadflag
Using global variable winflag
Function Main_Init
InitObject( Prison_Cage )
InitObject( Garnet)
AttachObject( Garnet, Prison_Cage, Node_Cage )
set SV_EnemyTeam[ATB] = SV_EnemyTeam[MAX_ATB]
set zidane = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 )
set zidane |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 )
set steiner = ( SV_PlayerTeam[MODEL_TYPE] ==$ 7 )
set steiner |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 8 )
set SV_PlayerTeam[ATB] =$ 0
Function Main_Loop
if ( endflag )
return
if ( #( SV_EnemyTeam & cagedgarnet ) == 0 )
return
if ( #( SV_EnemyTeam & prisoncage ) == 0 )
return
if ( cagedgarnet[HP] <= 10000 )
set garnetdeadflag = TRUE
set endflag = TRUE
if ( prisoncage[HP] <= 10000 )
set winflag = TRUE
set endflag = TRUE
Wait( 1 )
loop
Function Prison_Cage_Loop
if ( prisonendflag )
return
if ( !initflag )
set initflag = TRUE
set prisoncage = SV_FunctionEnemy
RunBattleCode( Enable ATB )
while ( GetBattleState != 4 )
Wait( 1 )
if ( dialogprogression == 0 )
set SV_PlayerTeam[ATB] = 0
elseif ( dialogprogression == 1 )
if ( GetAttacker == zidane )
set dialogprogression = 2
set SV_PlayerTeam[ATB] =$ 0
set SV_EnemyTeam[ATB] =$ 0
elseif ( dialogprogression == 2 )
if ( GetAttacker != zidane )
set dialogprogression = 3
set SV_PlayerTeam[ATB] =$ 0
set SV_EnemyTeam[ATB] =$ 0
elseif ( dialogprogression == 3 )
set SV_PlayerTeam[ATB] =$ 0
set SV_EnemyTeam[ATB] =$ 0
if ( !cameraattackdone )
if ( SV_FunctionEnemy[ATB] != SV_FunctionEnemy[MAX_ATB] )
set SV_FunctionEnemy[ATB] = SV_FunctionEnemy[MAX_ATB] - 1
BattleDialog( "Wh-What is that light!?" )
set dialogwait1++
if ( dialogwait1 > 45 )
set dialogprogression = 7
elseif ( dialogprogression == 7 )
set SV_PlayerTeam[ATB] = 0
set SV_EnemyTeam[ATB] = 0
BattleDialog( "I don’t know. Somehow, it raises my power." )
set dialogwait2++
if ( dialogwait2 > 45 )
set dialogprogression = 4
elseif ( dialogprogression == 4 )
set SV_PlayerTeam[ATB] = 0
set SV_EnemyTeam[ATB] = 0
BattleDialog( "Could it really be Trance...!?" )
set dialogwait3++
if ( dialogwait3 > 30 )
set dialogprogression = 5
elseif ( dialogprogression == 5 )
set SV_PlayerTeam[ATB] = 0
set SV_EnemyTeam[ATB] = 0
BattleDialog( "I’ve heard of it before!" )
set dialogwait4++
if ( dialogwait4 > 30 )
set dialogprogression = 6
elseif ( dialogprogression == 6 )
set SV_PlayerTeam[ATB] = 0
set SV_EnemyTeam[ATB] = 0
BattleDialog( "Trance is induced by a surge of emotion." )
set dialogwait5++
if ( dialogwait5 > 45 )
set dialogprogression = 8
elseif ( dialogprogression == 8 )
set SV_PlayerTeam[ATB] = 0
set SV_EnemyTeam[ATB] = 0
BattleDialog( "Alright, let’s take him!" )
set dialogprogression = 10
elseif ( dialogprogression == 10 )
set SV_PlayerTeam[ATB] =$ 0
set SV_EnemyTeam[ATB] =$ 0
set dialogwait6++
if ( dialogwait6 > 30 )
set dialogprogression = 9
if ( ( !prisonendflag ) && winflag )
set prisonendflag = 1
while ( IsAttacking != 0 )
Wait( 1 )
if ( GetBattleState != 4 )
RunBattleCode( Disable ATB )
while ( GetBattleState != 1 )
Wait( 1 )
set SV_Target = SV_FunctionEnemy
AttackSpecial( Use in event )
while ( IsAttacking != 0 )
Wait( 1 )
AttackSpecial( Event of death )
Wait( 30 )
set SV_FunctionEnemy[SHADOW] = 0
while ( IsAttacking != 0 )
Wait( 1 )
RunBattleCode( End Battle, Victory )
if ( #( SV_EnemyTeam & cagedgarnet ) && ( cagedgarnet[HP] >= 10070 ) )
set zidanehealwarning = FALSE
set steinerhealwarning = FALSE
Wait( 1 )
loop
Function Prison_Cage_ATB
if ( !dialogprogression )
set dialogprogression = 1
set SV_Target = zidane
Attack( Transfer )
if ( !cameraattackdone )
set cameraattackdone = TRUE
set SV_Target = zidane
Attack( For camera use )
if ( garnetendflag
Second battle
Using global variable zidane
Using global variable steiner
Using global variable viviendflag
Using global variable prisonendflag
Using global variable prisoncage
Using global variable cagedvivi
Using global variable vivideadflag
Using global variable winflag
Function Main_Init
InitObject( Prison_Cage )
InitObject( Vivi )
AttachObject( ViVi, Prison_Cage, Node_Cage )
set zidane = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 )
set zidane |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 )
set steiner = ( SV_PlayerTeam[MODEL_TYPE] ==$ 7 )
set steiner |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 8 )
Function Main_Loop
if ( endflag )
return
if ( #( SV_EnemyTeam & cagedvivi ) == 0 )
return
if ( #( SV_EnemyTeam & prisoncage ) == 0 )
return
if ( cagedvivi[HP] <= 10000 )
set endflag = TRUE
set vivideadflag = TRUE
elseif ( prisoncage[HP] <= 10000 )
set endflag = TRUE
set winflag = TRUE
Wait( 1 )
loop
Function Prison_Cage_Loop
if ( !initflag )
set initflag = TRUE
set prisoncage = SV_FunctionEnemy
set SV_FunctionEnemy[ATB] = 0
set SV_FunctionEnemy[DEFEATED_ON] = 1
RunBattleCode( Enable ATB )
while ( GetBattleState != 4 )
Wait( 1 )
if ( !prisonendflag && winflag )
set prisonendflag = TRUE
while ( IsAttacking != 0 )
Wait( 1 )
RunBattleCode( Disable ATB )
while ( GetBattleState != 1 )
Wait( 1 )
set SV_Target = SV_FunctionEnemy
AttackSpecial( Death )
while ( IsAttacking != 0 )
Wait( 1 )
RunBattleCode( End Battle, Victory )
Wait( 1 )
loop
Function Prison_Cage_ATB
if ( attacktracker == 0 )
set attacktracker = 1
set SV_Target = cagedvivi
Attack( Absorb )
elseif ( attacktracker == 1 )
set attacktracker = 2
set SV_Target = steiner
Attack( Right Stem )
else
set attacktracker = 0
set SV_Target = zidane
Attack( Left Stem )
Other appearances
Final Fantasy Record Keeper

Gallery
Trivia
- The Heartless boss in Kingdom Hearts, Parasite Cage, resembles Prison Cage, and plays a similar function, capturing Pinocchio within its mouth.