aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBendegúz Nagy2016-07-29 16:07:56 +0200
committerBendegúz Nagy2016-08-26 23:02:22 +0200
commitec28573a3b8dac8728f89cf7d9f221f901812388 (patch)
treed3e6fc6a5d85a7d7484b69af18d6ac9f6180c759
parent734abf8d48a1a0d9c00d27801d6be9e54854d702 (diff)
downloadscummvm-rg350-ec28573a3b8dac8728f89cf7d9f221f901812388.tar.gz
scummvm-rg350-ec28573a3b8dac8728f89cf7d9f221f901812388.tar.bz2
scummvm-rg350-ec28573a3b8dac8728f89cf7d9f221f901812388.zip
DM: Add f385_drawActionDamage
-rw-r--r--engines/dm/TODOs/todo.txt2
-rw-r--r--engines/dm/gfx.h2
-rw-r--r--engines/dm/menus.cpp76
-rw-r--r--engines/dm/menus.h1
4 files changed, 78 insertions, 3 deletions
diff --git a/engines/dm/TODOs/todo.txt b/engines/dm/TODOs/todo.txt
index b6e3ad8e27..46928ac0f0 100644
--- a/engines/dm/TODOs/todo.txt
+++ b/engines/dm/TODOs/todo.txt
@@ -41,7 +41,7 @@ Finish stuff:
Add dialogs
Add failcheck to saveing and loading
F0444_STARTEND_Endgame
- F0385_MENUS_DrawActionDamage
+
Refactoring
Places implementing mini mainloop and where input doesn't really matter should call discardInput instead of processInput
diff --git a/engines/dm/gfx.h b/engines/dm/gfx.h
index 3af375d493..57216981c5 100644
--- a/engines/dm/gfx.h
+++ b/engines/dm/gfx.h
@@ -212,6 +212,7 @@ enum GraphicIndice {
k10_MenuActionAreaIndice = 10, // @ C010_GRAPHIC_MENU_ACTION_AREA
k11_MenuSpellAreLinesIndice = 11, // @ C011_GRAPHIC_MENU_SPELL_AREA_LINES
k13_MovementArrowsIndice = 13, // @ C013_GRAPHIC_MOVEMENT_ARROWS
+ k14_damageToCreatureIndice = 14, // @ C014_GRAPHIC_DAMAGE_TO_CREATURE
k15_damageToChampionSmallIndice = 15, // @ C015_GRAPHIC_DAMAGE_TO_CHAMPION_SMALL
k16_damageToChampionBig = 16, // @ C016_GRAPHIC_DAMAGE_TO_CHAMPION_BIG
k17_InventoryGraphicIndice = 17, // @ C017_GRAPHIC_INVENTORY
@@ -276,6 +277,7 @@ enum GraphicIndice {
k557_FontGraphicIndice = 557 // @ C557_GRAPHIC_FONT
};
+extern byte g17_PalChangesNoChanges[16];
extern uint16 gK57_PalSwoosh[16]; // @ K0057_aui_Palette_Swoosh
extern uint16 gK150_PalMousePointer[16]; // @ K0150_aui_Palette_MousePointer
extern uint16 g19_PalCredits[16]; // @ G0019_aui_Graphic562_Palette_Credits
diff --git a/engines/dm/menus.cpp b/engines/dm/menus.cpp
index 0f4bde5f21..513b8fb0f0 100644
--- a/engines/dm/menus.cpp
+++ b/engines/dm/menus.cpp
@@ -228,7 +228,7 @@ void MenuMan::f390_refreshActionAreaAndSetChampDirMaxDamageReceived() {
if (_g508_refreshActionArea) {
if (!champMan._g506_actingChampionOrdinal) {
if (_g513_actionDamage) {
- warning(false, "MISSING CODE: F0385_MENUS_DrawActionDamage");
+ f385_drawActionDamage(_g513_actionDamage);
_g513_actionDamage = 0;
} else {
_g509_actionAreaContainsIcons = true;
@@ -403,7 +403,7 @@ void MenuMan::f394_setMagicCasterAndDrawSpellArea(int16 champIndex) {
}
if (_vm->_championMan->_g514_magicCasterChampionIndex == kM1_ChampionNone) {
_vm->_eventMan->f78_showMouse();
- _vm->_displayMan->f21_blitToScreen(_vm->_displayMan->f489_getNativeBitmapOrGraphic(k9_MenuSpellAreaBackground), &g0_BoxSpellArea, k48_byteWidth, kM1_ColorNoTransparency, 33);
+ _vm->_displayMan->f21_blitToScreen(_vm->_displayMan->f489_getNativeBitmapOrGraphic(k9_MenuSpellAreaBackground), &g0_BoxSpellArea, k48_byteWidth, kM1_ColorNoTransparency, 33);
_vm->_eventMan->f77_hideMouse();
}
if (champIndex == kM1_ChampionNone) {
@@ -1666,4 +1666,76 @@ int16 MenuMan::f382_getActionObjectChargeCount() {
return 1;
}
}
+
+void MenuMan::f385_drawActionDamage(int16 damage) {
+ static Box G0502_s_Graphic560_Box_ActionAreaMediumDamage = {242, 305, 81, 117};
+ static Box G0503_s_Graphic560_Box_ActionAreaSmallDamage = {251, 292, 81, 117};
+
+ uint16 L1174_ui_Multiple;
+#define AL1174_ui_DerivedBitmapIndex L1174_ui_Multiple
+#define AL1174_ui_CharacterIndex L1174_ui_Multiple
+ int16 L1175_i_ByteWidth;
+ int16 L1176_i_Multiple;
+#define AL1176_i_X L1176_i_Multiple
+#define AL1176_i_PixelWidth L1176_i_Multiple
+ byte* L1177_puc_Bitmap;
+ unsigned char* L1178_puc_Multiple;
+#define AL1178_puc_String L1178_puc_Multiple
+#define AL1178_puc_Bitmap L1178_puc_Multiple
+ char L1179_ac_String[6];
+ Box* L1180_ps_Box;
+ int16 L1643_i_Width;
+
+ _vm->_eventMan->f78_showMouse();
+ _vm->_displayMan->_g578_useByteBoxCoordinates = false;
+ _vm->_displayMan->D24_fillScreenBox(g1_BoxActionArea, k0_ColorBlack);
+ if (damage < 0) {
+ if (damage == kM1_damageCantReach) {
+ AL1176_i_X = 242;
+ AL1178_puc_String = (unsigned char*)"CAN'T REACH"; // TODO: localization
+ } else {
+ AL1176_i_X = 248;
+ AL1178_puc_String = (unsigned char*)"NEED AMMO"; // TODO: localization
+ }
+ _vm->_textMan->f53_printToLogicalScreen(AL1176_i_X, 100, k4_ColorCyan, k0_ColorBlack, (char *)AL1178_puc_String);
+ } else {
+ if (damage > 40) {
+ L1180_ps_Box = &g499_BoxActionArea3ActionMenu;
+ L1177_puc_Bitmap = _vm->_displayMan->f489_getNativeBitmapOrGraphic(k14_damageToCreatureIndice);
+ L1175_i_ByteWidth = k48_byteWidth;
+ L1643_i_Width = 45;
+ } else {
+ if (damage > 15) {
+ AL1174_ui_DerivedBitmapIndex = k2_DerivedBitmapDamageToCreatureMedium;
+ AL1176_i_PixelWidth = 64;
+ L1175_i_ByteWidth = k32_byteWidth;
+ L1180_ps_Box = &G0502_s_Graphic560_Box_ActionAreaMediumDamage;
+ } else {
+ AL1174_ui_DerivedBitmapIndex = k3_DerivedBitmapDamageToCreatureSmall;
+ AL1176_i_PixelWidth = 42;
+ L1175_i_ByteWidth = k24_byteWidth;
+ L1180_ps_Box = &G0503_s_Graphic560_Box_ActionAreaSmallDamage;
+ }
+ L1643_i_Width = 37;
+ if (!_vm->_displayMan->f491_isDerivedBitmapInCache(AL1174_ui_DerivedBitmapIndex)) {
+ AL1178_puc_Bitmap = _vm->_displayMan->f489_getNativeBitmapOrGraphic(k14_damageToCreatureIndice);
+ _vm->_displayMan->f129_blitToBitmapShrinkWithPalChange(AL1178_puc_Bitmap, L1177_puc_Bitmap = _vm->_displayMan->f492_getDerivedBitmap(AL1174_ui_DerivedBitmapIndex), 96, 45, AL1176_i_PixelWidth, 37, g17_PalChangesNoChanges);
+ _vm->_displayMan->f493_addDerivedBitmap(AL1174_ui_DerivedBitmapIndex);
+ } else {
+ L1177_puc_Bitmap = _vm->_displayMan->f492_getDerivedBitmap(AL1174_ui_DerivedBitmapIndex);
+ }
+ }
+ _vm->_displayMan->f21_blitToScreen(L1177_puc_Bitmap, L1180_ps_Box, L1175_i_ByteWidth, kM1_ColorNoTransparency, L1643_i_Width);
+ /* Convert damage value to string */
+ AL1174_ui_CharacterIndex = 5;
+ AL1176_i_X = 274;
+ L1179_ac_String[5] = '\0';
+ do {
+ L1179_ac_String[--AL1174_ui_CharacterIndex] = '0' + (damage % 10);
+ AL1176_i_X -= 3;
+ } while (damage /= 10);
+ _vm->_textMan->f53_printToLogicalScreen(AL1176_i_X, 100, k4_ColorCyan, k0_ColorBlack, &L1179_ac_String[AL1174_ui_CharacterIndex]);
+ }
+ _vm->_eventMan->f77_hideMouse();
+}
}
diff --git a/engines/dm/menus.h b/engines/dm/menus.h
index f0a1c2bf58..6652fdc291 100644
--- a/engines/dm/menus.h
+++ b/engines/dm/menus.h
@@ -116,6 +116,7 @@ public:
void f389_processCommands116To119_setActingChampion(uint16 champIndex); // @ F0389_MENUS_ProcessCommands116To119_SetActingChampion
void f383_setActionList(ActionSet *actionSet); // @ F0383_MENUS_SetActionList
int16 f382_getActionObjectChargeCount(); // @ F0382_MENUS_GetActionObjectChargeCount
+ void f385_drawActionDamage(int16 damage); // @ F0385_MENUS_DrawActionDamage
};
}