FANDOM


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 later.

StatsEdit

Boss

Enemy

Battle Edit

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.

Strategy Edit

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

When Shell Dragon is fought as a random encounter it will also use Snort to remove a random character from battle as part of its attack list. It does not use this ability in the initial fixed encounter.

AI Script Edit

Random Encounter Edit

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 Edit

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 Edit

Final Fantasy Record Keeper Edit

FFRK Shell Dragon 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.


Etymology Edit

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