aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/dm/champion.cpp8
-rw-r--r--engines/dm/champion.h250
-rw-r--r--engines/dm/eventman.cpp2
-rw-r--r--engines/dm/gfx.cpp9
-rw-r--r--engines/dm/gfx.h8
-rw-r--r--engines/dm/module.mk3
6 files changed, 270 insertions, 10 deletions
diff --git a/engines/dm/champion.cpp b/engines/dm/champion.cpp
new file mode 100644
index 0000000000..b3a4ad5c73
--- /dev/null
+++ b/engines/dm/champion.cpp
@@ -0,0 +1,8 @@
+#include "champion.h"
+
+
+namespace DM {
+
+ChampionMan::ChampionMan(DMEngine *vm): _vm(vm) {}
+
+} \ No newline at end of file
diff --git a/engines/dm/champion.h b/engines/dm/champion.h
new file mode 100644
index 0000000000..ab6d4916ec
--- /dev/null
+++ b/engines/dm/champion.h
@@ -0,0 +1,250 @@
+#ifndef DM_CHAMPION_H
+#define DM_CHAMPION_H
+
+#include "dm.h"
+#include "gfx.h"
+
+namespace DM {
+
+enum ChampionIndice {
+ kChampionNone = -1, // @ CM1_CHAMPION_NONE
+ kChampionFirst = 0, // @ C00_CHAMPION_FIRST
+ kChmpionCloseInventory = 4, // @ C04_CHAMPION_CLOSE_INVENTORY
+ kChampionSpecialInventory = 5 // @ C05_CHAMPION_SPECIAL_INVENTORY
+};
+
+enum ChampionAttribute {
+ kChampionAttributNone = 0x0000, // @ MASK0x0000_NONE
+ kChampionAttributeDisableAction = 0x0008, // @ MASK0x0008_DISABLE_ACTION
+ kChampionAttributeMale = 0x0010, // @ MASK0x0010_MALE
+ kChampionAttributeNameTitle = 0x0080, // @ MASK0x0080_NAME_TITLE
+ kChampionAttributeStatistics = 0x0100, // @ MASK0x0100_STATISTICS
+ kChampionAttributeLoad = 0x0200, // @ MASK0x0200_LOAD
+ kChampionAttributeIcon = 0x0400, // @ MASK0x0400_ICON
+ kChampionAttributePanel = 0x0800, // @ MASK0x0800_PANEL
+ kChampionAttributeStatusBox = 0x1000, // @ MASK0x1000_STATUS_BOX
+ kChampionAttributeWounds = 0x2000, // @ MASK0x2000_WOUNDS
+ kChampionAttributeViewport = 0x4000, // @ MASK0x4000_VIEWPORT
+ kChampionAttributeActionHand = 0x8000 // @ MASK0x8000_ACTION_HAND
+};
+
+
+enum ChampionWound {
+ kChampionWoundNone = 0x0000, // @ MASK0x0000_NO_WOUND
+ kChampionWoundReadHand = 0x0001, // @ MASK0x0001_READY_HAND
+ kChampionWoundActionHand = 0x0002, // @ MASK0x0002_ACTION_HAND
+ kChampionWoundHead = 0x0004, // @ MASK0x0004_HEAD
+ kChampionWoundTorso = 0x0008, // @ MASK0x0008_TORSO
+ kChampionWoundLegs = 0x0010, // @ MASK0x0010_LEGS
+ kChampionWoundFeet = 0x0020 // @ MASK0x0020_FEET
+};
+
+
+enum ChampionStatisticType {
+ kChampionStatLuck = 0, // @ C0_STATISTIC_LUCK
+ kChampionStatStrength = 1, // @ C1_STATISTIC_STRENGTH
+ kChampionStatDexterity = 2, // @ C2_STATISTIC_DEXTERITY
+ kChampionStatWisdom = 3, // @ C3_STATISTIC_WISDOM
+ kChampionStatVitality = 4, // @ C4_STATISTIC_VITALITY
+ kChampionStatAntimagic = 5, // @ C5_STATISTIC_ANTIMAGIC
+ kChampionStatAntifire = 6, // @ C6_STATISTIC_ANTIFIRE
+ kChampionStatMana = 8 // @ C8_STATISTIC_MANA /* Used as a fake statistic index for objects granting a Mana bonus */
+};
+
+enum ChampionStatisticValue {
+ kChampionStatMaximum = 0, // @ C0_MAXIMUM
+ kChampionStatCurrent = 1, // @ C1_CURRENT
+ kChampionStatMinimum = 2 // @ C2_MINIMUM
+};
+
+enum ChampionSkill {
+ kChampionSkillFighter = 0, // @ C00_SKILL_FIGHTER
+ kChampionSkillNinja = 1, // @ C01_SKILL_NINJA
+ kChampionSkillPriest = 2, // @ C02_SKILL_PRIEST
+ kChampionSkillWizard = 3, // @ C03_SKILL_WIZARD
+ kChampionSkillSwing = 4, // @ C04_SKILL_SWING
+ kChampionSkillThrust = 5, // @ C05_SKILL_THRUST
+ kChampionSkillClub = 6, // @ C06_SKILL_CLUB
+ kChampionSkillParry = 7, // @ C07_SKILL_PARRY
+ kChampionSkillSteal = 8, // @ C08_SKILL_STEAL
+ kChampionSkillFight = 9, // @ C09_SKILL_FIGHT
+ kChampionSkillThrow = 10, // @ C10_SKILL_THROW
+ kChampionSkillShoot = 11, // @ C11_SKILL_SHOOT
+ kChampionSkillIdentify = 12, // @ C12_SKILL_IDENTIFY
+ kChampionSkillHeal = 13, // @ C13_SKILL_HEAL
+ kChampionSkillInfluence = 14, // @ C14_SKILL_INFLUENCE
+ kChampionSkillDefend = 15, // @ C15_SKILL_DEFEND
+ kChampionSkillFire = 16, // @ C16_SKILL_FIRE
+ kChampionSkillAir = 17, // @ C17_SKILL_AIR
+ kChampionSkillEarth = 18, // @ C18_SKILL_EARTH
+ kChampionSkillWater = 19 // @ C19_SKILL_WATER
+};
+
+enum ChampionSlot {
+ kChampionSlotLeaderHand = -1, // @ CM1_SLOT_LEADER_HAND
+ kChampionSlotReadyHand = 0, // @ C00_SLOT_READY_HAND
+ kChampionSlotActionHand = 1, // @ C01_SLOT_ACTION_HAND
+ kChampionSlotHead = 2, // @ C02_SLOT_HEAD
+ kChampionSlotTorso = 3, // @ C03_SLOT_TORSO
+ kChampionSlotLegs = 4, // @ C04_SLOT_LEGS
+ kChampionSlotFeet = 5, // @ C05_SLOT_FEET
+ kChampionSlotPouch_2 = 6, // @ C06_SLOT_POUCH_2
+ kChampionSlotQuiverLine_2_1 = 7, // @ C07_SLOT_QUIVER_LINE2_1
+ kChampionSlotQuiverLine_1_2 = 8, // @ C08_SLOT_QUIVER_LINE1_2
+ kChampionSlotQuiverLine_2_2 = 9, // @ C09_SLOT_QUIVER_LINE2_2
+ kChampionSlotNeck = 10, // @ C10_SLOT_NECK
+ kChampionSlotPouch_1 = 11, // @ C11_SLOT_POUCH_1
+ kChampionSlotQuiverLine_1_1 = 12, // @ C12_SLOT_QUIVER_LINE1_1
+ kChampionSlotBackpackLine_1_1 = 13, // @ C13_SLOT_BACKPACK_LINE1_1
+ kChampionSlotBackpackLine_2_2 = 14, // @ C14_SLOT_BACKPACK_LINE2_2
+ kChampionSlotBackpackLine_2_3 = 15, // @ C15_SLOT_BACKPACK_LINE2_3
+ kChampionSlotBackpackLine_2_4 = 16, // @ C16_SLOT_BACKPACK_LINE2_4
+ kChampionSlotBackpackLine_2_5 = 17, // @ C17_SLOT_BACKPACK_LINE2_5
+ kChampionSlotBackpackLine_2_6 = 18, // @ C18_SLOT_BACKPACK_LINE2_6
+ kChampionSlotBackpackLine_2_7 = 19, // @ C19_SLOT_BACKPACK_LINE2_7
+ kChampionSlotBackpackLine_2_8 = 20, // @ C20_SLOT_BACKPACK_LINE2_8
+ kChampionSlotBackpackLine_2_9 = 21, // @ C21_SLOT_BACKPACK_LINE2_9
+ kChampionSlotBackpackLine_1_2 = 22, // @ C22_SLOT_BACKPACK_LINE1_2
+ kChampionSlotBackpackLine_1_3 = 23, // @ C23_SLOT_BACKPACK_LINE1_3
+ kChampionSlotBackpackLine_1_4 = 24, // @ C24_SLOT_BACKPACK_LINE1_4
+ kChampionSlotBackpackLine_1_5 = 25, // @ C25_SLOT_BACKPACK_LINE1_5
+ kChampionSlotBackpackLine_1_6 = 26, // @ C26_SLOT_BACKPACK_LINE1_6
+ kChampionSlotBackpackLine_1_7 = 27, // @ C27_SLOT_BACKPACK_LINE1_7
+ kChampionSlotBackpackLine_1_8 = 28, // @ C28_SLOT_BACKPACK_LINE1_8
+ kChampionSlotBackpackLine_1_9 = 29, // @ C29_SLOT_BACKPACK_LINE1_9
+ kChampionSlotChest_1 = 30, // @ C30_SLOT_CHEST_1
+ kChampionSlotChest_2 = 31, // @ C31_SLOT_CHEST_2
+ kChampionSlotChest_3 = 32, // @ C32_SLOT_CHEST_3
+ kChampionSlotChest_4 = 33, // @ C33_SLOT_CHEST_4
+ kChampionSlotChest_5 = 34, // @ C34_SLOT_CHEST_5
+ kChampionSlotChest_6 = 35, // @ C35_SLOT_CHEST_6
+ kChampionSlotChest_7 = 36, // @ C36_SLOT_CHEST_7
+ kChampionSlotChest_8 = 37 // @ C37_SLOT_CHEST_8
+};
+
+enum ChampionAction {
+ kChampionActionN = 0, // @ C000_ACTION_N
+ kChampionActionBlock = 1, // @ C001_ACTION_BLOCK
+ kChampionActionChop = 2, // @ C002_ACTION_CHOP
+ kChampionActionX_C003 = 3, // @ C003_ACTION_X
+ kChampionActionBlowHorn = 4, // @ C004_ACTION_BLOW_HORN
+ kChampionActionFlip = 5, // @ C005_ACTION_FLIP
+ kChampionActionPunch = 6, // @ C006_ACTION_PUNCH
+ kChampionActionKick = 7, // @ C007_ACTION_KICK
+ kChampionActionWarCry = 8, // @ C008_ACTION_WAR_CRY
+ kChampionActionStab_C009 = 9, // @ C009_ACTION_STAB
+ kChampionActionClimbDown = 10, // @ C010_ACTION_CLIMB_DOWN
+ kChampionActionFreezeLife = 11, // @ C011_ACTION_FREEZE_LIFE
+ kChampionActionHit = 12, // @ C012_ACTION_HIT
+ kChampionActionSwing = 13, // @ C013_ACTION_SWING
+ kChampionActionStab_C014 = 14, // @ C014_ACTION_STAB
+ kChampionActionThrust = 15, // @ C015_ACTION_THRUST
+ kChampionActionJab = 16, // @ C016_ACTION_JAB
+ kChampionActionParry = 17, // @ C017_ACTION_PARRY
+ kChampionActionHack = 18, // @ C018_ACTION_HACK
+ kChampionActionBerzerk = 19, // @ C019_ACTION_BERZERK
+ kChampionActionFireball = 20, // @ C020_ACTION_FIREBALL
+ kChampionActionDispel = 21, // @ C021_ACTION_DISPELL
+ kChampionActionConfuse = 22, // @ C022_ACTION_CONFUSE
+ kChampionActionLightning = 23, // @ C023_ACTION_LIGHTNING
+ kChampionActionDisrupt = 24, // @ C024_ACTION_DISRUPT
+ kChampionActionMelee = 25, // @ C025_ACTION_MELEE
+ kChampionActionX_C026 = 26, // @ C026_ACTION_X
+ kChampionActionInvoke = 27, // @ C027_ACTION_INVOKE
+ kChampionActionSlash = 28, // @ C028_ACTION_SLASH
+ kChampionActionCleave = 29, // @ C029_ACTION_CLEAVE
+ kChampionActionBash = 30, // @ C030_ACTION_BASH
+ kChampionActionStun = 31, // @ C031_ACTION_STUN
+ kChampionActionShoot = 32, // @ C032_ACTION_SHOOT
+ kChampionActionSpellshield = 33, // @ C033_ACTION_SPELLSHIELD
+ kChampionActionFireshield = 34, // @ C034_ACTION_FIRESHIELD
+ kChampionActionFluxcage = 35, // @ C035_ACTION_FLUXCAGE
+ kChampionActionHeal = 36, // @ C036_ACTION_HEAL
+ kChampionActionCalm = 37, // @ C037_ACTION_CALM
+ kChampionActionLight = 38, // @ C038_ACTION_LIGHT
+ kChampionActionWindow = 39, // @ C039_ACTION_WINDOW
+ kChampionActionSpit = 40, // @ C040_ACTION_SPIT
+ kChampionActionBrandish = 41, // @ C041_ACTION_BRANDISH
+ kChampionActionThrow = 42, // @ C042_ACTION_THROW
+ kChampionActionFuse = 43, // @ C043_ACTION_FUSE
+ kChampionActionNone = 255 // @ C255_ACTION_NONE
+};
+
+
+class Skill {
+ int TemporaryExperience;
+ long Experience;
+}; // @ SKILL
+
+class Champion {
+ Thing _slots[30];
+ Skill _skills[20];
+public:
+ char _name[8];
+ char _title[20];
+ direction _dir;
+ ViewCell _cell;
+ ChampionAction _actionIndex;
+ uint16 _symbolStep;
+ char _symbols[5];
+ uint16 _directionMaximumDamageReceived;
+ uint16 _maximumDamageReceived;
+ uint16 _poisonEventCount;
+ int16 _enableActionEventIndex;
+ int16 _hideDamageReceivedIndex;
+ uint16 _attributes;
+ uint16 _wounds;
+ int16 _currHealth;
+ int16 _maxHealth;
+ int16 _currStamina;
+ int16 _maxStamina;
+ int16 _currMana;
+ int16 _maxMana;
+ int16 _actionDefense;
+ int16 _food;
+ int16 _water;
+ byte _statistics[7][3];
+ uint16 _load;
+ int16 _shieldDefense;
+ byte Portrait[464]; // 32 x 29 pixel portrait
+
+ Thing getSlot(ChampionSlot slot) { return _slots[slot]; }
+ void setSlot(ChampionSlot slot, Thing val) { _slots[slot] = val; }
+
+ Skill getSkill(ChampionSkill skill) { return _skills[skill]; }
+ void setSkill(ChampionSkill skill, Skill val) { _skills[skill] = val; }
+
+ byte getStatistic(ChampionStatisticType type, ChampionStatisticValue valType) { return _statistics[type][valType]; }
+ void setStatistic(ChampionStatisticType type, ChampionStatisticValue valType, byte newVal) { _statistics[type][valType] = newVal; }
+
+ uint16 getAttributes() { return _attributes; }
+ void setAttributeFlag(ChampionAttribute flag, bool value) {
+ if (value) {
+ _attributes |= flag;
+ } else {
+ _attributes &= ~flag;
+ }
+ }
+ void clearAttributes(){ _attributes = kChampionAttributNone; }
+
+ uint16 getWounds() { return _wounds; }
+ void setWoundsFlag(ChampionWound flag, bool value) {
+ if (value) {
+ _wounds |= flag;
+ } else {
+ _wounds &= ~flag;
+ }
+ }
+ void clearWounds(){ _wounds = kChampionWoundNone; }
+}; // @ CHAMPION_INCLUDING_PORTRAIT
+
+class ChampionMan {
+ DMEngine *_vm;
+ Champion champions[4];
+public:
+ ChampionMan(DMEngine *vm);
+};
+
+}
+
+#endif
diff --git a/engines/dm/eventman.cpp b/engines/dm/eventman.cpp
index 488deeb017..6a13b84947 100644
--- a/engines/dm/eventman.cpp
+++ b/engines/dm/eventman.cpp
@@ -268,7 +268,7 @@ void EventManager::processInput() {
Common::Event event;
while (_vm->_system->getEventManager()->pollEvent(event)) {
switch (event.type) {
- // DUMMY CODE: EVENT_KEYDOWN, only for testing
+ // DUMMY CODE: case EVENT_KEYDOWN, only for testing
case Common::EVENT_KEYDOWN:
if (event.synthetic)
break;
diff --git a/engines/dm/gfx.cpp b/engines/dm/gfx.cpp
index 8f88bab5f6..61592fd654 100644
--- a/engines/dm/gfx.cpp
+++ b/engines/dm/gfx.cpp
@@ -12,14 +12,7 @@ namespace DM {
Box gBoxMovementArrows = {224, 319, 124, 168};
-enum ViewCell {
- kViewCellFronLeft = 0, // @ C00_VIEW_CELL_FRONT_LEFT
- kViewCellFrontRight = 1, // @ C01_VIEW_CELL_FRONT_RIGHT
- kViewCellBackRight = 2, // @ C02_VIEW_CELL_BACK_RIGHT
- kViewCellBackLeft = 3, // @ C03_VIEW_CELL_BACK_LEFT
- kViewCellAlcove = 4, // @ C04_VIEW_CELL_ALCOVE
- kViewCellDoorButtonOrWallOrn = 5 // @ C05_VIEW_CELL_DOOR_BUTTON_OR_WALL_ORNAMENT
-};
+
enum StairFrameIndex {
kFrameStairsUpFront_D3L = 0, // @ G0110_s_Graphic558_Frame_StairsUpFront_D3L
diff --git a/engines/dm/gfx.h b/engines/dm/gfx.h
index fd9a4a3bd9..cf06f1c7eb 100644
--- a/engines/dm/gfx.h
+++ b/engines/dm/gfx.h
@@ -7,6 +7,14 @@
namespace DM {
+enum ViewCell {
+ kViewCellFronLeft = 0, // @ C00_VIEW_CELL_FRONT_LEFT
+ kViewCellFrontRight = 1, // @ C01_VIEW_CELL_FRONT_RIGHT
+ kViewCellBackRight = 2, // @ C02_VIEW_CELL_BACK_RIGHT
+ kViewCellBackLeft = 3, // @ C03_VIEW_CELL_BACK_LEFT
+ kViewCellAlcove = 4, // @ C04_VIEW_CELL_ALCOVE
+ kViewCellDoorButtonOrWallOrn = 5 // @ C05_VIEW_CELL_DOOR_BUTTON_OR_WALL_ORNAMENT
+};
enum GraphicIndice {
kInscriptionFontIndice = 120, // @ C120_GRAPHIC_INSCRIPTION_FONT
diff --git a/engines/dm/module.mk b/engines/dm/module.mk
index ed2e2ea442..1acf291453 100644
--- a/engines/dm/module.mk
+++ b/engines/dm/module.mk
@@ -6,7 +6,8 @@ MODULE_OBJS := \
gfx.o \
dungeonman.o \
eventman.o \
- menus.o
+ menus.o \
+ champion.o
MODULE_DIRS += \
engines/dm