summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/levelinfo.cpp19
-rw-r--r--src/levelinfo.h14
2 files changed, 22 insertions, 11 deletions
diff --git a/src/levelinfo.cpp b/src/levelinfo.cpp
index 8ce2845..d5ef8e7 100644
--- a/src/levelinfo.cpp
+++ b/src/levelinfo.cpp
@@ -7,10 +7,9 @@ void dLevelInfo_c::load(void *buffer) {
for (int sect = 0; sect < sectionCount(); sect++) {
// parse this section
section_s *thisSect = getSectionByIndex(sect);
- entry_s *levels = getLevelsForSection(thisSect);
for (int lev = 0; lev < thisSect->levelCount; lev++) {
- entry_s *level = &levels[lev];
+ entry_s *level = &thisSect->levels[lev];
SetSomeConditionShit(level->worldSlot, level->levelSlot, level->flags);
@@ -28,7 +27,7 @@ dLevelInfo_c::entry_s *dLevelInfo_c::searchBySlot(int world, int level) {
section_s *sect = getSectionByIndex(i);
for (int j = 0; j < sect->levelCount; j++) {
- entry_s *entry = &getLevelsForSection(sect)[j];
+ entry_s *entry = &sect->levels[j];
if (entry->worldSlot == world && entry->levelSlot == level)
return entry;
}
@@ -37,3 +36,17 @@ dLevelInfo_c::entry_s *dLevelInfo_c::searchBySlot(int world, int level) {
return 0;
}
+dLevelInfo_c::entry_s *dLevelInfo_c::searchByDisplayNum(int world, int level) {
+ for (int i = 0; i < sectionCount(); i++) {
+ section_s *sect = getSectionByIndex(i);
+
+ for (int j = 0; j < sect->levelCount; j++) {
+ entry_s *entry = &sect->levels[j];
+ if (entry->displayWorld == world && entry->displayLevel == level)
+ return entry;
+ }
+ }
+
+ return 0;
+}
+
diff --git a/src/levelinfo.h b/src/levelinfo.h
index 20628d9..8c8fe58 100644
--- a/src/levelinfo.h
+++ b/src/levelinfo.h
@@ -11,10 +11,6 @@ public:
u32 sectionOffsets[1];
};
- struct section_s {
- u32 levelCount;
- };
-
struct entry_s {
u8 worldSlot;
u8 levelSlot;
@@ -26,6 +22,11 @@ public:
u32 nameOffset;
};
+ struct section_s {
+ u32 levelCount;
+ entry_s levels[1];
+ };
+
private:
header_s *data;
@@ -33,6 +34,7 @@ public:
void load(void *buffer);
entry_s *searchBySlot(int world, int level);
+ entry_s *searchByDisplayNum(int world, int level);
u32 sectionCount() {
return data->sectionCount;
@@ -42,10 +44,6 @@ public:
return (section_s*)(((char*)data) + data->sectionOffsets[index]);
}
- entry_s *getLevelsForSection(section_s *section) {
- return (entry_s*)(section + 1);
- }
-
const char *getNameForLevel(entry_s *entry) {
return (const char*)data + entry->nameOffset;
}