DNAMP1/ScriptObjects: Eliminate several runtime static constructors

All of these entries make use of captureless lambdas, so there's no need
to make use of std::function. We can just use a regular function
pointer, which allows making all of the file-static entries within
IScriptObject constexpr. Eliminating all of their runtime static
constructors.
This commit is contained in:
Lioncash 2020-02-24 03:20:37 -05:00
parent 1d9224f55c
commit e27ac1e2a1
2 changed files with 145 additions and 156 deletions

View File

@ -3,169 +3,158 @@
namespace DataSpec::DNAMP1 { namespace DataSpec::DNAMP1 {
namespace priv { namespace priv {
static const ScriptObjectSpec ActorEnt = {0x00, []() -> IScriptObject* { return new struct Actor(); }}; namespace {
static const ScriptObjectSpec WaypointEnt = {0x02, []() -> IScriptObject* { return new struct Waypoint(); }}; constexpr ScriptObjectSpec ActorEnt = {0x00, []() -> IScriptObject* { return new struct Actor(); }};
static const ScriptObjectSpec DoorAreaEnt = {0x03, []() -> IScriptObject* { return new struct DoorArea(); }}; constexpr ScriptObjectSpec WaypointEnt = {0x02, []() -> IScriptObject* { return new struct Waypoint(); }};
static const ScriptObjectSpec TriggerEnt = {0x04, []() -> IScriptObject* { return new struct Trigger(); }}; constexpr ScriptObjectSpec DoorAreaEnt = {0x03, []() -> IScriptObject* { return new struct DoorArea(); }};
static const ScriptObjectSpec TimerEnt = {0x05, []() -> IScriptObject* { return new struct Timer(); }}; constexpr ScriptObjectSpec TriggerEnt = {0x04, []() -> IScriptObject* { return new struct Trigger(); }};
static const ScriptObjectSpec CounterEnt = {0x06, []() -> IScriptObject* { return new struct Counter(); }}; constexpr ScriptObjectSpec TimerEnt = {0x05, []() -> IScriptObject* { return new struct Timer(); }};
static const ScriptObjectSpec EffectEnt = {0x07, []() -> IScriptObject* { return new struct Effect(); }}; constexpr ScriptObjectSpec CounterEnt = {0x06, []() -> IScriptObject* { return new struct Counter(); }};
static const ScriptObjectSpec PlatformEnt = {0x08, []() -> IScriptObject* { return new struct Platform(); }}; constexpr ScriptObjectSpec EffectEnt = {0x07, []() -> IScriptObject* { return new struct Effect(); }};
static const ScriptObjectSpec SoundEnt = {0x09, []() -> IScriptObject* { return new struct Sound(); }}; constexpr ScriptObjectSpec PlatformEnt = {0x08, []() -> IScriptObject* { return new struct Platform(); }};
static const ScriptObjectSpec GeneratorEnt = {0x0A, []() -> IScriptObject* { return new struct Generator(); }}; constexpr ScriptObjectSpec SoundEnt = {0x09, []() -> IScriptObject* { return new struct Sound(); }};
static const ScriptObjectSpec DockEnt = {0x0B, []() -> IScriptObject* { return new struct Dock(); }}; constexpr ScriptObjectSpec GeneratorEnt = {0x0A, []() -> IScriptObject* { return new struct Generator(); }};
static const ScriptObjectSpec CameraEnt = {0x0C, []() -> IScriptObject* { return new struct Camera(); }}; constexpr ScriptObjectSpec DockEnt = {0x0B, []() -> IScriptObject* { return new struct Dock(); }};
static const ScriptObjectSpec CameraWaypointEnt = {0x0D, constexpr ScriptObjectSpec CameraEnt = {0x0C, []() -> IScriptObject* { return new struct Camera(); }};
[]() -> IScriptObject* { return new struct CameraWaypoint(); }}; constexpr ScriptObjectSpec CameraWaypointEnt = {0x0D, []() -> IScriptObject* { return new struct CameraWaypoint(); }};
static const ScriptObjectSpec NewIntroBossEnt = {0x0E, []() -> IScriptObject* { return new struct NewIntroBoss(); }}; constexpr ScriptObjectSpec NewIntroBossEnt = {0x0E, []() -> IScriptObject* { return new struct NewIntroBoss(); }};
static const ScriptObjectSpec SpawnPointEnt = {0x0F, []() -> IScriptObject* { return new struct SpawnPoint(); }}; constexpr ScriptObjectSpec SpawnPointEnt = {0x0F, []() -> IScriptObject* { return new struct SpawnPoint(); }};
static const ScriptObjectSpec CameraHintEnt = {0x10, []() -> IScriptObject* { return new struct CameraHint(); }}; constexpr ScriptObjectSpec CameraHintEnt = {0x10, []() -> IScriptObject* { return new struct CameraHint(); }};
static const ScriptObjectSpec PickupEnt = {0x11, []() -> IScriptObject* { return new struct Pickup(); }}; constexpr ScriptObjectSpec PickupEnt = {0x11, []() -> IScriptObject* { return new struct Pickup(); }};
static const ScriptObjectSpec MemoryRelayEnt = {0x13, []() -> IScriptObject* { return new struct MemoryRelay(); }}; constexpr ScriptObjectSpec MemoryRelayEnt = {0x13, []() -> IScriptObject* { return new struct MemoryRelay(); }};
static const ScriptObjectSpec RandomRelayEnt = {0x14, []() -> IScriptObject* { return new struct RandomRelay(); }}; constexpr ScriptObjectSpec RandomRelayEnt = {0x14, []() -> IScriptObject* { return new struct RandomRelay(); }};
static const ScriptObjectSpec RelayEnt = {0x15, []() -> IScriptObject* { return new struct Relay(); }}; constexpr ScriptObjectSpec RelayEnt = {0x15, []() -> IScriptObject* { return new struct Relay(); }};
static const ScriptObjectSpec BeetleEnt = {0x16, []() -> IScriptObject* { return new struct Beetle(); }}; constexpr ScriptObjectSpec BeetleEnt = {0x16, []() -> IScriptObject* { return new struct Beetle(); }};
static const ScriptObjectSpec HUDMemoEnt = {0x17, []() -> IScriptObject* { return new struct HUDMemo(); }}; constexpr ScriptObjectSpec HUDMemoEnt = {0x17, []() -> IScriptObject* { return new struct HUDMemo(); }};
static const ScriptObjectSpec CameraFilterKeyframeEnt = { constexpr ScriptObjectSpec CameraFilterKeyframeEnt = {
0x18, []() -> IScriptObject* { return new struct CameraFilterKeyframe(); }}; 0x18, []() -> IScriptObject* { return new struct CameraFilterKeyframe(); }};
static const ScriptObjectSpec CameraBlurKeyframeEnt = { constexpr ScriptObjectSpec CameraBlurKeyframeEnt = {0x19,
0x19, []() -> IScriptObject* { return new struct CameraBlurKeyframe(); }}; []() -> IScriptObject* { return new struct CameraBlurKeyframe(); }};
static const ScriptObjectSpec DamageableTriggerEnt = { constexpr ScriptObjectSpec DamageableTriggerEnt = {0x1A,
0x1A, []() -> IScriptObject* { return new struct DamageableTrigger(); }}; []() -> IScriptObject* { return new struct DamageableTrigger(); }};
static const ScriptObjectSpec DebrisEnt = {0x1B, []() -> IScriptObject* { return new struct Debris(); }}; constexpr ScriptObjectSpec DebrisEnt = {0x1B, []() -> IScriptObject* { return new struct Debris(); }};
static const ScriptObjectSpec CameraShakerEnt = {0x1C, []() -> IScriptObject* { return new struct CameraShaker(); }}; constexpr ScriptObjectSpec CameraShakerEnt = {0x1C, []() -> IScriptObject* { return new struct CameraShaker(); }};
static const ScriptObjectSpec ActorKeyframeEnt = {0x1D, []() -> IScriptObject* { return new struct ActorKeyframe(); }}; constexpr ScriptObjectSpec ActorKeyframeEnt = {0x1D, []() -> IScriptObject* { return new struct ActorKeyframe(); }};
static const ScriptObjectSpec WaterEnt = {0x20, []() -> IScriptObject* { return new struct Water(); }}; constexpr ScriptObjectSpec WaterEnt = {0x20, []() -> IScriptObject* { return new struct Water(); }};
static const ScriptObjectSpec WarwaspEnt = {0x21, []() -> IScriptObject* { return new struct Warwasp(); }}; constexpr ScriptObjectSpec WarwaspEnt = {0x21, []() -> IScriptObject* { return new struct Warwasp(); }};
static const ScriptObjectSpec SpacePirateEnt = {0x24, []() -> IScriptObject* { return new struct SpacePirate(); }}; constexpr ScriptObjectSpec SpacePirateEnt = {0x24, []() -> IScriptObject* { return new struct SpacePirate(); }};
static const ScriptObjectSpec FlyingPirateEnt = {0x25, []() -> IScriptObject* { return new struct FlyingPirate(); }}; constexpr ScriptObjectSpec FlyingPirateEnt = {0x25, []() -> IScriptObject* { return new struct FlyingPirate(); }};
static const ScriptObjectSpec ElitePirateEnt = {0x26, []() -> IScriptObject* { return new struct ElitePirate(); }}; constexpr ScriptObjectSpec ElitePirateEnt = {0x26, []() -> IScriptObject* { return new struct ElitePirate(); }};
static const ScriptObjectSpec MetroidBetaEnt = {0x27, []() -> IScriptObject* { return new struct MetroidBeta(); }}; constexpr ScriptObjectSpec MetroidBetaEnt = {0x27, []() -> IScriptObject* { return new struct MetroidBeta(); }};
static const ScriptObjectSpec ChozoGhostEnt = {0x28, []() -> IScriptObject* { return new struct ChozoGhost(); }}; constexpr ScriptObjectSpec ChozoGhostEnt = {0x28, []() -> IScriptObject* { return new struct ChozoGhost(); }};
static const ScriptObjectSpec CoverPointEnt = {0x2A, []() -> IScriptObject* { return new struct CoverPoint(); }}; constexpr ScriptObjectSpec CoverPointEnt = {0x2A, []() -> IScriptObject* { return new struct CoverPoint(); }};
static const ScriptObjectSpec SpiderBallWaypointEnt = { constexpr ScriptObjectSpec SpiderBallWaypointEnt = {0x2C,
0x2C, []() -> IScriptObject* { return new struct SpiderBallWaypoint(); }}; []() -> IScriptObject* { return new struct SpiderBallWaypoint(); }};
static const ScriptObjectSpec BloodFlowerEnt = {0x2D, []() -> IScriptObject* { return new struct BloodFlower(); }}; constexpr ScriptObjectSpec BloodFlowerEnt = {0x2D, []() -> IScriptObject* { return new struct BloodFlower(); }};
static const ScriptObjectSpec FlickerBatEnt = {0x2E, []() -> IScriptObject* { return new struct FlickerBat(); }}; constexpr ScriptObjectSpec FlickerBatEnt = {0x2E, []() -> IScriptObject* { return new struct FlickerBat(); }};
static const ScriptObjectSpec PathCameraEnt = {0x2F, []() -> IScriptObject* { return new struct PathCamera(); }}; constexpr ScriptObjectSpec PathCameraEnt = {0x2F, []() -> IScriptObject* { return new struct PathCamera(); }};
static const ScriptObjectSpec GrapplePointEnt = {0x30, []() -> IScriptObject* { return new struct GrapplePoint(); }}; constexpr ScriptObjectSpec GrapplePointEnt = {0x30, []() -> IScriptObject* { return new struct GrapplePoint(); }};
static const ScriptObjectSpec PuddleSporeEnt = {0x31, []() -> IScriptObject* { return new struct PuddleSpore(); }}; constexpr ScriptObjectSpec PuddleSporeEnt = {0x31, []() -> IScriptObject* { return new struct PuddleSpore(); }};
static const ScriptObjectSpec DebugCameraWaypointEnt = { constexpr ScriptObjectSpec DebugCameraWaypointEnt = {
0x32, []() -> IScriptObject* { return new struct DebugCameraWaypoint(); }}; 0x32, []() -> IScriptObject* { return new struct DebugCameraWaypoint(); }};
static const ScriptObjectSpec SpiderBallAttractionSurfaceEnt = { constexpr ScriptObjectSpec SpiderBallAttractionSurfaceEnt = {
0x33, []() -> IScriptObject* { return new struct SpiderBallAttractionSurface(); }}; 0x33, []() -> IScriptObject* { return new struct SpiderBallAttractionSurface(); }};
static const ScriptObjectSpec PuddleToadGammaEnt = {0x34, constexpr ScriptObjectSpec PuddleToadGammaEnt = {0x34, []() -> IScriptObject* { return new struct PuddleToadGamma(); }};
[]() -> IScriptObject* { return new struct PuddleToadGamma(); }}; constexpr ScriptObjectSpec DistanceFogEnt = {0x35, []() -> IScriptObject* { return new struct DistanceFog(); }};
static const ScriptObjectSpec DistanceFogEnt = {0x35, []() -> IScriptObject* { return new struct DistanceFog(); }}; constexpr ScriptObjectSpec FireFleaEnt = {0x36, []() -> IScriptObject* { return new struct FireFlea(); }};
static const ScriptObjectSpec FireFleaEnt = {0x36, []() -> IScriptObject* { return new struct FireFlea(); }}; constexpr ScriptObjectSpec MetareeAlphaEnt = {0x37, []() -> IScriptObject* { return new struct MetareeAlpha(); }};
static const ScriptObjectSpec MetareeAlphaEnt = {0x37, []() -> IScriptObject* { return new struct MetareeAlpha(); }}; constexpr ScriptObjectSpec DockAreaChangeEnt = {0x38, []() -> IScriptObject* { return new struct DockAreaChange(); }};
static const ScriptObjectSpec DockAreaChangeEnt = {0x38, constexpr ScriptObjectSpec ActorRotateEnt = {0x39, []() -> IScriptObject* { return new struct ActorRotate(); }};
[]() -> IScriptObject* { return new struct DockAreaChange(); }}; constexpr ScriptObjectSpec SpecialFunctionEnt = {0x3A, []() -> IScriptObject* { return new struct SpecialFunction(); }};
static const ScriptObjectSpec ActorRotateEnt = {0x39, []() -> IScriptObject* { return new struct ActorRotate(); }}; constexpr ScriptObjectSpec SpankWeedEnt = {0x3B, []() -> IScriptObject* { return new struct SpankWeed(); }};
static const ScriptObjectSpec SpecialFunctionEnt = {0x3A, constexpr ScriptObjectSpec ParasiteEnt = {0x3D, []() -> IScriptObject* { return new struct Parasite(); }};
[]() -> IScriptObject* { return new struct SpecialFunction(); }}; constexpr ScriptObjectSpec PlayerHintEnt = {0x3E, []() -> IScriptObject* { return new struct PlayerHint(); }};
static const ScriptObjectSpec SpankWeedEnt = {0x3B, []() -> IScriptObject* { return new struct SpankWeed(); }}; constexpr ScriptObjectSpec RipperEnt = {0x3F, []() -> IScriptObject* { return new struct Ripper(); }};
static const ScriptObjectSpec ParasiteEnt = {0x3D, []() -> IScriptObject* { return new struct Parasite(); }}; constexpr ScriptObjectSpec PickupGeneratorEnt = {0x40, []() -> IScriptObject* { return new struct PickupGenerator(); }};
static const ScriptObjectSpec PlayerHintEnt = {0x3E, []() -> IScriptObject* { return new struct PlayerHint(); }}; constexpr ScriptObjectSpec AIKeyframeEnt = {0x41, []() -> IScriptObject* { return new struct AIKeyframe(); }};
static const ScriptObjectSpec RipperEnt = {0x3F, []() -> IScriptObject* { return new struct Ripper(); }}; constexpr ScriptObjectSpec PointOfInterestEnt = {0x42, []() -> IScriptObject* { return new struct PointOfInterest(); }};
static const ScriptObjectSpec PickupGeneratorEnt = {0x40, constexpr ScriptObjectSpec DroneEnt = {0x43, []() -> IScriptObject* { return new struct Drone(); }};
[]() -> IScriptObject* { return new struct PickupGenerator(); }}; constexpr ScriptObjectSpec MetroidAlphaEnt = {0x44, []() -> IScriptObject* { return new struct MetroidAlpha(); }};
static const ScriptObjectSpec AIKeyframeEnt = {0x41, []() -> IScriptObject* { return new struct AIKeyframe(); }}; constexpr ScriptObjectSpec DebrisExtendedEnt = {0x45, []() -> IScriptObject* { return new struct DebrisExtended(); }};
static const ScriptObjectSpec PointOfInterestEnt = {0x42, constexpr ScriptObjectSpec SteamEnt = {0x46, []() -> IScriptObject* { return new struct Steam(); }};
[]() -> IScriptObject* { return new struct PointOfInterest(); }}; constexpr ScriptObjectSpec RippleEnt = {0x47, []() -> IScriptObject* { return new struct Ripple(); }};
static const ScriptObjectSpec DroneEnt = {0x43, []() -> IScriptObject* { return new struct Drone(); }}; constexpr ScriptObjectSpec BallTriggerEnt = {0x48, []() -> IScriptObject* { return new struct BallTrigger(); }};
static const ScriptObjectSpec MetroidAlphaEnt = {0x44, []() -> IScriptObject* { return new struct MetroidAlpha(); }}; constexpr ScriptObjectSpec TargetingPointEnt = {0x49, []() -> IScriptObject* { return new struct TargetingPoint(); }};
static const ScriptObjectSpec DebrisExtendedEnt = {0x45, constexpr ScriptObjectSpec ElectroMagneticPulseEnt = {
[]() -> IScriptObject* { return new struct DebrisExtended(); }};
static const ScriptObjectSpec SteamEnt = {0x46, []() -> IScriptObject* { return new struct Steam(); }};
static const ScriptObjectSpec RippleEnt = {0x47, []() -> IScriptObject* { return new struct Ripple(); }};
static const ScriptObjectSpec BallTriggerEnt = {0x48, []() -> IScriptObject* { return new struct BallTrigger(); }};
static const ScriptObjectSpec TargetingPointEnt = {0x49,
[]() -> IScriptObject* { return new struct TargetingPoint(); }};
static const ScriptObjectSpec ElectroMagneticPulseEnt = {
0x4A, []() -> IScriptObject* { return new struct ElectroMagneticPulse(); }}; 0x4A, []() -> IScriptObject* { return new struct ElectroMagneticPulse(); }};
static const ScriptObjectSpec IceSheegothEnt = {0x4B, []() -> IScriptObject* { return new struct IceSheegoth(); }}; constexpr ScriptObjectSpec IceSheegothEnt = {0x4B, []() -> IScriptObject* { return new struct IceSheegoth(); }};
static const ScriptObjectSpec PlayerActorEnt = {0x4C, []() -> IScriptObject* { return new struct PlayerActor(); }}; constexpr ScriptObjectSpec PlayerActorEnt = {0x4C, []() -> IScriptObject* { return new struct PlayerActor(); }};
static const ScriptObjectSpec FlaahgraEnt = {0x4D, []() -> IScriptObject* { return new struct Flaahgra(); }}; constexpr ScriptObjectSpec FlaahgraEnt = {0x4D, []() -> IScriptObject* { return new struct Flaahgra(); }};
static const ScriptObjectSpec AreaAttributesEnt = {0x4E, constexpr ScriptObjectSpec AreaAttributesEnt = {0x4E, []() -> IScriptObject* { return new struct AreaAttributes(); }};
[]() -> IScriptObject* { return new struct AreaAttributes(); }}; constexpr ScriptObjectSpec FishCloudEnt = {0x4F, []() -> IScriptObject* { return new struct FishCloud(); }};
static const ScriptObjectSpec FishCloudEnt = {0x4F, []() -> IScriptObject* { return new struct FishCloud(); }}; constexpr ScriptObjectSpec FishCloudModifierEnt = {0x50,
static const ScriptObjectSpec FishCloudModifierEnt = { []() -> IScriptObject* { return new struct FishCloudModifier(); }};
0x50, []() -> IScriptObject* { return new struct FishCloudModifier(); }}; constexpr ScriptObjectSpec VisorFlareEnt = {0x51, []() -> IScriptObject* { return new struct VisorFlare(); }};
static const ScriptObjectSpec VisorFlareEnt = {0x51, []() -> IScriptObject* { return new struct VisorFlare(); }}; constexpr ScriptObjectSpec WorldTeleporterx52Ent = {0x52,
static const ScriptObjectSpec WorldTeleporterx52Ent = {0x52, []() -> IScriptObject* { return new struct WorldTeleporter(); }};
[]() -> IScriptObject* { return new struct WorldTeleporter(); }}; constexpr ScriptObjectSpec VisorGooEnt = {0x53, []() -> IScriptObject* { return new struct VisorGoo(); }};
static const ScriptObjectSpec VisorGooEnt = {0x53, []() -> IScriptObject* { return new struct VisorGoo(); }}; constexpr ScriptObjectSpec JellyZapEnt = {0x54, []() -> IScriptObject* { return new struct JellyZap(); }};
static const ScriptObjectSpec JellyZapEnt = {0x54, []() -> IScriptObject* { return new struct JellyZap(); }}; constexpr ScriptObjectSpec ControllerActionEnt = {0x55,
static const ScriptObjectSpec ControllerActionEnt = {0x55, []() -> IScriptObject* { return new struct ControllerAction(); }};
[]() -> IScriptObject* { return new struct ControllerAction(); }}; constexpr ScriptObjectSpec SwitchEnt = {0x56, []() -> IScriptObject* { return new struct Switch(); }};
static const ScriptObjectSpec SwitchEnt = {0x56, []() -> IScriptObject* { return new struct Switch(); }}; constexpr ScriptObjectSpec PlayerStateChangeEnt = {0x57,
static const ScriptObjectSpec PlayerStateChangeEnt = { []() -> IScriptObject* { return new struct PlayerStateChange(); }};
0x57, []() -> IScriptObject* { return new struct PlayerStateChange(); }}; constexpr ScriptObjectSpec ThardusEnt = {0x58, []() -> IScriptObject* { return new struct Thardus(); }};
static const ScriptObjectSpec ThardusEnt = {0x58, []() -> IScriptObject* { return new struct Thardus(); }}; constexpr ScriptObjectSpec WallCrawlerSwarmEnt = {0x5A,
static const ScriptObjectSpec WallCrawlerSwarmEnt = {0x5A, []() -> IScriptObject* { return new struct WallCrawlerSwarm(); }};
[]() -> IScriptObject* { return new struct WallCrawlerSwarm(); }}; constexpr ScriptObjectSpec AIJumpPointEnt = {0x5B, []() -> IScriptObject* { return new struct AIJumpPoint(); }};
static const ScriptObjectSpec AIJumpPointEnt = {0x5B, []() -> IScriptObject* { return new struct AIJumpPoint(); }}; constexpr ScriptObjectSpec FlaahgraTentacleEnt = {0x5C,
static const ScriptObjectSpec FlaahgraTentacleEnt = {0x5C, []() -> IScriptObject* { return new struct FlaahgraTentacle(); }};
[]() -> IScriptObject* { return new struct FlaahgraTentacle(); }}; constexpr ScriptObjectSpec RoomAcousticsEnt = {0x5D, []() -> IScriptObject* { return new struct RoomAcoustics(); }};
static const ScriptObjectSpec RoomAcousticsEnt = {0x5D, []() -> IScriptObject* { return new struct RoomAcoustics(); }}; constexpr ScriptObjectSpec ColorModulateEnt = {0x5E, []() -> IScriptObject* { return new struct ColorModulate(); }};
static const ScriptObjectSpec ColorModulateEnt = {0x5E, []() -> IScriptObject* { return new struct ColorModulate(); }}; constexpr ScriptObjectSpec ThardusRockProjectileEnt = {
static const ScriptObjectSpec ThardusRockProjectileEnt = {
0x5F, []() -> IScriptObject* { return new struct ThardusRockProjectile(); }}; 0x5F, []() -> IScriptObject* { return new struct ThardusRockProjectile(); }};
static const ScriptObjectSpec MidiEnt = {0x60, []() -> IScriptObject* { return new struct Midi(); }}; constexpr ScriptObjectSpec MidiEnt = {0x60, []() -> IScriptObject* { return new struct Midi(); }};
static const ScriptObjectSpec StreamedAudioEnt = {0x61, []() -> IScriptObject* { return new struct StreamedAudio(); }}; constexpr ScriptObjectSpec StreamedAudioEnt = {0x61, []() -> IScriptObject* { return new struct StreamedAudio(); }};
static const ScriptObjectSpec WorldTeleporterx62Ent = { constexpr ScriptObjectSpec WorldTeleporterx62Ent = {
0x62, []() -> IScriptObject* { return new struct WorldTeleporter(); }}; // o.o, no this is not a trick 0x62, []() -> IScriptObject* { return new struct WorldTeleporter(); }}; // o.o, no this is not a trick
static const ScriptObjectSpec RepulsorEnt = {0x63, []() -> IScriptObject* { return new struct Repulsor(); }}; constexpr ScriptObjectSpec RepulsorEnt = {0x63, []() -> IScriptObject* { return new struct Repulsor(); }};
static const ScriptObjectSpec GunTurretEnt = {0x64, []() -> IScriptObject* { return new struct GunTurret(); }}; constexpr ScriptObjectSpec GunTurretEnt = {0x64, []() -> IScriptObject* { return new struct GunTurret(); }};
static const ScriptObjectSpec FogVolumeEnt = {0x65, []() -> IScriptObject* { return new struct FogVolume(); }}; constexpr ScriptObjectSpec FogVolumeEnt = {0x65, []() -> IScriptObject* { return new struct FogVolume(); }};
static const ScriptObjectSpec BabygothEnt = {0x66, []() -> IScriptObject* { return new struct Babygoth(); }}; constexpr ScriptObjectSpec BabygothEnt = {0x66, []() -> IScriptObject* { return new struct Babygoth(); }};
static const ScriptObjectSpec EyeballEnt = {0x67, []() -> IScriptObject* { return new struct Eyeball(); }}; constexpr ScriptObjectSpec EyeballEnt = {0x67, []() -> IScriptObject* { return new struct Eyeball(); }};
static const ScriptObjectSpec RadialDamageEnt = {0x68, []() -> IScriptObject* { return new struct RadialDamage(); }}; constexpr ScriptObjectSpec RadialDamageEnt = {0x68, []() -> IScriptObject* { return new struct RadialDamage(); }};
static const ScriptObjectSpec CameraPitchVolumeEnt = { constexpr ScriptObjectSpec CameraPitchVolumeEnt = {0x69,
0x69, []() -> IScriptObject* { return new struct CameraPitchVolume(); }}; []() -> IScriptObject* { return new struct CameraPitchVolume(); }};
static const ScriptObjectSpec EnvFxDensityControllerEnt = { constexpr ScriptObjectSpec EnvFxDensityControllerEnt = {
0x6A, []() -> IScriptObject* { return new struct EnvFxDensityController(); }}; 0x6A, []() -> IScriptObject* { return new struct EnvFxDensityController(); }};
static const ScriptObjectSpec MagdoliteEnt = {0x6B, []() -> IScriptObject* { return new struct Magdolite(); }}; constexpr ScriptObjectSpec MagdoliteEnt = {0x6B, []() -> IScriptObject* { return new struct Magdolite(); }};
static const ScriptObjectSpec TeamAIMgrEnt = {0x6C, []() -> IScriptObject* { return new struct TeamAIMgr(); }}; constexpr ScriptObjectSpec TeamAIMgrEnt = {0x6C, []() -> IScriptObject* { return new struct TeamAIMgr(); }};
static const ScriptObjectSpec SnakeWeedSwarmEnt = {0x6D, constexpr ScriptObjectSpec SnakeWeedSwarmEnt = {0x6D, []() -> IScriptObject* { return new struct SnakeWeedSwarm(); }};
[]() -> IScriptObject* { return new struct SnakeWeedSwarm(); }}; constexpr ScriptObjectSpec ActorContraptionEnt = {0x6E,
static const ScriptObjectSpec ActorContraptionEnt = {0x6E, []() -> IScriptObject* { return new struct ActorContraption(); }};
[]() -> IScriptObject* { return new struct ActorContraption(); }}; constexpr ScriptObjectSpec OculusEnt = {0x6F, []() -> IScriptObject* { return new struct Oculus(); }};
static const ScriptObjectSpec OculusEnt = {0x6F, []() -> IScriptObject* { return new struct Oculus(); }}; constexpr ScriptObjectSpec GeemerEnt = {0x70, []() -> IScriptObject* { return new struct Geemer(); }};
static const ScriptObjectSpec GeemerEnt = {0x70, []() -> IScriptObject* { return new struct Geemer(); }}; constexpr ScriptObjectSpec SpindleCameraEnt = {0x71, []() -> IScriptObject* { return new struct SpindleCamera(); }};
static const ScriptObjectSpec SpindleCameraEnt = {0x71, []() -> IScriptObject* { return new struct SpindleCamera(); }}; constexpr ScriptObjectSpec AtomicAlphaEnt = {0x72, []() -> IScriptObject* { return new struct AtomicAlpha(); }};
static const ScriptObjectSpec AtomicAlphaEnt = {0x72, []() -> IScriptObject* { return new struct AtomicAlpha(); }}; constexpr ScriptObjectSpec CameraHintTriggerEnt = {0x73,
static const ScriptObjectSpec CameraHintTriggerEnt = { []() -> IScriptObject* { return new struct CameraHintTrigger(); }};
0x73, []() -> IScriptObject* { return new struct CameraHintTrigger(); }}; constexpr ScriptObjectSpec RumbleEffectEnt = {0x74, []() -> IScriptObject* { return new struct RumbleEffect(); }};
static const ScriptObjectSpec RumbleEffectEnt = {0x74, []() -> IScriptObject* { return new struct RumbleEffect(); }}; constexpr ScriptObjectSpec AmbientAIEnt = {0x75, []() -> IScriptObject* { return new struct AmbientAI(); }};
static const ScriptObjectSpec AmbientAIEnt = {0x75, []() -> IScriptObject* { return new struct AmbientAI(); }}; constexpr ScriptObjectSpec AtomicBetaEnt = {0x77, []() -> IScriptObject* { return new struct AtomicBeta(); }};
static const ScriptObjectSpec AtomicBetaEnt = {0x77, []() -> IScriptObject* { return new struct AtomicBeta(); }}; constexpr ScriptObjectSpec IceZoomerEnt = {0x78, []() -> IScriptObject* { return new struct IceZoomer(); }};
static const ScriptObjectSpec IceZoomerEnt = {0x78, []() -> IScriptObject* { return new struct IceZoomer(); }}; constexpr ScriptObjectSpec PufferEnt = {0x79, []() -> IScriptObject* { return new struct Puffer(); }};
static const ScriptObjectSpec PufferEnt = {0x79, []() -> IScriptObject* { return new struct Puffer(); }}; constexpr ScriptObjectSpec TryclopsEnt = {0x7A, []() -> IScriptObject* { return new struct Tryclops(); }};
static const ScriptObjectSpec TryclopsEnt = {0x7A, []() -> IScriptObject* { return new struct Tryclops(); }}; constexpr ScriptObjectSpec RidleyEnt = {0x7B, []() -> IScriptObject* { return new struct Ridley(); }};
static const ScriptObjectSpec RidleyEnt = {0x7B, []() -> IScriptObject* { return new struct Ridley(); }}; constexpr ScriptObjectSpec SeedlingEnt = {0x7C, []() -> IScriptObject* { return new struct Seedling(); }};
static const ScriptObjectSpec SeedlingEnt = {0x7C, []() -> IScriptObject* { return new struct Seedling(); }}; constexpr ScriptObjectSpec ThermalHeatFaderEnt = {0x7D,
static const ScriptObjectSpec ThermalHeatFaderEnt = {0x7D, []() -> IScriptObject* { return new struct ThermalHeatFader(); }};
[]() -> IScriptObject* { return new struct ThermalHeatFader(); }}; constexpr ScriptObjectSpec BurrowerEnt = {0x7F, []() -> IScriptObject* { return new struct Burrower(); }};
static const ScriptObjectSpec BurrowerEnt = {0x7F, []() -> IScriptObject* { return new struct Burrower(); }}; constexpr ScriptObjectSpec ScriptBeamEnt = {0x81, []() -> IScriptObject* { return new struct ScriptBeam(); }};
static const ScriptObjectSpec ScriptBeamEnt = {0x81, []() -> IScriptObject* { return new struct ScriptBeam(); }}; constexpr ScriptObjectSpec WorldLightFaderEnt = {0x82, []() -> IScriptObject* { return new struct WorldLightFader(); }};
static const ScriptObjectSpec WorldLightFaderEnt = {0x82, constexpr ScriptObjectSpec MetroidPrimeStage2Ent = {0x83,
[]() -> IScriptObject* { return new struct WorldLightFader(); }}; []() -> IScriptObject* { return new struct MetroidPrimeStage2(); }};
static const ScriptObjectSpec MetroidPrimeStage2Ent = { constexpr ScriptObjectSpec MetroidPrimeStage1Ent = {0x84,
0x83, []() -> IScriptObject* { return new struct MetroidPrimeStage2(); }}; []() -> IScriptObject* { return new struct MetroidPrimeStage1(); }};
static const ScriptObjectSpec MetroidPrimeStage1Ent = { constexpr ScriptObjectSpec MazeNodeEnt = {0x85, []() -> IScriptObject* { return new struct MazeNode(); }};
0x84, []() -> IScriptObject* { return new struct MetroidPrimeStage1(); }}; constexpr ScriptObjectSpec OmegaPirateEnt = {0x86, []() -> IScriptObject* { return new struct OmegaPirate(); }};
static const ScriptObjectSpec MazeNodeEnt = {0x85, []() -> IScriptObject* { return new struct MazeNode(); }}; constexpr ScriptObjectSpec PhazonPoolEnt = {0x87, []() -> IScriptObject* { return new struct PhazonPool(); }};
static const ScriptObjectSpec OmegaPirateEnt = {0x86, []() -> IScriptObject* { return new struct OmegaPirate(); }}; constexpr ScriptObjectSpec PhazonHealingNoduleEnt = {
static const ScriptObjectSpec PhazonPoolEnt = {0x87, []() -> IScriptObject* { return new struct PhazonPool(); }};
static const ScriptObjectSpec PhazonHealingNoduleEnt = {
0x88, []() -> IScriptObject* { return new struct PhazonHealingNodule(); }}; 0x88, []() -> IScriptObject* { return new struct PhazonHealingNodule(); }};
static const ScriptObjectSpec NewCameraShakerEnt = {0x89, constexpr ScriptObjectSpec NewCameraShakerEnt = {0x89, []() -> IScriptObject* { return new struct NewCameraShaker(); }};
[]() -> IScriptObject* { return new struct NewCameraShaker(); }}; constexpr ScriptObjectSpec ShadowProjectorEnt = {0x8A, []() -> IScriptObject* { return new struct ShadowProjector(); }};
static const ScriptObjectSpec ShadowProjectorEnt = {0x8A, constexpr ScriptObjectSpec EnergyBallEnt = {0x8B, []() -> IScriptObject* { return new struct EnergyBall(); }};
[]() -> IScriptObject* { return new struct ShadowProjector(); }}; } // Anonymous namespace
static const ScriptObjectSpec EnergyBallEnt = {0x8B, []() -> IScriptObject* { return new struct EnergyBall(); }};
} // namespace priv } // namespace priv
const std::vector<const struct ScriptObjectSpec*> SCRIPT_OBJECT_DB = { const std::vector<const struct ScriptObjectSpec*> SCRIPT_OBJECT_DB = {

View File

@ -131,7 +131,7 @@
namespace DataSpec::DNAMP1 { namespace DataSpec::DNAMP1 {
struct ScriptObjectSpec { struct ScriptObjectSpec {
atUint8 type; atUint8 type;
std::function<IScriptObject*()> a; IScriptObject* (*a)();
}; };
extern const std::vector<const struct ScriptObjectSpec*> SCRIPT_OBJECT_DB; extern const std::vector<const struct ScriptObjectSpec*> SCRIPT_OBJECT_DB;