aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/hdb/ai-init.cpp253
-rw-r--r--engines/hdb/ai.h12
2 files changed, 265 insertions, 0 deletions
diff --git a/engines/hdb/ai-init.cpp b/engines/hdb/ai-init.cpp
index 47e8a11520..b7869e144f 100644
--- a/engines/hdb/ai-init.cpp
+++ b/engines/hdb/ai-init.cpp
@@ -671,6 +671,233 @@ AIEntTypeInfo aiEntList[] = {
{ END_AI_TYPES, NULL, NULL, NULL, NULL }
};
+FuncLookUp aiFuncList[] = {
+ {aiPlayerInit, "aiPlayerInit"},
+ {aiPlayerInit2, "aiPlayerInit2"},
+ {aiPlayerAction, "aiPlayerAction"},
+ {(FuncPtr)aiPlayerDraw, "aiPlayerDraw"},
+ {aiGemAttackInit, "aiGemAttackInit"},
+ {aiGemAttackAction, "aiGemAttackAction"},
+ {aiDollyInit, "aiDollyInit"},
+ {aiDollyInit2, "aiDollyInit2"},
+ {aiSergeantInit, "aiSergeantInit"},
+ {aiSergeantInit2, "aiSergeantInit2"},
+ {aiSergeantAction, "aiSergeantAction"},
+ {aiSpacedudeInit, "aiSpacedudeInit"},
+ {aiSpacedudeInit2, "aiSpacedudeInit2"},
+ {aiChickenInit, "aiChickenInit"},
+ {aiChickenInit2, "aiChickenInit2"},
+ {aiChickenAction, "aiChickenAction"},
+ {aiChickenUse, "aiChickenUse"},
+ {aiCrateInit, "aiCrateInit"},
+ {aiCrateInit2, "aiCrateInit2"},
+ {aiCrateAction, "aiCrateAction"},
+ {aiBarrelLightInit, "aiBarrelLightInit"},
+ {aiBarrelLightInit2, "aiBarrelLightInit2"},
+ {aiBarrelLightAction, "aiBarrelLightAction"},
+ {aiBarrelHeavyInit, "aiBarrelHeavyInit"},
+ {aiBarrelHeavyInit2, "aiBarrelHeavyInit2"},
+ {aiBarrelHeavyAction, "aiBarrelHeavyAction"},
+ {aiBarrelExplode, "aiBarrelExplode"},
+ {aiBarrelExplodeInit, "aiBarrelExplodeInit"},
+ {aiBarrelExplodeInit2, "aiBarrelExplodeInit2"},
+ {aiBarrelExplodeSpread, "aiBarrelExplodeSpread"},
+ {aiBarrelExplodeAction, "aiBarrelExplodeAction"},
+ {aiCellInit, "aiCellInit"},
+ {aiCellInit2, "aiCellInit2"},
+ {aiMaintBotInit, "aiMaintBotInit"},
+ {aiMaintBotInit2, "aiMaintBotInit2"},
+ {aiMaintBotAction, "aiMaintBotAction"},
+ {aiPdaInit, "aiPdaInit"},
+ {aiPdaInit2, "aiPdaInit2"},
+ {aiCabKeyInit, "aiCabKeyInit"},
+ {aiCabKeyInit2, "aiCabKeyInit2"},
+ {aiItemChickenInit, "aiItemChickenInit"},
+ {aiItemChickenInit2, "aiItemChickenInit2"},
+ {aiEnvelopeWhiteInit, "aiEnvelopeWhiteInit"},
+ {aiEnvelopeWhiteInit2, "aiEnvelopeWhiteInit2"},
+ {aiEnvelopeBlueInit, "aiEnvelopeBlueInit"},
+ {aiEnvelopeBlueInit2, "aiEnvelopeBlueInit2"},
+ {aiEnvelopeRedInit, "aiEnvelopeRedInit"},
+ {aiEnvelopeRedInit2, "aiEnvelopeRedInit2"},
+ {aiTransceiverInit, "aiTransceiverInit"},
+ {aiTransceiverInit2, "aiTransceiverInit2"},
+ {aiTransceiverAction, "aiTransceiverAction"},
+ {aiMonkeystoneInit, "aiMonkeystoneInit"},
+ {aiMonkeystoneInit2, "aiMonkeystoneInit2"},
+ {aiMonkeystoneUse, "aiMonkeystoneUse"},
+ {aiMonkeystoneAction, "aiMonkeystoneAction"},
+ {aiGemAction, "aiGemAction"},
+ {aiGemWhiteInit, "aiGemWhiteInit"},
+ {aiGemWhiteInit2, "aiGemWhiteInit2"},
+ {aiGooCupInit, "aiGooCupInit"},
+ {aiGooCupInit2, "aiGooCupInit2"},
+ {aiGooCupUse, "aiGooCupUse"},
+ {aiVortexianInit, "aiVortexianInit"},
+ {aiVortexianInit2, "aiVortexianInit2"},
+ {aiVortexianAction, "aiVortexianAction"},
+ {aiVortexianUse, "aiVortexianUse"},
+ {aiNoneInit, "aiNoneInit"},
+ {aiGenericAction, "aiGenericAction"},
+ {aiGetItemAction, "aiGetItemAction"},
+ {aiScientistInit, "aiScientistInit"},
+ {aiScientistInit2, "aiScientistInit2"},
+ {aiFourFirerInit, "aiFourFirerInit"},
+ {aiFourFirerInit2, "aiFourFirerInit2"},
+ {aiFourFirerAction, "aiFourFirerAction"},
+ {aiRailRiderInit, "aiRailRiderInit"},
+ {aiRailRiderInit2, "aiRailRiderInit2"},
+ {aiRailRiderAction, "aiRailRiderAction"},
+ {aiRailRiderUse, "aiRailRiderUse"},
+ {aiRailRiderOnUse, "aiRailRiderOnUse"},
+ {aiRailRiderOnAction, "aiRailRiderOnAction"},
+ {aiShockBotInit, "aiShockBotInit"},
+ {aiShockBotInit2, "aiShockBotInit2"},
+ {aiShockBotAction, "aiShockBotAction"},
+ {(FuncPtr)aiShockBotShock, "aiShockBotShock"},
+ {aiOmniBotMissileInit, "aiOmniBotMissileInit"},
+ {aiOmniBotMissileInit2, "aiOmniBotMissileInit2"},
+ {aiOmniBotMissileAction, "aiOmniBotMissileAction"},
+ {aiSlugAttackInit, "aiSlugAttackInit"},
+ {aiSlugAttackInit2, "aiSlugAttackInit2"},
+ {aiSlugAttackAction, "aiSlugAttackAction"},
+ {(FuncPtr)aiSlugAttackDraw, "aiSlugAttackDraw"},
+ {aiDeadWorkerInit, "aiDeadWorkerInit"},
+ {aiDeadWorkerInit2, "aiDeadWorkerInit2"},
+ {aiWorkerInit, "aiWorkerInit"},
+ {aiWorkerInit2, "aiWorkerInit2"},
+ {aiAccountantInit, "aiAccountantInit"},
+ {aiAccountantInit2, "aiAccountantInit2"},
+ {aiFrogStatueInit, "aiFrogStatueInit"},
+ {aiFrogStatueInit2, "aiFrogStatueInit2"},
+ {aiFrogStatueAction, "aiFrogStatueAction"},
+ {aiClubInit, "aiClubInit"},
+ {aiClubInit2, "aiClubInit2"},
+ {aiRoboStunnerInit, "aiRoboStunnerInit"},
+ {aiRoboStunnerInit2, "aiRoboStunnerInit2"},
+ {aiRoboStunnerAction, "aiRoboStunnerAction"},
+ {aiSlugSlingerInit2, "aiSlugSlingerInit2"},
+ {aiSlugSlingerInit, "aiSlugSlingerInit"},
+ {aiTurnBotAction, "aiTurnBotAction"},
+ {aiTurnBotInit, "aiTurnBotInit"},
+ {aiTurnBotInit2, "aiTurnBotInit2"},
+ {aiPushBotInit, "aiPushBotInit"},
+ {aiPushBotInit2, "aiPushBotInit2"},
+ {aiPushBotAction, "aiPushBotAction"},
+ {aiOmniBotInit, "aiOmniBotInit"},
+ {aiOmniBotInit2, "aiOmniBotInit2"},
+ {aiOmniBotAction, "aiOmniBotAction"},
+ {aiOmniBotMove, "aiOmniBotMove"},
+ {aiLaserAction, "aiLaserAction"},
+ {(FuncPtr)aiLaserDraw, "aiLaserDraw"},
+ {aiLaserInit, "aiLaserInit"},
+ {aiLaserInit2, "aiLaserInit2"},
+ {aiDiverterInit, "aiDiverterInit"},
+ {aiDiverterInit2, "aiDiverterInit2"},
+ {aiDiverterAction, "aiDiverterAction"},
+ {(FuncPtr)aiDiverterDraw, "aiDiverterDraw"},
+ {aiRightBotInit, "aiRightBotInit"},
+ {aiRightBotInit2, "aiRightBotInit2"},
+ {aiRightBotAction, "aiRightBotAction"},
+ {aiPushBotInit, "aiPushBotInit"},
+ {aiPushBotInit2, "aiPushBotInit2"},
+ {aiPushBotAction, "aiPushBotAction"},
+ {aiDeadEyeWalkInPlace, "aiDeadEyeWalkInPlace" },
+ {aiDeadEyeInit, "aiDeadEyeInit"},
+ {aiDeadEyeInit2, "aiDeadEyeInit2"},
+ {aiDeadEyeAction, "aiDeadEyeAction"},
+ {aiMeerkatLookAround, "aiMeerkatLookAround" },
+ {aiMeerkatInit, "aiMeerkatInit"},
+ {aiMeerkatInit2, "aiMeerkatInit2"},
+ {(FuncPtr)aiMeerkatDraw, "aiMeerkatDraw"},
+ {aiMeerkatAction, "aiMeerkatAction"},
+ {aiFatFrogInit, "aiFatFrogInit"},
+ {aiFatFrogInit2, "aiFatFrogInit2"},
+ {aiFatFrogAction, "aiFatFrogAction"},
+ {(FuncPtr)aiFatFrogTongueDraw, "aiFatFrogTongueDraw"},
+ {aiGoodFairyInit, "aiGoodFairyInit"},
+ {aiGoodFairyInit2, "aiGoodFairyInit2"},
+ {aiGoodFairyAction, "aiGoodFairyAction"},
+ {aiBadFairyInit, "aiBadFairyInit"},
+ {aiBadFairyInit2, "aiBadFairyInit2"},
+ {aiBadFairyAction, "aiBadFairyAction"},
+ {aiGatePuddleInit, "aiGatePuddleInit"},
+ {aiGatePuddleInit2, "aiGatePuddleInit2"},
+ {aiGatePuddleAction, "aiGatePuddleAction"},
+ {aiIcePuffSnowballAction, "aiIcePuffSnowballAction" },
+ {(FuncPtr)aiIcePuffSnowballDraw, "aiIcePuffSnowballDraw"},
+ {aiIcePuffInit, "aiIcePuffInit"},
+ {aiIcePuffInit2, "aiIcePuffInit2"},
+ {aiIcePuffAction, "aiIcePuffAction"},
+ {aiBuzzflyInit, "aiBuzzflyInit"},
+ {aiBuzzflyInit2, "aiBuzzflyInit2"},
+ {aiBuzzflyAction, "aiBuzzflyAction"},
+ {aiDragonInit, "aiDragonInit"},
+ {aiDragonInit2, "aiDragonInit2"},
+ {aiDragonAction, "aiDragonAction"},
+ {aiDragonUse, "aiDragonUse" },
+ {aiDragonWake, "aiDragonWake"},
+ {(FuncPtr)aiDragonDraw, "aiDragonDraw"},
+ {aiEnvelopeGreenInit, "aiEnvelopeGreenInit"},
+ {aiEnvelopeGreenInit2, "aiEnvelopeGreenInit2"},
+ {aiGemBlueInit, "aiGemBlueInit"},
+ {aiGemBlueInit2, "aiGemBlueInit2"},
+ {aiGemRedInit, "aiGemRedInit"},
+ {aiGemRedInit2, "aiGemRedInit2"},
+ {aiGemGreenInit, "aiGemGreenInit"},
+ {aiGemGreenInit2, "aiGemGreenInit2"},
+ {aiTeaCupInit, "aiTeaCupInit"},
+ {aiTeaCupInit2, "aiTeaCupInit2"},
+ {aiCookieInit, "aiCookieInit"},
+ {aiCookieInit2, "aiCookieInit2"},
+ {aiBurgerInit, "aiBurgerInit"},
+ {aiBurgerInit2, "aiBurgerInit2"},
+ {aiBookInit, "aiBookInit"},
+ {aiBookInit2, "aiBookInit2"},
+ {aiClipboardInit, "aiClipboardInit"},
+ {aiClipboardInit2, "aiClipboardInit2"},
+ {aiNoteInit, "aiNoteInit"},
+ {aiNoteInit2, "aiNoteInit2"},
+ {aiKeycardWhiteInit, "aiKeycardWhiteInit"},
+ {aiKeycardWhiteInit2, "aiKeycardWhiteInit2"},
+ {aiKeycardBlueInit, "aiKeycardBlueInit"},
+ {aiKeycardBlueInit2, "aiKeycardBlueInit2"},
+ {aiKeycardRedInit, "aiKeycardRedInit"},
+ {aiKeycardRedInit2, "aiKeycardRedInit2"},
+ {aiKeycardGreenInit, "aiKeycardGreenInit"},
+ {aiKeycardGreenInit2, "aiKeycardGreenInit2"},
+ {aiKeycardPurpleInit, "aiKeycardPurpleInit"},
+ {aiKeycardPurpleInit2, "aiKeycardPurpleInit2"},
+ {aiKeycardBlackInit, "aiKeycardBlackInit"},
+ {aiKeycardBlackInit2, "aiKeycardBlackInit2"},
+ {aiSeedInit, "aiSeedInit"},
+ {aiSeedInit2, "aiSeedInit2"},
+ {aiSodaInit, "aiSodaInit"},
+ {aiSodaInit2, "aiSodaInit2"},
+ {aiDollyTool1Init, "aiDollyTool1Init"},
+ {aiDollyTool1Init2, "aiDollyTool1Init2"},
+ {aiDollyTool2Init, "aiDollyTool2Init"},
+ {aiDollyTool2Init2, "aiDollyTool2Init2"},
+ {aiDollyTool3Init, "aiDollyTool3Init"},
+ {aiDollyTool3Init2, "aiDollyTool3Init2"},
+ {aiDollyTool4Init, "aiDollyTool4Init"},
+ {aiDollyTool4Init2, "aiDollyTool4Init2"},
+ {aiRouterInit, "aiRouterInit"},
+ {aiRouterInit2, "aiRouterInit2"},
+ {aiSlicerInit, "aiSlicerInit"},
+ {aiSlicerInit2, "aiSlicerInit2"},
+ {aiPackageInit, "aiPackageInit"},
+ {aiPackageInit2, "aiPackageInit2"},
+ {aiMagicEggInit, "aiMagicEggInit"},
+ {aiMagicEggInit2, "aiMagicEggInit2"},
+ {aiMagicEggAction, "aiMagicEggAction"},
+ {aiMagicEggUse, "aiMagicEggUse"},
+ {aiIceBlockInit, "aiIceBlockInit"},
+ {aiIceBlockInit2, "aiIceBlockInit2"},
+ {aiIceBlockAction, "aiIceBlockAction"},
+ {NULL, NULL}
+};
+
AI::AI() {
_ents = new Common::Array<AIEntity *>;
_floats = new Common::Array<AIEntity *>;
@@ -807,6 +1034,32 @@ void AI::clearPersistent() {
_numGems = _numGooCups = _numMonkeystones = 0;
}
+const char *AI::funcLookUp(void(*function)(AIEntity *e)) {
+ if (!function)
+ return NULL;
+
+ int i = 0;
+ while (aiFuncList[i].funcName) {
+ if (aiFuncList[i].function == function)
+ return aiFuncList[i].funcName;
+ i++;
+ }
+ return NULL;
+}
+
+FuncPtr AI::funcLookUp(const char *function) {
+ if (!function)
+ return NULL;
+
+ int i = 0;
+ while (aiFuncList[i].funcName) {
+ if (!scumm_stricmp(aiFuncList[i].funcName, function))
+ return aiFuncList[i].function;
+ i++;
+ }
+ return NULL;
+}
+
void AI::restartSystem() {
warning("STUB: AI::restartSystem incomplete");
diff --git a/engines/hdb/ai.h b/engines/hdb/ai.h
index 7328c11730..3cb0cc0610 100644
--- a/engines/hdb/ai.h
+++ b/engines/hdb/ai.h
@@ -541,6 +541,10 @@ struct AIEntity {
}
};
+// Structs for Function Table Lookup for SaveGames
+typedef void(*FuncPtr)(AIEntity *);
+typedef void(*EntFuncPtr)(AIEntity *, int, int);
+
struct AIEntTypeInfo {
AIType type;
const char *luaName;
@@ -549,7 +553,13 @@ struct AIEntTypeInfo {
void (*initFunc2)(AIEntity *e);
};
+struct FuncLookUp {
+ void(*function)(AIEntity *e);
+ const char *funcName;
+};
+
extern AIEntTypeInfo aiEntList[];
+extern FuncLookUp aiFuncList[];
struct AIEntLevel2 {
uint16 x;
@@ -783,6 +793,8 @@ public:
bool init();
void clearPersistent();
void restartSystem();
+ const char *funcLookUp(void(*function)(AIEntity *e));
+ FuncPtr funcLookUp(const char *function);
void save(Common::OutSaveFile *out);
void loadSaveFile(Common::InSaveFile *in);
void initAnimInfo();