Final Fantasy Wiki
Register
Advertisement

Necron is the final boss of Final Fantasy IX, fought at the Hill of Despair. After the party has been weakened by Trance Kuja's Ultima spell, the four party members selected to fight Necron are recharged by the other comrades. The player does not have to use Zidane for the final battle.

Stats[]

Battle[]

FFIX Grand Cross

Grand Cross.

Necron is not as powerful as Ozma, but should not be underestimated. Necron has a plethora of magic spells, including Firaga, Blizzaga, and Thundaga, which can hit for 1,000+ damage on all the characters. Necron can also cast Holy and Flare, which hit one character for around 3,000 damage. Necron can perform up to four actions per turn, putting the party at a disadvantage. When it casts Grand Cross, Neutron Ring will always be used on the next turn.

Necron will buff itself with Protect and Shell and uses Curaga when its HP drops. Like most final bosses, Necron has an attack to bring one character to 1 HP: Blue Shockwave. Necron's Neutron Ring deals 4,000+ damage to all characters. Its most devastating attack, Grand Cross, functions similarly to Malboro's Bad Breath, only it inflicts most of the status ailments in the game, including Heat/Freeze, Zombie, and even Instant Death.

Strategy[]

Partys ailments after Grand Cross from FFIX Remastered

The party's ailments after Grand Cross.

Before fighting Necron, the player can check the party's equipment. It is recommended to equip the following immunity abilities to everyone: Clear Headed, Body Temp, Antibody, Locomotion, and Jelly. One can also equip some other supportive abilities, like HP+, Auto-Regen, and Auto-Haste, and possibly Auto-Life or Auto-Reflect.

It is advised to equip the Bird Killer and MP Attack abilities for those who are going to use normal attacks. The party can mimic Necron by casting Protect and Shell (or summon Carbuncle or use Mighty Guard) to guard against its Neutron Ring and elemental magic. Freya's Dragon's Crest, Vivi's Flare, Zidane's Thievery and/or Dyne, and Steiner's Shock are good damage dealers. Amarant's Aura can be used to bestow Regen and Auto-Life. If multiple party members are brought to Near Death, Steiner can use Charge. If Steiner is brought to 1 HP, he could also use Minus Strike, though it might still not rival his Climhazzard and Shock.

Necron with Shell from FFIX Remastered

Necron with Shell.

Quina's powered up Frog Drop is an easy way to deal damage and Quina can also cast Auto-Life and remove all of the party's status ailments with Angel's Snack, as well as buff the party with Mighty Guard and lower Necron's defenses with LV3 Def-less. If the party has any Elixirs, this is the time to use them. Necron itself carries four Elixirs, so Zidane can steal them if the party runs out. Freya can avoid the Neutron Ring, Blue Shockwave, and Grand Cross attacks with the Jump command, especially if she has also achieved Trance.

Eiko can use Dispel to rid Necron of its buffs, though they do not matter if the party is using their fixed damage abilities or Steiner's Darkside. If the party has Auto-Reflect, Vivi should equip Reflect x2.

AI script[]

Using general variable Boss_SpecialAnimationFlag

Using global variable necron


Function Necron_Init
   set Boss_SpecialAnimationFlag = FALSE
   set attackcounter = 2


Function Necron_Loop
   if ( !initflag )
      set initflag = TRUE
      set necron = SV_FunctionEnemy
      set SV_PlayerTeam[MODEL_OFF] =$ 255
      while ( GetBattleState != 1 )
         Wait( 1 )
      set SV_Target = SV_PlayerTeam
      AttackSpecial( Appearance )
      while ( IsAttacking != 0 )
         Wait( 1 )
      RunBattleCode( Enable ATB )
      while ( GetBattleState != 4 )
         Wait( 1 )
   if ( SV_FunctionEnemy[HP] <= 10000 )
      while ( IsAttacking != 0 )
         Wait( 1 )
      RunBattleCode( Disable ATB )
      while ( GetBattleState != 1 )
         Wait( 1 )
      set SV_Target = SV_FunctionEnemy
      if ( SV_FunctionEnemy[STAND_ANIMATION] == 1 )
         AttackSpecial( Death2 )
         while ( IsAttacking != 0 )
            Wait( 1 )
      set SV_Target = NotMatching(SV_PlayerTeam[STATUS_CURRENT], JUMP)
      AttackSpecial( Death3 )
      while ( IsAttacking != 0 )
         Wait( 1 )
      Wait( 1 )
      set SV_Target = SV_FunctionEnemy
      AttackSpecial( Death1 )
      while ( !Boss_SpecialAnimationFlag )
         Wait( 1 )
      RunBattleCode( Emphasize Music, 1 )
      set Boss_SpecialAnimationFlag = FALSE
      Wait( 1 )
      while ( !Boss_SpecialAnimationFlag )
         Wait( 1 )
      FadeFilter( FILTER_ADD, 1, BLACK )
      while ( IsAttacking != 0 )
         Wait( 1 )
      RunBattleCode( End Battle, INTERRUPTED )
   Wait( 1 )
   loop


