#include "levelinfo.h" dDvdLoader_c s_levelInfoLoader; bool s_levelInfoLoaded = false; dLevelInfo_c dLevelInfo_c::s_info; bool LoadLevelInfo() { if (s_levelInfoLoaded) return true; void *data = s_levelInfoLoader.load("/NewerRes/LevelInfo.bin"); if (data) { dLevelInfo_c::s_info.load(data); s_levelInfoLoaded = true; return true; } return false; } void dLevelInfo_c::load(void *buffer) { data = (header_s*)buffer; // decode all the level names for (int sect = 0; sect < sectionCount(); sect++) { // parse this section section_s *thisSect = getSectionByIndex(sect); for (int lev = 0; lev < thisSect->levelCount; lev++) { entry_s *level = &thisSect->levels[lev]; SetSomeConditionShit(level->worldSlot, level->levelSlot, level->flags); char *name = (char*)getNameForLevel(level); for (int i = 0; i < level->nameLength+1; i++) { name[i] -= 0xD0; } } } } dLevelInfo_c::entry_s *dLevelInfo_c::searchBySlot(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 = §->levels[j]; if (entry->worldSlot == world && entry->levelSlot == level) return entry; } } 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 = §->levels[j]; if (entry->displayWorld == world && entry->displayLevel == level) return entry; } } return 0; }