FANDOM


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.

StatsEdit

#12

#14

Formations Edit

Enemies Frequency AP
????
Can't escape.
Prison Cage (#014), Vivi 100% 3
????
Can't escape. Characters do not pose on victory.
Prison Cage (#012), Garnet 100% 3

Battle Edit

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 Edit

First Battle Edit

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 Edit

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 Edit

Final Fantasy Record Keeper Edit

FFRK Prison Cage FFIX
Baknamy FFTA2This article or section is a stub about an enemy in Final Fantasy Record Keeper. You can help the Final Fantasy Wiki by expanding it.

Gallery Edit

Trivia Edit

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

Related enemies Edit