#ifndef _SCRIPTLOADER
#define _SCRIPTLOADER

class CEntity;
class CStateManager;
class CInputStream;
class CEntityInfo;
class CTransform4f;
class CVector3f;

typedef CEntity* (*FScriptLoader)(CStateManager& mgr, CInputStream& in, int propCount,
                                  const CEntityInfo& info);

class ScriptLoader {
public:
  static CEntity* LoadActor(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadEnemy(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadWaypoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDoor(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadTrigger(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadTimer(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCounter(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadEffect(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPlatform(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSound(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadGenerator(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDock(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCamera(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraWaypoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadNewIntroBoss(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpawnPoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraHint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPickup(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadJumpPoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMemoryRelay(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRandomRelay(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRelay(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadBeetle(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadHUDMemo(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraFilterKeyframe(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraBlurKeyframe(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDamageableTrigger(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDebris(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraShaker(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadActorKeyframe(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadWater(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadWarWasp(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMapStation(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpacePirate(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFlyingPirate(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadElitePirate(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMetroidBeta(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadChozoGhost(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCoverPoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpiderBallWaypoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadBloodFlower(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFlickerBat(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPathCamera(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadGrapplePoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPuddleSpore(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDebugCameraWaypoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpiderBallAttractionSurface(CStateManager&, CInputStream&, int,
                                                  const CEntityInfo&);
  static CEntity* LoadPuddleToadGamma(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDistanceFog(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFireFlea(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMetaree(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDockAreaChange(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadActorRotate(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpecialFunction(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpankWeed(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadParasite(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPlayerHint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRipper(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPickupGenerator(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadAIKeyframe(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPointOfInterest(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDrone(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMetroid(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadDebrisExtended(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSteam(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRipple(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadBallTrigger(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadTargetingPoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadEMPulse(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadIceSheegoth(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPlayerActor(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFlaahgra(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadAreaAttributes(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFishCloud(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFishCloudModifier(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadVisorFlare(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadWorldTeleporter(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadVisorGoo(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadJellyZap(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadControllerAction(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSwitch(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPlayerStateChange(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadThardus(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSaveStation(CStateManager&, CInputStream&, int, const CEntityInfo&);
  
  static CEntity* LoadWallCrawlerSwarm(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadAiJumpPoint(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFlaahgraTentacle(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRoomAcoustics(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadColorModulate(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadThardusRockProjectile(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMidi(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadStreamedAudio(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRepulsor(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadGunTurret(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadFogVolume(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadBabygoth(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadEyeball(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRadialDamage(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraPitchVolume(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadEnvFxDensityController(CStateManager&, CInputStream&, int,
                                             const CEntityInfo&);
  static CEntity* LoadMagdolite(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadTeamAIMgr(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSnakeWeedSwarm(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadActorContraption(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadOculus(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadGeemer(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSpindleCamera(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadAtomicAlpha(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadCameraHintTrigger(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRumbleEffect(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadAmbientAI(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadAtomicBeta(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadIceZoomer(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPuffer(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadTryclops(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadRidley(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadSeedling(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadThermalHeatFader(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadBurrower(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadBeam(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadWorldLightFader(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMetroidPrimeEssence(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMetroidPrimeStage1(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadMazeNode(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadOmegaPirate(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPhazonPool(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadPhazonHealingNodule(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadNewCameraShaker(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadShadowProjector(CStateManager&, CInputStream&, int, const CEntityInfo&);
  static CEntity* LoadEnergyBall(CStateManager&, CInputStream&, int, const CEntityInfo&);
};

#endif // _SCRIPTLOADER
