Skip to content

Commit

Permalink
KYRA: (EOB) - implement explodeObject()
Browse files Browse the repository at this point in the history
  • Loading branch information
athrxx authored and Johannes Schickel committed Dec 26, 2011
1 parent 77d2107 commit 9a6be57
Show file tree
Hide file tree
Showing 18 changed files with 380 additions and 155 deletions.
42 changes: 21 additions & 21 deletions devtools/create_kyradat/create_kyradat.cpp
Expand Up @@ -318,17 +318,17 @@ const ExtractFilename extractFilenames[] = {
{ kEobBaseMagicStrings2, kTypeStringList, true },
{ kEobBaseMagicStrings3, kTypeStringList, true },
{ kEobBaseMagicStrings4, kTypeStringList, true },
{ kEobBaseMagicStrings5, kTypeStringList, false },
{ kEobBaseMagicStrings6, kTypeStringList, true },
{ kEobBaseMagicStrings7, kTypeStringList, true },
{ kEobBaseMagicStrings8, kTypeStringList, true },

{ kEobBaseFlightObjAnimTiles, kTypeRawData, false },
{ kEobBaseFlightObjAnimIndex, kTypeRawData, false },
{ kEobBaseFlightObjAnimDim, kTypeRawData, false },
{ kEobBaseFlightObjAnimTbl1, kTypeRawData, false },
{ kEobBaseFlightObjAnimTbl2, kTypeRawData, false },
{ kEobBaseFlightObjAnimTbl3, kTypeRawData, false },
{ kEobBaseExpObjectTlMode, kTypeRawData, false },
{ kEobBaseExpObjectTblIndex, kTypeRawData, false },
{ kEobBaseExpObjectShpStart, kTypeRawData, false },
{ kEobBaseExpObjectTbl1, kTypeRawData, false },
{ kEobBaseExpObjectTbl2, kTypeRawData, false },
{ kEobBaseExpObjectTbl3, kTypeRawData, false },
{ kEobBaseExpObjectY, k3TypeRaw16to8, false },

{ kEobBaseSparkDefSteps, kTypeRawData, false },
{ kEobBaseSparkDefSubSteps, kTypeRawData, false },
Expand Down Expand Up @@ -1411,26 +1411,26 @@ const char *getIdString(const int id) {
return "kEobBaseMagicStrings3";
case kEobBaseMagicStrings4:
return "kEobBaseMagicStrings4";
case kEobBaseMagicStrings5:
return "kEobBaseMagicStrings5";
case kEobBaseMagicStrings6:
return "kEobBaseMagicStrings6";
case kEobBaseMagicStrings7:
return "kEobBaseMagicStrings7";
case kEobBaseMagicStrings8:
return "kEobBaseMagicStrings8";
case kEobBaseFlightObjAnimTiles:
return "kEobBaseFlightObjAnimTiles";
case kEobBaseFlightObjAnimIndex:
return "kEobBaseFlightObjAnimIndex";
case kEobBaseFlightObjAnimDim:
return "kEobBaseFlightObjAnimDim";
case kEobBaseFlightObjAnimTbl1:
return "kEobBaseFlightObjAnimTbl1";
case kEobBaseFlightObjAnimTbl2:
return "kEobBaseFlightObjAnimTbl2";
case kEobBaseFlightObjAnimTbl3:
return "kEobBaseFlightObjAnimTbl3";
case kEobBaseExpObjectTlMode:
return "kEobBaseExpObjectTlMode";
case kEobBaseExpObjectTblIndex:
return "kEobBaseExpObjectTblIndex";
case kEobBaseExpObjectShpStart:
return "kEobBaseExpObjectShpStart";
case kEobBaseExpObjectTbl1:
return "kEobBaseExpObjectTbl1";
case kEobBaseExpObjectTbl2:
return "kEobBaseExpObjectTbl2";
case kEobBaseExpObjectTbl3:
return "kEobBaseExpObjectTbl3";
case kEobBaseExpObjectY:
return "kEobBaseExpObjectY";
case kEobBaseSparkDefSteps:
return "kEobBaseSparkDefSteps";
case kEobBaseSparkDefSubSteps:
Expand Down
14 changes: 7 additions & 7 deletions devtools/create_kyradat/create_kyradat.h
Expand Up @@ -318,17 +318,17 @@ enum kExtractID {
kEobBaseMagicStrings2,
kEobBaseMagicStrings3,
kEobBaseMagicStrings4,
kEobBaseMagicStrings5,
kEobBaseMagicStrings6,
kEobBaseMagicStrings7,
kEobBaseMagicStrings8,

kEobBaseFlightObjAnimTiles,
kEobBaseFlightObjAnimIndex,
kEobBaseFlightObjAnimDim,
kEobBaseFlightObjAnimTbl1,
kEobBaseFlightObjAnimTbl2,
kEobBaseFlightObjAnimTbl3,
kEobBaseExpObjectTlMode,
kEobBaseExpObjectTblIndex,
kEobBaseExpObjectShpStart,
kEobBaseExpObjectTbl1,
kEobBaseExpObjectTbl2,
kEobBaseExpObjectTbl3,
kEobBaseExpObjectY,

kEobBaseSparkDefSteps,
kEobBaseSparkDefSubSteps,
Expand Down
26 changes: 13 additions & 13 deletions devtools/create_kyradat/games.cpp
Expand Up @@ -1103,16 +1103,16 @@ const int eob1FloppyNeed[] = {
kEobBaseMagicStrings2,
kEobBaseMagicStrings3,
kEobBaseMagicStrings4,
kEobBaseMagicStrings5,
kEobBaseMagicStrings6,
kEobBaseMagicStrings7,
kEobBaseMagicStrings8,

kEobBaseFlightObjAnimIndex,
kEobBaseFlightObjAnimDim,
kEobBaseFlightObjAnimTbl1,
kEobBaseFlightObjAnimTbl2,
kEobBaseFlightObjAnimTbl3,
kEobBaseExpObjectTblIndex,
kEobBaseExpObjectShpStart,
kEobBaseExpObjectTbl1,
kEobBaseExpObjectTbl2,
kEobBaseExpObjectTbl3,
kEobBaseExpObjectY,

kEobBaseSparkDefSteps,
kEobBaseSparkDefSubSteps,
Expand Down Expand Up @@ -1263,17 +1263,17 @@ const int eob2FloppyNeed[] = {
kEobBaseMagicStrings2,
kEobBaseMagicStrings3,
kEobBaseMagicStrings4,
kEobBaseMagicStrings5,
kEobBaseMagicStrings6,
kEobBaseMagicStrings7,
kEobBaseMagicStrings8,

kEobBaseFlightObjAnimTiles,
kEobBaseFlightObjAnimIndex,
kEobBaseFlightObjAnimDim,
kEobBaseFlightObjAnimTbl1,
kEobBaseFlightObjAnimTbl2,
kEobBaseFlightObjAnimTbl3,
kEobBaseExpObjectTlMode,
kEobBaseExpObjectTblIndex,
kEobBaseExpObjectShpStart,
kEobBaseExpObjectTbl1,
kEobBaseExpObjectTbl2,
kEobBaseExpObjectTbl3,
kEobBaseExpObjectY,

kEobBaseSparkDefSteps,
kEobBaseSparkDefSubSteps,
Expand Down
36 changes: 17 additions & 19 deletions devtools/create_kyradat/tables.cpp
Expand Up @@ -1878,11 +1878,6 @@ const ExtractEntrySearchData kEobBaseMagicStrings4Provider[] = {
EXTRACT_END_ENTRY
};

const ExtractEntrySearchData kEobBaseMagicStrings5Provider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000008, 0x0000016C, { { 0xCF, 0x5B, 0x04, 0xAB, 0x1A, 0xAF, 0xDD, 0x56, 0xAC, 0xF6, 0x23, 0x86, 0x33, 0x06, 0x5A, 0xC6 } } } },
EXTRACT_END_ENTRY
};

const ExtractEntrySearchData kEobBaseMagicStrings6Provider[] = {
{ EN_ANY, kPlatformPC, { 0x00000029, 0x00000DA4, { { 0x5C, 0x6F, 0xA1, 0xC2, 0x56, 0xDE, 0xFE, 0xD5, 0x01, 0xFB, 0x65, 0x00, 0x24, 0xD1, 0x49, 0x7B } } } },
{ DE_DEU, kPlatformPC, { 0x00000032, 0x00001211, { { 0x13, 0xBC, 0xF1, 0x03, 0x49, 0xDB, 0x16, 0xA5, 0xC3, 0x7C, 0xBF, 0x14, 0x8F, 0x40, 0x07, 0x8E } } } },
Expand All @@ -1907,33 +1902,36 @@ const ExtractEntrySearchData kEobBaseMagicStrings8Provider[] = {
EXTRACT_END_ENTRY
};

const ExtractEntrySearchData kEobBaseFlightObjAnimTilesProvider[] = {
const ExtractEntrySearchData kEobBaseExpObjectTlModeProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000012, 0x0000000C, { { 0x98, 0x29, 0x54, 0xCD, 0xED, 0xAC, 0x7B, 0x61, 0x8D, 0x4F, 0x19, 0xE8, 0xA6, 0xB1, 0x51, 0x80 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kEobBaseFlightObjAnimIndexProvider[] = {
const ExtractEntrySearchData kEobBaseExpObjectTblIndexProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000009, 0x00000005, { { 0xFE, 0xEA, 0xC4, 0x54, 0x62, 0x7E, 0x43, 0x6E, 0x89, 0x48, 0x03, 0xE7, 0x47, 0xBF, 0x7D, 0x9D } } } }, // EOB 1
{ UNK_LANG, kPlatformPC, { 0x0000000E, 0x00000004, { { 0x63, 0x27, 0x19, 0x17, 0xBD, 0xC3, 0x8A, 0xA7, 0x1E, 0xF7, 0xD1, 0x78, 0x39, 0x3B, 0xD4, 0x4F } } } }, // EOB 2
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kEobBaseFlightObjAnimDimProvider[] = {
const ExtractEntrySearchData kEobBaseExpObjectShpStartProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000004, 0x00000034, { { 0x27, 0xC5, 0x09, 0x97, 0x8E, 0xD4, 0xF1, 0x8D, 0x77, 0xEB, 0x1D, 0x34, 0x55, 0xB2, 0x48, 0x38 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kEobBaseFlightObjAnimTbl1Provider[] = {
const ExtractEntrySearchData kEobBaseExpObjectTbl1Provider[] = {
{ UNK_LANG, kPlatformPC, { 0x0000000D, 0x0000005D, { { 0x49, 0xC4, 0x47, 0x55, 0xDC, 0x25, 0x08, 0x03, 0x3D, 0x23, 0xAD, 0x09, 0x5F, 0x9C, 0x34, 0x06 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kEobBaseFlightObjAnimTbl2Provider[] = {
const ExtractEntrySearchData kEobBaseExpObjectTbl2Provider[] = {
{ UNK_LANG, kPlatformPC, { 0x0000000A, 0x0000005C, { { 0xAB, 0x6A, 0x97, 0x35, 0xCC, 0x13, 0xC4, 0x17, 0x0B, 0xF2, 0xD3, 0xFD, 0xA2, 0x1C, 0x6C, 0xA8 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kEobBaseFlightObjAnimTbl3Provider[] = {
const ExtractEntrySearchData kEobBaseExpObjectTbl3Provider[] = {
{ UNK_LANG, kPlatformPC, { 0x0000000B, 0x00000032, { { 0x59, 0x23, 0xB9, 0xBE, 0x0E, 0xFA, 0xEB, 0xDD, 0x82, 0x68, 0x5B, 0xB0, 0xBE, 0x9B, 0x1D, 0x8E } } } },
EXTRACT_END_ENTRY
};


const ExtractEntrySearchData kEobBaseExpObjectYProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000008, 0x0000016C, { { 0xCF, 0x5B, 0x04, 0xAB, 0x1A, 0xAF, 0xDD, 0x56, 0xAC, 0xF6, 0x23, 0x86, 0x33, 0x06, 0x5A, 0xC6 } } } },
EXTRACT_END_ENTRY
};

const ExtractEntrySearchData kEobBaseSparkDefStepsProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000008, 0x000002FD, { { 0xB5, 0x6F, 0x31, 0x5F, 0xC6, 0x47, 0xE9, 0x23, 0x0E, 0x73, 0xBF, 0x77, 0xC7, 0xEE, 0xDB, 0x27 } } } },
Expand Down Expand Up @@ -3296,17 +3294,17 @@ const ExtractEntry extractProviders[] = {
{ kEobBaseMagicStrings2, kEobBaseMagicStrings2Provider },
{ kEobBaseMagicStrings3, kEobBaseMagicStrings3Provider },
{ kEobBaseMagicStrings4, kEobBaseMagicStrings4Provider },
{ kEobBaseMagicStrings5, kEobBaseMagicStrings5Provider },
{ kEobBaseMagicStrings6, kEobBaseMagicStrings6Provider },
{ kEobBaseMagicStrings7, kEobBaseMagicStrings7Provider },
{ kEobBaseMagicStrings8, kEobBaseMagicStrings8Provider },

{ kEobBaseFlightObjAnimTiles, kEobBaseFlightObjAnimTilesProvider },
{ kEobBaseFlightObjAnimIndex, kEobBaseFlightObjAnimIndexProvider },
{ kEobBaseFlightObjAnimDim, kEobBaseFlightObjAnimDimProvider },
{ kEobBaseFlightObjAnimTbl1, kEobBaseFlightObjAnimTbl1Provider },
{ kEobBaseFlightObjAnimTbl2, kEobBaseFlightObjAnimTbl2Provider },
{ kEobBaseFlightObjAnimTbl3, kEobBaseFlightObjAnimTbl3Provider },
{ kEobBaseExpObjectTlMode, kEobBaseExpObjectTlModeProvider },
{ kEobBaseExpObjectTblIndex, kEobBaseExpObjectTblIndexProvider },
{ kEobBaseExpObjectShpStart, kEobBaseExpObjectShpStartProvider },
{ kEobBaseExpObjectTbl1, kEobBaseExpObjectTbl1Provider },
{ kEobBaseExpObjectTbl2, kEobBaseExpObjectTbl2Provider },
{ kEobBaseExpObjectTbl3, kEobBaseExpObjectTbl3Provider },
{ kEobBaseExpObjectY, kEobBaseExpObjectYProvider },

{ kEobBaseSparkDefSteps, kEobBaseSparkDefStepsProvider },
{ kEobBaseSparkDefSubSteps, kEobBaseSparkDefSubStepsProvider },
Expand Down
34 changes: 21 additions & 13 deletions engines/kyra/eobcommon.cpp
Expand Up @@ -22,17 +22,17 @@

#ifdef ENABLE_EOB

#include "common/config-manager.h"

#include "audio/mididrv.h"
#include "audio/mixer.h"

#include "kyra/loleobbase.h"
#include "kyra/resource.h"
#include "kyra/sound_intern.h"
#include "kyra/script_eob.h"
#include "kyra/timer.h"

#include "common/config-manager.h"

#include "audio/mididrv.h"
#include "audio/mixer.h"

namespace Kyra {

EobCoreEngine::EobCoreEngine(OSystem *system, const GameFlags &flags) : LolEobBaseEngine(system, flags), _numLargeItemShapes(flags.gameID == GI_EOB1 ? 14 : 11),
Expand Down Expand Up @@ -229,6 +229,11 @@ Common::Error EobCoreEngine::init() {
assert(_res);
_res->reset();

_staticres = new StaticResource(this);
assert(_staticres);
if (!_staticres->init())
error("_staticres->init() failed");

if (!screen()->init())
error("screen()->init() failed");

Expand All @@ -246,11 +251,6 @@ Common::Error EobCoreEngine::init() {
_screen->loadFont(Screen::FID_6_FNT, "FONT6.FNT");
_screen->loadFont(Screen::FID_8_FNT, "FONT8.FNT");

_staticres = new StaticResource(this);
assert(_staticres);
if (!_staticres->init())
error("_staticres->init() failed");

Common::Error err = LolEobBaseEngine::init();
if (err.getCode() != Common::kNoError)
return err;
Expand Down Expand Up @@ -1383,7 +1383,7 @@ void EobCoreEngine::inflictMonsterDamage(EobMonsterInPlay *m, int damage, bool g
m->flags = (m->flags & 0xf7) | 1;

if (_monsterProps[m->type].flags & 0x2000) {
inflictMonsterDamage_s1(m);
explodeMonster(m);
checkSceneUpdateNeed(m->block);
m->hitPointsCur = 0;
} else {
Expand Down Expand Up @@ -1827,8 +1827,16 @@ int EobCoreEngine::getMonsterAcHitChanceModifier(int charIndex, int monsterAc) {
return (20 - ((l / mod1[cm]) * mod2[cm])) - monsterAc;
}

void EobCoreEngine::inflictMonsterDamage_s1(EobMonsterInPlay *m) {

void EobCoreEngine::explodeMonster(EobMonsterInPlay *m) {
m->flags |= 2;
if (getBlockDistance(m->block, _currentBlock) < 2) {
explodeObject(0, _currentBlock, 2);
for (int i = 0; i < 6; i++)
calcAndInflictCharacterDamage(i, 6, 6, 0, 8, 1, 0);
} else {
explodeObject(0, m->block, 2);
}
m->flags &= ~2;
}

void EobCoreEngine::snd_playSoundEffect(int id, int volume) {
Expand Down
24 changes: 13 additions & 11 deletions engines/kyra/eobcommon.h
Expand Up @@ -413,7 +413,7 @@ friend class CharacterGenerator;
void launchMagicObject(int charIndex, int type, uint16 startBlock, int startPos, int dir);
bool updateObjectFlight(EobFlyingObject *fo, int block, int pos);
bool updateFlyingObjectHitTest(EobFlyingObject *fo, int block, int pos);
void updateFlyingObject_s3(EobFlyingObject *fo);
void explodeObject(EobFlyingObject *fo, int block, Item item);
void endObjectFlight(EobFlyingObject *fo);
void checkFlyingObjects();

Expand All @@ -435,12 +435,15 @@ friend class CharacterGenerator;
const int8 *_flightObjShpMap;
const int8 *_flightObjSclIndex;

const uint8 *_flightObjAnimTiles;
const uint8 *_flightObjAnimIndex;
const uint8 *_flightObjAnimDim;
const uint8 *_flightObjAnimTbl1;
const uint8 *_flightObjAnimTbl2;
const uint8 *_flightObjAnimTbl3;
const uint8 *_expObjectTlMode;
const uint8 *_expObjectTblIndex;
const uint8 *_expObjectShpStart;
const uint8 *_expObjectAnimTbl1;
int _expObjectAnimTbl1Size;
const uint8 *_expObjectAnimTbl2;
int _expObjectAnimTbl2Size;
const uint8 *_expObjectAnimTbl3;
int _expObjectAnimTbl3Size;

// Monsters
void loadMonsterShapes(const char *filename, int monsterIndex, bool hasDecorations, int encodeTableIndex);
Expand Down Expand Up @@ -545,7 +548,7 @@ friend class CharacterGenerator;
virtual const uint8 *loadDoorShapes(const char *filename, int doorIndex, const uint8*shapeDefs) { return (const uint8*)filename; }

void drawScene(int update);
void drawSceneShapes();
void drawSceneShapes(int start = 0);
void drawDecorations(int index);

int calcNewBlockPositionAndTestPassability(uint16 curBlock, uint16 direction);
Expand Down Expand Up @@ -802,8 +805,8 @@ friend class CharacterGenerator;
int getStrDamageModifier(int charIndex);
int getDexHitChanceModifier(int charIndex);
int getMonsterAcHitChanceModifier(int charIndex, int monsterAc);
void inflictMonsterDamage_s1(EobMonsterInPlay *m);

void explodeMonster(EobMonsterInPlay *m);
int _dstMonsterIndex;
int _inflictMonsterDamageUnk;
int16 _foundMonstersArray[5];
Expand Down Expand Up @@ -933,7 +936,6 @@ friend class CharacterGenerator;
const char *const *_magicStrings2;
const char *const *_magicStrings3;
const char *const *_magicStrings4;
const char *const *_magicStrings5;
const char *const *_magicStrings6;
const char *const *_magicStrings7;
const char *const *_magicStrings8;
Expand Down

0 comments on commit 9a6be57

Please sign in to comment.