diff options
author | Strangerke | 2016-08-17 07:56:28 +0200 |
---|---|---|
committer | Bendegúz Nagy | 2016-08-26 23:02:22 +0200 |
commit | e4e30eaafd0d40313bd4d693f535267ea532d1be (patch) | |
tree | 9e52e2cfecce67191b155fc09b0ec644cda76444 | |
parent | 72912d4a5f035b42751ecc9b98bbd8aa353828e6 (diff) | |
download | scummvm-rg350-e4e30eaafd0d40313bd4d693f535267ea532d1be.tar.gz scummvm-rg350-e4e30eaafd0d40313bd4d693f535267ea532d1be.tar.bz2 scummvm-rg350-e4e30eaafd0d40313bd4d693f535267ea532d1be.zip |
DM: Refactor f107_isDrawnWallOrnAnAlcove
-rw-r--r-- | engines/dm/gfx.cpp | 260 |
1 files changed, 117 insertions, 143 deletions
diff --git a/engines/dm/gfx.cpp b/engines/dm/gfx.cpp index 0a8e40331a..38a43257c9 100644 --- a/engines/dm/gfx.cpp +++ b/engines/dm/gfx.cpp @@ -2603,159 +2603,133 @@ bool DisplayMan::f107_isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWall }; static Box boxChampionPortraitOnWall = Box(96, 127, 35, 63); // G0109_s_Graphic558_Box_ChampionPortraitOnWall -#define AP0116_i_CharacterCount wallOrnOrd -#define AP0116_i_WallOrnamentIndex wallOrnOrd - int16 L0088_i_Multiple; -#define AL0088_i_NativeBitmapIndex L0088_i_Multiple -#define AL0088_i_UnreadableTextLineCount L0088_i_Multiple - int16 L0089_i_Multiple; -#define AL0089_i_WallOrnamentCoordinateSetIndex L0089_i_Multiple -#define AL0089_i_FountainOrnamentIndex L0089_i_Multiple -#define AL0089_i_PixelWidth L0089_i_Multiple -#define AL0089_i_X L0089_i_Multiple - byte* L0090_puc_Multiple; -#define AL0090_puc_String L0090_puc_Multiple -#define AL0090_puc_CoordinateSet L0090_puc_Multiple - byte* L0091_puc_Multiple; -#define AL0091_puc_Character L0091_puc_Multiple -#define AL0091_puc_Bitmap L0091_puc_Multiple -#define AL0091_puc_CoordinateSet L0091_puc_Multiple - byte* L0092_puc_Bitmap; - int16 L0093_i_CoordinateSetOffset; - bool L0094_B_FlipHorizontal; - bool L0095_B_IsInscription; - bool L0096_B_IsAlcove; - int16 L0097_i_TextLineIndex; - Frame L0098_s_Frame; - unsigned char L0099_auc_InscriptionString[70]; - - - if (wallOrnOrd) { - wallOrnOrd--; - AL0088_i_NativeBitmapIndex = _g101_currMapWallOrnInfo[AP0116_i_WallOrnamentIndex][k0_NativeBitmapIndex]; - AL0090_puc_CoordinateSet = g205_WallOrnCoordSets[AL0089_i_WallOrnamentCoordinateSetIndex = _g101_currMapWallOrnInfo[AP0116_i_WallOrnamentIndex][k1_CoordinateSet]][viewWallIndex]; - L0096_B_IsAlcove = _vm->_dungeonMan->f149_isWallOrnAnAlcove(AP0116_i_WallOrnamentIndex); - if (L0095_B_IsInscription = (AP0116_i_WallOrnamentIndex == _vm->_dungeonMan->_g265_currMapInscriptionWallOrnIndex)) { - _vm->_dungeonMan->f168_decodeText((char*)L0099_auc_InscriptionString, _g290_inscriptionThing, k0_TextTypeInscription); - } - if (viewWallIndex >= k10_ViewWall_D1L_RIGHT) { - if (viewWallIndex == k12_ViewWall_D1C_FRONT) { - if (L0095_B_IsInscription) { - f132_blitToBitmap(_g700_bitmapWallSet_Wall_D1LCR, _g296_bitmapViewport, boxWallPatchBehindInscription, 94, 28, _frameWalls163[k6_ViewSquare_D1C]._srcByteWidth, k112_byteWidthViewport, kM1_ColorNoTransparency, _frameWalls163[k6_ViewSquare_D1C]._srcHeight, k136_heightViewport); - AL0090_puc_String = L0099_auc_InscriptionString; - L0092_puc_Bitmap = f489_getNativeBitmapOrGraphic(k120_InscriptionFont); - L0097_i_TextLineIndex = 0; - do { - AP0116_i_CharacterCount = 0; - AL0091_puc_Character = AL0090_puc_String; - while (*AL0091_puc_Character++ < 128) { /* Hexadecimal: 0x80 (Megamax C does not support hexadecimal character constants) */ - AP0116_i_CharacterCount++; - } - L0098_s_Frame._box._x2 = (L0098_s_Frame._box._x1 = 112 - (AP0116_i_CharacterCount << 2)) + 7; - L0098_s_Frame._box._y1 = (L0098_s_Frame._box._y2 = inscriptionLineY[L0097_i_TextLineIndex++]) - 7; - while (AP0116_i_CharacterCount--) { - f132_blitToBitmap(L0092_puc_Bitmap, _g296_bitmapViewport, L0098_s_Frame._box, *AL0090_puc_String++ << 3, 0, k144_byteWidth, k112_byteWidthViewport, k10_ColorFlesh, 8, k136_heightViewport); - L0098_s_Frame._box._x1 += 8; - L0098_s_Frame._box._x2 += 8; - } - } while (*AL0090_puc_String++ != 129); /* Hexadecimal: 0x81 (Megamax C does not support hexadecimal character constants) */ - goto T0107031; - } - AL0088_i_NativeBitmapIndex++; - { - Box tmpBox(AL0090_puc_CoordinateSet); - _vm->_dungeonMan->_g291_dungeonViewClickableBoxes[k5_ViewCellDoorButtonOrWallOrn] = tmpBox; - } - _vm->_dungeonMan->_g286_isFacingAlcove = L0096_B_IsAlcove; - _vm->_dungeonMan->_g287_isFacingViAltar = - (AP0116_i_WallOrnamentIndex == _g266_currMapViAltarIndex); - _vm->_dungeonMan->_g288_isFacingFountain = false; - for (AL0089_i_FountainOrnamentIndex = 0; AL0089_i_FountainOrnamentIndex < k1_FountainOrnCount; AL0089_i_FountainOrnamentIndex++) { - if (_g268_currMapFountainOrnIndices[AL0089_i_FountainOrnamentIndex] == AP0116_i_WallOrnamentIndex) { - _vm->_dungeonMan->_g288_isFacingFountain = true; - break; + + if (!wallOrnOrd) + return false; + + int16 wallOrnamentIndex = wallOrnOrd; + wallOrnOrd--; + int16 nativeBitmapIndex = _g101_currMapWallOrnInfo[wallOrnamentIndex][k0_NativeBitmapIndex]; + int16 wallOrnamentCoordinateSetIndex = _g101_currMapWallOrnInfo[wallOrnamentIndex][k1_CoordinateSet]; + byte *coordinateSet = g205_WallOrnCoordSets[wallOrnamentCoordinateSetIndex][viewWallIndex]; + bool isAlcove = _vm->_dungeonMan->f149_isWallOrnAnAlcove(wallOrnamentIndex); + bool isInscription = (wallOrnamentIndex == _vm->_dungeonMan->_g265_currMapInscriptionWallOrnIndex); + + unsigned char inscriptionString[70]; + if (isInscription) + _vm->_dungeonMan->f168_decodeText((char*)inscriptionString, _g290_inscriptionThing, k0_TextTypeInscription); + + byte *blitBitmap; + int16 blitX; + if (viewWallIndex >= k10_ViewWall_D1L_RIGHT) { + if (viewWallIndex == k12_ViewWall_D1C_FRONT) { + if (isInscription) { + f132_blitToBitmap(_g700_bitmapWallSet_Wall_D1LCR, _g296_bitmapViewport, boxWallPatchBehindInscription, 94, 28, _frameWalls163[k6_ViewSquare_D1C]._srcByteWidth, k112_byteWidthViewport, kM1_ColorNoTransparency, _frameWalls163[k6_ViewSquare_D1C]._srcHeight, k136_heightViewport); + byte *parseString = inscriptionString; + byte *fontBitmap = f489_getNativeBitmapOrGraphic(k120_InscriptionFont); + int16 textLineIndex = 0; + do { + int16 characterCount = 0; + byte *tmpString = parseString; + while (*tmpString++ < 128) /* Hexadecimal: 0x80 (Megamax C does not support hexadecimal character constants) */ + characterCount++; + + Frame newFrame; + newFrame._box._x2 = (newFrame._box._x1 = 112 - (characterCount << 2)) + 7; + newFrame._box._y1 = (newFrame._box._y2 = inscriptionLineY[textLineIndex++]) - 7; + while (characterCount--) { + f132_blitToBitmap(fontBitmap, _g296_bitmapViewport, newFrame._box, *parseString++ << 3, 0, k144_byteWidth, k112_byteWidthViewport, k10_ColorFlesh, 8, k136_heightViewport); + newFrame._box._x1 += 8; + newFrame._box._x2 += 8; } - } - } - AL0091_puc_Bitmap = f489_getNativeBitmapOrGraphic(AL0088_i_NativeBitmapIndex); - if (viewWallIndex == k11_ViewWall_D1R_LEFT) { - f99_copyBitmapAndFlipHorizontal(AL0091_puc_Bitmap, _g74_tmpBitmap, AL0090_puc_CoordinateSet[4], AL0090_puc_CoordinateSet[5]); - AL0091_puc_Bitmap = _g74_tmpBitmap; + } while (*parseString++ != 129); /* Hexadecimal: 0x81 (Megamax C does not support hexadecimal character constants) */ + return isAlcove; } - AL0089_i_X = 0; - } else { - L0093_i_CoordinateSetOffset = 0; - if (L0094_B_FlipHorizontal = (viewWallIndex == k6_ViewWall_D2R_LEFT) || (viewWallIndex == k1_ViewWall_D3R_LEFT)) { - AL0091_puc_CoordinateSet = g205_WallOrnCoordSets[AL0089_i_WallOrnamentCoordinateSetIndex][k11_ViewWall_D1R_LEFT]; - } else { - if ((viewWallIndex == k5_ViewWall_D2L_RIGHT) || (viewWallIndex == k0_ViewWall_D3L_RIGHT)) { - AL0091_puc_CoordinateSet = g205_WallOrnCoordSets[AL0089_i_WallOrnamentCoordinateSetIndex][k10_ViewWall_D1L_RIGHT]; - } else { - AL0088_i_NativeBitmapIndex++; - AL0091_puc_CoordinateSet = g205_WallOrnCoordSets[AL0089_i_WallOrnamentCoordinateSetIndex][k12_ViewWall_D1C_FRONT]; - if (viewWallIndex == k7_ViewWall_D2L_FRONT) { - L0093_i_CoordinateSetOffset = 6; - } else { - if (viewWallIndex == k9_ViewWall_D2R_FRONT) { - L0093_i_CoordinateSetOffset = -6; - } - } - } - } - AL0089_i_PixelWidth = (AL0090_puc_CoordinateSet + L0093_i_CoordinateSetOffset)[1] - (AL0090_puc_CoordinateSet + L0093_i_CoordinateSetOffset)[0]; - if (!f491_isDerivedBitmapInCache(AP0116_i_WallOrnamentIndex = k4_DerivedBitmapFirstWallOrnament + (AP0116_i_WallOrnamentIndex << 2) + wallOrnDerivedBitmapIndexIncrement[viewWallIndex])) { - L0092_puc_Bitmap = f489_getNativeBitmapOrGraphic(AL0088_i_NativeBitmapIndex); - f129_blitToBitmapShrinkWithPalChange(L0092_puc_Bitmap, f492_getDerivedBitmap(AP0116_i_WallOrnamentIndex), AL0091_puc_CoordinateSet[4] << 1, AL0091_puc_CoordinateSet[5], AL0090_puc_CoordinateSet[4] << 1, AL0090_puc_CoordinateSet[5], (viewWallIndex <= k4_ViewWall_D3R_FRONT) ? _palChangesDoorButtonAndWallOrnD3 : _palChangesDoorButtonAndWallOrnD2); - f493_addDerivedBitmap(AP0116_i_WallOrnamentIndex); - } - AL0091_puc_Bitmap = f492_getDerivedBitmap(AP0116_i_WallOrnamentIndex); - if (L0094_B_FlipHorizontal) { - f99_copyBitmapAndFlipHorizontal(AL0091_puc_Bitmap, _g74_tmpBitmap, AL0090_puc_CoordinateSet[4], AL0090_puc_CoordinateSet[5]); - AL0091_puc_Bitmap = _g74_tmpBitmap; - AL0089_i_X = 15 - (AL0089_i_X & 0x000F); - } else { - if (viewWallIndex == k7_ViewWall_D2L_FRONT) { - AL0089_i_X -= AL0090_puc_CoordinateSet[1] - AL0090_puc_CoordinateSet[0]; - } else { - AL0089_i_X = 0; + nativeBitmapIndex++; + Box tmpBox(coordinateSet); + _vm->_dungeonMan->_g291_dungeonViewClickableBoxes[k5_ViewCellDoorButtonOrWallOrn] = tmpBox; + + _vm->_dungeonMan->_g286_isFacingAlcove = isAlcove; + _vm->_dungeonMan->_g287_isFacingViAltar = + (wallOrnamentIndex == _g266_currMapViAltarIndex); + _vm->_dungeonMan->_g288_isFacingFountain = false; + for (int i = 0; i < k1_FountainOrnCount; i++) { + if (_g268_currMapFountainOrnIndices[i] == wallOrnamentIndex) { + _vm->_dungeonMan->_g288_isFacingFountain = true; + break; } } } - byte byteFrame[6]; - if (L0095_B_IsInscription) { - L0092_puc_Bitmap = AL0090_puc_CoordinateSet; - AL0090_puc_String = L0099_auc_InscriptionString; - AL0088_i_UnreadableTextLineCount = 0; - do { - while (*AL0090_puc_String < 128) { /* Hexadecimal: 0x80 (Megamax C does not support hexadecimal character constants) */ - AL0090_puc_String++; - } - AL0088_i_UnreadableTextLineCount++; - } while (*AL0090_puc_String++ != 129); /* Hexadecimal: 0x81 (Megamax C does not support hexadecimal character constants) */ - AL0090_puc_CoordinateSet = L0092_puc_Bitmap; - if (AL0088_i_UnreadableTextLineCount < 4) { - for (uint16 i = 0; i < 6; ++i) - byteFrame[i] = AL0090_puc_CoordinateSet[i]; - AL0090_puc_CoordinateSet = byteFrame; - AL0090_puc_CoordinateSet[3] = unreadableInscriptionBoxY2[wallOrnDerivedBitmapIndexIncrement[viewWallIndex] * 3 + AL0088_i_UnreadableTextLineCount - 1]; - } + blitBitmap = f489_getNativeBitmapOrGraphic(nativeBitmapIndex); + if (viewWallIndex == k11_ViewWall_D1R_LEFT) { + f99_copyBitmapAndFlipHorizontal(blitBitmap, _g74_tmpBitmap, coordinateSet[4], coordinateSet[5]); + blitBitmap = _g74_tmpBitmap; } - { - Box tmpBox(AL0090_puc_CoordinateSet); - f132_blitToBitmap(AL0091_puc_Bitmap, _g296_bitmapViewport, tmpBox, - AL0089_i_X, 0, - AL0090_puc_CoordinateSet[4], k112_byteWidthViewport, k10_ColorFlesh, AL0090_puc_CoordinateSet[5], k136_heightViewport); + blitX = 0; + } else { + byte *wallOrnCoordinateSet; + int coordinateSetOffset = 0; + bool flipHorizontal = (viewWallIndex == k6_ViewWall_D2R_LEFT) || (viewWallIndex == k1_ViewWall_D3R_LEFT); + if (flipHorizontal) + wallOrnCoordinateSet = g205_WallOrnCoordSets[wallOrnamentCoordinateSetIndex][k11_ViewWall_D1R_LEFT]; + else if ((viewWallIndex == k5_ViewWall_D2L_RIGHT) || (viewWallIndex == k0_ViewWall_D3L_RIGHT)) + wallOrnCoordinateSet = g205_WallOrnCoordSets[wallOrnamentCoordinateSetIndex][k10_ViewWall_D1L_RIGHT]; + else { + nativeBitmapIndex++; + wallOrnCoordinateSet = g205_WallOrnCoordSets[wallOrnamentCoordinateSetIndex][k12_ViewWall_D1C_FRONT]; + if (viewWallIndex == k7_ViewWall_D2L_FRONT) + coordinateSetOffset = 6; + else if (viewWallIndex == k9_ViewWall_D2R_FRONT) + coordinateSetOffset = -6; + } + blitX = (coordinateSet + coordinateSetOffset)[1] - (coordinateSet + coordinateSetOffset)[0]; + if (!f491_isDerivedBitmapInCache(wallOrnamentIndex = k4_DerivedBitmapFirstWallOrnament + (wallOrnamentIndex << 2) + wallOrnDerivedBitmapIndexIncrement[viewWallIndex])) { + byte *shrinkBitmap = f489_getNativeBitmapOrGraphic(nativeBitmapIndex); + f129_blitToBitmapShrinkWithPalChange(shrinkBitmap, f492_getDerivedBitmap(wallOrnamentIndex), wallOrnCoordinateSet[4] << 1, wallOrnCoordinateSet[5], coordinateSet[4] << 1, coordinateSet[5], (viewWallIndex <= k4_ViewWall_D3R_FRONT) ? _palChangesDoorButtonAndWallOrnD3 : _palChangesDoorButtonAndWallOrnD2); + f493_addDerivedBitmap(wallOrnamentIndex); } + blitBitmap = f492_getDerivedBitmap(wallOrnamentIndex); + if (flipHorizontal) { + f99_copyBitmapAndFlipHorizontal(blitBitmap, _g74_tmpBitmap, coordinateSet[4], coordinateSet[5]); + blitBitmap = _g74_tmpBitmap; + blitX = 15 - (blitX & 0x000F); + } else if (viewWallIndex == k7_ViewWall_D2L_FRONT) + blitX -= coordinateSet[1] - coordinateSet[0]; + else + blitX = 0; + } - if ((viewWallIndex == k12_ViewWall_D1C_FRONT) && _g289_championPortraitOrdinal--) { - f132_blitToBitmap(f489_getNativeBitmapOrGraphic(k26_ChampionPortraitsIndice), _g296_bitmapViewport, boxChampionPortraitOnWall, - (_g289_championPortraitOrdinal & 0x0007) << 5, (_g289_championPortraitOrdinal >> 3) * 29, - k128_byteWidth, k112_byteWidthViewport, k1_ColorDarkGary, 87, k136_heightViewport); /* A portrait is 32x29 pixels */ + byte byteFrame[6]; + if (isInscription) { + byte *oldCoordSet = coordinateSet; + byte *parseString = inscriptionString; + int16 unreadableTextLineCount = 0; + do { + while (*parseString < 128) { /* Hexadecimal: 0x80 (Megamax C does not support hexadecimal character constants) */ + parseString++; + } + unreadableTextLineCount++; + } while (*parseString++ != 129); /* Hexadecimal: 0x81 (Megamax C does not support hexadecimal character constants) */ + coordinateSet = oldCoordSet; + if (unreadableTextLineCount < 4) { + for (uint16 i = 0; i < 6; ++i) + byteFrame[i] = coordinateSet[i]; + coordinateSet = byteFrame; + coordinateSet[3] = unreadableInscriptionBoxY2[wallOrnDerivedBitmapIndexIncrement[viewWallIndex] * 3 + unreadableTextLineCount - 1]; } -T0107031: - return L0096_B_IsAlcove; } - return false; + + Box tmpBox(coordinateSet); + f132_blitToBitmap(blitBitmap, _g296_bitmapViewport, tmpBox, blitX, 0, + coordinateSet[4], k112_byteWidthViewport, k10_ColorFlesh, coordinateSet[5], k136_heightViewport); + + if ((viewWallIndex == k12_ViewWall_D1C_FRONT) && _g289_championPortraitOrdinal--) { + f132_blitToBitmap(f489_getNativeBitmapOrGraphic(k26_ChampionPortraitsIndice), _g296_bitmapViewport, boxChampionPortraitOnWall, + (_g289_championPortraitOrdinal & 0x0007) << 5, (_g289_championPortraitOrdinal >> 3) * 29, + k128_byteWidth, k112_byteWidthViewport, k1_ColorDarkGary, 87, k136_heightViewport); /* A portrait is 32x29 pixels */ + } + + return isAlcove; } |