Final Fantasy Wiki
Advertisement

Shell Dragon is a boss from Final Fantasy IX. It is fought in Pandemonium during an event where Zidane fights several enemies alone, with party members joining in the fight during them. Afterward, it appears as a random encounter.

Stats[]

Boss

Enemy

Battle[]

In the initial fixed encounter, Zidane begins the fight by himself. The Shell Dragon can use powerful physical attacks, as well as Earth Shake, a strong Earth move that hits the entire party. Its Smash attack takes a party member's HP down to 1. When Zidane is forced into critical HP, by Smash or some other attack, Dagger joins the party to heal him to full health. She stays in the party for the remainder of the fight.

Shell Dragon will also appear as a random encounter throughout the remainder of Pandemonium. As a random encounter, it gains a new ability in Snort, which removes a random character from battle.

Strategy[]

It is easy to win the first battle with only the Bahamut or Shiva summon and Zidane's physical attacks.

Float nullifies damage from the Shell Dragon's Earth Shake. Quina can learn Earth Shake by eating a Shell Dragon as well.

AI script[]

Random encounter[]

Function Shell_Dragon_Init
   set attacklist = [ Smash ; Earth Shake ; Charge ]


Function Shell_Dragon_Loop
   set playerteamcount = #SV_PlayerTeam
   if ( !battlestate )
      set battlestate++
      set lastplayerteamcount = #SV_PlayerTeam
   if ( lastplayerteamcount != playerteamcount )
      set situationchanged++
   else
      set situationchanged = 0
   set lastplayerteamcount = playerteamcount
   set validplayerteamcount = #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP)
   if ( !validplayerteamcount && situationchanged && ( battlestate != 255 ) )
      set battlestate = 255
      while ( IsAttacking != 0 )
         Wait( 1 )
      RunBattleCode( Disable ATB )
      while ( GetBattleState != 1 )
         Wait( 1 )
      BattleDialog( "Annihilated..." )
      RunBattleCode( Game Over )
   Wait( 1 )
   loop


Function Shell_Dragon_ATB
   set selectedattack = RandomAttack( attacklist )
   if ( selectedattack == Smash )
      set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | JUMP) & ~( SV_PlayerTeam[HP] ==$ 1 ) )
   elseif ( selectedattack == Earth Shake )
      set SV_Target = SV_PlayerTeam
   elseif ( selectedattack == Charge )
      set SV_Target = SV_PlayerTeam
   Attack( selectedattack )


