aboutsummaryrefslogtreecommitdiff
path: root/engines/dm/inventory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dm/inventory.cpp')
-rw-r--r--engines/dm/inventory.cpp235
1 files changed, 109 insertions, 126 deletions
diff --git a/engines/dm/inventory.cpp b/engines/dm/inventory.cpp
index 9c12835973..efe1e04a9f 100644
--- a/engines/dm/inventory.cpp
+++ b/engines/dm/inventory.cpp
@@ -273,7 +273,7 @@ void InventoryMan::closeChest() {
bool processFirstChestSlot = true;
if (_openChest == Thing::_none)
return;
- Container *container = (Container*)dunMan.getThingData(_openChest);
+ Container *container = (Container *)dunMan.getThingData(_openChest);
_openChest = Thing::_none;
container->getSlot() = Thing::_endOfList;
Thing prevThing;
@@ -294,8 +294,8 @@ void InventoryMan::closeChest() {
}
}
-void InventoryMan::drawPanelScrollTextLine(int16 yPos, char* text) {
- for (char* iter = text; *iter != '\0'; ++iter) {
+void InventoryMan::drawPanelScrollTextLine(int16 yPos, char *text) {
+ for (char *iter = text; *iter != '\0'; ++iter) {
if ((*iter >= 'A') && (*iter <= 'Z'))
*iter -= 64;
else if (*iter >= '{') // this branch is CHANGE5_03_IMPROVEMENT
@@ -304,7 +304,7 @@ void InventoryMan::drawPanelScrollTextLine(int16 yPos, char* text) {
_vm->_textMan->printToViewport(162 - (6 * strlen(text) / 2), yPos, k0_ColorBlack, text, k15_ColorWhite);
}
-void InventoryMan::drawPanelScroll(Scroll* scroll) {
+void InventoryMan::drawPanelScroll(Scroll *scroll) {
DisplayMan &dispMan = *_vm->_displayMan;
char stringFirstLine[300];
@@ -352,7 +352,7 @@ void InventoryMan::drawPanelScroll(Scroll* scroll) {
}
}
-void InventoryMan::openAndDrawChest(Thing thingToOpen, Container* chest, bool isPressingEye) {
+void InventoryMan::openAndDrawChest(Thing thingToOpen, Container *chest, bool isPressingEye) {
DisplayMan &dispMan = *_vm->_displayMan;
ObjectMan &objMan = *_vm->_objectMan;
@@ -393,7 +393,7 @@ void InventoryMan::drawIconToViewport(IconIndice iconIndex, int16 xPos, int16 yP
_vm->_displayMan->blitToViewport(iconBitmap, boxIcon, k8_byteWidth, kM1_ColorNoTransparency, 16);
}
-void InventoryMan::buildObjectAttributeString(int16 potentialAttribMask, int16 actualAttribMask, const char** attribStrings, char* destString, const char* prefixString, const char* suffixString) {
+void InventoryMan::buildObjectAttributeString(int16 potentialAttribMask, int16 actualAttribMask, const char **attribStrings, char *destString, const char *prefixString, const char *suffixString) {
uint16 identicalBitCount = 0;
int16 attribMask = 1;
for (uint16 stringIndex = 0; stringIndex < 16; stringIndex++, attribMask <<= 1) {
@@ -489,7 +489,7 @@ void InventoryMan::drawPanelObject(Thing thingToDraw, bool pressingEye) {
drawPanelObjectDescriptionString("\f"); // form feed
ThingType thingType = thingToDraw.getType();
if (thingType == k7_ScrollThingType)
- drawPanelScroll((Scroll*)rawThingPtr);
+ drawPanelScroll((Scroll *)rawThingPtr);
else if (thingType == k9_ContainerThingType)
openAndDrawChest(thingToDraw, (Container *)rawThingPtr, pressingEye);
else {
@@ -693,7 +693,7 @@ void InventoryMan::setDungeonViewPalette() {
Thing slotThing = curChampion->_slots[slotIndex];
if ((_vm->_objectMan->getObjectType(slotThing) >= k4_IconIndiceWeaponTorchUnlit) &&
(_vm->_objectMan->getObjectType(slotThing) <= k7_IconIndiceWeaponTorchLit)) {
- Weapon *curWeapon = (Weapon*)_vm->_dungeonMan->getThingData(slotThing);
+ Weapon *curWeapon = (Weapon *)_vm->_dungeonMan->getThingData(slotThing);
*curTorchLightPower = curWeapon->getChargeCount();
} else {
*curTorchLightPower = 0;
@@ -779,9 +779,9 @@ void InventoryMan::decreaseTorchesLightPower() {
}
void InventoryMan::drawChampionSkillsAndStatistics() {
- static const char* statisticNamesEN[7] = {"L", "STRENGTH", "DEXTERITY", "WISDOM", "VITALITY", "ANTI-MAGIC", "ANTI-FIRE"};
- static const char* statisticNamesDE[7] = {"L", "STAERKE", "FLINKHEIT", "WEISHEIT", "VITALITAET", "ANTI-MAGIE", "ANTI-FEUER"};
- static const char* statisticNamesFR[7] = {"L", "FORCE", "DEXTERITE", "SAGESSE", "VITALITE", "ANTI-MAGIE", "ANTI-FEU"};
+ static const char *statisticNamesEN[7] = {"L", "STRENGTH", "DEXTERITY", "WISDOM", "VITALITY", "ANTI-MAGIC", "ANTI-FIRE"};
+ static const char *statisticNamesDE[7] = {"L", "STAERKE", "FLINKHEIT", "WEISHEIT", "VITALITAET", "ANTI-MAGIE", "ANTI-FEUER"};
+ static const char *statisticNamesFR[7] = {"L", "FORCE", "DEXTERITE", "SAGESSE", "VITALITE", "ANTI-MAGIE", "ANTI-FEU"};
const char **statisticNames;
@@ -864,7 +864,7 @@ void InventoryMan::drawStopPressingEye() {
}
void InventoryMan::clickOnMouth() {
- static int16 G0242_ai_Graphic559_FoodAmounts[8] = {
+ static int16 foodAmounts[8] = {
500, /* Apple */
600, /* Corn */
650, /* Bread */
@@ -872,27 +872,8 @@ void InventoryMan::clickOnMouth() {
550, /* Screamer Slice */
350, /* Worm round */
990, /* Drumstick / Shank */
- 1400}; /* Dragon steak */
-
- Thing L1078_T_Thing;
- uint16 L1079_ui_IconIndex;
- uint16 L1080_ui_ChampionIndex;
- bool L1081_B_RemoveObjectFromLeaderHand;
- Junk* L1082_ps_Junk;
- Champion* L1083_ps_Champion;
- TimelineEvent L1084_s_Event;
- uint16 L1085_ui_Multiple;
-#define AL1085_ui_PotionPower L1085_ui_Multiple
-#define AL1085_ui_AdjustedPotionPower L1085_ui_Multiple
-#define AL1085_ui_Counter L1085_ui_Multiple
- uint16 L1086_ui_Counter;
- int16 L1087_i_Wounds;
- uint16 L1088_ui_Multiple;
-#define AL1088_ui_ThingType L1088_ui_Multiple
-#define AL1088_ui_Mana L1088_ui_Multiple
-#define AL1088_ui_HealWoundIterationCount L1088_ui_Multiple
- uint16 L1089_ui_Weight;
-
+ 1400 /* Dragon steak */
+ };
if (_vm->_championMan->_leaderEmptyHanded) {
if (_panelContent == k0_PanelContentFoodWaterPoisoned)
@@ -916,113 +897,116 @@ void InventoryMan::clickOnMouth() {
if (_vm->_championMan->_candidateChampionOrdinal)
return;
- L1078_T_Thing = _vm->_championMan->_leaderHandObject;
- if (!getFlag(_vm->_dungeonMan->_objectInfos[_vm->_dungeonMan->getObjectInfoIndex(L1078_T_Thing)]._allowedSlots, k0x0001_ObjectAllowedSlotMouth))
+ Thing handThing = _vm->_championMan->_leaderHandObject;
+ if (!getFlag(_vm->_dungeonMan->_objectInfos[_vm->_dungeonMan->getObjectInfoIndex(handThing)]._allowedSlots, k0x0001_ObjectAllowedSlotMouth))
return;
- L1079_ui_IconIndex = _vm->_objectMan->getIconIndex(L1078_T_Thing);
- AL1088_ui_ThingType = L1078_T_Thing.getType();
- L1089_ui_Weight = _vm->_dungeonMan->getObjectWeight(L1078_T_Thing);
- L1080_ui_ChampionIndex = _vm->ordinalToIndex(_inventoryChampionOrdinal);
- L1083_ps_Champion = &_vm->_championMan->_champions[L1080_ui_ChampionIndex];
- L1082_ps_Junk = (Junk*)_vm->_dungeonMan->getThingData(L1078_T_Thing);
- if ((L1079_ui_IconIndex >= k8_IconIndiceJunkWater) && (L1079_ui_IconIndex <= k9_IconIndiceJunkWaterSkin)) {
- if (!(L1082_ps_Junk->getChargeCount())) {
+ uint16 iconIndex = _vm->_objectMan->getIconIndex(handThing);
+ uint16 handThingType = handThing.getType();
+ uint16 handThingWeight = _vm->_dungeonMan->getObjectWeight(handThing);
+ uint16 championIndex = _vm->ordinalToIndex(_inventoryChampionOrdinal);
+ Champion *curChampion = &_vm->_championMan->_champions[championIndex];
+ Junk *junkData = (Junk *)_vm->_dungeonMan->getThingData(handThing);
+ bool removeObjectFromLeaderHand;
+ if ((iconIndex >= k8_IconIndiceJunkWater) && (iconIndex <= k9_IconIndiceJunkWaterSkin)) {
+ if (!(junkData->getChargeCount()))
return;
- }
- L1083_ps_Champion->_water = MIN(L1083_ps_Champion->_water + 800, 2048);
- L1082_ps_Junk->setChargeCount(L1082_ps_Junk->getChargeCount() - 1);
- L1081_B_RemoveObjectFromLeaderHand = false;
- } else {
- if (AL1088_ui_ThingType == k8_PotionThingType) {
- L1081_B_RemoveObjectFromLeaderHand = false;
- } else {
- L1082_ps_Junk->setNextThing(Thing::_none);
- L1081_B_RemoveObjectFromLeaderHand = true;
- }
+
+ curChampion->_water = MIN(curChampion->_water + 800, 2048);
+ junkData->setChargeCount(junkData->getChargeCount() - 1);
+ removeObjectFromLeaderHand = false;
+ } else if (handThingType == k8_PotionThingType)
+ removeObjectFromLeaderHand = false;
+ else {
+ junkData->setNextThing(Thing::_none);
+ removeObjectFromLeaderHand = true;
}
_vm->_eventMan->showMouse();
- if (L1081_B_RemoveObjectFromLeaderHand) {
+ if (removeObjectFromLeaderHand)
_vm->_championMan->getObjectRemovedFromLeaderHand();
- }
- if (AL1088_ui_ThingType == k8_PotionThingType) {
- AL1085_ui_PotionPower = ((Potion*)L1082_ps_Junk)->getPower();
- L1086_ui_Counter = ((511 - AL1085_ui_PotionPower) / (32 + (AL1085_ui_PotionPower + 1) / 8)) >> 1;
- AL1085_ui_AdjustedPotionPower = (AL1085_ui_PotionPower / 25) + 8; /* Value between 8 and 18 */
- switch (((Potion*)L1082_ps_Junk)->getType()) {
+
+ if (handThingType == k8_PotionThingType) {
+ uint16 potionPower = ((Potion *)junkData)->getPower();
+ uint16 counter = ((511 - potionPower) / (32 + (potionPower + 1) / 8)) >> 1;
+ uint16 adjustedPotionPower = (potionPower / 25) + 8; /* Value between 8 and 18 */
+
+ switch (((Potion *)junkData)->getType()) {
case k6_PotionTypeRos:
- adjustStatisticCurrentValue(L1083_ps_Champion, k2_ChampionStatDexterity, AL1085_ui_AdjustedPotionPower);
+ adjustStatisticCurrentValue(curChampion, k2_ChampionStatDexterity, adjustedPotionPower);
break;
case k7_PotionTypeKu:
- adjustStatisticCurrentValue(L1083_ps_Champion, k1_ChampionStatStrength, (((Potion*)L1082_ps_Junk)->getPower() / 35) + 5); /* Value between 5 and 12 */
+ adjustStatisticCurrentValue(curChampion, k1_ChampionStatStrength, (((Potion *)junkData)->getPower() / 35) + 5); /* Value between 5 and 12 */
break;
case k8_PotionTypeDane:
- adjustStatisticCurrentValue(L1083_ps_Champion, k3_ChampionStatWisdom, AL1085_ui_AdjustedPotionPower);
+ adjustStatisticCurrentValue(curChampion, k3_ChampionStatWisdom, adjustedPotionPower);
break;
case k9_PotionTypeNeta:
- adjustStatisticCurrentValue(L1083_ps_Champion, k4_ChampionStatVitality, AL1085_ui_AdjustedPotionPower);
+ adjustStatisticCurrentValue(curChampion, k4_ChampionStatVitality, adjustedPotionPower);
break;
case k10_PotionTypeAntivenin:
- _vm->_championMan->unpoison(L1080_ui_ChampionIndex);
+ _vm->_championMan->unpoison(championIndex);
break;
case k11_PotionTypeMon:
- L1083_ps_Champion->_currStamina += MIN(L1083_ps_Champion->_maxStamina - L1083_ps_Champion->_currStamina, L1083_ps_Champion->_maxStamina / L1086_ui_Counter);
+ curChampion->_currStamina += MIN(curChampion->_maxStamina - curChampion->_currStamina, curChampion->_maxStamina / counter);
break;
- case k12_PotionTypeYa:
- AL1085_ui_AdjustedPotionPower += AL1085_ui_AdjustedPotionPower >> 1;
- if (L1083_ps_Champion->_shieldDefense > 50) {
- AL1085_ui_AdjustedPotionPower >>= 2;
+ case k12_PotionTypeYa: {
+ adjustedPotionPower += adjustedPotionPower >> 1;
+ if (curChampion->_shieldDefense > 50)
+ adjustedPotionPower >>= 2;
+
+ curChampion->_shieldDefense += adjustedPotionPower;
+ TimelineEvent newEvent;
+ newEvent._type = k72_TMEventTypeChampionShield;
+ setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + (adjustedPotionPower * adjustedPotionPower));
+ newEvent._priority = championIndex;
+ newEvent._B._defense = adjustedPotionPower;
+ _vm->_timeline->addEventGetEventIndex(&newEvent);
+ setFlag(curChampion->_attributes, k0x1000_ChampionAttributeStatusBox);
}
- L1083_ps_Champion->_shieldDefense += AL1085_ui_AdjustedPotionPower;
- L1084_s_Event._type = k72_TMEventTypeChampionShield;
- setMapAndTime(L1084_s_Event._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + (AL1085_ui_AdjustedPotionPower * AL1085_ui_AdjustedPotionPower));
- L1084_s_Event._priority = L1080_ui_ChampionIndex;
- L1084_s_Event._B._defense = AL1085_ui_AdjustedPotionPower;
- _vm->_timeline->addEventGetEventIndex(&L1084_s_Event);
- setFlag(L1083_ps_Champion->_attributes, k0x1000_ChampionAttributeStatusBox);
break;
- case k13_PotionTypeEe:
- AL1088_ui_Mana = MIN(900, (L1083_ps_Champion->_currMana + AL1085_ui_AdjustedPotionPower) + (AL1085_ui_AdjustedPotionPower - 8));
- if (AL1088_ui_Mana > L1083_ps_Champion->_maxMana) {
- AL1088_ui_Mana -= (AL1088_ui_Mana - MAX(L1083_ps_Champion->_currMana, L1083_ps_Champion->_maxMana)) >> 1;
+ case k13_PotionTypeEe: {
+ uint16 mana = MIN(900, (curChampion->_currMana + adjustedPotionPower) + (adjustedPotionPower - 8));
+ if (mana > curChampion->_maxMana)
+ mana -= (mana - MAX(curChampion->_currMana, curChampion->_maxMana)) >> 1;
+
+ curChampion->_currMana = mana;
}
- L1083_ps_Champion->_currMana = AL1088_ui_Mana;
break;
- case k14_PotionTypeVi:
- AL1088_ui_HealWoundIterationCount = MAX(1, (((Potion*)L1082_ps_Junk)->getPower() / 42));
- L1083_ps_Champion->_currHealth += L1083_ps_Champion->_maxHealth / L1086_ui_Counter;
- L1087_i_Wounds = L1083_ps_Champion->_wounds;
- if (L1087_i_Wounds) { /* If the champion is wounded */
- L1086_ui_Counter = 10;
+ case k14_PotionTypeVi: {
+ uint16 healWoundIterationCount = MAX(1, (((Potion *)junkData)->getPower() / 42));
+ curChampion->_currHealth += curChampion->_maxHealth / counter;
+ int16 wounds = curChampion->_wounds;
+ if (wounds) { /* If the champion is wounded */
+ counter = 10;
do {
- for (AL1085_ui_Counter = 0; AL1085_ui_Counter < AL1088_ui_HealWoundIterationCount; AL1085_ui_Counter++) {
- L1083_ps_Champion->_wounds &= _vm->getRandomNumber(65536);
- }
- AL1088_ui_HealWoundIterationCount = 1;
- } while ((L1087_i_Wounds == L1083_ps_Champion->_wounds) && --L1086_ui_Counter); /* Loop until at least one wound is healed or there are no more heal iterations */
+ for (uint16 i = 0; i < healWoundIterationCount; i++)
+ curChampion->_wounds &= _vm->getRandomNumber(65536);
+
+ healWoundIterationCount = 1;
+ } while ((wounds == curChampion->_wounds) && --counter); /* Loop until at least one wound is healed or there are no more heal iterations */
+ }
+ setFlag(curChampion->_attributes, k0x0200_ChampionAttributeLoad | k0x2000_ChampionAttributeWounds);
}
- setFlag(L1083_ps_Champion->_attributes, k0x0200_ChampionAttributeLoad | k0x2000_ChampionAttributeWounds);
break;
case k15_PotionTypeWaterFlask:
- L1083_ps_Champion->_water = MIN(L1083_ps_Champion->_water + 1600, 2048);
+ curChampion->_water = MIN(curChampion->_water + 1600, 2048);
break;
default:
break;
}
- ((Potion*)L1082_ps_Junk)->setType(k20_PotionTypeEmptyFlask);
- } else if ((L1079_ui_IconIndex >= k168_IconIndiceJunkApple) && (L1079_ui_IconIndex < k176_IconIndiceJunkIronKey)) {
- L1083_ps_Champion->_food = MIN(L1083_ps_Champion->_food + G0242_ai_Graphic559_FoodAmounts[L1079_ui_IconIndex - k168_IconIndiceJunkApple], 2048);
- }
+ ((Potion *)junkData)->setType(k20_PotionTypeEmptyFlask);
+ } else if ((iconIndex >= k168_IconIndiceJunkApple) && (iconIndex < k176_IconIndiceJunkIronKey))
+ curChampion->_food = MIN(curChampion->_food + foodAmounts[iconIndex - k168_IconIndiceJunkApple], 2048);
- if (L1083_ps_Champion->_currStamina > L1083_ps_Champion->_maxStamina)
- L1083_ps_Champion->_currStamina = L1083_ps_Champion->_maxStamina;
+ if (curChampion->_currStamina > curChampion->_maxStamina)
+ curChampion->_currStamina = curChampion->_maxStamina;
- if (L1083_ps_Champion->_currHealth > L1083_ps_Champion->_maxHealth)
- L1083_ps_Champion->_currHealth = L1083_ps_Champion->_maxHealth;
+ if (curChampion->_currHealth > curChampion->_maxHealth)
+ curChampion->_currHealth = curChampion->_maxHealth;
- if (L1081_B_RemoveObjectFromLeaderHand) {
- for (L1086_ui_Counter = 5; --L1086_ui_Counter; _vm->delay(8)) { /* Animate mouth icon */
- _vm->_objectMan->drawIconToScreen(k205_IconIndiceMouthOpen + !(L1086_ui_Counter & 0x0001), 56, 46);
+ if (removeObjectFromLeaderHand) {
+ for (uint16 i = 5; --i; _vm->delay(8)) { /* Animate mouth icon */
+ _vm->_objectMan->drawIconToScreen(k205_IconIndiceMouthOpen + !(i & 0x0001), 56, 46);
_vm->_eventMan->discardAllInput();
if (_vm->_engineShouldQuit)
return;
@@ -1030,36 +1014,35 @@ void InventoryMan::clickOnMouth() {
}
} else {
_vm->_championMan->drawChangedObjectIcons();
- _vm->_championMan->_champions[_vm->_championMan->_leaderIndex]._load += _vm->_dungeonMan->getObjectWeight(L1078_T_Thing) - L1089_ui_Weight;
+ _vm->_championMan->_champions[_vm->_championMan->_leaderIndex]._load += _vm->_dungeonMan->getObjectWeight(handThing) - handThingWeight;
setFlag(_vm->_championMan->_champions[_vm->_championMan->_leaderIndex]._attributes, k0x0200_ChampionAttributeLoad);
}
_vm->_sound->requestPlay(k08_soundSWALLOW, _vm->_dungeonMan->_partyMapX, _vm->_dungeonMan->_partyMapY, k0_soundModePlayImmediately);
- setFlag(L1083_ps_Champion->_attributes, k0x0100_ChampionAttributeStatistics);
- if (_panelContent == k0_PanelContentFoodWaterPoisoned) {
- setFlag(L1083_ps_Champion->_attributes, k0x0800_ChampionAttributePanel);
- }
- _vm->_championMan->drawChampionState((ChampionIndex)L1080_ui_ChampionIndex);
+ setFlag(curChampion->_attributes, k0x0100_ChampionAttributeStatistics);
+
+ if (_panelContent == k0_PanelContentFoodWaterPoisoned)
+ setFlag(curChampion->_attributes, k0x0800_ChampionAttributePanel);
+
+ _vm->_championMan->drawChampionState((ChampionIndex)championIndex);
_vm->_eventMan->hideMouse();
}
-void InventoryMan::adjustStatisticCurrentValue(Champion* champ, uint16 statIndex, int16 valueDelta) {
- int16 L1077_i_Multiple;
-#define AL1077_i_CurrentValue L1077_i_Multiple
-#define AL1077_i_Delta L1077_i_Multiple
-
+void InventoryMan::adjustStatisticCurrentValue(Champion *champ, uint16 statIndex, int16 valueDelta) {
+ int16 delta;
if (valueDelta >= 0) {
- if ((AL1077_i_CurrentValue = champ->_statistics[statIndex][k1_ChampionStatCurrent]) > 120) {
+ int16 currentValue = champ->_statistics[statIndex][k1_ChampionStatCurrent];
+ if (currentValue > 120) {
valueDelta >>= 1;
- if (AL1077_i_CurrentValue > 150) {
+ if (currentValue > 150) {
valueDelta >>= 1;
}
valueDelta++;
}
- AL1077_i_Delta = MIN(valueDelta, (int16)(170 - AL1077_i_CurrentValue));
+ delta = MIN(valueDelta, (int16)(170 - currentValue));
} else { /* BUG0_00 Useless code. The function is always called with valueDelta having a positive value */
- AL1077_i_Delta = MAX(valueDelta, int16(champ->_statistics[statIndex][k2_ChampionStatMinimum] - champ->_statistics[statIndex][k1_ChampionStatCurrent]));
+ delta = MAX(valueDelta, int16(champ->_statistics[statIndex][k2_ChampionStatMinimum] - champ->_statistics[statIndex][k1_ChampionStatCurrent]));
}
- champ->_statistics[statIndex][k1_ChampionStatCurrent] += AL1077_i_Delta;
+ champ->_statistics[statIndex][k1_ChampionStatCurrent] += delta;
}
void InventoryMan::clickOnEye() {
@@ -1077,13 +1060,13 @@ void InventoryMan::clickOnEye() {
_vm->_eventMan->hideMouse();
_vm->delay(8);
drawIconToViewport(k203_IconIndiceEyeLooking, 12, 13);
- if (_vm->_championMan->_leaderEmptyHanded) {
+ if (_vm->_championMan->_leaderEmptyHanded)
drawChampionSkillsAndStatistics();
- } else {
+ else {
_vm->_objectMan->clearLeaderObjectName();
drawPanelObject(_vm->_championMan->_leaderHandObject, true);
}
_vm->_displayMan->drawViewport(k0_viewportNotDungeonView);
-
}
+
}