#include "global.h"
#include "entity.h"
#include "npc.h"

//clang-format off
void (*const gNPCFunctions[][3])(Entity* ent) = {
    /*0x00*/ { DeleteEntity, NULL, NULL },
    /*0x01*/ { Gentari, NULL, Gentari_Fusion },
    /*0x02*/ { Festari, NULL, Festari_Fusion },
    /*0x03*/ { ForestMinish, ForestMinish_Head, ForestMinish_Fusion },
    /*0x04*/ { Postman, NULL, Postman_Fusion },
    /*0x05*/ { NPC5, NULL, NULL },
    /*0x06*/ { Townsperson, Townsperson_Head, Townsperson_Fusion },
    /*0x07*/ { Kid, Kid_Head, Kid_Fusion },
    /*0x08*/ { Guard, Guard_Head, NULL },
    /*0x09*/ { NPC9, NULL, NULL },
    /*0x0a*/ { Stamp, NULL, NULL },
    /*0x0b*/ { Maid, Maid_Head, NULL },
    /*0x0c*/ { Marcy, NULL, NULL },
    /*0x0d*/ { Wheaton, NULL, NULL },
    /*0x0e*/ { Pita, NULL, NULL },
    /*0x0f*/ { MinishEzlo, MinishEzlo_Head, NULL },
    /*0x10*/ { Mailbox, NULL, NULL },
    /*0x11*/ { Beedle, Beedle_Head, NULL },
    /*0x12*/ { Brocco, NULL, Brocco_Fusion },
    /*0x13*/ { SittingPerson, SittingPerson_Head, SittingPerson_Fusion },
    /*0x14*/ { Pina, NULL, Pina_Fusion },
    /*0x15*/ { Guard, Guard_Head, NULL },
    /*0x16*/ { Maid, Maid_Head, NULL },
    /*0x17*/ { Din, NULL, Din_Fusion },
    /*0x18*/ { Nayru, NULL, Nayru_Fusion },
    /*0x19*/ { Farore, NULL, Farore_Fusion },
    /*0x1a*/ { Sturgeon, Sturgeon_Head, Sturgeon_Fusion },
    /*0x1b*/ { TingleSiblings, NULL, TingleSiblings_Fusion },
    /*0x1c*/ { Stockwell, NULL, NULL },
    /*0x1d*/ { Talon, Talon_Head, Talon_Fusion },
    /*0x1e*/ { Malon, NULL, Malon_Fusion },
    /*0x1f*/ { Epona, NULL, Epona_Fusion },
    /*0x20*/ { MilkCart, NULL, NULL },
    /*0x21*/ { GhostBrothers, NULL, GhostBrothers_Fusion },
    /*0x22*/ { Smith, Smith_Head, Smith_Fusion },
    /*0x23*/ { NPC23, NULL, NULL },
    /*0x24*/ { KingDaltus, NULL, KingDaltus_Fusion },
    /*0x25*/ { MinisterPotho, NULL, MinisterPotho_Fusion },
    /*0x26*/ { NPC26, NULL, NULL },
    /*0x27*/ { Vaati, NULL, NULL },
    /*0x28*/ { Zelda, NULL, NULL },
    /*0x29*/ { Mutoh, Mutoh_Head, Mutoh_Fusion },
    /*0x2a*/ { Carpenter, Carpenter_Head, Carpenter_Fusion },
    /*0x2b*/ { CastorWildsStatue, NULL, CastorWildsStatue_Fusion },
    /*0x2c*/ { Cat, NULL, Cat_Fusion },
    /*0x2d*/ { MountainMinish, MountainMinish_Head, MountainMinish_Fusion },
    /*0x2e*/ { ZeldaFollower, NULL, NULL },
    /*0x2f*/ { Melari, Melari_Head, Melari_Fusion },
    /*0x30*/ { BladeBrothers, NULL, BladeBrothers_Fusion },
    /*0x31*/ { Cow, NULL, Cow_Fusion },
    /*0x32*/ { Goron, NULL, Goron_Fusion },
    /*0x33*/ { GoronMerchant, NULL, NULL },
    /*0x34*/ { Gorman, Gorman_Head, NULL },
    /*0x35*/ { Dog, Dog_Head, Dog_Fusion },
    /*0x36*/ { Syrup, Syrup_Head, NULL },
    /*0x37*/ { Rem, NULL, NULL },
    /*0x38*/ { TownMinish, TownMinish_Head, TownMinish_Fusion },
    /*0x39*/ { Librari, NULL, Librari_Fusion },
    /*0x3a*/ { Percy, Percy_Head, Percy_Fusion },
    /*0x3b*/ { VaatiReborn, NULL, NULL },
    /*0x3c*/ { MoblinLady, NULL, NULL },
    /*0x3d*/ { Librarians, NULL, NULL },
    /*0x3e*/ { Farmers, Farmers_Head, Farmers_Fusion },
    /*0x3f*/ { Carlov, NULL, NULL },
    /*0x40*/ { Dampe, NULL, Dampe_Fusion },
    /*0x41*/ { DrLeft, NULL, NULL },
    /*0x42*/ { KingGustaf, NULL, NULL },
    /*0x43*/ { Gina, NULL, Gina_Fusion },
    /*0x44*/ { Simon, NULL, NULL },
    /*0x45*/ { Anju, NULL, Anju_Fusion },
    /*0x46*/ { Mama, Mama_Head, Mama_Fusion },
    /*0x47*/ { Emma, NULL, NULL },
    /*0x48*/ { Teachers, Teachers_Head, Teachers_Fusion },
    /*0x49*/ { WindTribespeople, WindTribespeople_Head, WindTribespeople_Fusion },
    /*0x4a*/ { Gregal, NULL, Gregal_Fusion },
    /*0x4b*/ { MayorHagen, NULL, MayorHagen_Fusion },
    /*0x4c*/ { BigGoron, NULL, NULL },
    /*0x4d*/ { EzloCap, NULL, NULL },
    /*0x4e*/ { NPC4E, NULL, NPC4E_Fusion },
    /*0x4f*/ { NPC4F, NULL, NULL },
    /*0x50*/ { ClothesRack, NULL, NULL },
    /*0x51*/ { PicolyteBottle, NULL, NULL },
    /*0x52*/ { SmallTownMinish, NULL, NULL },
    /*0x53*/ { HurdyGurdyMan, HurdyGurdyMan_Head, HurdyGurdyMan_Fusion },
    /*0x54*/ { Cucco, NULL, Cucco_Fusion },
    /*0x55*/ { CuccoChick, NULL, CuccoChick_Fusion },
    /*0x56*/ { FusionMenuNPC, FusionMenuNPC_Head, NULL },
    /*0x57*/ { Phonograph, NULL, NULL },
    /*0x58*/ { NPC58, NPC58_Head, NULL },
    /*0x59*/ { DeleteEntity, NULL, NULL },
    /*0x5a*/ { DeleteEntity, NULL, NULL },
    /*0x5b*/ { DeleteEntity, NULL, NULL },
    /*0x5c*/ { DeleteEntity, NULL, NULL },
    /*0x5d*/ { DeleteEntity, NULL, NULL },
    /*0x5e*/ { DeleteEntity, NULL, NULL },
    /*0x5f*/ { DeleteEntity, NULL, NULL },
    /*0x60*/ { DeleteEntity, NULL, NULL },
    /*0x61*/ { DeleteEntity, NULL, NULL },
    /*0x62*/ { DeleteEntity, NULL, NULL },
    /*0x63*/ { DeleteEntity, NULL, NULL },
    /*0x64*/ { DeleteEntity, NULL, NULL },
    /*0x65*/ { DeleteEntity, NULL, NULL },
    /*0x66*/ { DeleteEntity, NULL, NULL },
    /*0x67*/ { DeleteEntity, NULL, NULL },
    /*0x68*/ { DeleteEntity, NULL, NULL },
    /*0x69*/ { DeleteEntity, NULL, NULL },
    /*0x6a*/ { DeleteEntity, NULL, NULL },
    /*0x6b*/ { DeleteEntity, NULL, NULL },
    /*0x6c*/ { DeleteEntity, NULL, NULL },
    /*0x6d*/ { DeleteEntity, NULL, NULL },
    /*0x6e*/ { DeleteEntity, NULL, NULL },
    /*0x6f*/ { DeleteEntity, NULL, NULL },
    /*0x70*/ { DeleteEntity, NULL, NULL },
    /*0x71*/ { DeleteEntity, NULL, NULL },
    /*0x72*/ { DeleteEntity, NULL, NULL },
    /*0x73*/ { DeleteEntity, NULL, NULL },
    /*0x74*/ { DeleteEntity, NULL, NULL },
    /*0x75*/ { DeleteEntity, NULL, NULL },
    /*0x76*/ { DeleteEntity, NULL, NULL },
    /*0x77*/ { DeleteEntity, NULL, NULL },
    /*0x78*/ { DeleteEntity, NULL, NULL },
    /*0x79*/ { DeleteEntity, NULL, NULL },
    /*0x7a*/ { DeleteEntity, NULL, NULL },
    /*0x7b*/ { DeleteEntity, NULL, NULL },
    /*0x7c*/ { DeleteEntity, NULL, NULL },
    /*0x7d*/ { DeleteEntity, NULL, NULL },
    /*0x7e*/ { DeleteEntity, NULL, NULL },
    /*0x7f*/ { DeleteEntity, NULL, NULL }
};
//clang-format on
const u8 npc_unk[] = { 0x04, 0x05, 0x06, 0x06 };
