| 155 |
155 |
| 156 // Read the demo header and get data |
156 // Read the demo header and get data |
| 157 for (;;) { |
157 for (;;) { |
| 158 uint8 header; |
158 uint8 header; |
| 159 stream >> header; |
159 stream >> header; |
| 160 print ("header: %1\n", (int) header); |
|
| 161 |
160 |
| 162 if (header == DemoBodyStart + offset) { |
161 if (header == DemoBodyStart + offset) { |
| 163 ready = true; |
162 ready = true; |
| 164 break; |
163 break; |
| 165 } elif (header == DemoVersion + offset) { |
164 } elif (header == DemoVersion + offset) { |
| 166 print ("Read demo version\n"); |
|
| 167 stream >> zanversionID; |
165 stream >> zanversionID; |
| 168 zanversion = readString (stream); |
166 zanversion = readString (stream); |
| 169 |
|
| 170 print ("version ID: %1, version: %2\n", zanversionID, zanversion); |
|
| 171 |
167 |
| 172 if (!zanversion.startsWith ("1.1-") && !zanversion.startsWith ("1.1.1-")) { |
168 if (!zanversion.startsWith ("1.1-") && !zanversion.startsWith ("1.1.1-")) { |
| 173 uint8 a; |
169 uint8 a; |
| 174 stream >> a; |
170 stream >> a; |
| 175 buildID = (BuildType) a; |
171 buildID = (BuildType) a; |
| 180 buildID = ReleaseBuild; |
176 buildID = ReleaseBuild; |
| 181 } |
177 } |
| 182 |
178 |
| 183 stream >> longSink; // rng seed - we don't need it |
179 stream >> longSink; // rng seed - we don't need it |
| 184 } elif (header == DemoUserInfo + offset) { |
180 } elif (header == DemoUserInfo + offset) { |
| 185 print ("Read userinfo\n"); |
|
| 186 userinfo.netname = readString (stream); |
181 userinfo.netname = readString (stream); |
| 187 stream >> userinfo.gender |
182 stream >> userinfo.gender |
| 188 >> userinfo.color |
183 >> userinfo.color |
| 189 >> userinfo.aimdist; |
184 >> userinfo.aimdist; |
| 190 userinfo.skin = readString (stream); |
185 userinfo.skin = readString (stream); |
| 205 } |
200 } |
| 206 |
201 |
| 207 // The demo has two checksum strings. We're not interested |
202 // The demo has two checksum strings. We're not interested |
| 208 // in them though. Down the sink they go... |
203 // in them though. Down the sink they go... |
| 209 for (int i = 0; i < 2; ++i) |
204 for (int i = 0; i < 2; ++i) |
| 210 stream >> sink; |
205 sink = readString (stream); |
| 211 } else { |
206 } else { |
| 212 error (fmt (tr ("Unknown header %1!\n"), (int) header)); |
207 error (fmt (tr ("Unknown header %1!\n"), (int) header)); |
| 213 return 3; |
208 return 3; |
| 214 } |
209 } |
| 215 } |
210 } |
| 280 ui.demoNameLabel->setText (basename (path)); |
275 ui.demoNameLabel->setText (basename (path)); |
| 281 ui.demoRecorder->setText (uncolorize (userinfo.netname)); |
276 ui.demoRecorder->setText (uncolorize (userinfo.netname)); |
| 282 ui.versionLabel->setText (zanversion); |
277 ui.versionLabel->setText (zanversion); |
| 283 ui.iwadLabel->setText (wads[0]); |
278 ui.iwadLabel->setText (wads[0]); |
| 284 ui.pwadsLabel->setText (pwadtext); |
279 ui.pwadsLabel->setText (pwadtext); |
| 285 dlg->setWindowTitle (fmt (APPNAME " %1", versionString())); |
280 dlg->setWindowTitle (str (APPNAME) + " " + versionString()); |
| 286 |
281 |
| 287 if (!dlg->exec()) |
282 if (!dlg->exec()) |
| 288 return 1; |
283 return 1; |
| 289 } |
284 } |
| 290 |
285 |