diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/hdb/map-loader.cpp | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/engines/hdb/map-loader.cpp b/engines/hdb/map-loader.cpp index e9f1f0be3d..8ec381aeef 100644 --- a/engines/hdb/map-loader.cpp +++ b/engines/hdb/map-loader.cpp @@ -131,6 +131,390 @@ bool Map::load(Common::SeekableReadStream *stream) { TODO: Add the animating tile lists */ + struct { + AIType type; + AIDir dir; + } aiInfo[] = { + { AI_GUY, DIR_DOWN }, + { AI_GUY, DIR_UP }, + { AI_GUY, DIR_RIGHT }, + { AI_GUY, DIR_LEFT }, + + { ITEM_ENV_WHITE, DIR_NONE }, + { ITEM_ENV_BLUE, DIR_NONE }, + { ITEM_ENV_RED, DIR_NONE }, + { ITEM_ENV_GREEN, DIR_NONE }, + + { AI_LASER, DIR_RIGHT }, + { AI_LASER, DIR_DOWN }, + { AI_LASER, DIR_LEFT }, + { AI_LASER, DIR_UP }, + + { AI_DIVERTER, DIR_DOWN }, + { AI_DIVERTER, DIR_UP }, + { AI_DIVERTER, DIR_RIGHT }, + { AI_DIVERTER, DIR_LEFT }, + + { AI_FOURFIRER, DIR_RIGHT }, + { AI_FOURFIRER, DIR_DOWN}, + { AI_FOURFIRER, DIR_LEFT }, + { AI_FOURFIRER, DIR_UP }, + + { INFO_ARROW_TURN, DIR_DOWN }, + { INFO_ARROW_TURN, DIR_UP }, + { INFO_ARROW_TURN, DIR_RIGHT }, + { INFO_ARROW_TURN, DIR_LEFT }, + + { INFO_ARROW_STOP, DIR_DOWN }, + { INFO_ARROW_STOP, DIR_UP }, + { INFO_ARROW_STOP, DIR_RIGHT }, + { INFO_ARROW_STOP, DIR_LEFT }, + + { ITEM_CELL, DIR_NONE }, + + { AI_CRATE, DIR_NONE }, + { AI_LIGHTBARREL, DIR_NONE }, + { AI_HEAVYBARREL, DIR_NONE }, + { AI_BOOMBARREL, DIR_NONE }, + + { ITEM_TRANSCEIVER, DIR_NONE }, + { ITEM_CLUB, DIR_NONE }, + { ITEM_ROBOSTUNNER, DIR_NONE }, + { ITEM_SLUGSLINGER, DIR_NONE }, + + { AI_SCIENTIST, DIR_DOWN }, + { AI_SCIENTIST, DIR_UP }, + { AI_SCIENTIST, DIR_RIGHT }, + { AI_SCIENTIST, DIR_LEFT }, + + { AI_WORKER, DIR_DOWN }, + { AI_WORKER, DIR_UP }, + { AI_WORKER, DIR_RIGHT }, + { AI_WORKER, DIR_LEFT }, + + { AI_SHOCKBOT, DIR_DOWN }, + { AI_SHOCKBOT, DIR_UP }, + { AI_SHOCKBOT, DIR_RIGHT }, + { AI_SHOCKBOT, DIR_LEFT }, + + { AI_RIGHTBOT, DIR_DOWN }, + { AI_RIGHTBOT, DIR_UP }, + { AI_RIGHTBOT, DIR_RIGHT }, + { AI_RIGHTBOT, DIR_LEFT }, + + { AI_PUSHBOT, DIR_DOWN }, + { AI_PUSHBOT, DIR_UP }, + { AI_PUSHBOT, DIR_RIGHT }, + { AI_PUSHBOT, DIR_LEFT }, + + { AI_LISTENBOT, DIR_DOWN }, + { AI_LISTENBOT, DIR_UP }, + { AI_LISTENBOT, DIR_RIGHT }, + { AI_LISTENBOT, DIR_LEFT }, + + { ITEM_MONKEYSTONE, DIR_NONE }, + + { INFO_TELEPORTER1, DIR_NONE }, + { INFO_TELEPORTER2, DIR_NONE }, + { INFO_TELEPORTER3, DIR_NONE }, + { INFO_TELEPORTER4, DIR_NONE }, + { INFO_TELEPORTER5, DIR_NONE }, + { INFO_TELEPORTER6, DIR_NONE }, + { INFO_TELEPORTER7, DIR_NONE }, + { INFO_TELEPORTER8, DIR_NONE }, + { INFO_TELEPORTER9, DIR_NONE }, + { INFO_TELEPORTER10, DIR_NONE }, + { INFO_TELEPORTER11, DIR_NONE }, + { INFO_TELEPORTER12, DIR_NONE }, + { INFO_TELEPORTER13, DIR_NONE }, + { INFO_TELEPORTER14, DIR_NONE }, + { INFO_TELEPORTER15, DIR_NONE }, + { INFO_TELEPORTER16, DIR_NONE }, + { INFO_TELEPORTER17, DIR_NONE }, + { INFO_TELEPORTER18, DIR_NONE }, + { INFO_TELEPORTER19, DIR_NONE }, + { INFO_TELEPORTER20, DIR_NONE }, + + { INFO_LEVELEXIT, DIR_NONE }, + + { INFO_ACTION1, DIR_NONE }, + { INFO_ACTION2, DIR_NONE }, + { INFO_ACTION3, DIR_NONE }, + { INFO_ACTION4, DIR_NONE }, + { INFO_ACTION5, DIR_NONE }, + { INFO_ACTION6, DIR_NONE }, + { INFO_ACTION7, DIR_NONE }, + { INFO_ACTION8, DIR_NONE }, + { INFO_ACTION9, DIR_NONE }, + { INFO_ACTION10, DIR_NONE }, + { INFO_ACTION11, DIR_NONE }, + { INFO_ACTION12, DIR_NONE }, + { INFO_ACTION13, DIR_NONE }, + { INFO_ACTION14, DIR_NONE }, + { INFO_ACTION15, DIR_NONE }, + { INFO_ACTION16, DIR_NONE }, + { INFO_ACTION17, DIR_NONE }, + { INFO_ACTION18, DIR_NONE }, + { INFO_ACTION19, DIR_NONE }, + { INFO_ACTION20, DIR_NONE }, + + { AI_SPACEDUDE, DIR_DOWN }, + { AI_SPACEDUDE, DIR_UP }, + { AI_SPACEDUDE, DIR_RIGHT }, + { AI_SPACEDUDE, DIR_LEFT }, + + { AI_SERGEANT, DIR_DOWN }, + { AI_SERGEANT, DIR_UP }, + { AI_SERGEANT, DIR_RIGHT }, + { AI_SERGEANT, DIR_LEFT }, + + { AI_MAINTBOT, DIR_DOWN }, + { AI_MAINTBOT, DIR_UP }, + { AI_MAINTBOT, DIR_RIGHT }, + { AI_MAINTBOT, DIR_LEFT }, + + { INFO_ACTION_AUTO, DIR_NONE }, + + { ITEM_GEM_WHITE, DIR_NONE }, + { ITEM_GEM_BLUE, DIR_NONE }, + { ITEM_GEM_RED, DIR_NONE }, + { ITEM_GEM_GREEN, DIR_NONE }, + + { INFO_SET_MUSIC, DIR_NONE }, + { INFO_LUA, DIR_NONE }, + { INFO_HERE, DIR_NONE }, + + { AI_VORTEXIAN, DIR_DOWN }, + + { AI_CHICKEN, DIR_DOWN }, + { AI_CHICKEN, DIR_UP }, + { AI_CHICKEN, DIR_RIGHT }, + { AI_CHICKEN, DIR_LEFT }, + + { ITEM_GOO_CUP, DIR_NONE }, + { ITEM_TEACUP, DIR_NONE }, + { ITEM_COOKIE, DIR_NONE }, + { ITEM_BURGER, DIR_NONE }, + { ITEM_PDA, DIR_NONE }, + { ITEM_BOOK, DIR_NONE }, + { ITEM_CLIPBOARD, DIR_NONE }, + { ITEM_NOTE, DIR_NONE }, + { ITEM_KEYCARD_WHITE, DIR_NONE }, + { ITEM_KEYCARD_BLUE, DIR_NONE }, + { ITEM_KEYCARD_RED, DIR_NONE }, + { ITEM_KEYCARD_GREEN, DIR_NONE }, + { ITEM_KEYCARD_PURPLE, DIR_NONE }, + { ITEM_KEYCARD_BLACK, DIR_NONE }, + { AI_MAGIC_EGG, DIR_NONE }, + { AI_ICE_BLOCK, DIR_NONE }, + { ITEM_CABKEY, DIR_NONE }, + + { AI_DEADWORKER, DIR_NONE }, + { AI_OMNIBOT, DIR_DOWN }, + { AI_OMNIBOT, DIR_UP }, + { AI_OMNIBOT, DIR_RIGHT }, + { AI_OMNIBOT, DIR_LEFT }, + { AI_TURNBOT, DIR_DOWN }, + { AI_TURNBOT, DIR_UP }, + { AI_TURNBOT, DIR_RIGHT }, + { AI_TURNBOT, DIR_LEFT }, + { AI_DOLLY, DIR_DOWN }, + { AI_DOLLY, DIR_UP }, + { AI_DOLLY, DIR_RIGHT }, + { AI_DOLLY, DIR_LEFT }, + + { INFO_TRIGGER, DIR_NONE }, + + { ITEM_DOLLYTOOL1, DIR_NONE }, + { ITEM_DOLLYTOOL2, DIR_NONE }, + { ITEM_DOLLYTOOL3, DIR_NONE }, + { ITEM_DOLLYTOOL4, DIR_NONE }, + + { AI_RAILRIDER_ON, DIR_UP }, + { AI_RAILRIDER_ON, DIR_DOWN }, + { AI_RAILRIDER_ON, DIR_LEFT }, + { AI_RAILRIDER_ON, DIR_RIGHT }, + { AI_RAILRIDER, DIR_UP }, + { AI_RAILRIDER, DIR_DOWN }, + { AI_RAILRIDER, DIR_LEFT }, + { AI_RAILRIDER, DIR_RIGHT }, + + { ITEM_SODA, DIR_NONE }, + { INFO_ARROW_4WAY, DIR_NONE }, + { AI_DEADEYE, DIR_DOWN }, + { AI_DEADEYE, DIR_UP }, + { AI_DEADEYE, DIR_RIGHT }, + { AI_DEADEYE, DIR_LEFT }, + { AI_MEERKAT, DIR_NONE }, + { AI_FATFROG, DIR_DOWN }, + { AI_FATFROG, DIR_RIGHT }, + { AI_FATFROG, DIR_LEFT }, + { AI_GOODFAIRY, DIR_DOWN }, + { AI_GOODFAIRY, DIR_UP }, + { AI_GOODFAIRY, DIR_RIGHT }, + { AI_GOODFAIRY, DIR_LEFT }, + { AI_BADFAIRY, DIR_DOWN }, + { AI_BADFAIRY, DIR_UP }, + { AI_BADFAIRY, DIR_RIGHT }, + { AI_BADFAIRY, DIR_LEFT }, + { AI_ACCOUNTANT, DIR_DOWN }, + { AI_ACCOUNTANT, DIR_UP }, + { AI_ACCOUNTANT, DIR_RIGHT }, + { AI_ACCOUNTANT, DIR_LEFT }, + { AI_ICEPUFF, DIR_NONE }, + { AI_DRAGON, DIR_NONE }, + { AI_BUZZFLY, DIR_DOWN }, + { AI_BUZZFLY, DIR_UP }, + { AI_BUZZFLY, DIR_RIGHT }, + { AI_BUZZFLY, DIR_LEFT }, + + { AI_FROGSTATUE, DIR_NONE }, + { ITEM_SLICER, DIR_NONE }, + { INFO_FAIRY_SRC, DIR_NONE }, + { INFO_FAIRY_SRC2, DIR_NONE }, + { INFO_FAIRY_SRC3, DIR_NONE }, + { INFO_FAIRY_SRC4, DIR_NONE }, + { INFO_FAIRY_SRC5, DIR_NONE }, + { INFO_FAIRY_DEST, DIR_NONE }, + { INFO_FAIRY_DEST2, DIR_NONE }, + { INFO_FAIRY_DEST3, DIR_NONE }, + { INFO_FAIRY_DEST4, DIR_NONE }, + { INFO_FAIRY_DEST5, DIR_NONE }, + { INFO_QMARK, DIR_NONE }, + { INFO_DEBUG, DIR_NONE }, + { AI_NONE, DIR_NONE }, + + { AI_NONE, DIR_NONE } + }; + + // Scan all icons and init all Entities + warning("STUB: Map::load: SetupProgressBar"); + for (int i = 0; i < _iconNum;i++) { + // Don't spawn Action Mode Entities in Puzzle Mode + if (!g_hdb->getActionMode()) { + switch (aiInfo[_iconList[i].icon].type) { + case AI_DEADEYE: + if (_iconList[i].value1 == 1) // For non-moving DeadEyes + break; + case AI_FOURFIRER: + case AI_LISTENBOT: + case ITEM_CLUB: + case ITEM_ROBOSTUNNER: + case ITEM_SLUGSLINGER: + continue; + } + } + + // Handle special icons that aren't moving AI entities + switch (aiInfo[_iconList[i].icon].type) { + default: + g_hdb->_ai->spawn( + aiInfo[_iconList[i].icon].type, + aiInfo[_iconList[i].icon].dir, + _iconList[i].x, + _iconList[i].y, + _iconList[i].funcInit, + _iconList[i].funcAction, + _iconList[i].funcUse, + (AIDir)_iconList[i].dir, + _iconList[i].level, + _iconList[i].value1, + _iconList[i].value2, + 0 + ); + break; + case INFO_ARROW_4WAY: + warning("STUB: Map::load: AddToPathList required"); + break; + case INFO_ARROW_TURN: + warning("STUB: Map::load: AddToPathList required"); + break; + case INFO_ARROW_STOP: + warning("STUB: Map::load: AddToPathList required"); + break; + + case INFO_ACTION1: + case INFO_ACTION2: + case INFO_ACTION3: + case INFO_ACTION4: + case INFO_ACTION5: + case INFO_ACTION6: + case INFO_ACTION7: + case INFO_ACTION8: + case INFO_ACTION9: + case INFO_ACTION10: + case INFO_ACTION11: + case INFO_ACTION12: + case INFO_ACTION13: + case INFO_ACTION14: + case INFO_ACTION15: + case INFO_ACTION16: + case INFO_ACTION17: + case INFO_ACTION18: + case INFO_ACTION19: + case INFO_ACTION20: + warning("STUB: Map::load: AddToActionList required"); + break; + case INFO_ACTION_AUTO: + warning("STUB: Map::load: AddToAutoList required"); + break; + + case INFO_TELEPORTER1: + case INFO_TELEPORTER2: + case INFO_TELEPORTER3: + case INFO_TELEPORTER4: + case INFO_TELEPORTER5: + case INFO_TELEPORTER6: + case INFO_TELEPORTER7: + case INFO_TELEPORTER8: + case INFO_TELEPORTER9: + case INFO_TELEPORTER10: + case INFO_TELEPORTER11: + case INFO_TELEPORTER12: + case INFO_TELEPORTER13: + case INFO_TELEPORTER14: + case INFO_TELEPORTER15: + case INFO_TELEPORTER16: + case INFO_TELEPORTER17: + case INFO_TELEPORTER18: + case INFO_TELEPORTER19: + case INFO_TELEPORTER20: + warning("STUB: Map::load: AddToTeleporterList required"); + break; + + case INFO_SET_MUSIC: + case INFO_PROMOTE: + case INFO_DEMOTE: + break; + + case INFO_LUA: + warning("STUB: Map::load: AddToLUAList required"); + break; + case INFO_HERE: + warning("STUB: Map::load: AddToHereList required"); + break; + case INFO_TRIGGER: + warning("STUB: Map::load: AddToTriggerList required"); + break; + + case INFO_FAIRY_SRC: + case INFO_FAIRY_SRC2: + case INFO_FAIRY_SRC3: + case INFO_FAIRY_SRC4: + case INFO_FAIRY_SRC5: + warning("STUB: Map::load: AddToFairystones(SRC) required"); + break; + + case INFO_FAIRY_DEST: + case INFO_FAIRY_DEST2: + case INFO_FAIRY_DEST3: + case INFO_FAIRY_DEST4: + case INFO_FAIRY_DEST5: + warning("STUB: Map::load: AddToFairystones(DEST) required"); + break; + } + } + g_hdb->_ai->initAllEnts(); _mapLoaded = true; |