Function Shell_Dragon_Counter
   if ( ( GetAttackCommandId == Skill ) && ( GetAttackId == What's That?! ) )
      return
   if ( !( GetRandom % 4 ) )
      if ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP) <= 1 )
         return
      set SV_Target = Matching(SV_PlayerTeam[STATUS_CURRENT], DOOM | GRADUAL_PETRIFY | POISON | VENOM)
      set SV_Target |= ( Matching(SV_PlayerTeam[STATUS_CURRENT], REGEN) | Matching(SV_PlayerTeam[STATUS_AUTO], REGEN) ) & Matching(SV_PlayerTeam[STATUS_CURRENT], ZOMBIE)
      if ( #SV_Target )
         return
      set SV_Target = GetAttacker
      Attack( Snort )


Boss battle[]

Using global variable zidane
Using global variable dagger
Using global variable daggeravailable
Using global variable calldagger
Using global variable dodaggermagic
Using global variable daggermagicdone
Using global variable docamerause
Using global variable camerausedone
Using global variable calldaggerstep

Function Main_Init
   InitObject( Shell Dragon )
   set zidane = ( SV_PlayerTeam[MODEL_TYPE] == 0 )
   set zidane |= ( SV_PlayerTeam[MODEL_TYPE] == 1 )
   set dagger = ( SV_PlayerTeam[MODEL_TYPE] == 3 )
   set dagger |= ( SV_PlayerTeam[MODEL_TYPE] == 4 )
   set dagger |= ( SV_PlayerTeam[MODEL_TYPE] == 5 )
   set dagger |= ( SV_PlayerTeam[MODEL_TYPE] == 6 )
   if ( #dagger )
      set daggeravailable = TRUE
      set dagger[MODEL_OFF] = 65535L
      set dagger[SHADOW] = 0
      set dagger[PRESENCE_OFF] = 1
   Wait( 1 )
   RunBattleCode( Enable ATB )


Function Main_Loop
   if ( calldagger && !daggershownup )
      set daggershownup = TRUE
      while ( IsAttacking != 0 )
         Wait( 1 )
      RunBattleCode( Disable ATB )
      while ( GetBattleState != 1 )
         Wait( 1 )
      set calldaggerstep = 255
      set dodaggermagic = TRUE
      while ( !daggermagicdone )
         Wait( 1 )
      set dagger[PRESENCE_ON] = 1
      set docamerause = TRUE
      while ( !camerausedone )
         Wait( 1 )
      Wait( 5 )
      set dagger[MODEL_ON] = 65535L
      set dagger[SHADOW] = 1
      Wait( 40 )
      RunBattleCode( Run Camera, 9 )
      BattleDialog( "Dagger!" )
      Wait( 45 )
      if ( #( SV_PlayerTeam & dagger ) )
         if ( !( #Matching(dagger[STATUS_AUTO], FLOAT) ) )
            RunBattleCode( Run Camera, 10 )
         else
            RunBattleCode( Run Camera, 11 )
      BattleDialog( "Is this how you want to solve the problem?" )
      Wait( 60 )
      RunBattleCode( Enable ATB )
      while ( GetBattleState != 4 )
         Wait( 1 )
   Wait( 1 )
   loop


Function Shell_Dragon_Init
   set attacklist = [ Smash ; Earth Shake ; Charge ]


Function Shell_Dragon_Loop
   if ( calldaggerstep == 255 )
      if ( !adjustedhp )
         set adjustedhp = TRUE
         set SV_FunctionEnemy[HP] = SV_FunctionEnemy[MAX_HP] - 10000
         set SV_FunctionEnemy[MAX_HP] = SV_FunctionEnemy[MAX_HP] - 10000
   elseif ( daggeravailable && #zidane )
      set SV_FunctionEnemy[HP] = SV_FunctionEnemy[MAX_HP]
   if ( #( SV_PlayerTeam & zidane ) )
      if ( #Matching(zidane[STATUS_CURRENT], LOW_HP) && daggeravailable && !daggershownup )
         set daggershownup = TRUE
         set calldagger = TRUE
   if ( dodaggermagic )
      set dodaggermagic = FALSE
      set SV_Target = zidane
      AttackSpecial( Dagger’s magic )
      if ( #( SV_PlayerTeam & zidane ) )
         set zidane[HP] = zidane[MAX_HP]
      while ( IsAttacking != 0 )
         Wait( 1 )
      set daggermagicdone = TRUE
   if ( docamerause )
      set docamerause = FALSE
      set SV_Target = dagger
      AttackSpecial( Camera use )
      set camerausedone = TRUE
   Wait( 1 )
   loop


Function Shell_Dragon_ATB
   if ( #( SV_PlayerTeam & zidane ) )
      if ( calldaggerstep != 255 )
         set calldaggerstep++
      if ( calldaggerstep == 10 )
         if ( daggeravailable && !daggershownup )
            set daggershownup = TRUE
            set calldagger = TRUE
            set SV_Target = SV_FunctionEnemy
            Attack( No action )
   set selectedattack = RandomAttack( attacklist )
   if ( selectedattack == Smash )
         set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | JUMP) & ~( SV_PlayerTeam[HP] == 1 ) )
   elseif ( selectedattack == Earth Shake )
      set SV_Target = SV_PlayerTeam
   elseif ( selectedattack == Charge )
      set SV_Target = SV_PlayerTeam
   if ( calldaggerstep == 5 )
      set SV_Target = zidane
      Attack( Smash )
   if ( ( selectedattack == Smash ) && ( calldaggerstep < 3 ) )
      set SV_Target = SV_PlayerTeam
      Attack( Charge )
   Attack( selectedattack )


Other appearances[]

Final Fantasy Record Keeper[]

FFRK Shell Dragon FFIX
Baknamy FFTA2This section about an enemy in Final Fantasy Record Keeper is empty or needs to be expanded. You can help the Final Fantasy Wiki by expanding it.


Gallery[]

Etymology[]

A dragon is a legendary creature, typically with serpentine or reptilian traits, which is featured in the myths of many cultures.

Advertisement