aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorNipun Garg2019-07-04 23:33:22 +0530
committerEugene Sandulenko2019-09-03 17:17:11 +0200
commitd356756e6d2fd0802919987e120b4f55973e6a5d (patch)
tree86ad634ad3f0c9e0d4376508efca81ec2900a2c7 /engines
parentc9c08476f16e7535da0bd8aff231f6ee6fa8a0db (diff)
downloadscummvm-rg350-d356756e6d2fd0802919987e120b4f55973e6a5d.tar.gz
scummvm-rg350-d356756e6d2fd0802919987e120b4f55973e6a5d.tar.bz2
scummvm-rg350-d356756e6d2fd0802919987e120b4f55973e6a5d.zip
HDB: Add Diverter functions
Diffstat (limited to 'engines')
-rw-r--r--engines/hdb/ai-bots.cpp135
1 files changed, 125 insertions, 10 deletions
diff --git a/engines/hdb/ai-bots.cpp b/engines/hdb/ai-bots.cpp
index b6dfd231d8..2ce54b1f18 100644
--- a/engines/hdb/ai-bots.cpp
+++ b/engines/hdb/ai-bots.cpp
@@ -533,7 +533,12 @@ void aiPushBotAction(AIEntity *e) {
e1->state = e->state;
e1->moveSpeed = e->moveSpeed;
g_hdb->_ai->setEntityGoal(e1, nx2, ny2);
- warning("STUB: aiPushBotAction: Switch Case for Sound");
+ switch (e1->type) {
+ case AI_CRATE: g_hdb->_sound->playSound(SND_CRATE_SLIDE); break;
+ case AI_HEAVYBARREL: case AI_BOOMBARREL: g_hdb->_sound->playSound(SND_HEAVY_SLIDE); break;
+ case AI_LIGHTBARREL: g_hdb->_sound->playSound(SND_LIGHT_SLIDE); break;
+ default: break;
+ }
} else {
if (e->onScreen)
g_hdb->_sound->playSound(SND_PUSHBOT_STRAIN);
@@ -1226,12 +1231,130 @@ void aiLaserDraw(AIEntity *e, int mx, int my) {
warning("STUB: AI: aiLaserDraw required");
}
+void aiDiverterInit(AIEntity *e) {
+ e->aiDraw = aiDiverterDraw;
+ e->aiAction = aiDiverterAction;
+ e->moveSpeed = kPlayerMoveSpeed << 1;
+ e->dir2 = e->dir;
+}
+
+void aiDiverterInit2(AIEntity *e) {
+ e->movedownGfx[0] = e->standdownGfx[0];
+ e->moveupGfx[0] = e->standupGfx[0];
+ e->moveleftGfx[0] = e->standleftGfx[0];
+ e->moverightGfx[0] = e->standrightGfx[0];
+ e->movedownFrames =
+ e->moveupFrames =
+ e->moveleftFrames =
+ e->moverightFrames = 1;
+
+ // this is to handle loadgames...
+ AIDir d = e->dir2;
+ if (e->dir2 == DIR_NONE)
+ d = e->dir;
+ switch (d) {
+ case DIR_DOWN: e->state = STATE_DIVERTER_BL; e->draw = e->standdownGfx[0]; break;
+ case DIR_UP: e->state = STATE_DIVERTER_BR; e->draw = e->standupGfx[0]; break;
+ case DIR_LEFT: e->state = STATE_DIVERTER_TL; e->draw = e->standleftGfx[0]; break;
+ case DIR_RIGHT: e->state = STATE_DIVERTER_TR; e->draw = e->standrightGfx[0]; break;
+ case DIR_NONE: break;
+ }
+
+ warning("STUB: Set Laser Rescan to true");
+}
+
void aiDiverterAction(AIEntity *e) {
warning("STUB: AI: aiDiverterAction required");
}
void aiDiverterDraw(AIEntity *e, int mx, int my) {
- warning("STUB: AI: aiDiverterDraw required");
+ int i;
+ if (!e->value1 && !e->value2)
+ return;
+
+ int frame = e->movedownFrames & 3;
+ int onScreen = 0;
+ switch (e->dir2) {
+ case DIR_UP:
+ if (e->tileY == e->value1 && e->int2) { // going down or right?
+ for (i = e->value1 + 1; i < e->value2; i++)
+ onScreen += gfxLaserbeamUD[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ onScreen += gfxLaserbeamUDTop[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onScreen to true");
+ }
+ } else {
+ for (i = e->value1 + 1; i < e->value2; i++)
+ onScreen += gfxLaserbeamLR[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ onScreen += gfxLaserbeamLRLeft[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onScreen to true");
+ }
+ }
+ break;
+ case DIR_DOWN:
+ if (e->tileY == e->value1 && e->int2) { // going down or left?
+ for (i = e->value1 + 1; i < e->value2; i++)
+ onScreen += gfxLaserbeamUD[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ onScreen += gfxLaserbeamUDTop[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onscreen to true");
+ }
+ } else {
+ for (i = e->value1 - 1; i > e->value2; i--)
+ onScreen += gfxLaserbeamLR[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ onScreen += gfxLaserbeamLRRight[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onscreen to true");
+ }
+ }
+ break;
+ case DIR_LEFT:
+ if (e->tileY == e->value1 && e->int2) { // going up or left?
+ for (i = e->value1 - 1; i > e->value2; i--)
+ onScreen += gfxLaserbeamUD[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ onScreen += gfxLaserbeamUDBottom[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onscreen to true");
+ }
+ } else {
+ for (i = e->value1 - 1; i > e->value2; i--)
+ onScreen += gfxLaserbeamLR[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ onScreen += gfxLaserbeamLRRight[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onscreen to true");
+ }
+ }
+ break;
+ case DIR_RIGHT:
+ if (e->tileY == e->value1 && e->int2) { // going up or right?
+ for (i = e->value1 - 1; i > e->value2; i--)
+ onScreen += gfxLaserbeamUD[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ onScreen += gfxLaserbeamUDBottom[frame]->drawMasked(e->x - mx, i * kTileHeight - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onscreen to true");
+ }
+ } else {
+ for (i = e->value1 + 1; i < e->value2; i++)
+ onScreen += gfxLaserbeamLR[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ onScreen += gfxLaserbeamLRLeft[frame]->drawMasked(i * kTileWidth - mx, e->y - my);
+ if (onScreen) {
+ g_hdb->_sound->playSoundEx(SND_LASER_LOOP, kLaserChannel, true);
+ warning("STUB: Set Laser onscreen to true");
+ }
+ }
+ break;
+ case DIR_NONE:
+ break;
+ }
+ e->movedownFrames++;
}
void aiMeerkatDraw(AIEntity *e, int mx, int my) {
@@ -1306,14 +1429,6 @@ void aiLaserInit2(AIEntity *e) {
warning("STUB: AI: aiLaserInit2 required");
}
-void aiDiverterInit(AIEntity *e) {
- warning("STUB: AI: aiDiverterInit required");
-}
-
-void aiDiverterInit2(AIEntity *e) {
- warning("STUB: AI: aiDiverterInit2 required");
-}
-
void aiMeerkatInit(AIEntity *e) {
warning("STUB: AI: aiMeerkatInit required");
}