diff --git a/CONFIG/res/maindialog.ui b/CONFIG/res/maindialog.ui index 12739f27..66e2b52e 100644 --- a/CONFIG/res/maindialog.ui +++ b/CONFIG/res/maindialog.ui @@ -455,11 +455,6 @@ Unknown - Broken - - - Fake Mosaic - - diff --git a/LEGO1/lego/legoomni/include/mxtransitionmanager.h b/LEGO1/lego/legoomni/include/mxtransitionmanager.h index 7c31daf7..dd9dc9ed 100644 --- a/LEGO1/lego/legoomni/include/mxtransitionmanager.h +++ b/LEGO1/lego/legoomni/include/mxtransitionmanager.h @@ -48,8 +48,7 @@ class MxTransitionManager : public MxCore { e_mosaic, e_wipeDown, e_windows, - e_broken, // Unknown what this is supposed to be, it locks the game up - e_fakeMosaic + e_broken // Unknown what this is supposed to be, it locks the game up }; MxResult StartTransition(TransitionType p_animationType, MxS32 p_speed, MxBool p_doCopy, MxBool p_playMusicInAnim); @@ -69,7 +68,6 @@ class MxTransitionManager : public MxCore { void WipeDownTransition(); void WindowsTransition(); void BrokenTransition(); - void FakeMosaicTransition(); void SubmitCopyRect(LPDDSURFACEDESC p_ddsc); void SetupCopyRect(LPDDSURFACEDESC p_ddsc); diff --git a/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp b/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp index 04805092..7431033e 100644 --- a/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp @@ -84,9 +84,6 @@ MxResult MxTransitionManager::Tickle() case e_broken: BrokenTransition(); break; - case e_fakeMosaic: - FakeMosaicTransition(); - break; } return SUCCESS; } @@ -664,166 +661,3 @@ void MxTransitionManager::configureMxTransitionManager(TransitionType p_transiti { g_transitionManagerConfig = p_transitionManagerConfig; } - -int g_colorOffset; -int GetColorIndexWithLocality(int p_col, int p_row) -{ - int islandX = p_col / 8; - int islandY = p_row / 8; // Dvide screen in 8x6 tiles - - int island = islandY * 8 + islandX; // tile id - - if (SDL_rand(3) > island / 8) { - return 6 + SDL_rand(2); // emulate sky - } - - if (SDL_rand(16) > 2) { - island += SDL_rand(3) - 1 + (SDL_rand(3) - 1) * 8; // blure tiles - } - - int hash = (island + g_colorOffset) * 2654435761u; - int scrambled = (hash >> 16) % 32; - - int finalIndex = scrambled + SDL_rand(3) - 1; - return abs(finalIndex) % 32; -} - -void MxTransitionManager::FakeMosaicTransition() -{ - static LPDIRECTDRAWSURFACE g_fakeTranstionSurface = nullptr; - - if (m_animationTimer == 16) { - m_animationTimer = 0; - if (g_fakeTranstionSurface) { - g_fakeTranstionSurface->Release(); - g_fakeTranstionSurface = nullptr; - } - EndTransition(TRUE); - return; - } - else { - if (m_animationTimer == 0) { - g_colorOffset = SDL_rand(32); - - // Same init/shuffle steps as the dissolve transition, except that - // we are using big blocky pixels and only need 64 columns. - MxS32 i; - for (i = 0; i < 64; i++) { - m_columnOrder[i] = i; - } - - for (i = 0; i < 64; i++) { - MxS32 swap = SDL_rand(64); - MxU16 t = m_columnOrder[i]; - m_columnOrder[i] = m_columnOrder[swap]; - m_columnOrder[swap] = t; - } - - // The same is true here. We only need 48 rows. - for (i = 0; i < 48; i++) { - m_randomShift[i] = SDL_rand(64); - } - DDSURFACEDESC mainDesc = {}; - mainDesc.dwSize = sizeof(mainDesc); - if (m_ddSurface->GetSurfaceDesc(&mainDesc) != DD_OK) { - return; - } - - DDSURFACEDESC tempDesc = {}; - tempDesc.dwSize = sizeof(tempDesc); - tempDesc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS; - tempDesc.dwWidth = 64; - tempDesc.dwHeight = 48; - tempDesc.ddpfPixelFormat = mainDesc.ddpfPixelFormat; - tempDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - - if (MVideoManager()->GetDirectDraw()->CreateSurface(&tempDesc, &g_fakeTranstionSurface, nullptr) != DD_OK) { - return; - } - - DWORD fillColor = 0x00000000; - switch (mainDesc.ddpfPixelFormat.dwRGBBitCount) { - case 8: - fillColor = 0x10; - break; - case 16: - fillColor = RGB555_CREATE(0x1f, 0, 0x1f); - break; - } - - DDBLTFX bltFx = {}; - bltFx.dwSize = sizeof(bltFx); - bltFx.dwFillColor = fillColor; - g_fakeTranstionSurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltFx); - - DDCOLORKEY key = {}; - key.dwColorSpaceLowValue = key.dwColorSpaceHighValue = fillColor; - g_fakeTranstionSurface->SetColorKey(DDCKEY_SRCBLT, &key); - } - - // Run one tick of the animation - DDSURFACEDESC ddsd; - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - - HRESULT res = g_fakeTranstionSurface->Lock(NULL, &ddsd, DDLOCK_WAIT | DDLOCK_WRITEONLY, NULL); - if (res == DDERR_SURFACELOST) { - g_fakeTranstionSurface->Restore(); - res = g_fakeTranstionSurface->Lock(NULL, &ddsd, DDLOCK_WAIT | DDLOCK_WRITEONLY, NULL); - } - - if (res == DD_OK) { - SubmitCopyRect(&ddsd); - - static const MxU8 g_palette[32][3] = { - {0x00, 0x00, 0x00}, {0x12, 0x1e, 0x50}, {0x00, 0x22, 0x6c}, {0x14, 0x2d, 0x9f}, {0x0e, 0x36, 0xb0}, - {0x0e, 0x39, 0xd0}, {0x47, 0x96, 0xe2}, {0x79, 0xaa, 0xca}, {0xff, 0xff, 0xff}, {0xc9, 0xcd, 0xcb}, - {0xad, 0xad, 0xab}, {0xa6, 0x91, 0x8e}, {0xaf, 0x59, 0x49}, {0xc0, 0x00, 0x00}, {0xab, 0x18, 0x18}, - {0x61, 0x0c, 0x0c}, {0x04, 0x38, 0x12}, {0x2c, 0x67, 0x28}, {0x4a, 0xb4, 0x6b}, {0x94, 0xb7, 0x7c}, - {0xb6, 0xb9, 0x87}, {0x52, 0x4a, 0x67}, {0x87, 0x8d, 0x8a}, {0xa6, 0x91, 0x8e}, {0xf8, 0xee, 0xdc}, - {0xf4, 0xe2, 0xc3}, {0x87, 0x8d, 0x8a}, {0xba, 0x9f, 0x12}, {0xb5, 0x83, 0x00}, {0x6a, 0x44, 0x27}, - {0x36, 0x37, 0x34}, {0x2b, 0x23, 0x0f} - }; - - MxS32 bytesPerPixel = ddsd.ddpfPixelFormat.dwRGBBitCount / 8; - - for (MxS32 col = 0; col < 64; col++) { - // Select 4 columns on each tick - if (m_animationTimer * 4 > m_columnOrder[col]) { - continue; - } - - if (m_animationTimer * 4 + 3 < m_columnOrder[col]) { - continue; - } - - for (MxS32 row = 0; row < 48; row++) { - MxS32 x = (m_randomShift[row] + col) % 64; - MxU8* dest = (MxU8*) ddsd.lpSurface + row * ddsd.lPitch + x * bytesPerPixel; - - const MxU8 paletteIndex = GetColorIndexWithLocality(col, row); - const MxU8* color = g_palette[paletteIndex]; - switch (bytesPerPixel) { - case 1: - *dest = paletteIndex; - break; - case 2: - *((MxU16*) dest) = RGB555_CREATE(color[2], color[1], color[0]); - break; - default: - *((MxU32*) dest) = RGB8888_CREATE(color[2], color[1], color[0], 255); - break; - } - } - } - - SetupCopyRect(&ddsd); - g_fakeTranstionSurface->Unlock(ddsd.lpSurface); - - RECT srcRect = {0, 0, 64, 48}; - m_ddSurface->Blt(&g_fullScreenRect, g_fakeTranstionSurface, &srcRect, DDBLT_WAIT | DDBLT_KEYSRC, NULL); - - m_animationTimer++; - } - } -}