CTileLoader::CTileLoader(CExeFile &Exefile) { m_episode = Exefile.getEpisode(); m_version = Exefile.getEXEVersion(); m_data = Exefile.getRawData(); m_offset = 0; setupOffsetMap(); }
bool CGameLauncher::scanExecutables(const std::string& path) { bool result = false; gLogging.ftextOut("Search: %s<br>", path.c_str() ); // Episode 1-6 and 7 stands for Keen Dreams for(int i = 1; i <= 7; ++i) { CExeFile executable; // Load the exe into memory if(!executable.readData(i, path)) continue; // Process the exe for type GameEntry newentry; newentry.crcpass = executable.getEXECrc(); newentry.version = executable.getEXEVersion(); newentry.supported = executable.Supported(); newentry.episode = i; newentry.path = path; newentry.exefilename = executable.getFileName(); // Check for an existing custom label for the menu newentry.name = scanLabels(executable.getFileName()); std::string verstr; std::string gamespecstring = "Detected game Name: " + executable.getFileName(); if( newentry.version<=0 ) // Version couldn't be read! { verstr = "unknown"; gamespecstring += " (Unknown Version)<br>"; } else { verstr = "v" + itoa(newentry.version/100) + "." + itoa(newentry.version%100); gamespecstring += " Version: "; gamespecstring += verstr; gamespecstring += "<br>"; } if( newentry.name.length() <= 0 ) { newentry.name = filterGameName(newentry.path); } newentry.name += " "; // Save the type information about the exe m_Entries.push_back(newentry); gLogging.textOut(gamespecstring); // The original episode 1 exe is needed to load gfx's for game launcher menu if ( m_ep1slot <= -1 && newentry.crcpass == true ) { m_ep1slot = m_Entries.size()-1; gLogging.ftextOut(" Using for in-game menu resources<br>" ); } result = true; } return result; }
COrderingInfo::COrderingInfo( CExeFile &ExeFile ) { std::string datadirectory = ExeFile.getDataDirectory(); char episode = ExeFile.getEpisode(); mp_Scrollsurface = g_pVideoDriver->mp_VideoEngine->getScrollSurface(); CMapLoader Maploader(&m_Map); Maploader.load(episode, 90, datadirectory); m_Map.gotoPos( 22<<4, 32 ); // Get the offset where in the data the info is... size_t offset = 0; switch(episode) { case 1: m_starty = 4; // start of y-coordinate in textheights m_numberoflines = 21; // numberof lines to print if(ExeFile.getEXEVersion() == 131) offset = 0x1652B-512; // Change the ugly lower Tiles which are seen, when using 320x240 base resolution for(int i=0; i<20 ; i++) { m_Map.changeTile(22+i, 15, 14*13); m_Map.changeTile(22+i, 16, 14*13+3); } break; case 2: m_starty = 3; // start of y-coordinate in textheights m_numberoflines = 19; // numberof lines to print m_Map.gotoPos( 22<<4, 28 ); if(ExeFile.getEXEVersion() == 131) offset = 0x1ACD9-512; break; case 3: m_starty = 4; // start of y-coordinate in textheights m_numberoflines = 17; // numberof lines to print if(ExeFile.getEXEVersion() == 131) offset = 0x1CDED-512; break; } m_Map.drawAll(); // Read the strings and save them the string array of the class if(offset) { char *data; data = (char*)ExeFile.getRawData() + offset; std::string buf; for(int i=0 ; i<m_numberoflines ; i++) { if(*data == '\0') { data++; while(*data == '\0') data++; } while(*data != '\n' and *data != '\0') // For the next line { buf.push_back(*data); data++; } data++; m_Textline.push_back(buf); buf.clear(); } } //This just makes them all line up exactly like in the original games. switch(episode) { case 1: m_Textline[1] = " " + m_Textline[1]; m_Textline[2] = m_Textline[2] + " "; m_Textline[3] = m_Textline[3] + " "; m_Textline[4] = " " + m_Textline[4]; m_Textline[5] = " " + m_Textline[5]; m_Textline[6] = " " + m_Textline[6]; m_Textline[8] = m_Textline[8] + " "; m_Textline[9] = m_Textline[9] + " "; m_Textline[10] = m_Textline[10] + " "; m_Textline[11] = m_Textline[11] + " "; m_Textline[13] = m_Textline[13] + " "; m_Textline[14] = m_Textline[14] + " "; m_Textline[15] = m_Textline[15] + " "; m_Textline[20] = m_Textline[20] + " "; break; case 2: m_Textline[2] = m_Textline[2] + " "; m_Textline[4] = m_Textline[4] + " "; m_Textline[5] = m_Textline[5] + " "; m_Textline[6] = m_Textline[6] + " "; m_Textline[7] = m_Textline[7] + " "; m_Textline[8] = m_Textline[8] + " "; m_Textline[10] = m_Textline[10] + " "; m_Textline[11] = m_Textline[11] + " "; m_Textline[12] = m_Textline[12] + " "; m_Textline[13] = m_Textline[13] + " "; m_Textline[15] = m_Textline[15] + " "; m_Textline[16] = m_Textline[16] + " "; break; case 3: m_Textline[0] = m_Textline[0] + " "; m_Textline[1] = m_Textline[1] + " "; m_Textline[2] = m_Textline[2] + " "; m_Textline[4] = m_Textline[4] + " "; m_Textline[5] = m_Textline[5] + " "; m_Textline[6] = m_Textline[6] + " "; m_Textline[7] = m_Textline[7] + " "; m_Textline[8] = m_Textline[8] + " "; m_Textline[10] = m_Textline[10] + " "; m_Textline[11] = m_Textline[11] + " "; m_Textline[12] = m_Textline[12] + " "; m_Textline[13] = m_Textline[13] + " "; m_Textline[16] = m_Textline[16] + " "; break; } }