diff --git a/engines/twine/audio/sound.cpp b/engines/twine/audio/sound.cpp index b92261b9bd3..3a87615d9dc 100644 --- a/engines/twine/audio/sound.cpp +++ b/engines/twine/audio/sound.cpp @@ -49,9 +49,9 @@ void Sound::setSamplePosition(int32 channelIdx, int32 x, int32 y, int32 z) { if (channelIdx < 0 || channelIdx >= NUM_CHANNELS) { return; } - const int32 camX = _engine->_grid->newCameraX << 9; - const int32 camY = _engine->_grid->newCameraY << 8; - const int32 camZ = _engine->_grid->newCameraZ << 9; + const int32 camX = _engine->_grid->newCameraX * 512; + const int32 camY = _engine->_grid->newCameraY * 256; + const int32 camZ = _engine->_grid->newCameraZ * 512; int32 distance = _engine->_movements->getDistance3D(camX, camY, camZ, x, y, z); distance = _engine->_collision->getAverageValue(0, distance, 10000, 255); const byte targetVolume = CLIP(255 - distance, 0, 255); diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp index 2c15c5aa58c..0d4cc12b9e2 100644 --- a/engines/twine/renderer/redraw.cpp +++ b/engines/twine/renderer/redraw.cpp @@ -343,9 +343,9 @@ void Redraw::processDrawListShadows(const DrawListStruct &drawCmd) { _engine->_grid->drawSprite(drawCmd.offset, renderRect.left, renderRect.top, _engine->_resources->spriteShadowPtr); } - const int32 tmpX = (drawCmd.x + 0x100) >> 9; - const int32 tmpY = drawCmd.y >> 8; - const int32 tmpZ = (drawCmd.z + 0x100) >> 9; + const int32 tmpX = (drawCmd.x + 256) / 512; + const int32 tmpY = drawCmd.y / 256; + const int32 tmpZ = (drawCmd.z + 256) / 512; _engine->_grid->drawOverModelActor(tmpX, tmpY, tmpZ); @@ -388,9 +388,9 @@ void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw) if (_engine->_interface->textWindow.left <= _engine->_interface->textWindow.right && _engine->_interface->textWindow.top <= _engine->_interface->textWindow.bottom) { actor->dynamicFlags.bIsVisible = 1; - const int32 tempX = (actor->x + 0x100) >> 9; - int32 tempY = actor->y >> 8; - const int32 tempZ = (actor->z + 0x100) >> 9; + const int32 tempX = (actor->x + 256) / 512; + int32 tempY = actor->y / 256; + const int32 tempZ = (actor->z + 256) / 512; if (actor->brickShape() != ShapeType::kNone) { tempY++; } @@ -443,14 +443,14 @@ void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgR actor->dynamicFlags.bIsVisible = 1; if (actor->staticFlags.bUsesClipping) { - const int32 tmpX = (actor->lastX + 0x100) >> 9; - const int32 tmpY = actor->lastY >> 8; - const int32 tmpZ = (actor->lastZ + 0x100) >> 9; + const int32 tmpX = (actor->lastX + 256) / 512; + const int32 tmpY = actor->lastY / 256; + const int32 tmpZ = (actor->lastZ + 256) / 512; _engine->_grid->drawOverSpriteActor(tmpX, tmpY, tmpZ); } else { - const int32 tmpX = (actor->x + actor->boudingBox.x.topRight + 0x100) >> 9; - int32 tmpY = actor->y >> 8; - const int32 tmpZ = (actor->z + actor->boudingBox.z.topRight + 0x100) >> 9; + const int32 tmpX = (actor->x + actor->boudingBox.x.topRight + 256) / 512; + int32 tmpY = actor->y / 256; + const int32 tmpZ = (actor->z + actor->boudingBox.z.topRight + 256) / 512; if (actor->brickShape() != ShapeType::kNone) { tmpY++; } @@ -495,9 +495,9 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) { _engine->_interface->setClip(renderRect); if (_engine->_interface->textWindow.left <= _engine->_interface->textWindow.right && _engine->_interface->textWindow.top <= _engine->_interface->textWindow.bottom) { - const int32 tmpX = (drawCmd.x + 0x100) >> 9; - const int32 tmpY = drawCmd.y >> 8; - const int32 tmpZ = (drawCmd.z + 0x100) >> 9; + const int32 tmpX = (drawCmd.x + 256) / 512; + const int32 tmpY = drawCmd.y / 256; + const int32 tmpZ = (drawCmd.z + 256) / 512; _engine->_grid->drawOverModelActor(tmpX, tmpY, tmpZ); addRedrawArea(_engine->_interface->textWindow.left, _engine->_interface->textWindow.top, renderRect.right, renderRect.bottom); diff --git a/engines/twine/scene/animations.cpp b/engines/twine/scene/animations.cpp index dcf8e6a1f54..0b27190ac2b 100644 --- a/engines/twine/scene/animations.cpp +++ b/engines/twine/scene/animations.cpp @@ -777,7 +777,7 @@ void Animations::processActorAnimations(int32 actorIdx) { // DoAnim if (brickShape == ShapeType::kSolid) { if (actor->dynamicFlags.bIsFalling) { _engine->_collision->stopFalling(); - _engine->_movements->processActorY = (_engine->_collision->collisionY << 8) + 0x100; + _engine->_movements->processActorY = (_engine->_collision->collisionY * 256) + 256; } else { if (IS_HERO(actorIdx) && _engine->_actor->heroBehaviour == HeroBehaviourType::kAthletic && actor->anim == AnimationTypes::kForward && _engine->cfgfile.WallCollision) { // avoid wall hit damage _engine->_extra->addExtraSpecial(actor->x, actor->y + 1000, actor->z, ExtraSpecialType::kHitStars); diff --git a/engines/twine/scene/collision.cpp b/engines/twine/scene/collision.cpp index 32099da48e2..3fd43950f17 100644 --- a/engines/twine/scene/collision.cpp +++ b/engines/twine/scene/collision.cpp @@ -112,9 +112,9 @@ void Collision::reajustActorPosition(ShapeType brickShape) { return; } - const int32 brkX = (collisionX << 9) - 0x100; - const int32 brkY = collisionY << 8; - const int32 brkZ = (collisionZ << 9) - 0x100; + const int32 brkX = (collisionX * 512) - 256; + const int32 brkY = collisionY * 256; + const int32 brkZ = (collisionZ * 512) - 256; // double-side stairs if (brickShape >= ShapeType::kDoubleSideStairsTop1 && brickShape <= ShapeType::kDoubleSideStairsRight2) { diff --git a/engines/twine/scene/extra.cpp b/engines/twine/scene/extra.cpp index 530d09d0a8d..1695883ca56 100644 --- a/engines/twine/scene/extra.cpp +++ b/engines/twine/scene/extra.cpp @@ -862,7 +862,7 @@ void Extra::processExtras() { if (process) { const BoundingBox *bbox = _engine->_resources->spriteBoundingBox.bbox(extra->info0); - extra->y = (_engine->_collision->collisionY << 8) + 0x100 - bbox->mins.y; + extra->y = (_engine->_collision->collisionY * 256) + 256 - bbox->mins.y; extra->type &= ~(ExtraType::STOP_COL | ExtraType::FLY); continue; } diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp index c6a0869137d..43012caf2d3 100644 --- a/engines/twine/scene/gamestate.cpp +++ b/engines/twine/scene/gamestate.cpp @@ -268,9 +268,9 @@ bool GameState::saveGame(Common::WriteStream *file) { } void GameState::processFoundItem(int32 item) { - _engine->_grid->newCameraX = (_engine->_scene->sceneHero->x + 0x100) >> 9; - _engine->_grid->newCameraY = (_engine->_scene->sceneHero->y + 0x100) >> 8; - _engine->_grid->newCameraZ = (_engine->_scene->sceneHero->z + 0x100) >> 9; + _engine->_grid->newCameraX = (_engine->_scene->sceneHero->x + 256) / 512; + _engine->_grid->newCameraY = (_engine->_scene->sceneHero->y + 256) / 256; + _engine->_grid->newCameraZ = (_engine->_scene->sceneHero->z + 256) / 512; // Hide hero in scene _engine->_scene->sceneHero->staticFlags.bIsHidden = 1; @@ -279,19 +279,19 @@ void GameState::processFoundItem(int32 item) { _engine->_screens->copyScreen(_engine->frontVideoBuffer, _engine->workVideoBuffer); - const int32 itemCameraX = _engine->_grid->newCameraX << 9; - const int32 itemCameraY = _engine->_grid->newCameraY << 8; - const int32 itemCameraZ = _engine->_grid->newCameraZ << 9; + const int32 itemCameraX = _engine->_grid->newCameraX * 512; + const int32 itemCameraY = _engine->_grid->newCameraY * 256; + const int32 itemCameraZ = _engine->_grid->newCameraZ * 512; _engine->_renderer->renderIsoModel(_engine->_scene->sceneHero->x - itemCameraX, _engine->_scene->sceneHero->y - itemCameraY, _engine->_scene->sceneHero->z - itemCameraZ, 0, 0x80, 0, _engine->_actor->bodyTable[_engine->_scene->sceneHero->entity]); _engine->_interface->setClip(_engine->_redraw->renderRect); - const int32 itemX = (_engine->_scene->sceneHero->x + 0x100) >> 9; - int32 itemY = _engine->_scene->sceneHero->y >> 8; + const int32 itemX = (_engine->_scene->sceneHero->x + 256) / 512; + int32 itemY = _engine->_scene->sceneHero->y / 256; if (_engine->_scene->sceneHero->brickShape() != ShapeType::kNone) { itemY++; } - const int32 itemZ = (_engine->_scene->sceneHero->z + 0x100) >> 9; + const int32 itemZ = (_engine->_scene->sceneHero->z + 256) / 512; _engine->_grid->drawOverModelActor(itemX, itemY, itemZ); _engine->flip(); diff --git a/engines/twine/scene/grid.cpp b/engines/twine/scene/grid.cpp index 995fa125616..b82170cf088 100644 --- a/engines/twine/scene/grid.cpp +++ b/engines/twine/scene/grid.cpp @@ -570,9 +570,9 @@ void Grid::drawBrickSprite(int32 index, int32 posX, int32 posY, const uint8 *ptr } uint8 *Grid::getBlockBuffer(int32 x, int32 y, int32 z) { - const int32 tempX = (x + 0x100) >> 9; - const int32 tempY = y >> 8; - const int32 tempZ = (z + 0x100) >> 9; + const int32 tempX = (x + 256) / 512; + const int32 tempY = y / 256; + const int32 tempZ = (z + 256) / 512; return blockBuffer + tempY * 2 + tempX * GRID_SIZE_Y * 2 + (tempZ * GRID_SIZE_X) * GRID_SIZE_Y * 2; } @@ -592,7 +592,7 @@ const uint8 *Grid::getBlockBufferGround(int32 x, int32 y, int32 z, int16 &ground } _engine->_collision->collisionY = tempY; - ground = (int16)((tempY + 1) << 8); + ground = (int16)((tempY + 1) * 256); return ptr; } @@ -659,9 +659,9 @@ void Grid::drawColumnGrid(int32 blockIdx, int32 brickBlockIdx, int32 x, int32 y, void Grid::redrawGrid() { blockMap *map = (blockMap *)blockBuffer; - cameraX = newCameraX << 9; - cameraY = newCameraY << 8; - cameraZ = newCameraZ << 9; + cameraX = newCameraX * 512; + cameraY = newCameraY * 256; + cameraZ = newCameraZ * 512; _engine->_renderer->projectPositionOnScreen(-cameraX, -cameraY, -cameraZ); @@ -723,9 +723,9 @@ ShapeType Grid::getBrickShape(int32 x, int32 y, int32 z) { } void Grid::updateCollisionCoordinates(int32 x, int32 y, int32 z) { - _engine->_collision->collisionX = (x + 0x100) >> 9; - _engine->_collision->collisionY = y >> 8; - _engine->_collision->collisionZ = (z + 0x100) >> 9; + _engine->_collision->collisionX = (x + 256) / 512; + _engine->_collision->collisionY = y / 256; + _engine->_collision->collisionZ = (z + 256) / 512; } ShapeType Grid::getBrickShapeFull(int32 x, int32 y, int32 z, int32 y2) { @@ -761,7 +761,7 @@ ShapeType Grid::getBrickShapeFull(int32 x, int32 y, int32 z, int32 y2) { const ShapeType brickShape = (ShapeType)*blockPtr; - const int32 newY = (y2 + 255) >> 8; + const int32 newY = (y2 + 255) / 256; int32 currY = _engine->_collision->collisionY; for (int32 i = 0; i < newY; i++) { @@ -781,7 +781,7 @@ ShapeType Grid::getBrickShapeFull(int32 x, int32 y, int32 z, int32 y2) { } const ShapeType brickShape = (ShapeType) * (blockBufferPtr + 1); - const int32 newY = (y2 + 255) >> 8; + const int32 newY = (y2 + 255) / 256; int32 currY = _engine->_collision->collisionY; for (int32 i = 0; i < newY; i++) { diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h index 7d6d2720b71..9e87a088b79 100644 --- a/engines/twine/scene/grid.h +++ b/engines/twine/scene/grid.h @@ -74,6 +74,9 @@ struct BrickEntry { /** Grip Z size */ #define GRID_SIZE_Z GRID_SIZE_X +#define BRICK_SIZE 512 +#define BRICK_HEIGHT 256 + #define NUMBRICKENTRIES (1 + (SCREEN_WIDTH + 24) / 24) #define MAXBRICKS 150 diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp index 5ac36448124..dea9f941a80 100644 --- a/engines/twine/scene/scene.cpp +++ b/engines/twine/scene/scene.cpp @@ -356,9 +356,9 @@ void Scene::changeScene() { _sampleAmbienceTime = 0; ActorStruct *followedActor = getActor(currentlyFollowedActor); - _engine->_grid->newCameraX = followedActor->x >> 9; - _engine->_grid->newCameraY = followedActor->y >> 8; - _engine->_grid->newCameraZ = followedActor->z >> 9; + _engine->_grid->newCameraX = followedActor->x / 512; + _engine->_grid->newCameraY = followedActor->y / 256; + _engine->_grid->newCameraZ = followedActor->z / 512; _engine->_gameState->magicBallIdx = -1; _engine->_movements->heroMoved = true; diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp index af597a397ad..934a5e29d41 100644 --- a/engines/twine/script/script_life_v1.cpp +++ b/engines/twine/script/script_life_v1.cpp @@ -708,9 +708,9 @@ static int32 lCAM_FOLLOW(TwinEEngine *engine, LifeScriptContext &ctx) { if (engine->_scene->currentlyFollowedActor != followedActorIdx) { const ActorStruct *followedActor = engine->_scene->getActor(followedActorIdx); - engine->_grid->newCameraX = followedActor->x >> 9; - engine->_grid->newCameraY = followedActor->y >> 8; - engine->_grid->newCameraZ = followedActor->z >> 9; + engine->_grid->newCameraX = followedActor->x / 512; + engine->_grid->newCameraY = followedActor->y / 256; + engine->_grid->newCameraZ = followedActor->z / 512; engine->_scene->currentlyFollowedActor = followedActorIdx; engine->_redraw->reqBgRedraw = true; diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp index af703b0c1a7..adba2cd3b3e 100644 --- a/engines/twine/twine.cpp +++ b/engines/twine/twine.cpp @@ -614,13 +614,13 @@ void TwinEEngine::centerScreenOnActor() { } ActorStruct *actor = _scene->getActor(_scene->currentlyFollowedActor); - _renderer->projectPositionOnScreen(actor->x - (_grid->newCameraX << 9), - actor->y - (_grid->newCameraY << 8), - actor->z - (_grid->newCameraZ << 9)); + _renderer->projectPositionOnScreen(actor->x - (_grid->newCameraX * 512), + actor->y - (_grid->newCameraY * 256), + actor->z - (_grid->newCameraZ * 512)); if (_renderer->projPosX < 80 || _renderer->projPosX >= SCREEN_WIDTH - 60 || _renderer->projPosY < 80 || _renderer->projPosY >= SCREEN_HEIGHT - 50) { - _grid->newCameraX = ((actor->x + 0x100) >> 9) + (((actor->x + 0x100) >> 9) - _grid->newCameraX) / 2; - _grid->newCameraY = actor->y >> 8; - _grid->newCameraZ = ((actor->z + 0x100) >> 9) + (((actor->z + 0x100) >> 9) - _grid->newCameraZ) / 2; + _grid->newCameraX = ((actor->x + 256) / 512) + (((actor->x + 256) / 512) - _grid->newCameraX) / 2; + _grid->newCameraY = actor->y / 256; + _grid->newCameraZ = ((actor->z + 256) / 512) + (((actor->z + 256) / 512) - _grid->newCameraZ) / 2; if (_grid->newCameraX >= GRID_SIZE_X) { _grid->newCameraX = GRID_SIZE_X - 1; @@ -732,9 +732,9 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration // Recenter Screen if (_input->isActionActive(TwinEActionType::RecenterScreenOnTwinsen) && !disableScreenRecenter) { const ActorStruct *currentlyFollowedActor = _scene->getActor(_scene->currentlyFollowedActor); - _grid->newCameraX = currentlyFollowedActor->x >> 9; - _grid->newCameraY = currentlyFollowedActor->y >> 8; - _grid->newCameraZ = currentlyFollowedActor->z >> 9; + _grid->newCameraX = currentlyFollowedActor->x / 512; + _grid->newCameraY = currentlyFollowedActor->y / 256; + _grid->newCameraZ = currentlyFollowedActor->z / 512; _redraw->reqBgRedraw = true; } @@ -876,9 +876,9 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration _scene->needChangeScene = _scene->currentSceneIdx; _gameState->inventoryMagicPoints = _gameState->magicLevelIdx * 20; - _grid->newCameraX = (_scene->sceneHero->x >> 9); - _grid->newCameraY = (_scene->sceneHero->y >> 8); - _grid->newCameraZ = (_scene->sceneHero->z >> 9); + _grid->newCameraX = (_scene->sceneHero->x / 512); + _grid->newCameraY = (_scene->sceneHero->y / 256); + _grid->newCameraZ = (_scene->sceneHero->z / 512); _scene->heroPositionType = ScenePositionType::kReborn;