Skip to content

Commit

Permalink
KYRA: (EOB) - implement party resting
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 db83458 commit 9140fd8
Show file tree
Hide file tree
Showing 24 changed files with 794 additions and 171 deletions.
5 changes: 4 additions & 1 deletion devtools/create_kyradat/create_kyradat.cpp
Expand Up @@ -492,7 +492,8 @@ const ExtractFilename extractFilenames[] = {
{ kEob2Npc1Strings, kTypeStringList, true },
{ kEob2Npc2Strings, kTypeStringList, true },
{ kEob2MonsterDustStrings, kTypeStringList, true },

{ kEob2DranFoolsStrings, kTypeStringList, true },

// LANDS OF LORE

// Ingame
Expand Down Expand Up @@ -1767,6 +1768,8 @@ const char *getIdString(const int id) {
return "kEob2Npc2Strings";
case kEob2MonsterDustStrings:
return "kEob2MonsterDustStrings";
case kEob2DranFoolsStrings:
return "kEob2DranFoolsStrings";
case kLolIngamePakFiles:
return "kLolIngamePakFiles";
case kLolCharacterDefs:
Expand Down
2 changes: 2 additions & 0 deletions devtools/create_kyradat/create_kyradat.h
Expand Up @@ -474,6 +474,8 @@ enum kExtractID {
kEob2Npc2Strings,
kEob2MonsterDustStrings,

kEob2DranFoolsStrings,

kLolIngamePakFiles,
kLolCharacterDefs,
kLolIngameSfxFiles,
Expand Down
1 change: 1 addition & 0 deletions devtools/create_kyradat/games.cpp
Expand Up @@ -1484,6 +1484,7 @@ const int eob2FloppyNeed[] = {
kEob2Npc1Strings,
kEob2Npc2Strings,
kEob2MonsterDustStrings,
kEob2DranFoolsStrings,

kLolEobCommonDscShapeIndex,
kLolEobCommonDscX,
Expand Down
7 changes: 7 additions & 0 deletions devtools/create_kyradat/tables.cpp
Expand Up @@ -2772,6 +2772,12 @@ const ExtractEntrySearchData kEob2MonsterDustStringsProvider[] = {
EXTRACT_END_ENTRY
};

const ExtractEntrySearchData kEob2DranFoolsStringsProvider[] = {
{ EN_ANY, kPlatformUnknown, { 0x0000001A, 0x00000887, { { 0xA6, 0xB4, 0x45, 0x1B, 0x33, 0x54, 0x36, 0xAD, 0x1D, 0xB1, 0xDA, 0xC3, 0x12, 0x85, 0x3C, 0x58 } } } },
{ DE_DEU, kPlatformUnknown, { 0x00000012, 0x00000511, { { 0xEE, 0x21, 0xA8, 0x6E, 0xF7, 0xEC, 0x9A, 0x8D, 0xBA, 0x8D, 0xE3, 0x4A, 0x17, 0x15, 0xCA, 0x8C } } } },
EXTRACT_END_ENTRY
};

const ExtractEntrySearchData kLolIngamePakFilesProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000088, 0x0000224F, { { 0xDA, 0x24, 0x18, 0xA3, 0xEF, 0x16, 0x70, 0x8F, 0xA8, 0xC2, 0x2E, 0xC2, 0xED, 0x39, 0x03, 0xD1 } } } },
{ UNK_LANG, kPlatformPC98, { 0x00000084, 0x00002125, { { 0x7A, 0x89, 0xE2, 0x36, 0xEC, 0x6F, 0x52, 0x2B, 0xEF, 0xBA, 0x3D, 0x28, 0x54, 0xDA, 0xFB, 0x72 } } } },
Expand Down Expand Up @@ -3660,6 +3666,7 @@ const ExtractEntry extractProviders[] = {
{ kEob2Npc1Strings, kEob2Npc1StringsProvider },
{ kEob2Npc2Strings, kEob2Npc2StringsProvider },
{ kEob2MonsterDustStrings, kEob2MonsterDustStringsProvider },
{ kEob2DranFoolsStrings, kEob2DranFoolsStringsProvider },

{ kLolIngamePakFiles, kLolIngamePakFilesProvider },
{ kLolCharacterDefs, kLolCharacterDefsProvider },
Expand Down
4 changes: 2 additions & 2 deletions engines/kyra/chargen.cpp
Expand Up @@ -1270,10 +1270,10 @@ void CharacterGenerator::finish() {

for (int i = 0; i < 4; i++) {
if (_vm->_classModifierFlags[_characters[i].cClass] & 2)
_characters[i].mageSpellsAvailabilityFlags = (_vm->game() == GI_EOB2) ? 0x81CB6 : 0x26C;
_characters[i].mageSpellsAvailableFlags = (_vm->game() == GI_EOB2) ? 0x81CB6 : 0x26C;

if (_vm->_classModifierFlags[_characters[i].cClass] & 0x14 && _vm->game() == GI_EOB2) {
// Cleric: Turn Undead
// Cleric/Paladin: Add Turn Undead spell
_characters[i].clericSpells[0] = 29;
}
}
Expand Down
5 changes: 5 additions & 0 deletions engines/kyra/eob1.cpp
Expand Up @@ -24,6 +24,7 @@

#include "kyra/eob1.h"
#include "kyra/resource.h"
#include "kyra/sound.h"

namespace Kyra {

Expand Down Expand Up @@ -77,6 +78,10 @@ void EobEngine::startupNew() {
EobCoreEngine::startupNew();
}

void EobEngine::startupLoad() {
_sound->loadSoundFile("ADLIB");
}

void EobEngine::npcSequence(int npcIndex) {


Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/eob1.h
Expand Up @@ -48,7 +48,7 @@ friend class GUI_Eob;

// Main loop
void startupNew();
void startupLoad() {}
void startupLoad();

// Intro/Outro
void seq_playOpeningCredits();
Expand Down
36 changes: 36 additions & 0 deletions engines/kyra/eob2.cpp
Expand Up @@ -271,6 +271,24 @@ void DarkMoonEngine::replaceMonster(int unit, uint16 block, int pos, int dir, in
initMonster(index, unit, block, pos, dir, type, shpIndex, mode, h2, randItem, fixedItem);
}

bool DarkMoonEngine::killMonsterExtra(EobMonsterInPlay *m) {
if (_currentLevel == 16 && _currentSub == 1 && (_monsterProps[m->type].flags & 4)) {
if (m->type) {
_playFinale = true;
_runFlag = false;
} else {
m->hitPointsCur = 150;
m->curRemoteWeapon = 0;
m->numRemoteAttacks = 255;
m->shpIndex++;
m->type++;
seq_dranDragonTransformation();
}
return false;
}
return true;
}

const uint8 *DarkMoonEngine::loadDoorShapes(const char *filename, int doorIndex, const uint8 *shapeDefs) {
_screen->loadEobBitmap(filename, 3, 3);
for (int i = 0; i < 3; i++) {
Expand Down Expand Up @@ -319,6 +337,24 @@ void DarkMoonEngine::drawDoorIntern(int type, int, int x, int y, int w, int wall
drawBlockObject(0, 2, _doorSwitches[shapeIndex].shp, _doorSwitches[shapeIndex].x + w, _doorSwitches[shapeIndex].y, 5);
}

void DarkMoonEngine::restParty_npc() {

}

bool DarkMoonEngine::restParty_extraAbortCondition() {
if (_currentLevel != 3)
return false;

seq_nightmare();

return true;
}

void DarkMoonEngine::checkPartyStatusExtra() {
if (checkScriptFlag(0x10))
seq_dranFools();
}

void DarkMoonEngine::drawLightningColumn() {
int f = rollDice(1, 2, -1);
int y = 0;
Expand Down
14 changes: 14 additions & 0 deletions engines/kyra/eob2.h
Expand Up @@ -60,6 +60,7 @@ friend class DarkmoonSequenceHelper;
// Main Menu
int mainMenu();
int mainMenuLoop();

int _menuChoiceInit;

// Main loop
Expand All @@ -85,6 +86,13 @@ friend class DarkmoonSequenceHelper;
static const char *_palFilesIntro[];
static const char *_palFilesFinale[];

// Ingame sequence
void seq_nightmare();
void seq_dranFools();
void seq_dranDragonTransformation();

const char *const *_dranFoolsStrings;

// characters
void npcSequence(int npcIndex);

Expand All @@ -99,14 +107,20 @@ friend class DarkmoonSequenceHelper;
void generateMonsterPalettes(const char *file, int16 monsterIndex);
void loadMonsterDecoration(const char *file, int16 monsterIndex);
void replaceMonster(int unit, uint16 block, int d, int dir, int type, int shpIndex, int mode, int h2, int randItem, int fixedItem);
bool killMonsterExtra(EobMonsterInPlay *m);

// Level
const uint8 *loadDoorShapes(const char *filename, int doorIndex, const uint8 *shapeDefs);
void drawDoorIntern(int type, int, int x, int y, int w, int wall, int mDim, int16, int16);

const uint8 *_dscDoorType5Offs;

// Rest party
void restParty_npc();
bool restParty_extraAbortCondition();

// misc
void checkPartyStatusExtra();
void drawLightningColumn();
int resurrectionSelectDialogue();
int charSelectDialogue();
Expand Down

0 comments on commit 9140fd8

Please sign in to comment.