diff options
author | Paul Gilbert | 2010-05-15 00:28:44 +0000 |
---|---|---|
committer | Paul Gilbert | 2010-05-15 00:28:44 +0000 |
commit | e91df69eb64d9e3ef7d02aa2423e3fbc96dc8aef (patch) | |
tree | 96fd8554b8052a4ee18998573cadb5061ae5b39a /engines/m4/mads_views.h | |
parent | 6d38cf8b8f164b6d8e03715540b1d9bcfdad1ce7 (diff) | |
download | scummvm-rg350-e91df69eb64d9e3ef7d02aa2423e3fbc96dc8aef.tar.gz scummvm-rg350-e91df69eb64d9e3ef7d02aa2423e3fbc96dc8aef.tar.bz2 scummvm-rg350-e91df69eb64d9e3ef7d02aa2423e3fbc96dc8aef.zip |
Decoded further fields in the SequenceList class, and started implementation of kernel message display
svn-id: r49034
Diffstat (limited to 'engines/m4/mads_views.h')
-rw-r--r-- | engines/m4/mads_views.h | 71 |
1 files changed, 64 insertions, 7 deletions
diff --git a/engines/m4/mads_views.h b/engines/m4/mads_views.h index 50ce9e1aab..37c797b931 100644 --- a/engines/m4/mads_views.h +++ b/engines/m4/mads_views.h @@ -40,6 +40,8 @@ namespace M4 { class MadsView; +enum AbortTimerMode {ABORTMODE_0 = 0, ABORTMODE_1 = 1, ABORTMODE_2 = 2}; + class MadsSpriteSlot { public: int spriteId; @@ -126,6 +128,48 @@ public: void cleanUp(); }; +#define TIMED_TEXT_SIZE 10 +#define TEXT_4A_SIZE 30 + +enum KernelMessageFlags {KMSG_1 = 1, KMSG_2 = 2, KMSG_4 = 4, KMSG_8 = 8, KMSG_40 = 0x40, KMSG_ACTIVE = 0x80}; + +class MadsKernelMessageListEntry { +public: + uint8 flags; + int sequenceIndex; + char asciiChar; + char asciiChar2; + int colour1; + int colour2; + Common::Point position; + int textDisplayIndex; + int msgOffset; + int field_E; + uint32 frameTimer2; + uint32 frameTimer; + uint32 timeout; + bool field_1C; + AbortTimerMode abortMode; + uint16 actionNouns[3]; + char *msg; +}; + +class MadsKernelMessageList { +private: + MadsView &_owner; + Common::Array<MadsKernelMessageListEntry> _entries; + Font *_talkFont; +public: + MadsKernelMessageList(MadsView &owner); + + void clear(); + int add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, char *msg); + void unk1(int msgIndex, int v1, int v2); + void setSeqIndex(int msgIndex, int seqIndex); + void remove(int msgIndex); + void reset(); +}; + class ScreenObjectEntry { public: Common::Rect bounds; @@ -191,9 +235,18 @@ public: void reset(); }; +enum SpriteAnimType {ANIMTYPE_SINGLE_DIRECTION = 1, ANIMTYPE_CYCLED = 2}; + +enum SequenceSubEntryMode {SM_0 = 0, SM_1 = 1, SM_FRAME_INDEX = 2}; + #define TIMER_ENTRY_SUBSET_MAX 5 -enum SpriteAnimType {ANIMTYPE_SINGLE_DIRECTION = 1, ANIMTYPE_CYCLED = 2}; +struct MadsSequenceSubEntries { + int count; + SequenceSubEntryMode mode[TIMER_ENTRY_SUBSET_MAX]; + int16 frameIndex[TIMER_ENTRY_SUBSET_MAX]; + int8 abortVal[TIMER_ENTRY_SUBSET_MAX]; +}; struct MadsSequenceEntry { int8 active; @@ -220,11 +273,8 @@ struct MadsSequenceEntry { int field_24; int field_25; - int len27; - int8 fld27[TIMER_ENTRY_SUBSET_MAX]; - int16 fld2C[TIMER_ENTRY_SUBSET_MAX]; - int8 fld36[TIMER_ENTRY_SUBSET_MAX]; - int field_3B; + MadsSequenceSubEntries entries; + AbortTimerMode abortMode; uint16 actionNouns[3]; int numTicks; @@ -242,7 +292,8 @@ public: MadsSequenceList(MadsView &owner); MadsSequenceEntry &operator[](int index) { return _entries[index]; } - bool unk2(int index, int v1, int v2, int v3); + void clear(); + bool addSubEntry(int index, SequenceSubEntryMode mode, int frameIndex, int abortVal); int add(int spriteListIndex, int v0, int v1, char field_24, int timeoutTicks, int extraTicks, int numTicks, int height, int width, char field_12, char scale, char depth, int frameInc, SpriteAnimType animType, int numSprites, int frameStart); @@ -259,12 +310,18 @@ private: public: MadsSpriteSlots _spriteSlots; MadsTextDisplay _textDisplay; + MadsKernelMessageList _kernelMessages; ScreenObjects _screenObjects; MadsDynamicHotspots _dynamicHotspots; MadsSequenceList _sequenceList; + int _textSpacing; + int _ticksAmount; + uint32 _newTimeout; int _abortTimers; int8 _abortTimers2; + AbortTimerMode _abortTimersMode; + AbortTimerMode _abortTimersMode2; public: MadsView(View *view); |