mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-31 07:53:36 +00:00
DM: Change the definition of setMapAndTime, move SoundIndex enum to SoundMan
This commit is contained in:
parent
1cf5c7f7c9
commit
1670cb035f
@ -942,7 +942,7 @@ void ChampionMan::disableAction(uint16 champIndex, uint16 ticks) {
|
||||
setFlag(curChampion->_attributes, kDMAttributeActionHand | kDMAttributeDisableAction);
|
||||
drawChampionState((ChampionIndex)champIndex);
|
||||
}
|
||||
_vm->setMapAndTime(curEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, updatedEnableActionEventTime);
|
||||
curEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, updatedEnableActionEventTime);
|
||||
curChampion->_enableActionEventIndex = _vm->_timeline->addEventGetEventIndex(&curEvent);
|
||||
}
|
||||
|
||||
@ -1117,7 +1117,7 @@ void ChampionMan::championPoison(int16 champIndex, uint16 attack) {
|
||||
TimelineEvent newEvent;
|
||||
newEvent._type = k75_TMEventTypePoisonChampion;
|
||||
newEvent._priority = champIndex;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 36);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 36);
|
||||
newEvent._Bu._attack = attack;
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
}
|
||||
@ -1432,12 +1432,12 @@ void ChampionMan::applyAndDrawPendingDamageAndWounds() {
|
||||
if (eventIndex == -1) {
|
||||
TimelineEvent newEvent;
|
||||
newEvent._type = k12_TMEventTypeHideDamageReceived;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 5);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 5);
|
||||
newEvent._priority = championIndex;
|
||||
championPtr->_hideDamageReceivedIndex = _vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
} else {
|
||||
TimelineEvent *curEvent = &_vm->_timeline->_events[eventIndex];
|
||||
_vm->setMapAndTime(curEvent->_mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 5);
|
||||
curEvent->_mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 5);
|
||||
_vm->_timeline->fixChronology(_vm->_timeline->getIndex(eventIndex));
|
||||
}
|
||||
drawChampionState((ChampionIndex)championIndex);
|
||||
|
@ -95,12 +95,16 @@ int32 DMEngine::filterTime(int32 mapTime) {
|
||||
return mapTime & 0x00FFFFFF;
|
||||
}
|
||||
|
||||
int32 DMEngine::setMapAndTime(int32 &mapTime, uint32 map, uint32 time) {
|
||||
return (mapTime) = ((time) | (((long)(map)) << 24));
|
||||
int32 DMEngine::setMapAndTime(uint32 map, uint32 time) {
|
||||
return (time | (map << 24));
|
||||
}
|
||||
|
||||
uint16 DMEngine::getMap(int32 mapTime) {
|
||||
return ((uint16)((mapTime) >> 24));
|
||||
return ((uint16)(mapTime >> 24));
|
||||
}
|
||||
|
||||
int32 DMEngine::setMap(int32 mapTime, uint32 map) {
|
||||
return ((mapTime & 0x00FFFFFF) | (map << 24));
|
||||
}
|
||||
|
||||
Thing DMEngine::thingWithNewCell(Thing thing, int16 cell) {
|
||||
|
@ -265,11 +265,13 @@ public:
|
||||
bool isOrientedWestEast(int16 dir); // @ M16_IS_ORIENTED_WEST_EAST
|
||||
uint16 normalizeModulo4(int16 dir); // @ M21_NORMALIZE
|
||||
|
||||
int32 filterTime(int32 map_time); // @ M30_TIME
|
||||
int32 setMapAndTime(int32 &map_time, uint32 map, uint32 time); // @ M33_SET_MAP_AND_TIME
|
||||
uint16 getMap(int32 map_time); // @ M29_MAP
|
||||
int32 filterTime(int32 mapTime); // @ M30_TIME
|
||||
int32 setMapAndTime(uint32 map, uint32 time); // @ M33_SET_MAP_AND_TIME
|
||||
uint16 getMap(int32 mapTime); // @ M29_MAP
|
||||
Thing thingWithNewCell(Thing thing, int16 cell); // @ M15_THING_WITH_NEW_CELL
|
||||
int16 getDistance(int16 mapx1, int16 mapy1, int16 mapx2, int16 mapy2);// @ M38_DISTANCE
|
||||
int16 getDistance(int16 mapx1, int16 mapy1, int16 mapx2, int16 mapy2); // @ M38_DISTANCE
|
||||
int32 setMap(int32 mapTime, uint32 map); // @ M31_setMap
|
||||
|
||||
|
||||
private:
|
||||
uint16 _dungeonId; // @ G0526_ui_DungeonID
|
||||
|
@ -1397,7 +1397,7 @@ void EventManager::clickInDungeonViewDropLeaderHandObject(uint16 viewCell) {
|
||||
if (droppingIntoAnAlcove && _vm->_dungeonMan->_isFacingViAltar && (_vm->_objectMan->getIconIndex(removedThing) == kDMIconIndiceJunkChampionBones)) {
|
||||
Junk *removedJunk = (Junk*)_vm->_dungeonMan->getThingData(removedThing);
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 1);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 1);
|
||||
newEvent._type = k13_TMEventTypeViAltarRebirth;
|
||||
newEvent._priority = removedJunk->getChargeCount();
|
||||
newEvent._Bu._location._mapX = mapX;
|
||||
|
@ -363,7 +363,7 @@ bool GroupMan::groupIsDoorDestoryedByAttack(uint16 mapX, uint16 mapY, int16 atta
|
||||
if (Square(*curSquare).getDoorState() == kDMDoorStateClosed) {
|
||||
if (ticks) {
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + ticks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime + ticks);
|
||||
newEvent._type = k2_TMEventTypeDoorDestruction;
|
||||
newEvent._priority = 0;
|
||||
newEvent._Bu._location._mapX = mapX;
|
||||
@ -595,7 +595,7 @@ void GroupMan::processEvents29to41(int16 eventMapX, int16 eventMapY, int16 event
|
||||
CreatureInfo creatureInfo = _vm->_dungeonMan->_creatureInfos[curGroup->_type];
|
||||
/* Update the event */
|
||||
TimelineEvent nextEvent;
|
||||
_vm->setMapAndTime(nextEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime);
|
||||
nextEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime);
|
||||
nextEvent._priority = kDMMovementTicksImmobile - creatureInfo._movementTicks; /* The fastest creatures (with small MovementTicks value) get higher event priority */
|
||||
nextEvent._Bu._location._mapX = eventMapX;
|
||||
nextEvent._Bu._location._mapY = eventMapY;
|
||||
@ -1296,7 +1296,7 @@ int32 GroupMan::getCreatureAspectUpdateTime(ActiveGroup *activeGroup, int16 crea
|
||||
if (_vm->getRandomNumber(2)) {
|
||||
toggleFlag(aspect, kDMAspectMaskActiveGroupFlipBitmap);
|
||||
uint16 soundIndex = _vm->_moveSens->getSound(kDMCreatureTypeCouatl);
|
||||
if (soundIndex <= k34_D13_soundCount)
|
||||
if (soundIndex <= kDMSoundCount)
|
||||
_vm->_sound->requestPlay(soundIndex, _currentGroupMapX, _currentGroupMapY, kDMSoundModePlayIfPrioritized);
|
||||
}
|
||||
} else if (_vm->getRandomNumber(2))
|
||||
@ -1649,7 +1649,7 @@ void GroupMan::startWandering(int16 mapX, int16 mapY) {
|
||||
L0332_ps_Group->setBehaviour(kDMBehaviorWander);
|
||||
}
|
||||
TimelineEvent nextEvent;
|
||||
_vm->setMapAndTime(nextEvent._mapTime, _vm->_dungeonMan->_currMapIndex, (_vm->_gameTime + 1));
|
||||
nextEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, (_vm->_gameTime + 1));
|
||||
nextEvent._type = k37_TMEventTypeUpdateBehaviourGroup;
|
||||
nextEvent._priority = kDMMovementTicksImmobile - _vm->_dungeonMan->_creatureInfos[L0332_ps_Group->_type]._movementTicks; /* The fastest creatures (with small MovementTicks value) get higher event priority */
|
||||
nextEvent._Cu._ticks = 0;
|
||||
@ -1894,7 +1894,7 @@ void GroupMan::fluxCageAction(int16 mapX, int16 mapY) {
|
||||
_vm->_dungeonMan->linkThingToList(unusedThing, Thing(0), mapX, mapY);
|
||||
(((Explosion *)_vm->_dungeonMan->_thingData[kDMThingTypeExplosion])[unusedThing.getIndex()]).setType(kDMExplosionTypeFluxcage);
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + 100);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime + 100);
|
||||
newEvent._type = k24_TMEventTypeRemoveFluxcage;
|
||||
newEvent._priority = 0;
|
||||
newEvent._Cu._slot = unusedThing.toUint16();
|
||||
|
@ -958,7 +958,7 @@ void InventoryMan::clickOnMouth() {
|
||||
curChampion->_shieldDefense += adjustedPotionPower;
|
||||
TimelineEvent newEvent;
|
||||
newEvent._type = k72_TMEventTypeChampionShield;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + (adjustedPotionPower * adjustedPotionPower));
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + (adjustedPotionPower * adjustedPotionPower));
|
||||
newEvent._priority = championIndex;
|
||||
newEvent._Bu._defense = adjustedPotionPower;
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
|
@ -610,7 +610,7 @@ int16 MenuMan::getChampionSpellCastResult(uint16 champIndex) {
|
||||
_vm->_championMan->_party._event73Count_ThievesEye++;
|
||||
spellPower = (spellPower >> 1);
|
||||
uint16 spellTicks = spellPower * spellPower;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
}
|
||||
break;
|
||||
@ -618,7 +618,7 @@ int16 MenuMan::getChampionSpellCastResult(uint16 champIndex) {
|
||||
newEvent._type = k71_TMEventTypeInvisibility;
|
||||
_vm->_championMan->_party._event71Count_Invisibility++;
|
||||
uint16 spellTicks = spellPower;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
}
|
||||
break;
|
||||
@ -631,7 +631,7 @@ int16 MenuMan::getChampionSpellCastResult(uint16 champIndex) {
|
||||
_vm->_championMan->_party._shieldDefense += newEvent._Bu._defense;
|
||||
_vm->_timeline->refreshAllChampionStatusBoxes();
|
||||
uint16 spellTicks = spellPower * spellPower;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
}
|
||||
break;
|
||||
@ -645,7 +645,7 @@ int16 MenuMan::getChampionSpellCastResult(uint16 champIndex) {
|
||||
_vm->_championMan->_party._lastScentIndex = 0;
|
||||
|
||||
uint16 spellTicks = spellPower * spellPower;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + spellTicks);
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
}
|
||||
break;
|
||||
@ -815,7 +815,7 @@ void MenuMan::createEvent70_light(int16 lightPower, int16 ticks) {
|
||||
TimelineEvent newEvent;
|
||||
newEvent._type = k70_TMEventTypeLight;
|
||||
newEvent._Bu._lightPower = lightPower;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + ticks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + ticks);
|
||||
newEvent._priority = 0;
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
_vm->_inventoryMan->setDungeonViewPalette();
|
||||
@ -850,7 +850,7 @@ bool MenuMan::isPartySpellOrFireShieldSuccessful(Champion *champ, bool spellShie
|
||||
_vm->_championMan->_party._fireShieldDefense += newEvent._Bu._defense;
|
||||
}
|
||||
newEvent._priority = 0;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + ticks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + ticks);
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
_vm->_timeline->refreshAllChampionStatusBoxes();
|
||||
|
||||
@ -1275,7 +1275,7 @@ bool MenuMan::isActionPerformed(uint16 champIndex, int16 actionIndex) {
|
||||
TimelineEvent newEvent;
|
||||
newEvent._priority = 0;
|
||||
newEvent._type = k73_TMEventTypeThievesEye;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + windowTicks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + windowTicks);
|
||||
_vm->_timeline->addEventGetEventIndex(&newEvent);
|
||||
_vm->_championMan->_party._event73Count_ThievesEye++;
|
||||
decrementCharges(curChampion);
|
||||
|
@ -444,7 +444,7 @@ bool MovesensMan::getMoveResult(Thing thing, int16 mapX, int16 mapY, int16 destM
|
||||
}
|
||||
Group *tmpGroup = (Group *)_vm->_dungeonMan->_thingData[kDMThingTypeGroup];
|
||||
uint16 movementSoundIndex = getSound((CreatureType)tmpGroup[thing.getIndex()]._type);
|
||||
if (movementSoundIndex < k34_D13_soundCount)
|
||||
if (movementSoundIndex < kDMSoundCount)
|
||||
_vm->_sound->requestPlay(movementSoundIndex, destMapX, destMapY, kDMSoundModePlayIfPrioritized);
|
||||
|
||||
if (groupOnPartyMap && (mapIndexDestination != _vm->_dungeonMan->_partyMapIndex)) { /* If the group leaves the party map */
|
||||
@ -585,7 +585,7 @@ T0266017_CheckProjectileImpacts:
|
||||
|
||||
void MovesensMan::addEvent(byte type, byte mapX, byte mapY, Cell cell, SensorEffect effect, int32 time) {
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, time);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, time);
|
||||
newEvent._type = type;
|
||||
newEvent._priority = 0;
|
||||
newEvent._Bu._location._mapX = mapX;
|
||||
@ -983,7 +983,7 @@ void MovesensMan::processRotationEffect() {
|
||||
|
||||
void MovesensMan::createEventMoveGroup(Thing groupThing, int16 mapX, int16 mapY, int16 mapIndex, bool audible) {
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, mapIndex, _vm->_gameTime + 5);
|
||||
newEvent._mapTime = _vm->setMapAndTime(mapIndex, _vm->_gameTime + 5);
|
||||
newEvent._type = audible ? k61_TMEventTypeMoveGroupAudible : k60_TMEventTypeMoveGroupSilent;
|
||||
newEvent._priority = 0;
|
||||
newEvent._Bu._location._mapX = mapX;
|
||||
|
@ -57,7 +57,7 @@ void ProjExpl::createProjectile(Thing thing, int16 mapX, int16 mapY, uint16 cell
|
||||
projectilePtr->_attack = attack;
|
||||
_vm->_dungeonMan->linkThingToList(projectileThing, Thing(0), mapX, mapY); /* Projectiles are added on the square and not 'moved' onto the square. In the case of a projectile launcher sensor, this means that the new projectile traverses the square in front of the launcher without any trouble: there is no impact if it is a wall, the projectile direction is not changed if it is a teleporter. Impacts with creatures and champions are still processed */
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + 1);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime + 1);
|
||||
if (_createLauncherProjectile)
|
||||
newEvent._type = k49_TMEventTypeMoveProjectile; /* Launcher projectiles can impact immediately */
|
||||
else
|
||||
@ -311,7 +311,7 @@ void ProjExpl::createExplosion(Thing explThing, uint16 attack, uint16 mapXCombo,
|
||||
|
||||
_vm->_dungeonMan->linkThingToList(unusedThing, Thing(0), projectileMapX, projectileMapY);
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + ((explThing == Thing::_explRebirthStep1) ? 5 : 1));
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime + ((explThing == Thing::_explRebirthStep1) ? 5 : 1));
|
||||
newEvent._type = k25_TMEventTypeExplosion;
|
||||
newEvent._priority = 0;
|
||||
newEvent._Cu._slot = unusedThing.toUint16();
|
||||
@ -453,7 +453,7 @@ void ProjExpl::processEvents48To49(TimelineEvent *event) {
|
||||
curEvent->_Cu._projectile.setMapY(_vm->_moveSens->_moveResultMapY);
|
||||
curEvent->_Cu._projectile.setDir((Direction)_vm->_moveSens->_moveResultDir);
|
||||
projectileThingNewCell = _vm->thingWithNewCell(projectileThingNewCell, _vm->_moveSens->_moveResultCell);
|
||||
M31_setMap(curEvent->_mapTime, _vm->_moveSens->_moveResultMapIndex);
|
||||
_vm->setMap(curEvent->_mapTime, _vm->_moveSens->_moveResultMapIndex);
|
||||
} else {
|
||||
if ((Square(_vm->_dungeonMan->getSquare(destinationMapX, destinationMapY)).getType() == kDMElementTypeDoor) && hasProjectileImpactOccurred(kDMElementTypeDoor, destinationMapX, destinationMapY, projectileNewCell, projectileThing))
|
||||
return;
|
||||
|
@ -37,45 +37,6 @@ enum KillOutcome {
|
||||
kDMKillOutcomeAllCreaturesInGroup = 2 // @ C2_OUTCOME_KILLED_ALL_CREATURES_IN_GROUP
|
||||
};
|
||||
|
||||
enum SoundIndex {
|
||||
kDMSoundIndexMetallicThud = 0, // @ C00_SOUND_METALLIC_THUD
|
||||
kDMSoundIndexSwitch = 1, // @ C01_SOUND_SWITCH
|
||||
kDMSoundIndexDoorRattle = 2, // @ C02_SOUND_DOOR_RATTLE
|
||||
kDMSoundIndexAttackPainRatHellHoundRedDragon = 3, // @ C03_SOUND_ATTACK_PAIN_RAT_HELLHOUND_RED_DRAGON
|
||||
kDMSoundIndexWoodenThudAttackTrolinAntmanStoneGolem = 4, // @ C04_SOUND_WOODEN_THUD_ATTACK_TROLIN_ANTMAN_STONE_GOLEM
|
||||
kDMSoundIndexStrongExplosion = 5, // @ C05_SOUND_STRONG_EXPLOSION
|
||||
kDMSoundIndexScream = 6, // @ C06_SOUND_SCREAM
|
||||
kDMSoundIndexAttackMummyGhostRive = 7, // @ C07_SOUND_ATTACK_MUMMY_GHOST_RIVE
|
||||
kDMSoundIndexSwallow = 8, // @ C08_SOUND_SWALLOW
|
||||
kDMSoundIndexChampion0Damaged = 9, // @ C09_SOUND_CHAMPION_0_DAMAGED
|
||||
kDMSoundIndexChampion1Damaged = 10, // @ C10_SOUND_CHAMPION_1_DAMAGED
|
||||
kDMSoundIndexChampion2Damaged = 11, // @ C11_SOUND_CHAMPION_2_DAMAGED
|
||||
kDMSoundIndexChampion3Damaged = 12, // @ C12_SOUND_CHAMPION_3_DAMAGED
|
||||
kDMSoundIndexSpell = 13, // @ C13_SOUND_SPELL
|
||||
kDMSoundIndexAttackScreamerOitu = 14, // @ C14_SOUND_ATTACK_SCREAMER_OITU
|
||||
kDMSoundIndexAttackGiantScorpion = 15, // @ C15_SOUND_ATTACK_GIANT_SCORPION_SCORPION
|
||||
kDMSoundIndexAttackSkelettonAnimatedArmorDethKnight = 16, // @ C16_SOUND_COMBAT_ATTACK_SKELETON_ANIMATED_ARMOUR_DETH_KNIGHT
|
||||
kDMSoundIndexBuzz = 17, // @ C17_SOUND_BUZZ
|
||||
kDMSoundIndexPartyDamaged = 18, // @ C18_SOUND_PARTY_DAMAGED
|
||||
kDMSoundIndexAttackMagentaWorm = 19, // @ C19_SOUND_ATTACK_MAGENTA_WORM_WORM
|
||||
kDMSoundIndexWeakExplosion = 20, // @ C20_SOUND_WEAK_EXPLOSION
|
||||
kDMSoundIndexAttackGiggler = 21, // @ C21_SOUND_ATTACK_GIGGLER
|
||||
kDMSoundIndexMoveAnimatedArmorDethKnight = 22, // @ C22_SOUND_MOVE_ANIMATED_ARMOUR_DETH_KNIGHT
|
||||
kDMSoundIndexMoveCouatlGiantWaspMuncher = 23, // @ C23_SOUND_MOVE_COUATL_GIANT_WASP_MUNCHER
|
||||
kDMSoundIndexMoveMummyTrolinAntmanStoneGolemGiggleVexirkDemon = 24, // @ C24_SOUND_MOVE_MUMMY_TROLIN_ANTMAN_STONE_GOLEM_GIGGLER_VEXIRK_DEMON
|
||||
kDMSoundIndexBlowHorn = 25, // @ C25_SOUND_BLOW_HORN
|
||||
kDMSoundIndexMoveScreamerRocksWormPainRatHellHoundRusterScorpionsOitu = 26, // @ C26_SOUND_MOVE_SCREAMER_ROCK_ROCKPILE_MAGENTA_WORM_WORM_PAIN_RAT_HELLHOUND_RUSTER_GIANT_SCORPION_SCORPION_OITU
|
||||
kDMSoundIndexMoveSlimesDevilWaterElemental = 27, // @ C27_SOUND_MOVE_SWAMP_SLIME_SLIME_DEVIL_WATER_ELEMENTAL
|
||||
kDMSoundIndexWarCry = 28, // @ C28_SOUND_WAR_CRY
|
||||
kDMSoundIndexAttackRocks = 29, // @ C29_SOUND_ATTACK_ROCK_ROCKPILE
|
||||
kDMSoundIndexAttackWaterElemental = 30, // @ C30_SOUND_ATTACK_WATER_ELEMENTAL
|
||||
kDMSoundIndexAttackCouatl = 31, // @ C31_SOUND_ATTACK_COUATL
|
||||
kDMSoundIndexMoveRedDragon = 32, // @ C32_SOUND_MOVE_RED_DRAGON
|
||||
kDMSoundIndexMoveSkeletton = 33 // @ C33_SOUND_MOVE_SKELETON
|
||||
};
|
||||
|
||||
#define M31_setMap(map_time, map) ((map_time) = (((map_time) & 0x00FFFFFF) | (((int32)(map)) << 24)))
|
||||
|
||||
class TimelineEvent;
|
||||
class Projectile;
|
||||
|
||||
|
@ -52,7 +52,7 @@ SoundMan *SoundMan::getSoundMan(DMEngine *vm, const DMADGameDescription *gameVer
|
||||
}
|
||||
|
||||
void SoundMan::initConstants() {
|
||||
Sound sounds[k34_D13_soundCount] = {
|
||||
Sound sounds[kDMSoundCount] = {
|
||||
Sound(533, 112, 11, 3, 6), /* k00_soundMETALLIC_THUD 0 */
|
||||
Sound(534, 112, 15, 0, 3), /* k01_soundSWITCH 1 */
|
||||
Sound(535, 112, 72, 3, 6), /* k02_soundDOOR_RATTLE 2 */
|
||||
@ -88,7 +88,7 @@ void SoundMan::initConstants() {
|
||||
Sound(573, 138, 29, 0, 4), /* k32_soundMOVE_RED_DRAGON 32 Atari ST: not present */
|
||||
Sound(574, 150, 22, 0, 4) /* k33_soundMOVE_SKELETON 33 Atari ST: not present */
|
||||
};
|
||||
for (int i = 0; i < k34_D13_soundCount; i++)
|
||||
for (int i = 0; i < kDMSoundCount; i++)
|
||||
_sounds[i] = sounds[i];
|
||||
}
|
||||
|
||||
@ -97,12 +97,12 @@ SoundMan::SoundMan(DMEngine *vm) : _vm(vm) {
|
||||
}
|
||||
|
||||
SoundMan::~SoundMan() {
|
||||
for (uint16 i = 0; i < k34_D13_soundCount; ++i)
|
||||
for (uint16 i = 0; i < kDMSoundCount; ++i)
|
||||
delete[] _soundData[i]._firstSample;
|
||||
}
|
||||
|
||||
void SoundMan::loadSounds() {
|
||||
for (uint16 soundIndex = 0; soundIndex < k34_D13_soundCount; ++soundIndex) {
|
||||
for (uint16 soundIndex = 0; soundIndex < kDMSoundCount; ++soundIndex) {
|
||||
SoundData *soundData = _soundData + soundIndex;
|
||||
|
||||
uint16 graphicIndex = _sounds[soundIndex]._graphicIndex;
|
||||
@ -203,7 +203,7 @@ void SoundMan::requestPlay(uint16 soundIndex, int16 mapX, int16 mapY, SoundMode
|
||||
Sound *sound = &_sounds[soundIndex];
|
||||
if (soundMode == kDMSoundModePlayOneTickLater) { /* Add an event in the timeline to play the sound (mode - 1) ticks later */
|
||||
TimelineEvent newEvent;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + soundMode - 1);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime + soundMode - 1);
|
||||
newEvent._type = k20_TMEventTypePlaySound;
|
||||
newEvent._priority = sound->_priority;
|
||||
newEvent._Cu._soundIndex = soundIndex;
|
||||
|
@ -39,7 +39,44 @@ enum SoundMode {
|
||||
kDMSoundModePlayOneTickLater = 2 // @ C02_MODE_PLAY_ONE_TICK_LATER
|
||||
};
|
||||
|
||||
#define k34_D13_soundCount 34 // @ D13_SOUND_COUNT
|
||||
enum SoundIndex {
|
||||
kDMSoundIndexMetallicThud = 0, // @ C00_SOUND_METALLIC_THUD
|
||||
kDMSoundIndexSwitch = 1, // @ C01_SOUND_SWITCH
|
||||
kDMSoundIndexDoorRattle = 2, // @ C02_SOUND_DOOR_RATTLE
|
||||
kDMSoundIndexAttackPainRatHellHoundRedDragon = 3, // @ C03_SOUND_ATTACK_PAIN_RAT_HELLHOUND_RED_DRAGON
|
||||
kDMSoundIndexWoodenThudAttackTrolinAntmanStoneGolem = 4, // @ C04_SOUND_WOODEN_THUD_ATTACK_TROLIN_ANTMAN_STONE_GOLEM
|
||||
kDMSoundIndexStrongExplosion = 5, // @ C05_SOUND_STRONG_EXPLOSION
|
||||
kDMSoundIndexScream = 6, // @ C06_SOUND_SCREAM
|
||||
kDMSoundIndexAttackMummyGhostRive = 7, // @ C07_SOUND_ATTACK_MUMMY_GHOST_RIVE
|
||||
kDMSoundIndexSwallow = 8, // @ C08_SOUND_SWALLOW
|
||||
kDMSoundIndexChampion0Damaged = 9, // @ C09_SOUND_CHAMPION_0_DAMAGED
|
||||
kDMSoundIndexChampion1Damaged = 10, // @ C10_SOUND_CHAMPION_1_DAMAGED
|
||||
kDMSoundIndexChampion2Damaged = 11, // @ C11_SOUND_CHAMPION_2_DAMAGED
|
||||
kDMSoundIndexChampion3Damaged = 12, // @ C12_SOUND_CHAMPION_3_DAMAGED
|
||||
kDMSoundIndexSpell = 13, // @ C13_SOUND_SPELL
|
||||
kDMSoundIndexAttackScreamerOitu = 14, // @ C14_SOUND_ATTACK_SCREAMER_OITU
|
||||
kDMSoundIndexAttackGiantScorpion = 15, // @ C15_SOUND_ATTACK_GIANT_SCORPION_SCORPION
|
||||
kDMSoundIndexAttackSkelettonAnimatedArmorDethKnight = 16, // @ C16_SOUND_COMBAT_ATTACK_SKELETON_ANIMATED_ARMOUR_DETH_KNIGHT
|
||||
kDMSoundIndexBuzz = 17, // @ C17_SOUND_BUZZ
|
||||
kDMSoundIndexPartyDamaged = 18, // @ C18_SOUND_PARTY_DAMAGED
|
||||
kDMSoundIndexAttackMagentaWorm = 19, // @ C19_SOUND_ATTACK_MAGENTA_WORM_WORM
|
||||
kDMSoundIndexWeakExplosion = 20, // @ C20_SOUND_WEAK_EXPLOSION
|
||||
kDMSoundIndexAttackGiggler = 21, // @ C21_SOUND_ATTACK_GIGGLER
|
||||
kDMSoundIndexMoveAnimatedArmorDethKnight = 22, // @ C22_SOUND_MOVE_ANIMATED_ARMOUR_DETH_KNIGHT
|
||||
kDMSoundIndexMoveCouatlGiantWaspMuncher = 23, // @ C23_SOUND_MOVE_COUATL_GIANT_WASP_MUNCHER
|
||||
kDMSoundIndexMoveMummyTrolinAntmanStoneGolemGiggleVexirkDemon = 24, // @ C24_SOUND_MOVE_MUMMY_TROLIN_ANTMAN_STONE_GOLEM_GIGGLER_VEXIRK_DEMON
|
||||
kDMSoundIndexBlowHorn = 25, // @ C25_SOUND_BLOW_HORN
|
||||
kDMSoundIndexMoveScreamerRocksWormPainRatHellHoundRusterScorpionsOitu = 26, // @ C26_SOUND_MOVE_SCREAMER_ROCK_ROCKPILE_MAGENTA_WORM_WORM_PAIN_RAT_HELLHOUND_RUSTER_GIANT_SCORPION_SCORPION_OITU
|
||||
kDMSoundIndexMoveSlimesDevilWaterElemental = 27, // @ C27_SOUND_MOVE_SWAMP_SLIME_SLIME_DEVIL_WATER_ELEMENTAL
|
||||
kDMSoundIndexWarCry = 28, // @ C28_SOUND_WAR_CRY
|
||||
kDMSoundIndexAttackRocks = 29, // @ C29_SOUND_ATTACK_ROCK_ROCKPILE
|
||||
kDMSoundIndexAttackWaterElemental = 30, // @ C30_SOUND_ATTACK_WATER_ELEMENTAL
|
||||
kDMSoundIndexAttackCouatl = 31, // @ C31_SOUND_ATTACK_COUATL
|
||||
kDMSoundIndexMoveRedDragon = 32, // @ C32_SOUND_MOVE_RED_DRAGON
|
||||
kDMSoundIndexMoveSkeletton = 33 // @ C33_SOUND_MOVE_SKELETON
|
||||
};
|
||||
|
||||
#define kDMSoundCount 34 // @ D13_SOUND_COUNT
|
||||
|
||||
class SoundData {
|
||||
public:
|
||||
@ -80,7 +117,7 @@ public:
|
||||
|
||||
static SoundMan *getSoundMan(DMEngine *vm, const DMADGameDescription *gameVersion);
|
||||
|
||||
SoundData _soundData[k34_D13_soundCount]; // @ K0024_as_SoundData
|
||||
SoundData _soundData[kDMSoundCount]; // @ K0024_as_SoundData
|
||||
Common::Queue<PendingSound> _pendingSounds;
|
||||
|
||||
virtual void loadSounds(); // @ F0503_SOUND_LoadAll
|
||||
@ -89,7 +126,7 @@ public:
|
||||
void playPendingSound(); // @ F0065_SOUND_PlayPendingSound_CPSD
|
||||
bool soundGetVolume(int16 mapX, int16 mapY, uint8 *leftVolume, uint8 *rightVolume); // @ F0505_SOUND_GetVolume
|
||||
|
||||
Sound _sounds[k34_D13_soundCount];
|
||||
Sound _sounds[kDMSoundCount];
|
||||
void initConstants();
|
||||
};
|
||||
|
||||
|
@ -541,7 +541,7 @@ void Timeline::moveTeleporterOrPitSquareThings(uint16 mapX, uint16 mapY) {
|
||||
newEvent->_Cu._projectile.setMapY(_vm->_moveSens->_moveResultMapY);
|
||||
newEvent->_Cu._projectile.setDir((Direction)_vm->_moveSens->_moveResultDir);
|
||||
newEvent->_Bu._slot = _vm->thingWithNewCell(curThing, _vm->_moveSens->_moveResultCell).toUint16();
|
||||
M31_setMap(newEvent->_mapTime, _vm->_moveSens->_moveResultMapIndex);
|
||||
_vm->setMap(newEvent->_mapTime, _vm->_moveSens->_moveResultMapIndex);
|
||||
} else if (curThingType == kDMThingTypeExplosion) {
|
||||
TimelineEvent *newEvent = _events;
|
||||
for (uint16 i = 0; i < _eventMaxCount; newEvent++, i++) {
|
||||
@ -549,7 +549,7 @@ void Timeline::moveTeleporterOrPitSquareThings(uint16 mapX, uint16 mapY) {
|
||||
newEvent->_Bu._location._mapX = _vm->_moveSens->_moveResultMapX;
|
||||
newEvent->_Bu._location._mapY = _vm->_moveSens->_moveResultMapY;
|
||||
newEvent->_Cu._slot = _vm->thingWithNewCell(curThing, _vm->_moveSens->_moveResultCell).toUint16();
|
||||
M31_setMap(newEvent->_mapTime, _vm->_moveSens->_moveResultMapIndex);
|
||||
_vm->setMap(newEvent->_mapTime, _vm->_moveSens->_moveResultMapIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -749,7 +749,7 @@ void Timeline::processEventSquareCorridor(TimelineEvent *event) {
|
||||
|
||||
TimelineEvent newEvent;
|
||||
newEvent._type = k65_TMEventTypeEnableGroupGenerator;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_currMapIndex, _vm->_gameTime + actionTicks);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_currMapIndex, _vm->_gameTime + actionTicks);
|
||||
newEvent._priority = 0;
|
||||
newEvent._Bu._location._mapX = mapX;
|
||||
newEvent._Bu._location._mapY = mapY;
|
||||
@ -900,7 +900,7 @@ void Timeline::processEventLight(TimelineEvent *event) {
|
||||
TimelineEvent newEvent;
|
||||
newEvent._type = k70_TMEventTypeLight;
|
||||
newEvent._Bu._lightPower = weakerLightPower;
|
||||
_vm->setMapAndTime(newEvent._mapTime, _vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 4);
|
||||
newEvent._mapTime = _vm->setMapAndTime(_vm->_dungeonMan->_partyMapIndex, _vm->_gameTime + 4);
|
||||
newEvent._priority = 0;
|
||||
addEventGetEventIndex(&newEvent);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user