aboutsummaryrefslogtreecommitdiff
path: root/pkg/classes/sarData.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--pkg/classes/sarData.go89
1 files changed, 54 insertions, 35 deletions
diff --git a/pkg/classes/sarData.go b/pkg/classes/sarData.go
index 27e8a64..9e6ae0b 100644
--- a/pkg/classes/sarData.go
+++ b/pkg/classes/sarData.go
@@ -5,7 +5,7 @@ import (
5 "fmt" 5 "fmt"
6 6
7 "github.com/pektezol/bitreader" 7 "github.com/pektezol/bitreader"
8 "github.com/pektezol/demoparser/pkg/writer" 8 "github.com/pektezol/demoparser/pkg/verification"
9) 9)
10 10
11type SarDataType uint8 11type SarDataType uint8
@@ -164,26 +164,31 @@ func (sarData *SarData) ParseSarData(reader *bitreader.Reader) (err error) {
164 len = 9 164 len = 9
165 } 165 }
166 dataReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(len-1), true) 166 dataReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(len-1), true)
167 writer.AppendLine("\tMessage: %s (%d):", sarData.Type.String(), sarData.Type)
168 switch sarData.Type { 167 switch sarData.Type {
169 case ESarDataTimescaleCheat: 168 case ESarDataTimescaleCheat:
169 fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
170
170 sarData.Data, err = parseTimescaleCheatData(dataReader, len) 171 sarData.Data, err = parseTimescaleCheatData(dataReader, len)
171 if err != nil { 172 if err != nil {
172 sarData.Data = nil 173 sarData.Data = nil
173 } 174 }
174 case ESarDataInitialCVar: 175 case ESarDataInitialCVar:
176
175 sarData.Data = parseInitialCVarData(dataReader) 177 sarData.Data = parseInitialCVarData(dataReader)
176 case ESarDataEntityInputSlot: 178 case ESarDataEntityInputSlot:
177 sarData.Slot = int(dataReader.TryReadBytes(1)) 179 sarData.Slot = int(dataReader.TryReadBytes(1))
178 writer.AppendLine("\t\tSlot: %d", sarData.Slot)
179 case ESarDataEntityInput: 180 case ESarDataEntityInput:
180 sarData.Data = parseEntityInputData(dataReader) 181 sarData.Data = parseEntityInputData(dataReader)
181 case ESarDataChecksum: 182 case ESarDataChecksum:
183 // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
184
182 sarData.Data, err = parseChecksumData(dataReader, len) 185 sarData.Data, err = parseChecksumData(dataReader, len)
183 if err != nil { 186 if err != nil {
184 sarData.Data = nil 187 sarData.Data = nil
185 } 188 }
186 case ESarDataChecksumV2: 189 case ESarDataChecksumV2:
190 // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
191
187 sarData.Data, err = parseChecksumV2Data(dataReader, len) 192 sarData.Data, err = parseChecksumV2Data(dataReader, len)
188 if err != nil { 193 if err != nil {
189 sarData.Data = nil 194 sarData.Data = nil
@@ -197,37 +202,50 @@ func (sarData *SarData) ParseSarData(reader *bitreader.Reader) (err error) {
197 sarData.Slot = slot 202 sarData.Slot = slot
198 } 203 }
199 case ESarDataChallengeFlags, ESarDataCrouchFly: 204 case ESarDataChallengeFlags, ESarDataCrouchFly:
205 // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
206
200 sarData.Slot, err = parseChallengeFlagsCrouchFlyData(dataReader, len) 207 sarData.Slot, err = parseChallengeFlagsCrouchFlyData(dataReader, len)
201 if err != nil { 208 if err != nil {
202 sarData.Data = nil 209 sarData.Data = nil
203 } 210 }
204 writer.AppendLine("\t\tSlot: %d", sarData.Slot) 211 // fmt.Printf("\t\tSlot: %d\n", sarData.Slot)
205 case ESarDataPause: 212 case ESarDataPause:
213 fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
214
206 sarData.Data, err = parsePauseData(dataReader, len) 215 sarData.Data, err = parsePauseData(dataReader, len)
207 if err != nil { 216 if err != nil {
208 sarData.Data = nil 217 sarData.Data = nil
209 } 218 }
210 case ESarDataWaitRun: 219 case ESarDataWaitRun:
220 fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
221
211 sarData.Data, err = parseWaitRunData(dataReader, len) 222 sarData.Data, err = parseWaitRunData(dataReader, len)
212 if err != nil { 223 if err != nil {
213 sarData.Data = nil 224 sarData.Data = nil
214 } 225 }
215 case ESarDataHWaitRun: 226 case ESarDataHWaitRun:
227 fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
228
216 sarData.Data, err = parseHWaitRunData(dataReader, len) 229 sarData.Data, err = parseHWaitRunData(dataReader, len)
217 if err != nil { 230 if err != nil {
218 sarData.Data = nil 231 sarData.Data = nil
219 } 232 }
220 case ESarDataSpeedrunTime: 233 case ESarDataSpeedrunTime:
234 fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
235
221 sarData.Data, err = parseSpeedrunTimeData(dataReader, len) 236 sarData.Data, err = parseSpeedrunTimeData(dataReader, len)
222 if err != nil { 237 if err != nil {
223 sarData.Data = nil 238 sarData.Data = nil
224 } 239 }
225 case ESarDataTimestamp: 240 case ESarDataTimestamp:
241 // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type)
242
226 sarData.Data, err = parseTimestampData(dataReader, len) 243 sarData.Data, err = parseTimestampData(dataReader, len)
227 if err != nil { 244 if err != nil {
228 sarData.Data = nil 245 sarData.Data = nil
229 } 246 }
230 case ESarDataFileChecksum: 247 case ESarDataFileChecksum:
248
231 sarData.Data, err = parseFileChecksumData(dataReader, len) 249 sarData.Data, err = parseFileChecksumData(dataReader, len)
232 if err != nil { 250 if err != nil {
233 sarData.Data = nil 251 sarData.Data = nil
@@ -246,7 +264,7 @@ func parseTimescaleCheatData(reader *bitreader.Reader, length uint64) (SarDataTi
246 sarDataTimescaleCheat := SarDataTimescaleCheat{ 264 sarDataTimescaleCheat := SarDataTimescaleCheat{
247 Timescale: reader.TryReadFloat32(), 265 Timescale: reader.TryReadFloat32(),
248 } 266 }
249 writer.AppendLine("\t\tTimescale: %f", sarDataTimescaleCheat.Timescale) 267 fmt.Printf("\t\tTimescale: %f\n", sarDataTimescaleCheat.Timescale)
250 return sarDataTimescaleCheat, nil 268 return sarDataTimescaleCheat, nil
251} 269}
252 270
@@ -255,7 +273,7 @@ func parseInitialCVarData(reader *bitreader.Reader) SarDataInitialCVar {
255 CVar: reader.TryReadString(), 273 CVar: reader.TryReadString(),
256 Val: reader.TryReadString(), 274 Val: reader.TryReadString(),
257 } 275 }
258 writer.AppendLine("\t\tCvar: \"%s\" = \"%s\"", sarDataInitialCvar.CVar, sarDataInitialCvar.Val) 276 // fmt.Printf("\t\tCvar: \"%s\" = \"%s\"\n", sarDataInitialCvar.CVar, sarDataInitialCvar.Val)
259 return sarDataInitialCvar 277 return sarDataInitialCvar
260} 278}
261 279
@@ -266,10 +284,10 @@ func parseEntityInputData(reader *bitreader.Reader) SarDataEntityInput {
266 InputName: reader.TryReadString(), 284 InputName: reader.TryReadString(),
267 Parameter: reader.TryReadString(), 285 Parameter: reader.TryReadString(),
268 } 286 }
269 writer.AppendLine("\t\tTarget: %s", sarDataEntityInput.TargetName) 287 // fmt.Printf("\t\tTarget: %s\n", sarDataEntityInput.TargetName)
270 writer.AppendLine("\t\tClass: %s", sarDataEntityInput.ClassName) 288 // fmt.Printf("\t\tClass: %s\n", sarDataEntityInput.ClassName)
271 writer.AppendLine("\t\tInput: %s", sarDataEntityInput.InputName) 289 // fmt.Printf("\t\tInput: %s\n", sarDataEntityInput.InputName)
272 writer.AppendLine("\t\tParameter: %s", sarDataEntityInput.Parameter) 290 // fmt.Printf("\t\tParameter: %s\n", sarDataEntityInput.Parameter)
273 return sarDataEntityInput 291 return sarDataEntityInput
274} 292}
275 293
@@ -281,8 +299,8 @@ func parseChecksumData(reader *bitreader.Reader, length uint64) (SarDataChecksum
281 DemoSum: reader.TryReadUInt32(), 299 DemoSum: reader.TryReadUInt32(),
282 SarSum: reader.TryReadUInt32(), 300 SarSum: reader.TryReadUInt32(),
283 } 301 }
284 writer.AppendLine("\t\tDemo Checksum: %d", sarDataChecksum.DemoSum) 302 // fmt.Printf("\t\tDemo Checksum: %d\n", sarDataChecksum.DemoSum)
285 writer.AppendLine("\t\tSAR Checksum: %d", sarDataChecksum.SarSum) 303 // fmt.Printf("\t\tSAR Checksum: %d\n", sarDataChecksum.SarSum)
286 return sarDataChecksum, nil 304 return sarDataChecksum, nil
287} 305}
288 306
@@ -294,8 +312,8 @@ func parseChecksumV2Data(reader *bitreader.Reader, length uint64) (SarDataChecks
294 SarSum: reader.TryReadUInt32(), 312 SarSum: reader.TryReadUInt32(),
295 Signature: [64]byte(reader.TryReadBytesToSlice(60)), 313 Signature: [64]byte(reader.TryReadBytesToSlice(60)),
296 } 314 }
297 writer.AppendLine("\t\tSAR Checksum: %d", sarDataChecksumV2.SarSum) 315 // fmt.Printf("\t\tSAR Checksum: %d\n", sarDataChecksumV2.SarSum)
298 writer.AppendLine("\t\tSignature: %v", sarDataChecksumV2.Signature) 316 // fmt.Printf("\t\tSignature: %v\n", sarDataChecksumV2.Signature)
299 return sarDataChecksumV2, nil 317 return sarDataChecksumV2, nil
300} 318}
301 319
@@ -312,10 +330,10 @@ func parsePortalPlacementData(reader *bitreader.Reader, length uint64) (SarDataP
312 Y: reader.TryReadFloat32(), 330 Y: reader.TryReadFloat32(),
313 Z: reader.TryReadFloat32(), 331 Z: reader.TryReadFloat32(),
314 } 332 }
315 writer.AppendLine("\t\tOrange: %t", orange) 333 // fmt.Printf("\t\tOrange: %t\n", orange)
316 writer.AppendLine("\t\tX: %f", sarDataPortalPlacement.X) 334 // fmt.Printf("\t\tX: %f\n", sarDataPortalPlacement.X)
317 writer.AppendLine("\t\tY: %f", sarDataPortalPlacement.Y) 335 // fmt.Printf("\t\tY: %f\n", sarDataPortalPlacement.Y)
318 writer.AppendLine("\t\tZ: %f", sarDataPortalPlacement.Z) 336 // fmt.Printf("\t\tZ: %f\n", sarDataPortalPlacement.Z)
319 return sarDataPortalPlacement, slot, nil 337 return sarDataPortalPlacement, slot, nil
320} 338}
321 339
@@ -333,7 +351,7 @@ func parsePauseData(reader *bitreader.Reader, length uint64) (SarDataPause, erro
333 sarDataPause := SarDataPause{ 351 sarDataPause := SarDataPause{
334 PauseTicks: reader.TryReadUInt32(), 352 PauseTicks: reader.TryReadUInt32(),
335 } 353 }
336 writer.AppendLine("\t\tPause Ticks: %d", sarDataPause.PauseTicks) 354 fmt.Printf("\t\tPause Ticks: %d\n", sarDataPause.PauseTicks)
337 return sarDataPause, nil 355 return sarDataPause, nil
338} 356}
339 357
@@ -345,8 +363,8 @@ func parseWaitRunData(reader *bitreader.Reader, length uint64) (SarDataWaitRun,
345 Ticks: int(reader.TryReadUInt32()), 363 Ticks: int(reader.TryReadUInt32()),
346 Cmd: reader.TryReadString(), 364 Cmd: reader.TryReadString(),
347 } 365 }
348 writer.AppendLine("\t\tTicks: %d", sarDataWaitRun.Ticks) 366 fmt.Printf("\t\tTicks: %d\n", sarDataWaitRun.Ticks)
349 writer.AppendLine("\t\tCmd: \"%s\"", sarDataWaitRun.Cmd) 367 fmt.Printf("\t\tCmd: \"%s\"\n", sarDataWaitRun.Cmd)
350 return sarDataWaitRun, nil 368 return sarDataWaitRun, nil
351} 369}
352 370
@@ -358,8 +376,8 @@ func parseHWaitRunData(reader *bitreader.Reader, length uint64) (SarDataHWaitRun
358 Ticks: int(reader.TryReadUInt32()), 376 Ticks: int(reader.TryReadUInt32()),
359 Cmd: reader.TryReadString(), 377 Cmd: reader.TryReadString(),
360 } 378 }
361 writer.AppendLine("\t\tTicks: %d", sarDataHWaitRun.Ticks) 379 fmt.Printf("\t\tTicks: %d\n", sarDataHWaitRun.Ticks)
362 writer.AppendLine("\t\tCmd: \"%s\"", sarDataHWaitRun.Cmd) 380 fmt.Printf("\t\tCmd: \"%s\"\n", sarDataHWaitRun.Cmd)
363 return sarDataHWaitRun, nil 381 return sarDataHWaitRun, nil
364} 382}
365 383
@@ -372,14 +390,15 @@ func parseSpeedrunTimeData(reader *bitreader.Reader, length uint64) (SarDataSpee
372 for splitCount := 0; splitCount < int(numberOfSplits); splitCount++ { 390 for splitCount := 0; splitCount < int(numberOfSplits); splitCount++ {
373 splits[splitCount].Name = reader.TryReadString() 391 splits[splitCount].Name = reader.TryReadString()
374 splits[splitCount].NSegs = reader.TryReadUInt32() 392 splits[splitCount].NSegs = reader.TryReadUInt32()
375 writer.AppendLine("\t\t[%d] Split Name: \"%s\"", splitCount, splits[splitCount].Name) 393 fmt.Printf("\t\t[%d] Split Name: \"%s\"\n", splitCount, splits[splitCount].Name)
376 writer.AppendLine("\t\t[%d] Number of Segments: %d", splitCount, splits[splitCount].NSegs) 394 fmt.Printf("\t\t[%d] Number of Segments: %d\n", splitCount, splits[splitCount].NSegs)
377 splits[splitCount].Segs = make([]SarDataSpeedrunTimeSegs, splits[splitCount].NSegs) 395 splits[splitCount].Segs = make([]SarDataSpeedrunTimeSegs, splits[splitCount].NSegs)
378 for segCount := 0; segCount < int(splits[splitCount].NSegs); segCount++ { 396 for segCount := 0; segCount < int(splits[splitCount].NSegs); segCount++ {
379 splits[splitCount].Segs[segCount].Name = reader.TryReadString() 397 splits[splitCount].Segs[segCount].Name = reader.TryReadString()
380 splits[splitCount].Segs[segCount].Ticks = reader.TryReadUInt32() 398 splits[splitCount].Segs[segCount].Ticks = reader.TryReadUInt32()
381 writer.AppendLine("\t\t\t[%d] Segment Name: \"%s\"", segCount, splits[splitCount].Segs[segCount].Name) 399 verification.Ticks += splits[splitCount].Segs[segCount].Ticks
382 writer.AppendLine("\t\t\t[%d] Segment Ticks: %d", segCount, splits[splitCount].Segs[segCount].Ticks) 400 fmt.Printf("\t\t\t[%d] Segment Name: \"%s\"\n", segCount, splits[splitCount].Segs[segCount].Name)
401 fmt.Printf("\t\t\t[%d] Segment Ticks: %d\n", segCount, splits[splitCount].Segs[segCount].Ticks)
383 } 402 }
384 } 403 }
385 return SarDataSpeedrunTime{ 404 return SarDataSpeedrunTime{
@@ -401,12 +420,12 @@ func parseTimestampData(reader *bitreader.Reader, length uint64) (SarDataTimesta
401 Minute: timestamp[5], 420 Minute: timestamp[5],
402 Second: timestamp[6], 421 Second: timestamp[6],
403 } 422 }
404 writer.AppendLine("\t\tYear: %d", sarDataTimeStamp.Year) 423 // fmt.Printf("\t\tYear: %d\n", sarDataTimeStamp.Year)
405 writer.AppendLine("\t\tMonth: %d", sarDataTimeStamp.Month) 424 // fmt.Printf("\t\tMonth: %d\n", sarDataTimeStamp.Month)
406 writer.AppendLine("\t\tDay: %d", sarDataTimeStamp.Day) 425 // fmt.Printf("\t\tDay: %d\n", sarDataTimeStamp.Day)
407 writer.AppendLine("\t\tHour: %d", sarDataTimeStamp.Hour) 426 // fmt.Printf("\t\tHour: %d\n", sarDataTimeStamp.Hour)
408 writer.AppendLine("\t\tMinute: %d", sarDataTimeStamp.Minute) 427 // fmt.Printf("\t\tMinute: %d\n", sarDataTimeStamp.Minute)
409 writer.AppendLine("\t\tSecond: %d", sarDataTimeStamp.Second) 428 // fmt.Printf("\t\tSecond: %d\n", sarDataTimeStamp.Second)
410 return sarDataTimeStamp, nil 429 return sarDataTimeStamp, nil
411} 430}
412 431
@@ -418,7 +437,7 @@ func parseFileChecksumData(reader *bitreader.Reader, length uint64) (SarDataFile
418 Sum: reader.TryReadUInt32(), 437 Sum: reader.TryReadUInt32(),
419 Path: reader.TryReadString(), 438 Path: reader.TryReadString(),
420 } 439 }
421 writer.AppendLine("\t\tChecksum: %d", sarDataFileChecksum.Sum) 440 // fmt.Printf("\t\tChecksum: %d\n", sarDataFileChecksum.Sum)
422 writer.AppendLine("\t\tPath: \"%s\"", sarDataFileChecksum.Path) 441 // fmt.Printf("\t\tPath: \"%s\"\n", sarDataFileChecksum.Path)
423 return sarDataFileChecksum, nil 442 return sarDataFileChecksum, nil
424} 443}