Skip to content

Commit

Permalink
DM: More renaming and refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Strangerke committed Sep 7, 2016
1 parent 4414995 commit 878ae1a
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 101 deletions.
77 changes: 36 additions & 41 deletions engines/dm/sounds.cpp
Expand Up @@ -36,10 +36,9 @@
#include "dm/dungeonman.h"
#include "dm/sounds.h"


namespace DM {

SoundMan* SoundMan::getSoundMan(DMEngine* vm, const DMADGameDescription* gameVersion) {
SoundMan *SoundMan::getSoundMan(DMEngine *vm, const DMADGameDescription *gameVersion) {
switch (gameVersion->_desc.platform) {
default:
warning("Unknown platform, using default Amiga SoundMan");
Expand Down Expand Up @@ -92,7 +91,7 @@ void SoundMan::initConstants() {
_sounds[i] = sounds[i];
}

SoundMan::SoundMan(DMEngine* vm) : _vm(vm) {
SoundMan::SoundMan(DMEngine *vm) : _vm(vm) {
initConstants();
}

Expand Down Expand Up @@ -132,8 +131,8 @@ void SoundMan::playPendingSound() {
}
}

bool SoundMan::soundGetVolume(int16 mapX, int16 mapY, uint8* leftVolume, uint8* rightVolume) {
static byte K0030_aauc_DistanceToSoundVolume[25][25] = {
bool SoundMan::soundGetVolume(int16 mapX, int16 mapY, uint8 *leftVolume, uint8 *rightVolume) {
static byte distanceToSoundVolume[25][25] = {
{1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4},
{1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 5, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4},
{1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4},
Expand All @@ -160,72 +159,68 @@ bool SoundMan::soundGetVolume(int16 mapX, int16 mapY, uint8* leftVolume, uint8*
{1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3},
{1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3}};

int16 L1678_i_RightVolumeColumnIndex = 0;
int16 L1679_i_LineIndex = 0;
int16 L1680_i_LeftVolumeColumnIndex = 0;

int16 lineIndex = 0;
int16 rightVolumeColumnIndex = 0;

switch (_vm->_dungeonMan->_partyDir) {
case kDirNorth:
L1678_i_RightVolumeColumnIndex = mapX - _vm->_dungeonMan->_partyMapX;
L1679_i_LineIndex = mapY - _vm->_dungeonMan->_partyMapY;
rightVolumeColumnIndex = mapX - _vm->_dungeonMan->_partyMapX;
lineIndex = mapY - _vm->_dungeonMan->_partyMapY;
break;
case kDirEast:
L1678_i_RightVolumeColumnIndex = mapY - _vm->_dungeonMan->_partyMapY;
L1679_i_LineIndex = -(mapX - _vm->_dungeonMan->_partyMapX);
rightVolumeColumnIndex = mapY - _vm->_dungeonMan->_partyMapY;
lineIndex = -(mapX - _vm->_dungeonMan->_partyMapX);
break;
case kDirSouth:
L1678_i_RightVolumeColumnIndex = -(mapX - _vm->_dungeonMan->_partyMapX);
L1679_i_LineIndex = -(mapY - _vm->_dungeonMan->_partyMapY);
rightVolumeColumnIndex = -(mapX - _vm->_dungeonMan->_partyMapX);
lineIndex = -(mapY - _vm->_dungeonMan->_partyMapY);
break;
case kDirWest:
L1678_i_RightVolumeColumnIndex = -(mapY - _vm->_dungeonMan->_partyMapY);
L1679_i_LineIndex = mapX - _vm->_dungeonMan->_partyMapX;
rightVolumeColumnIndex = -(mapY - _vm->_dungeonMan->_partyMapY);
lineIndex = mapX - _vm->_dungeonMan->_partyMapX;
break;
}
if ((L1678_i_RightVolumeColumnIndex < -12) || (L1678_i_RightVolumeColumnIndex > 12)) { /* Sound is not audible if source is more than 12 squares away from the party */

if ((rightVolumeColumnIndex < -12) || (rightVolumeColumnIndex > 12)) /* Sound is not audible if source is more than 12 squares away from the party */
return false;
}
if ((L1679_i_LineIndex < -12) || (L1679_i_LineIndex > 12)) { /* Sound is not audible if source is more than 12 squares away from the party */

if ((lineIndex < -12) || (lineIndex > 12)) /* Sound is not audible if source is more than 12 squares away from the party */
return false;
}
L1680_i_LeftVolumeColumnIndex = -L1678_i_RightVolumeColumnIndex + 12;
L1678_i_RightVolumeColumnIndex += 12;
L1679_i_LineIndex += 12;
*rightVolume = K0030_aauc_DistanceToSoundVolume[L1679_i_LineIndex][L1678_i_RightVolumeColumnIndex];
*leftVolume = K0030_aauc_DistanceToSoundVolume[L1679_i_LineIndex][L1680_i_LeftVolumeColumnIndex];

int16 leftVolumeColumnIndex = -rightVolumeColumnIndex + 12;
rightVolumeColumnIndex += 12;
lineIndex += 12;
*rightVolume = distanceToSoundVolume[lineIndex][rightVolumeColumnIndex];
*leftVolume = distanceToSoundVolume[lineIndex][leftVolumeColumnIndex];
return true;
}

void SoundMan::requestPlay(uint16 soundIndex, int16 mapX, int16 mapY, uint16 mode) {
Sound* sound;
uint8 leftVolume, rightVolume;

if (mode && (_vm->_dungeonMan->_currMapIndex != _vm->_dungeonMan->_partyMapIndex))
return;

sound = &_sounds[soundIndex];
Sound *sound = &_sounds[soundIndex];
if (mode > k1_soundModePlayIfPrioritized) { /* Add an event in the timeline to play the sound (mode - 1) ticks later */
TimelineEvent event;
setMapAndTime(event._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + mode - 1);
event._type = k20_TMEventTypePlaySound;
event._priority = sound->_priority;
event._C._soundIndex = soundIndex;
event._B._location._mapX = mapX;
event._B._location._mapY = mapY;
_vm->_timeline->addEventGetEventIndex(&event);
TimelineEvent newEvent;
setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + mode - 1);
newEvent._type = k20_TMEventTypePlaySound;
newEvent._priority = sound->_priority;
newEvent._C._soundIndex = soundIndex;
newEvent._B._location._mapX = mapX;
newEvent._B._location._mapY = mapY;
_vm->_timeline->addEventGetEventIndex(&newEvent);
return;
}

if (!soundGetVolume(mapX, mapY, &leftVolume, &rightVolume)) {
uint8 leftVolume, rightVolume;
if (!soundGetVolume(mapX, mapY, &leftVolume, &rightVolume))
return;
}

if (!mode) { /* Play the sound immediately */
play(soundIndex, sound->_period, leftVolume, rightVolume);
return;
}
_pendingSounds.push(PendingSound(leftVolume, rightVolume, soundIndex));
}


}
6 changes: 3 additions & 3 deletions engines/dm/sounds.h
Expand Up @@ -37,7 +37,7 @@ namespace DM {
class SoundData {
public:
uint32 _byteCount;
byte* _firstSample;
byte *_firstSample;
uint32 _sampleCount;
SoundData() : _byteCount(0), _firstSample(nullptr), _sampleCount(0) {}
}; // @ SOUND_DATA
Expand Down Expand Up @@ -67,7 +67,7 @@ class SoundMan {
DMEngine *_vm;

protected:
SoundMan(DMEngine* vm);
SoundMan(DMEngine *vm);
public:
virtual ~SoundMan();

Expand All @@ -89,7 +89,7 @@ class SoundMan {
class SoundMan_Atari: public SoundMan {
friend class SoundMan;

SoundMan_Atari(DMEngine* vm): SoundMan(vm) {};
SoundMan_Atari(DMEngine *vm): SoundMan(vm) {};
public:
void loadSounds() override {} // @ F0503_SOUND_LoadAll
void requestPlay(uint16 P0088_ui_SoundIndex, int16 P0089_i_MapX, int16 P0090_i_MapY, uint16 P0091_ui_Mode) override {} // @ F0064_SOUND_RequestPlay_CPSD
Expand Down
102 changes: 45 additions & 57 deletions engines/dm/text.cpp
Expand Up @@ -31,11 +31,12 @@

namespace DM {

TextMan::TextMan(DMEngine* vm) : _vm(vm) {
TextMan::TextMan(DMEngine *vm) : _vm(vm) {
_messageAreaCursorColumn = 0;
_messageAreaCursorRow = 0;
for (uint16 i = 0; i < 4; ++i)
_messageAreaRowExpirationTime[i] = 0;

_bitmapMessageAreaNewRow = new byte[320 * 7];
_isScrolling = false;
_startedScrollingAt = -1;
Expand All @@ -47,11 +48,8 @@ TextMan::~TextMan() {
delete[] _messageAreaCopy;
}

#define k5_LetterWidth 5
#define k6_LetterHeight 6

void TextMan::printTextToBitmap(byte* destBitmap, uint16 destByteWidth, int16 destX, int16 destY,
Color textColor, Color bgColor, const char* text, uint16 destHeight) {
void TextMan::printTextToBitmap(byte *destBitmap, uint16 destByteWidth, int16 destX, int16 destY,
Color textColor, Color bgColor, const char *text, uint16 destHeight) {
if ((destX -= 1) < 0) // fixes missalignment, to be checked
destX = 0;
if ((destY -= 4) < 0) // fixes missalignment, to be checked
Expand All @@ -65,9 +63,9 @@ void TextMan::printTextToBitmap(byte* destBitmap, uint16 destByteWidth, int16 de
byte *srcBitmap = _vm->_displayMan->getNativeBitmapOrGraphic(k557_FontGraphicIndice);

byte *tmp = _vm->_displayMan->_tmpBitmap;
for (uint16 i = 0; i < (k5_LetterWidth + 1) * k6_LetterHeight * 128; ++i) {
for (uint16 i = 0; i < (k5_LetterWidth + 1) * k6_LetterHeight * 128; ++i)
tmp[i] = srcBitmap[i] ? textColor : bgColor;
}

srcBitmap = tmp;

for (const char *begin = text, *end = text + textLength; begin != end; ++begin) {
Expand All @@ -77,6 +75,7 @@ void TextMan::printTextToBitmap(byte* destBitmap, uint16 destByteWidth, int16 de
}
if (nextY + k6_LetterHeight >= destHeight)
break;

uint16 srcX = (1 + 5) * *begin; // 1 + 5 is not the letter width, arbitrary choice of the unpacking code

Box box((nextX == destX) ? (nextX + 1) : nextX, nextX + k5_LetterWidth + 1, nextY, nextY + k6_LetterHeight - 1);
Expand All @@ -87,16 +86,16 @@ void TextMan::printTextToBitmap(byte* destBitmap, uint16 destByteWidth, int16 de
}
}

void TextMan::printToLogicalScreen(uint16 destX, uint16 destY, Color textColor, Color bgColor, const char* text) {
void TextMan::printToLogicalScreen(uint16 destX, uint16 destY, Color textColor, Color bgColor, const char *text) {
printTextToBitmap(_vm->_displayMan->_bitmapScreen, _vm->_displayMan->_screenWidth / 2, destX, destY, textColor, bgColor, text, _vm->_displayMan->_screenHeight);
}

void TextMan::printToViewport(int16 posX, int16 posY, Color textColor, const char* text, Color bgColor) {
void TextMan::printToViewport(int16 posX, int16 posY, Color textColor, const char *text, Color bgColor) {
printTextToBitmap(_vm->_displayMan->_bitmapViewport, k112_byteWidthViewport, posX, posY, textColor, bgColor, text, k136_heightViewport);
}

void TextMan::printWithTrailingSpaces(byte* destBitmap, int16 destByteWidth, int16 destX, int16 destY, Color textColor,
Color bgColor, const char* text, int16 requiredTextLength, int16 destHeight) {
void TextMan::printWithTrailingSpaces(byte *destBitmap, int16 destByteWidth, int16 destX, int16 destY, Color textColor,
Color bgColor, const char *text, int16 requiredTextLength, int16 destHeight) {
Common::String str = text;
for (int16 i = str.size(); i < requiredTextLength; ++i)
str += ' ';
Expand All @@ -107,10 +106,9 @@ void TextMan::printLineFeed() {
printMessage(k0_ColorBlack, "\n");
}

void TextMan::printMessage(Color color, const char* string, bool printWithScroll) {
uint16 L0031_ui_CharacterIndex;
char L0033_ac_String[54];

void TextMan::printMessage(Color color, const char *string, bool printWithScroll) {
uint16 characterIndex;
Common::String wrkString;

while (*string) {
if (*string == '\n') { /* New line */
Expand All @@ -119,59 +117,53 @@ void TextMan::printMessage(Color color, const char* string, bool printWithScroll
_messageAreaCursorColumn = 0;
createNewRow();
}
} else if (*string == ' ') {
string++;
if (_messageAreaCursorColumn != 53) {
printString(color, " "); // I'm not sure if this is like the original
}
} else {
if (*string == ' ') {
string++;
if (_messageAreaCursorColumn != 53) {
printString(color, " "); // I'm not sure if this is like the original
}
} else {
L0031_ui_CharacterIndex = 0;
do {
L0033_ac_String[L0031_ui_CharacterIndex++] = *string++;
} while (*string && (*string != ' ') && (*string != '\n')); /* End of string, space or New line */
L0033_ac_String[L0031_ui_CharacterIndex] = '\0';
if (_messageAreaCursorColumn + L0031_ui_CharacterIndex > 53) {
_messageAreaCursorColumn = 2;
createNewRow();
}
printString(color, L0033_ac_String);
characterIndex = 0;
do {
wrkString += *string++;
characterIndex++;
} while (*string && (*string != ' ') && (*string != '\n')); /* End of string, space or New line */
wrkString += '\0';
if (_messageAreaCursorColumn + characterIndex > 53) {
_messageAreaCursorColumn = 2;
createNewRow();
}
printString(color, wrkString.c_str());
}
}
}

void TextMan::createNewRow() {
uint16 L0029_ui_RowIndex;

if (_messageAreaCursorRow == 3) {
isTextScrolling(&_textScroller, true);
memset(_bitmapMessageAreaNewRow, k0_ColorBlack, 320 * 7);
_isScrolling = true;
setScrollerCommand(&_textScroller, 1);

for (L0029_ui_RowIndex = 0; L0029_ui_RowIndex < 3; L0029_ui_RowIndex++) {
_messageAreaRowExpirationTime[L0029_ui_RowIndex] = _messageAreaRowExpirationTime[L0029_ui_RowIndex + 1];
}
for (uint16 rowIndex = 0; rowIndex < 3; rowIndex++)
_messageAreaRowExpirationTime[rowIndex] = _messageAreaRowExpirationTime[rowIndex + 1];

_messageAreaRowExpirationTime[3] = -1;
} else {
} else
_messageAreaCursorRow++;
}
}

void TextMan::printString(Color color, const char* string) {
int16 L0030_i_StringLength;

L0030_i_StringLength = strlen(string);
if (isTextScrolling(&_textScroller, false)) {
int16 stringLength = strlen(string);
if (isTextScrolling(&_textScroller, false))
printToLogicalScreen(_messageAreaCursorColumn * 6, (_messageAreaCursorRow * 7 - 1) + 177, color, k0_ColorBlack, string);
} else {
else {
printTextToBitmap(_bitmapMessageAreaNewRow, k160_byteWidthScreen, _messageAreaCursorColumn * 6, 0, color, k0_ColorBlack, string, 7);
_isScrolling = true;
if (isTextScrolling(&_textScroller, false))
setScrollerCommand(&_textScroller, 1);
}
_messageAreaCursorColumn += L0030_i_StringLength;
_messageAreaCursorColumn += stringLength;
_messageAreaRowExpirationTime[_messageAreaCursorRow] = _vm->_gameTime + 200;

}
Expand All @@ -183,21 +175,17 @@ void TextMan::initialize() {
}

void TextMan::moveCursor(int16 column, int16 row) {
if (column < 0) {
if (column < 0)
column = 0;
} else {
if (column >= 53) {
column = 52;
}
}
else if (column >= 53)
column = 52;

_messageAreaCursorColumn = column;
if (row < 0) {
if (row < 0)
row = 0;
} else {
if (row >= 4) {
row = 3;
}
}
else if (row >= 4)
row = 3;

_messageAreaCursorRow = row;
}

Expand Down
3 changes: 3 additions & 0 deletions engines/dm/text.h
Expand Up @@ -37,6 +37,9 @@ struct TextScroller {
// Placeholder, empty for now
}; // @ Text_Scroller

#define k5_LetterWidth 5
#define k6_LetterHeight 6

class TextMan {
DMEngine *_vm;
int16 _messageAreaCursorColumn; // @ G0359_i_MessageAreaCursorColumn
Expand Down

0 comments on commit 878ae1a

Please sign in to comment.