Skip to content

Commit

Permalink
NEVERHOOD: Add NavigationLists in create_neverhood
Browse files Browse the repository at this point in the history
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 8a5c4a8 commit 7836512
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 2 deletions.
61 changes: 59 additions & 2 deletions devtools/create_neverhood/create_neverhood.cpp
Expand Up @@ -81,6 +81,18 @@ struct MessageItem {

typedef std::vector<MessageItem> MessageItems;

struct NavigationItem {
uint32 fileHash;
uint32 leftSmackerFileHash;
uint32 rightSmackerFileHash;
uint32 middleSmackerFileHash;
byte interactive;
byte middleFlag;
uint32 mouseCursorFileHash;
};

typedef std::vector<NavigationItem> NavigationItems;

struct HitRectList {
uint32 id;
HitRects hitRects;
Expand All @@ -96,9 +108,15 @@ struct MessageList {
MessageItems messageItems;
};

struct NavigationList {
uint32 id;
NavigationItems navigationItems;
};

std::vector<HitRectList*> hitRectLists;
std::vector<RectList*> rectLists;
std::vector<MessageList*> messageLists;
std::vector<NavigationList*> navigationLists;

byte *getData(uint32 offset) {
return data + offset - dataStart + fileStart;
Expand All @@ -125,7 +143,6 @@ void addHitRect(uint32 count, uint32 offset) {
void addMessage(uint32 count, uint32 offset) {
MessageList *messageList = new MessageList();
messageList->id = offset;

// Special code for message lists which are set at runtime (but otherwise constant)
switch (offset) {
// Scene 1002 rings
Expand Down Expand Up @@ -161,7 +178,6 @@ void addMessage(uint32 count, uint32 offset) {
item += 8;
}
}

messageLists.push_back(messageList);
}

Expand Down Expand Up @@ -199,6 +215,25 @@ void addRect(uint32 count, uint32 offset) {
rectLists.push_back(rectList);
}

void addNavigation(uint32 count, uint32 offset) {
NavigationList *navigationList = new NavigationList();
navigationList->id = offset;
byte *item = getData(offset);
for (uint32 i = 0; i < count; i++) {
NavigationItem navigationItem;
navigationItem.fileHash = READ_LE_UINT32(item + 0);
navigationItem.leftSmackerFileHash = READ_LE_UINT32(item + 4);
navigationItem.rightSmackerFileHash = READ_LE_UINT32(item + 8);
navigationItem.middleSmackerFileHash = READ_LE_UINT32(item + 12);
navigationItem.interactive = item[16];
navigationItem.middleFlag = item[17];
navigationItem.mouseCursorFileHash = READ_LE_UINT32(item + 20);
item += 24;
navigationList->navigationItems.push_back(navigationItem);
}
navigationLists.push_back(navigationList);
}

int main(int argc, char *argv[]) {

FILE *datFile;
Expand All @@ -217,6 +252,10 @@ int main(int argc, char *argv[]) {
addMessage(messageListOffsets[i], messageListOffsets[i + 1]);
}

for (int i = 0; navigationListOffsets[i] != 0; i += 2) {
addNavigation(navigationListOffsets[i], navigationListOffsets[i + 1]);
}

datFile = fopen("neverhood.dat", "wb");

writeUint32LE(datFile, 0x11223344); // Some magic
Expand Down Expand Up @@ -274,6 +313,24 @@ int main(int argc, char *argv[]) {
}
}

// Write all navigation lists
writeUint32LE(datFile, navigationLists.size());
for (std::vector<NavigationList*>::iterator it = navigationLists.begin(); it != navigationLists.end(); it++) {
NavigationList *navigationList = *it;
writeUint32LE(datFile, navigationList->id);
writeUint32LE(datFile, navigationList->navigationItems.size());
for (uint32 i = 0; i < navigationList->navigationItems.size(); i++) {
const NavigationItem &navigationItem = navigationList->navigationItems[i];
writeUint32LE(datFile, navigationItem.fileHash);
writeUint32LE(datFile, navigationItem.leftSmackerFileHash);
writeUint32LE(datFile, navigationItem.rightSmackerFileHash);
writeUint32LE(datFile, navigationItem.middleSmackerFileHash);
writeByte(datFile, navigationItem.interactive);
writeByte(datFile, navigationItem.middleFlag);
writeUint32LE(datFile, navigationItem.mouseCursorFileHash);
}
}

fclose(datFile);

printf("Done.\n");
Expand Down
4 changes: 4 additions & 0 deletions devtools/create_neverhood/tables.h
Expand Up @@ -67,3 +67,7 @@ static const uint32 messageListOffsets[] = {
0, 0
};

static const uint32 navigationListOffsets[] = {
// Module2300
2, 0x004B67B8
};
Binary file modified dists/engine-data/neverhood.dat
Binary file not shown.

0 comments on commit 7836512

Please sign in to comment.