aboutsummaryrefslogtreecommitdiff
path: root/pkg/classes
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/classes')
-rw-r--r--pkg/classes/consoleCmd.go5
-rw-r--r--pkg/classes/customData.go7
-rw-r--r--pkg/classes/dataTables.go23
-rw-r--r--pkg/classes/packet.go63
-rw-r--r--pkg/classes/sarData.go89
-rw-r--r--pkg/classes/signOn.go52
-rw-r--r--pkg/classes/stop.go17
-rw-r--r--pkg/classes/stringTables.go100
-rw-r--r--pkg/classes/userCmd.go10
9 files changed, 72 insertions, 294 deletions
diff --git a/pkg/classes/consoleCmd.go b/pkg/classes/consoleCmd.go
index 75a56eb..aeb56a2 100644
--- a/pkg/classes/consoleCmd.go
+++ b/pkg/classes/consoleCmd.go
@@ -1,10 +1,7 @@
1package classes 1package classes
2 2
3import ( 3import (
4 "strings"
5
6 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/pkg/writer"
8) 5)
9 6
10type ConsoleCmd struct { 7type ConsoleCmd struct {
@@ -15,5 +12,5 @@ type ConsoleCmd struct {
15func (consoleCmd *ConsoleCmd) ParseConsoleCmd(reader *bitreader.Reader) { 12func (consoleCmd *ConsoleCmd) ParseConsoleCmd(reader *bitreader.Reader) {
16 consoleCmd.Size = reader.TryReadSInt32() 13 consoleCmd.Size = reader.TryReadSInt32()
17 consoleCmd.Data = reader.TryReadStringLength(uint64(consoleCmd.Size)) 14 consoleCmd.Data = reader.TryReadStringLength(uint64(consoleCmd.Size))
18 writer.AppendLine("\t%s", strings.TrimSpace(consoleCmd.Data)) 15
19} 16}
diff --git a/pkg/classes/customData.go b/pkg/classes/customData.go
index 2dadde4..1fc8a1e 100644
--- a/pkg/classes/customData.go
+++ b/pkg/classes/customData.go
@@ -2,7 +2,6 @@ package classes
2 2
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type CustomData struct { 7type CustomData struct {
@@ -16,13 +15,13 @@ func (customData *CustomData) ParseCustomData(reader *bitreader.Reader, tickNumb
16 customData.Size = reader.TryReadSInt32() 15 customData.Size = reader.TryReadSInt32()
17 if customData.Type != 0 || customData.Size == 8 { 16 if customData.Type != 0 || customData.Size == 8 {
18 // Not SAR data 17 // Not SAR data
19 writer.AppendLine("[%d] %s (%d):", tickNumber, "CUSTOMDATA", packetType) 18
20 customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size))) 19 customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size)))
21 writer.AppendLine("\t%s", customData.Data) 20
22 return 21 return
23 } 22 }
24 // SAR data 23 // SAR data
25 writer.AppendLine("[%d] %s (%d):", tickNumber, "SARDATA", packetType) 24
26 sarData := SarData{} 25 sarData := SarData{}
27 data := reader.TryReadBytesToSlice(uint64(customData.Size)) 26 data := reader.TryReadBytesToSlice(uint64(customData.Size))
28 sarReader := bitreader.NewReaderFromBytes(data, true) 27 sarReader := bitreader.NewReaderFromBytes(data, true)
diff --git a/pkg/classes/dataTables.go b/pkg/classes/dataTables.go
index 27ab9e4..64b909e 100644
--- a/pkg/classes/dataTables.go
+++ b/pkg/classes/dataTables.go
@@ -4,7 +4,6 @@ import (
4 "fmt" 4 "fmt"
5 5
6 "github.com/pektezol/bitreader" 6 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/pkg/writer"
8) 7)
9 8
10type DataTables struct { 9type DataTables struct {
@@ -46,14 +45,12 @@ func (dataTables *DataTables) ParseDataTables(reader *bitreader.Reader) {
46 count++ 45 count++
47 dataTables.SendTable = append(dataTables.SendTable, ParseSendTable(dataTableReader)) 46 dataTables.SendTable = append(dataTables.SendTable, ParseSendTable(dataTableReader))
48 } 47 }
49 writer.AppendLine("\t%d Send Tables:", count) 48
50 writer.AppendOutputFromTemp()
51 numOfClasses := dataTableReader.TryReadBits(16) 49 numOfClasses := dataTableReader.TryReadBits(16)
52 for count = 0; count < int(numOfClasses); count++ { 50 for count = 0; count < int(numOfClasses); count++ {
53 dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) 51 dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, ParseServerClassInfo(dataTableReader, count, int(numOfClasses)))
54 } 52 }
55 writer.AppendLine("\t%d Classes:", count) 53
56 writer.AppendOutputFromTemp()
57} 54}
58 55
59func ParseSendTable(reader *bitreader.Reader) SendTable { 56func ParseSendTable(reader *bitreader.Reader) SendTable {
@@ -65,7 +62,7 @@ func ParseSendTable(reader *bitreader.Reader) SendTable {
65 if sendTable.NumOfProps < 0 { 62 if sendTable.NumOfProps < 0 {
66 return sendTable 63 return sendTable
67 } 64 }
68 writer.TempAppendLine("\t\t%s (%d Props):", sendTable.NetTableName, sendTable.NumOfProps) 65
69 for count := 0; count < int(sendTable.NumOfProps); count++ { 66 for count := 0; count < int(sendTable.NumOfProps); count++ {
70 propType := int8(reader.TryReadBits(5)) 67 propType := int8(reader.TryReadBits(5))
71 if propType >= int8(7) { 68 if propType >= int8(7) {
@@ -77,26 +74,26 @@ func ParseSendTable(reader *bitreader.Reader) SendTable {
77 SendPropFlags: uint32(reader.TryReadBits(19)), 74 SendPropFlags: uint32(reader.TryReadBits(19)),
78 Priority: reader.TryReadUInt8(), 75 Priority: reader.TryReadUInt8(),
79 } 76 }
80 writer.TempAppend("\t\t\t%s\t", prop.SendPropType) 77
81 if propType == int8(ESendPropTypeDataTable) || checkBit(prop.SendPropFlags, 6) { 78 if propType == int8(ESendPropTypeDataTable) || checkBit(prop.SendPropFlags, 6) {
82 prop.ExcludeDtName = reader.TryReadString() 79 prop.ExcludeDtName = reader.TryReadString()
83 writer.TempAppend(":\t%s\t", prop.ExcludeDtName) 80
84 } else { 81 } else {
85 switch propType { 82 switch propType {
86 case int8(ESendPropTypeString), int8(ESendPropTypeInt), int8(ESendPropTypeFloat), int8(ESendPropTypeVector3), int8(ESendPropTypeVector2): 83 case int8(ESendPropTypeString), int8(ESendPropTypeInt), int8(ESendPropTypeFloat), int8(ESendPropTypeVector3), int8(ESendPropTypeVector2):
87 prop.LowValue = reader.TryReadFloat32() 84 prop.LowValue = reader.TryReadFloat32()
88 prop.HighValue = reader.TryReadFloat32() 85 prop.HighValue = reader.TryReadFloat32()
89 prop.NumBits = int32(reader.TryReadBits(7)) 86 prop.NumBits = int32(reader.TryReadBits(7))
90 writer.TempAppend("Low: %f\tHigh: %f\t%d bits\t", prop.LowValue, prop.HighValue, prop.NumBits) 87
91 case int8(ESendPropTypeArray): 88 case int8(ESendPropTypeArray):
92 prop.NumElements = int32(reader.TryReadBits(10)) 89 prop.NumElements = int32(reader.TryReadBits(10))
93 writer.TempAppend("Elements: %d\t", prop.NumElements) 90
94 default: 91 default:
95 writer.TempAppend("Unknown Prop Type: %v\t", propType) 92
96 return sendTable 93 return sendTable
97 } 94 }
98 } 95 }
99 writer.TempAppend("Flags: %v\tPriority: %d\n", prop.GetFlags(), prop.Priority) 96
100 sendTable.Props = append(sendTable.Props, prop) 97 sendTable.Props = append(sendTable.Props, prop)
101 } 98 }
102 return sendTable 99 return sendTable
@@ -108,7 +105,7 @@ func ParseServerClassInfo(reader *bitreader.Reader, count int, numOfClasses int)
108 ClassName: reader.TryReadString(), 105 ClassName: reader.TryReadString(),
109 DataTableName: reader.TryReadString(), 106 DataTableName: reader.TryReadString(),
110 } 107 }
111 writer.TempAppendLine("\t\t\t[%d] %s (%s)", serverClassInfo.ClassId, serverClassInfo.ClassName, serverClassInfo.DataTableName) 108
112 return serverClassInfo 109 return serverClassInfo
113} 110}
114 111
diff --git a/pkg/classes/packet.go b/pkg/classes/packet.go
index 0bba102..a81cd87 100644
--- a/pkg/classes/packet.go
+++ b/pkg/classes/packet.go
@@ -1,11 +1,7 @@
1package classes 1package classes
2 2
3import ( 3import (
4 "fmt"
5
6 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/pkg/messages"
8 "github.com/pektezol/demoparser/pkg/writer"
9) 5)
10 6
11const MSSC int = 2 7const MSSC int = 2
@@ -30,61 +26,8 @@ type CmdInfo struct {
30 26
31func (packet *Packet) ParsePacket(reader *bitreader.Reader) { 27func (packet *Packet) ParsePacket(reader *bitreader.Reader) {
32 for count := 0; count < MSSC; count++ { 28 for count := 0; count < MSSC; count++ {
33 packet.ParseCmdInfo(reader) 29 reader.SkipBytes(76)
34 }
35 packet.InSequence = reader.TryReadUInt32()
36 packet.OutSequence = reader.TryReadUInt32()
37 packet.Size = reader.TryReadUInt32()
38 packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(packet.Size)), true)
39 for {
40 messageType, err := packetReader.ReadBits(6)
41 if err != nil {
42 break
43 }
44 packet.Data = append(packet.Data, messages.ParseMessages(messageType, packetReader))
45 }
46}
47
48func (packet *Packet) ParseCmdInfo(reader *bitreader.Reader) {
49 packet.PacketInfo = append(packet.PacketInfo, CmdInfo{
50 Flags: reader.TryReadUInt32(),
51 ViewOrigin: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
52 ViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
53 LocalViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
54 ViewOrigin2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
55 ViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
56 LocalViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
57 })
58 writer.AppendLine("\tFlags: %s", CmdInfoFlags(packet.PacketInfo[len(packet.PacketInfo)-1].Flags).String())
59 writer.AppendLine("\tView Origin: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewOrigin)
60 writer.AppendLine("\tView Angles: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewAngles)
61 writer.AppendLine("\tLocal View Angles: %v", packet.PacketInfo[len(packet.PacketInfo)-1].LocalViewAngles)
62 writer.AppendLine("\tView Origin 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewOrigin2)
63 writer.AppendLine("\tView Angles 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewAngles2)
64 writer.AppendLine("\tLocal View Angles 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].LocalViewAngles2)
65 writer.AppendLine("")
66}
67
68type CmdInfoFlags int
69
70const (
71 ECmdInfoFlagsNone = 0
72 ECmdInfoFlagsUseOrigin2 = 1
73 ECmdInfoFlagsUserAngles2 = 1 << 1
74 ECmdInfoFlagsNoInterp = 1 << 2
75)
76
77func (cmdInfoFlags CmdInfoFlags) String() string {
78 switch cmdInfoFlags {
79 case ECmdInfoFlagsNone:
80 return "None"
81 case ECmdInfoFlagsUseOrigin2:
82 return "UseOrigin2"
83 case ECmdInfoFlagsUserAngles2:
84 return "UserAngles2"
85 case ECmdInfoFlagsNoInterp:
86 return "NoInterp"
87 default:
88 return fmt.Sprintf("%d", int(cmdInfoFlags))
89 } 30 }
31 reader.SkipBytes(8)
32 reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32()))
90} 33}
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}
diff --git a/pkg/classes/signOn.go b/pkg/classes/signOn.go
deleted file mode 100644
index fad696c..0000000
--- a/pkg/classes/signOn.go
+++ /dev/null
@@ -1,52 +0,0 @@
1package classes
2
3import (
4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/messages"
6 "github.com/pektezol/demoparser/pkg/writer"
7)
8
9type SignOn struct {
10 PacketInfo []CmdInfo
11 InSequence uint32
12 OutSequence uint32
13 Size uint32
14 Data []any
15}
16
17func (signOn *SignOn) ParseSignOn(reader *bitreader.Reader) {
18 for count := 0; count < MSSC; count++ {
19 signOn.ParseCmdInfo(reader)
20 }
21 signOn.InSequence = reader.TryReadUInt32()
22 signOn.OutSequence = reader.TryReadUInt32()
23 signOn.Size = reader.TryReadUInt32()
24 packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(signOn.Size)), true)
25 for {
26 messageType, err := packetReader.ReadBits(6)
27 if err != nil {
28 break
29 }
30 signOn.Data = append(signOn.Data, messages.ParseMessages(messageType, packetReader))
31 }
32}
33
34func (signOn *SignOn) ParseCmdInfo(reader *bitreader.Reader) {
35 signOn.PacketInfo = append(signOn.PacketInfo, CmdInfo{
36 Flags: reader.TryReadUInt32(),
37 ViewOrigin: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
38 ViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
39 LocalViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
40 ViewOrigin2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
41 ViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
42 LocalViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()},
43 })
44 writer.AppendLine("\tFlags: %s", CmdInfoFlags(signOn.PacketInfo[len(signOn.PacketInfo)-1].Flags).String())
45 writer.AppendLine("\tView Origin: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewOrigin)
46 writer.AppendLine("\tView Angles: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewAngles)
47 writer.AppendLine("\tLocal View Angles: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].LocalViewAngles)
48 writer.AppendLine("\tView Origin 2: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewOrigin2)
49 writer.AppendLine("\tView Angles 2: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewAngles2)
50 writer.AppendLine("\tLocal View Angles 2: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].LocalViewAngles2)
51 writer.AppendLine("")
52}
diff --git a/pkg/classes/stop.go b/pkg/classes/stop.go
deleted file mode 100644
index 753be19..0000000
--- a/pkg/classes/stop.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package classes
2
3import (
4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6)
7
8type Stop struct {
9 RemainingData []byte
10}
11
12func (stop *Stop) ParseStop(reader *bitreader.Reader) {
13 if reader.TryReadBool() {
14 stop.RemainingData = reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits()))
15 writer.AppendLine("\tRemaining Data: %v", stop.RemainingData)
16 }
17}
diff --git a/pkg/classes/stringTables.go b/pkg/classes/stringTables.go
deleted file mode 100644
index 01939b2..0000000
--- a/pkg/classes/stringTables.go
+++ /dev/null
@@ -1,100 +0,0 @@
1package classes
2
3import (
4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6)
7
8type StringTables struct {
9 Size int32
10 Data []StringTable
11}
12
13type StringTable struct {
14 Name string
15 TableEntries []StringTableEntry
16 Classes []StringTableClass
17}
18
19type StringTableEntry struct {
20 Name string
21 EntryData StringTableEntryData
22}
23
24type StringTableEntryData struct {
25 // TODO: Parse StringTableEntry
26}
27
28type StringTableClass struct {
29 Name string
30 Data string
31}
32
33func (stringTables *StringTables) ParseStringTables(reader *bitreader.Reader) {
34 stringTables.Size = reader.TryReadSInt32()
35 stringTableReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(stringTables.Size)), true)
36 tableCount := stringTableReader.TryReadBits(8)
37 tables := make([]StringTable, tableCount)
38 for i := 0; i < int(tableCount); i++ {
39 var table StringTable
40 table.ParseStream(stringTableReader)
41 tables[i] = table
42 }
43 stringTables.Data = tables
44}
45
46func (stringTable *StringTable) ParseStream(reader *bitreader.Reader) {
47 stringTable.Name = reader.TryReadString()
48 entryCount := reader.TryReadBits(16)
49 writer.AppendLine("\tTable Name: %s", stringTable.Name)
50 stringTable.TableEntries = make([]StringTableEntry, entryCount)
51
52 for i := 0; i < int(entryCount); i++ {
53 var entry StringTableEntry
54 entry.Parse(reader)
55 stringTable.TableEntries[i] = entry
56 }
57 if entryCount != 0 {
58 writer.AppendLine("\t\t%d Table Entries:", entryCount)
59 writer.AppendOutputFromTemp()
60 } else {
61 writer.AppendLine("\t\tNo Table Entries")
62 }
63 if reader.TryReadBool() {
64 classCount := reader.TryReadBits(16)
65 stringTable.Classes = make([]StringTableClass, classCount)
66
67 for i := 0; i < int(classCount); i++ {
68 var class StringTableClass
69 class.Parse(reader)
70 stringTable.Classes[i] = class
71 }
72 writer.AppendLine("\t\t%d Classes:", classCount)
73 writer.AppendOutputFromTemp()
74 } else {
75 writer.AppendLine("\t\tNo Class Entries")
76 }
77}
78
79func (stringTableEntry *StringTableEntry) Parse(reader *bitreader.Reader) {
80 stringTableEntry.Name = reader.TryReadString()
81 if reader.TryReadBool() {
82 byteLen, err := reader.ReadBits(16)
83 if err != nil {
84 return
85 }
86 dataBsr := reader.TryReadBytesToSlice(byteLen)
87 _ = bitreader.NewReaderFromBytes(dataBsr, true) // TODO: Parse StringTableEntry
88 // stringTableEntry.EntryData.ParseStream(entryReader)
89 }
90}
91
92func (stringTableClass *StringTableClass) Parse(reader *bitreader.Reader) {
93 stringTableClass.Name = reader.TryReadString()
94 writer.TempAppendLine("\t\t\tName: %s", stringTableClass.Name)
95 if reader.TryReadBool() {
96 dataLen := reader.TryReadBits(16)
97 stringTableClass.Data = reader.TryReadStringLength(dataLen)
98 writer.TempAppendLine("\t\t\tData: %s", stringTableClass.Data)
99 }
100}
diff --git a/pkg/classes/userCmd.go b/pkg/classes/userCmd.go
index 24969f1..c793612 100644
--- a/pkg/classes/userCmd.go
+++ b/pkg/classes/userCmd.go
@@ -2,7 +2,6 @@ package classes
2 2
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type UserCmd struct { 7type UserCmd struct {
@@ -78,14 +77,7 @@ func (userCmd *UserCmd) ParseUserCmdInfo(reader *bitreader.Reader) {
78 if reader.TryReadBool() { 77 if reader.TryReadBool() {
79 userCmd.Data.MouseDy = reader.TryReadUInt16() 78 userCmd.Data.MouseDy = reader.TryReadUInt16()
80 } 79 }
81 writer.AppendLine("\tCommand Number: %v", userCmd.Data.CommandNumber) 80
82 writer.AppendLine("\tTick Count: %v", userCmd.Data.TickCount)
83 writer.AppendLine("\tView Angles: %v", []float32{userCmd.Data.ViewAnglesX, userCmd.Data.ViewAnglesY, userCmd.Data.ViewAnglesZ})
84 writer.AppendLine("\tMovement: %v", []float32{userCmd.Data.ForwardMove, userCmd.Data.SideMove, userCmd.Data.UpMove})
85 writer.AppendLine("\tButtons: %v", Buttons(userCmd.Data.Buttons).GetButtons())
86 writer.AppendLine("\tImpulse: %v", userCmd.Data.Impulse)
87 writer.AppendLine("\tWeapon, Subtype: %v, %v", userCmd.Data.WeaponSelect, userCmd.Data.WeaponSubType)
88 writer.AppendLine("\tMouse Dx, Mouse Dy: %v, %v", userCmd.Data.MouseDx, userCmd.Data.MouseDy)
89} 81}
90 82
91func (button Buttons) GetButtons() []string { 83func (button Buttons) GetButtons() []string {