diff options
Diffstat (limited to '')
| -rw-r--r-- | pkg/classes/consoleCmd.go | 5 | ||||
| -rw-r--r-- | pkg/classes/customData.go | 7 | ||||
| -rw-r--r-- | pkg/classes/dataTables.go | 23 | ||||
| -rw-r--r-- | pkg/classes/packet.go | 63 | ||||
| -rw-r--r-- | pkg/classes/sarData.go | 89 | ||||
| -rw-r--r-- | pkg/classes/signOn.go | 52 | ||||
| -rw-r--r-- | pkg/classes/stop.go | 17 | ||||
| -rw-r--r-- | pkg/classes/stringTables.go | 100 | ||||
| -rw-r--r-- | pkg/classes/userCmd.go | 10 |
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 @@ | |||
| 1 | package classes | 1 | package classes |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "strings" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 5 | ) |
| 9 | 6 | ||
| 10 | type ConsoleCmd struct { | 7 | type ConsoleCmd struct { |
| @@ -15,5 +12,5 @@ type ConsoleCmd struct { | |||
| 15 | func (consoleCmd *ConsoleCmd) ParseConsoleCmd(reader *bitreader.Reader) { | 12 | func (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 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type CustomData struct { | 7 | type 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 | ||
| 10 | type DataTables struct { | 9 | type 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 | ||
| 59 | func ParseSendTable(reader *bitreader.Reader) SendTable { | 56 | func 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 @@ | |||
| 1 | package classes | 1 | package classes |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 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 | ||
| 11 | const MSSC int = 2 | 7 | const MSSC int = 2 |
| @@ -30,61 +26,8 @@ type CmdInfo struct { | |||
| 30 | 26 | ||
| 31 | func (packet *Packet) ParsePacket(reader *bitreader.Reader) { | 27 | func (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 | |||
| 48 | func (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 | |||
| 68 | type CmdInfoFlags int | ||
| 69 | |||
| 70 | const ( | ||
| 71 | ECmdInfoFlagsNone = 0 | ||
| 72 | ECmdInfoFlagsUseOrigin2 = 1 | ||
| 73 | ECmdInfoFlagsUserAngles2 = 1 << 1 | ||
| 74 | ECmdInfoFlagsNoInterp = 1 << 2 | ||
| 75 | ) | ||
| 76 | |||
| 77 | func (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 | ||
| 11 | type SarDataType uint8 | 11 | type 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 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "github.com/pektezol/bitreader" | ||
| 5 | "github.com/pektezol/demoparser/pkg/messages" | ||
| 6 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 7 | ) | ||
| 8 | |||
| 9 | type SignOn struct { | ||
| 10 | PacketInfo []CmdInfo | ||
| 11 | InSequence uint32 | ||
| 12 | OutSequence uint32 | ||
| 13 | Size uint32 | ||
| 14 | Data []any | ||
| 15 | } | ||
| 16 | |||
| 17 | func (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 | |||
| 34 | func (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 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "github.com/pektezol/bitreader" | ||
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | ||
| 7 | |||
| 8 | type Stop struct { | ||
| 9 | RemainingData []byte | ||
| 10 | } | ||
| 11 | |||
| 12 | func (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 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "github.com/pektezol/bitreader" | ||
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | ||
| 7 | |||
| 8 | type StringTables struct { | ||
| 9 | Size int32 | ||
| 10 | Data []StringTable | ||
| 11 | } | ||
| 12 | |||
| 13 | type StringTable struct { | ||
| 14 | Name string | ||
| 15 | TableEntries []StringTableEntry | ||
| 16 | Classes []StringTableClass | ||
| 17 | } | ||
| 18 | |||
| 19 | type StringTableEntry struct { | ||
| 20 | Name string | ||
| 21 | EntryData StringTableEntryData | ||
| 22 | } | ||
| 23 | |||
| 24 | type StringTableEntryData struct { | ||
| 25 | // TODO: Parse StringTableEntry | ||
| 26 | } | ||
| 27 | |||
| 28 | type StringTableClass struct { | ||
| 29 | Name string | ||
| 30 | Data string | ||
| 31 | } | ||
| 32 | |||
| 33 | func (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 | |||
| 46 | func (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 | |||
| 79 | func (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 | |||
| 92 | func (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 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type UserCmd struct { | 7 | type 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 | ||
| 91 | func (button Buttons) GetButtons() []string { | 83 | func (button Buttons) GetButtons() []string { |