Function Necron_ATB
   if ( SV_FunctionEnemy[STAND_ANIMATION] == 0 )
      if ( attackcounter >= 3 )
         set SV_Target = SV_PlayerTeam
         set attackcounter = 0
         Attack( Grand Cross )
      else
         set SV_Target = RandomInTeam(SV_PlayerTeam)
         set attackcounter++
         Attack( Blue Shockwave )
   set SV_Target = SV_PlayerTeam
   Attack( Neutron Ring )


Function Dummy_Loop
   if ( !initflag )
      set initflag = TRUE
      set dummyindex = SV_FunctionEnemy[ENEMY_ID]
      if ( dummyindex == 1 )
         set attacklist = [ Flare ; Holy ; Meteor ; Flare ; Holy ; Flare ; Holy ]
      elseif ( dummyindex == 2 )
         set attacklist = [ Firaga ; Blizzaga ; Thundaga ]
      elseif ( dummyindex == 3 )
         set attacklist = [ Curaga ; Shell ; Protect ]
   if ( dummyindex == 1 )
      if ( ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 4 ) && ( targetamount != 0 ) )
         set SV_FunctionEnemy[PREVENT_ATTACK] = 1
   elseif ( dummyindex == 2 )
      if ( ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 3 ) && ( targetamount != 0 ) )
         set SV_FunctionEnemy[PREVENT_ATTACK] = 1
   elseif ( dummyindex == 3 )
      if ( ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 2 ) && ( targetamount != 0 ) )
         set SV_FunctionEnemy[PREVENT_ATTACK] = 1


Function Dummy_ATB
   if ( dummyindex == 1 )
      if ( meteorrolledflag )
         set flareholybonustarget = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | REFLECT) & NotMatching(SV_PlayerTeam[STATUS_AUTO], REFLECT) )
      else
         set flareholybonustarget = 0
      set selectedattack = RandomAttack( attacklist )
      if ( selectedattack == Flare )
         set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | REFLECT) & NotMatching(SV_PlayerTeam[STATUS_AUTO], REFLECT) )
      elseif ( selectedattack == Holy )
         set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | REFLECT) & NotMatching(SV_PlayerTeam[STATUS_AUTO], REFLECT) )
      elseif ( selectedattack == Meteor )
         set SV_Target = SV_PlayerTeam
      elseif ( selectedattack == Flare )
         set SV_Target = flareholybonustarget
      elseif ( selectedattack == Holy )
         set SV_Target = flareholybonustarget
      elseif ( selectedattack == Flare )
         set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | REFLECT) & NotMatching(SV_PlayerTeam[STATUS_AUTO], REFLECT) )
      elseif ( selectedattack == Holy )
         set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | REFLECT) & NotMatching(SV_PlayerTeam[STATUS_AUTO], REFLECT) )
      if ( selectedattack == Meteor )
         set meteorrolledflag = TRUE
   elseif ( dummyindex == 2 )
      set selectedattack = RandomAttack( attacklist )
      if ( selectedattack == Firaga )
         set SV_Target = SV_PlayerTeam
      elseif ( selectedattack == Blizzaga )
         set SV_Target = SV_PlayerTeam
      elseif ( selectedattack == Thundaga )
         set SV_Target = SV_PlayerTeam
      set reflecttargetcheck = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | REFLECT) & NotMatching(SV_PlayerTeam[STATUS_AUTO], REFLECT) )
      if ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP) & reflecttargetcheck ) == 0 )
         set SV_Target = 0
   elseif ( dummyindex == 3 )
      if ( necron[HP] - 10000 < ( necron[MAX_HP] - 10000 ) / 2 )
         set curagatarget = necron
      else
         set curagatarget = 0
      set selectedattack = RandomAttack( attacklist )
      if ( selectedattack == Curaga )
         set SV_Target = curagatarget
      elseif ( selectedattack == Shell )
         set SV_Target = RandomInTeam( NotMatching(SV_EnemyTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | SHELL) )
      elseif ( selectedattack == Protect )
         set SV_Target = RandomInTeam( NotMatching(SV_EnemyTeam[STATUS_CURRENT], PETRIFY | DEATH | ZOMBIE | PROTECT) )
   if ( NotEnoughMP( selectedattack ) || ( SV_Target == 0 ) )
      set selectedattack = None
   if ( dummyindex == 1 )
      if ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 4 )
         set SV_Target = 0
         set selectedattack = None
   elseif ( dummyindex == 2 )
      if ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 3 )
         set SV_Target = 0
         set selectedattack = None
   elseif ( dummyindex == 3 )
      if ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 2 )
         set SV_Target = 0
         set selectedattack = None
   set targetamount = #SV_Target
   Attack( selectedattack )


Gallery[]

Advertisement