MCPcopy Create free account
hub / github.com/TheForceEngine/TheForceEngine / level_loadGeometry

Function level_loadGeometry

TheForceEngine/TFE_Jedi/Level/level.cpp:152–590  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150 }
151
152 JBool level_loadGeometry(const char* levelName)
153 {
154 s_levelState.secretCount = 0;
155 s_dataIndex = 0;
156 s_levelState.minLayer = INT_MAX;
157 s_levelState.maxLayer = INT_MIN;
158 message_free();
159
160 // Try loading as an LVB
161 if (level_loadGeometryBin(levelName, s_buffer))
162 {
163 return JTRUE;
164 }
165
166 // Otherwise load the LEV
167 char levelPath[TFE_MAX_PATH];
168 strcpy(levelPath, levelName);
169 strcat(levelPath, ".LEV");
170
171 FilePath filePath;
172 if (!TFE_Paths::getFilePath(levelPath, &filePath))
173 {
174 TFE_System::logWrite(LOG_ERROR, "level_loadGeometry", "Cannot find level geometry '%s'.", levelName);
175 return false;
176 }
177 FileStream file;
178 if (!file.open(&filePath, Stream::MODE_READ))
179 {
180 TFE_System::logWrite(LOG_ERROR, "level_loadGeometry", "Cannot open level geometry '%s'.", levelName);
181 return false;
182 }
183 size_t len = file.getSize();
184 s_buffer.resize(len);
185 file.readBuffer(s_buffer.data(), u32(len));
186 file.close();
187
188 TFE_Parser parser;
189 size_t bufferPos = 0;
190 parser.init(s_buffer.data(), s_buffer.size());
191 parser.addCommentString("#");
192 parser.convertToUpperCase(true);
193
194 // Only use the parser "read line" functionality and otherwise read in the same was as the DOS code.
195 const char* line;
196 line = parser.readLine(bufferPos);
197 s32 versionMajor, versionMinor;
198 if (sscanf(line, " LEV %d.%d", &versionMajor, &versionMinor) != 2)
199 {
200 TFE_System::logWrite(LOG_ERROR, "level_loadGeometry", "Cannot read version.");
201 return false;
202 }
203 if (versionMajor != DF_LEVEL_VERSION_MAJOR || versionMinor != DF_LEVEL_VERSION_MINOR)
204 {
205 TFE_System::logWrite(LOG_ERROR, "level_loadGeometry", "Invalid level version %d.%d.", versionMajor, versionMinor);
206 return false;
207 }
208
209 line = parser.readLine(bufferPos);

Callers 1

level_loadFunction · 0.85

Calls 15

message_freeFunction · 0.85
level_loadGeometryBinFunction · 0.85
logWriteFunction · 0.85
level_loadPaletteFunction · 0.85
floatToFixed16Function · 0.85
bitmap_loadFunction · 0.85
sector_clearFunction · 0.85
message_addAddressFunction · 0.85
intToFixed16Function · 0.85
minFunction · 0.85

Tested by

no test coverage detected