From 7745f2dcaa2c409c19c6e79bf1eaa2bc41444be0 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 23 Sep 2023 17:46:12 +0300 Subject: lp parser: only get portal count and cm ticks --- pkg/messages/types/netDisconnect.go | 3 +- pkg/messages/types/netFile.go | 5 +- pkg/messages/types/netNop.go | 3 +- pkg/messages/types/netSetConVar.go | 5 +- pkg/messages/types/netSignOnState.go | 9 +- pkg/messages/types/netSplitScreenUser.go | 3 +- pkg/messages/types/netStringCmd.go | 5 +- pkg/messages/types/netTick.go | 5 +- pkg/messages/types/svcBspDecal.go | 7 +- pkg/messages/types/svcClassInfo.go | 9 +- pkg/messages/types/svcCmdKeyValues.go | 3 +- pkg/messages/types/svcCreateStringTable.go | 9 +- pkg/messages/types/svcCrosshairAngle.go | 5 +- pkg/messages/types/svcEntityMessage.go | 5 +- pkg/messages/types/svcFixAngle.go | 6 +- pkg/messages/types/svcGameEvent.go | 3 +- pkg/messages/types/svcGameEventList.go | 3 +- pkg/messages/types/svcGetCvarValue.go | 4 +- pkg/messages/types/svcMenu.go | 4 +- pkg/messages/types/svcPacketEntities.go | 9 +- pkg/messages/types/svcPaintmapData.go | 3 +- pkg/messages/types/svcPrefetch.go | 3 +- pkg/messages/types/svcPrint.go | 5 +- pkg/messages/types/svcSendTable.go | 5 +- pkg/messages/types/svcServerInfo.go | 18 +- pkg/messages/types/svcSetPause.go | 3 +- pkg/messages/types/svcSetView.go | 3 +- pkg/messages/types/svcSounds.go | 5 +- pkg/messages/types/svcSplitScreen.go | 4 +- pkg/messages/types/svcTempEntities.go | 4 +- pkg/messages/types/svcUpdateStringTable.go | 4 +- pkg/messages/types/svcUserMessage.go | 924 +---------------------------- pkg/messages/types/svcVoiceData.go | 5 +- pkg/messages/types/svcVoiceInit.go | 5 +- 34 files changed, 42 insertions(+), 1054 deletions(-) (limited to 'pkg/messages/types') diff --git a/pkg/messages/types/netDisconnect.go b/pkg/messages/types/netDisconnect.go index c2e22c1..10a8b05 100644 --- a/pkg/messages/types/netDisconnect.go +++ b/pkg/messages/types/netDisconnect.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetDisconnect struct { @@ -13,6 +12,6 @@ func ParseNetDisconnect(reader *bitreader.Reader) NetDisconnect { netDisconnect := NetDisconnect{ Text: reader.TryReadString(), } - writer.TempAppendLine("\t\tText: %s", netDisconnect.Text) + return netDisconnect } diff --git a/pkg/messages/types/netFile.go b/pkg/messages/types/netFile.go index 4ebd770..fc65229 100644 --- a/pkg/messages/types/netFile.go +++ b/pkg/messages/types/netFile.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetFile struct { @@ -40,8 +39,6 @@ func ParseNetFile(reader *bitreader.Reader) NetFile { FileName: reader.TryReadString(), FileFlags: NetFileFlags(reader.TryReadBits(2)).String(), } - writer.TempAppendLine("\t\tTransfer ID: %d", netFile.TransferId) - writer.TempAppendLine("\t\tFile Name: %s", netFile.FileName) - writer.TempAppendLine("\t\tFile Flags: %s", netFile.FileFlags) + return netFile } diff --git a/pkg/messages/types/netNop.go b/pkg/messages/types/netNop.go index 0ee1d0d..826da6b 100644 --- a/pkg/messages/types/netNop.go +++ b/pkg/messages/types/netNop.go @@ -2,12 +2,11 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetNop struct{} func ParseNetNop(reader *bitreader.Reader) NetNop { - writer.TempAppendLine("\t\t{}") + return NetNop{} } diff --git a/pkg/messages/types/netSetConVar.go b/pkg/messages/types/netSetConVar.go index 530cb6b..03e9e0d 100644 --- a/pkg/messages/types/netSetConVar.go +++ b/pkg/messages/types/netSetConVar.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetSetConVar struct { @@ -18,13 +17,13 @@ type conVar struct { func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { length := reader.TryReadUInt8() convars := []conVar{} - writer.TempAppendLine("\t\tLength: %d", length) + for count := 0; count < int(length); count++ { convar := conVar{ Name: reader.TryReadString(), Value: reader.TryReadString(), } - writer.TempAppendLine("\t\t[%d] %s: %s", count, convar.Name, convar.Value) + convars = append(convars, convar) } return NetSetConVar{ diff --git a/pkg/messages/types/netSignOnState.go b/pkg/messages/types/netSignOnState.go index f784b0a..65e17a4 100644 --- a/pkg/messages/types/netSignOnState.go +++ b/pkg/messages/types/netSignOnState.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetSignOnState struct { @@ -60,17 +59,15 @@ func ParseNetSignOnState(reader *bitreader.Reader) NetSignOnState { NumServerPlayers: reader.TryReadUInt32(), IdsLength: reader.TryReadUInt32(), } - writer.TempAppendLine("\t\tSign On State: %s", netSignOnState.SignOnState) - writer.TempAppendLine("\t\tSpawn Count: %d", netSignOnState.SpawnCount) - writer.TempAppendLine("\t\tNumber Of Server Players: %d", netSignOnState.NumServerPlayers) + if netSignOnState.IdsLength > 0 { netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) - writer.TempAppendLine("\t\tPlayer Network IDs: %v", netSignOnState.PlayersNetworksIds) + } netSignOnState.MapNameLength = reader.TryReadUInt32() if netSignOnState.MapNameLength > 0 { netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) - writer.TempAppendLine("\t\tMap Name: %s", netSignOnState.MapName) + } return netSignOnState } diff --git a/pkg/messages/types/netSplitScreenUser.go b/pkg/messages/types/netSplitScreenUser.go index 6068a28..8b14f63 100644 --- a/pkg/messages/types/netSplitScreenUser.go +++ b/pkg/messages/types/netSplitScreenUser.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetSplitScreenUser struct { @@ -13,6 +12,6 @@ func ParseNetSplitScreenUser(reader *bitreader.Reader) NetSplitScreenUser { netSplitScreenUser := NetSplitScreenUser{ Slot: reader.TryReadBool(), } - writer.TempAppendLine("\t\tSlot: %t", netSplitScreenUser.Slot) + return netSplitScreenUser } diff --git a/pkg/messages/types/netStringCmd.go b/pkg/messages/types/netStringCmd.go index 57ae813..2f7e830 100644 --- a/pkg/messages/types/netStringCmd.go +++ b/pkg/messages/types/netStringCmd.go @@ -1,10 +1,7 @@ package messages import ( - "strings" - "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetStringCmd struct { @@ -15,6 +12,6 @@ func ParseNetStringCmd(reader *bitreader.Reader) NetStringCmd { netStringCmd := NetStringCmd{ Command: reader.TryReadString(), } - writer.TempAppendLine("\t\tCommand: \"%s\"", strings.TrimSpace(netStringCmd.Command)) + return netStringCmd } diff --git a/pkg/messages/types/netTick.go b/pkg/messages/types/netTick.go index 1c01171..49e997e 100644 --- a/pkg/messages/types/netTick.go +++ b/pkg/messages/types/netTick.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type NetTick struct { @@ -17,8 +16,6 @@ func ParseNetTick(reader *bitreader.Reader) NetTick { HostFrameTime: float32(reader.TryReadUInt16()) / 1e5, HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5, } - writer.TempAppendLine("\t\tTick: %d", netTick.Tick) - writer.TempAppendLine("\t\tHost Frame Time: %f", netTick.HostFrameTime) - writer.TempAppendLine("\t\tHost Frame Time Std Deviation: %f", netTick.HostFrameTimeStdDeviation) + return netTick } diff --git a/pkg/messages/types/svcBspDecal.go b/pkg/messages/types/svcBspDecal.go index cf94c1d..6bf96a3 100644 --- a/pkg/messages/types/svcBspDecal.go +++ b/pkg/messages/types/svcBspDecal.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcBspDecal struct { @@ -28,11 +27,7 @@ func ParseSvcBspDecal(reader *bitreader.Reader) SvcBspDecal { svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11)) } svcBspDecal.LowPriority = reader.TryReadBool() - writer.TempAppendLine("\t\tPosition: %v", svcBspDecal.Pos) - writer.TempAppendLine("\t\tDecal Texture Index: %d", svcBspDecal.DecalTextureIndex) - writer.TempAppendLine("\t\tEntity Index: %d", svcBspDecal.EntityIndex) - writer.TempAppendLine("\t\tModel Index: %d", svcBspDecal.ModelIndex) - writer.TempAppendLine("\t\tLow Priority: %t", svcBspDecal.LowPriority) + return svcBspDecal } diff --git a/pkg/messages/types/svcClassInfo.go b/pkg/messages/types/svcClassInfo.go index 384c501..a20bfa3 100644 --- a/pkg/messages/types/svcClassInfo.go +++ b/pkg/messages/types/svcClassInfo.go @@ -4,7 +4,6 @@ import ( "math" "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcClassInfo struct { @@ -25,19 +24,17 @@ func ParseSvcClassInfo(reader *bitreader.Reader) SvcClassInfo { CreateOnClient: reader.TryReadBool(), } classes := []serverClass{} - writer.TempAppendLine("\t\tCreate On Client: %t", svcClassInfo.CreateOnClient) + if !svcClassInfo.CreateOnClient { - writer.TempAppendLine("\t\t%d Server Classes:", svcClassInfo.ClassCount) + for count := 0; count < int(svcClassInfo.ClassCount); count++ { classes = append(classes, serverClass{ ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))), ClassName: reader.TryReadString(), DataTableName: reader.TryReadString(), }) - writer.TempAppendLine("\t\t\t[%d] %s (%s)", classes[len(classes)-1].ClassId, classes[len(classes)-1].ClassName, classes[len(classes)-1].DataTableName) + } - } else { - writer.TempAppendLine("\t\t%d Server Classes", svcClassInfo.ClassCount) } svcClassInfo.ServerClasses = classes return svcClassInfo diff --git a/pkg/messages/types/svcCmdKeyValues.go b/pkg/messages/types/svcCmdKeyValues.go index 5c80d0b..61d6290 100644 --- a/pkg/messages/types/svcCmdKeyValues.go +++ b/pkg/messages/types/svcCmdKeyValues.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcCmdKeyValues struct { @@ -15,6 +14,6 @@ func ParseSvcCmdKeyValues(reader *bitreader.Reader) SvcCmdKeyValues { Length: reader.TryReadUInt32(), } svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length)) - writer.TempAppendLine("\t\tData: %v", svcCmdKeyValues.Data) + return svcCmdKeyValues } diff --git a/pkg/messages/types/svcCreateStringTable.go b/pkg/messages/types/svcCreateStringTable.go index ff2e27d..8d36fcf 100644 --- a/pkg/messages/types/svcCreateStringTable.go +++ b/pkg/messages/types/svcCreateStringTable.go @@ -4,7 +4,6 @@ import ( "math" "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcCreateStringTable struct { @@ -32,13 +31,7 @@ func ParseSvcCreateStringTable(reader *bitreader.Reader) SvcCreateStringTable { svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4)) } svcCreateStringTable.Flags = int8(reader.TryReadBits(2)) - writer.TempAppendLine("\t\tName: %s", svcCreateStringTable.Name) - writer.TempAppendLine("\t\tMax Enties: %d", svcCreateStringTable.MaxEntries) - writer.TempAppendLine("\t\tNumber Of Entiries: %d", svcCreateStringTable.NumEntries) - writer.TempAppendLine("\t\tUser Data Fixed Size: %t", svcCreateStringTable.UserDataFixedSize) - writer.TempAppendLine("\t\tUser Data Size: %d", svcCreateStringTable.UserDataSize) - writer.TempAppendLine("\t\tUser Data Size In Bits: %d", svcCreateStringTable.UserDataSizeBits) - writer.TempAppendLine("\t\tFlags: %d", svcCreateStringTable.Flags) + reader.SkipBits(uint64(svcCreateStringTable.Length)) // TODO: StringTable parsing return svcCreateStringTable } diff --git a/pkg/messages/types/svcCrosshairAngle.go b/pkg/messages/types/svcCrosshairAngle.go index efd6d77..f689876 100644 --- a/pkg/messages/types/svcCrosshairAngle.go +++ b/pkg/messages/types/svcCrosshairAngle.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcCrosshairAngle struct { @@ -23,8 +22,6 @@ func ParseSvcCrosshairAngle(reader *bitreader.Reader) SvcCrosshairAngle { Z: float32(reader.TryReadBits(16)), }, } - writer.TempAppendLine("\t\tX: %f", svcCrosshairAngle.Angle.X) - writer.TempAppendLine("\t\tY: %f", svcCrosshairAngle.Angle.Y) - writer.TempAppendLine("\t\tZ: %f", svcCrosshairAngle.Angle.Z) + return svcCrosshairAngle } diff --git a/pkg/messages/types/svcEntityMessage.go b/pkg/messages/types/svcEntityMessage.go index a511fea..c4676ec 100644 --- a/pkg/messages/types/svcEntityMessage.go +++ b/pkg/messages/types/svcEntityMessage.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcEntityMessage struct { @@ -19,8 +18,6 @@ func ParseSvcEntityMessage(reader *bitreader.Reader) SvcEntityMessage { Length: uint16(reader.TryReadBits(11)), } svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length)) - writer.TempAppendLine("\t\tEntity Index: %d", svcEntityMessage.EntityIndex) - writer.TempAppendLine("\t\tClass ID: %d", svcEntityMessage.ClassId) - writer.TempAppendLine("\t\tData: %v", svcEntityMessage.Data) + return svcEntityMessage } diff --git a/pkg/messages/types/svcFixAngle.go b/pkg/messages/types/svcFixAngle.go index b79c02d..f00c239 100644 --- a/pkg/messages/types/svcFixAngle.go +++ b/pkg/messages/types/svcFixAngle.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcFixAngle struct { @@ -25,9 +24,6 @@ func ParseSvcFixAngle(reader *bitreader.Reader) SvcFixAngle { Z: float32(reader.TryReadBits(16)), }, } - writer.TempAppendLine("\t\tRelative: %t", svcFixAngle.Relative) - writer.TempAppendLine("\t\tX: %f", svcFixAngle.Angle.X) - writer.TempAppendLine("\t\tY: %f", svcFixAngle.Angle.Y) - writer.TempAppendLine("\t\tZ: %f", svcFixAngle.Angle.Z) + return svcFixAngle } diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go index e12d75a..ec96653 100644 --- a/pkg/messages/types/svcGameEvent.go +++ b/pkg/messages/types/svcGameEvent.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcGameEvent struct { @@ -15,6 +14,6 @@ func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { Length: uint16(reader.TryReadBits(11)), } svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)) - writer.TempAppendLine("\t\tData: %v", svcGameEvent.Data) + return svcGameEvent } diff --git a/pkg/messages/types/svcGameEventList.go b/pkg/messages/types/svcGameEventList.go index 1fa7589..ca2cf76 100644 --- a/pkg/messages/types/svcGameEventList.go +++ b/pkg/messages/types/svcGameEventList.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcGameEventList struct { @@ -20,6 +19,6 @@ func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList { Length: int32(reader.TryReadBits(20)), } reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)) - writer.TempAppendLine("\t\tEvents: %d", svcGameEventList.Events) + return svcGameEventList } diff --git a/pkg/messages/types/svcGetCvarValue.go b/pkg/messages/types/svcGetCvarValue.go index 939e6b6..b0513d0 100644 --- a/pkg/messages/types/svcGetCvarValue.go +++ b/pkg/messages/types/svcGetCvarValue.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcGetCvarValue struct { @@ -15,7 +14,6 @@ func ParseSvcGetCvarValue(reader *bitreader.Reader) SvcGetCvarValue { Cookie: reader.TryReadSInt32(), CvarName: reader.TryReadString(), } - writer.TempAppendLine("\t\tCookie: %d", svcGetCvarValue.Cookie) - writer.TempAppendLine("\t\tCvar: \"%s\"", svcGetCvarValue.CvarName) + return svcGetCvarValue } diff --git a/pkg/messages/types/svcMenu.go b/pkg/messages/types/svcMenu.go index 33ccb70..df14048 100644 --- a/pkg/messages/types/svcMenu.go +++ b/pkg/messages/types/svcMenu.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcMenu struct { @@ -17,7 +16,6 @@ func ParseSvcMenu(reader *bitreader.Reader) SvcMenu { Length: reader.TryReadUInt32(), } svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length)) - writer.TempAppendLine("\t\tType: %d", svcMenu.Type) - writer.TempAppendLine("\t\tData: %v", svcMenu.Data) + return svcMenu } diff --git a/pkg/messages/types/svcPacketEntities.go b/pkg/messages/types/svcPacketEntities.go index 05b6794..8000a55 100644 --- a/pkg/messages/types/svcPacketEntities.go +++ b/pkg/messages/types/svcPacketEntities.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcPacketEntities struct { @@ -31,12 +30,6 @@ func ParseSvcPacketEntities(reader *bitreader.Reader) SvcPacketEntities { svcPacketEntities.Length = uint32(reader.TryReadBits(20)) svcPacketEntities.UpdatedBaseline = reader.TryReadBool() svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) - writer.TempAppendLine("\t\tMax Entries: %d", svcPacketEntities.MaxEntries) - writer.TempAppendLine("\t\tIs Delta: %t", svcPacketEntities.IsDelta) - writer.TempAppendLine("\t\tDelta From: %d", svcPacketEntities.DeltaFrom) - writer.TempAppendLine("\t\tBaseline: %t", svcPacketEntities.BaseLine) - writer.TempAppendLine("\t\tUpdated Baseline: %t", svcPacketEntities.UpdatedBaseline) - writer.TempAppendLine("\t\t%d Updated Entries:", svcPacketEntities.UpdatedEntries) - writer.TempAppendLine("\t\tData: %v", svcPacketEntities.Data) + return svcPacketEntities } diff --git a/pkg/messages/types/svcPaintmapData.go b/pkg/messages/types/svcPaintmapData.go index 40f6ad0..49aa433 100644 --- a/pkg/messages/types/svcPaintmapData.go +++ b/pkg/messages/types/svcPaintmapData.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcPaintmapData struct { @@ -15,6 +14,6 @@ func ParseSvcPaintmapData(reader *bitreader.Reader) SvcPaintmapData { Length: reader.TryReadUInt32(), } svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length)) - writer.TempAppendLine("\t\tData: %v", svcPaintmapData.Data) + return svcPaintmapData } diff --git a/pkg/messages/types/svcPrefetch.go b/pkg/messages/types/svcPrefetch.go index b71e61f..a9a88fe 100644 --- a/pkg/messages/types/svcPrefetch.go +++ b/pkg/messages/types/svcPrefetch.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcPrefetch struct { @@ -13,6 +12,6 @@ func ParseSvcPrefetch(reader *bitreader.Reader) SvcPrefetch { svcPrefetch := SvcPrefetch{ SoundIndex: int16(reader.TryReadBits(13)), } - writer.TempAppendLine("\t\tSound Index: %d", svcPrefetch.SoundIndex) + return svcPrefetch } diff --git a/pkg/messages/types/svcPrint.go b/pkg/messages/types/svcPrint.go index 760a3c5..5868ab2 100644 --- a/pkg/messages/types/svcPrint.go +++ b/pkg/messages/types/svcPrint.go @@ -1,10 +1,7 @@ package messages import ( - "strings" - "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcPrint struct { @@ -16,6 +13,6 @@ func ParseSvcPrint(reader *bitreader.Reader) SvcPrint { Message: reader.TryReadString(), } // common psycopath behaviour - writer.TempAppendLine("\t\t%s", strings.Replace(strings.ReplaceAll(strings.ReplaceAll(svcPrint.Message, "\n", "\n\t\t"), "\n\t\t\n\t\t", ""), "\n\t\t", "", 1)) + return svcPrint } diff --git a/pkg/messages/types/svcSendTable.go b/pkg/messages/types/svcSendTable.go index 78df195..4397db0 100644 --- a/pkg/messages/types/svcSendTable.go +++ b/pkg/messages/types/svcSendTable.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcSendTable struct { @@ -17,8 +16,6 @@ func ParseSvcSendTable(reader *bitreader.Reader) SvcSendTable { Length: reader.TryReadUInt8(), } svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length))) - writer.TempAppendLine("\t\tNeeds Decoder: %t", svcSendTable.NeedsDecoder) - writer.TempAppendLine("\t\tLength: %d", svcSendTable.Length) - writer.TempAppendLine("\t\tProps: %d", svcSendTable.Props) + return svcSendTable } diff --git a/pkg/messages/types/svcServerInfo.go b/pkg/messages/types/svcServerInfo.go index a6acd53..507b7ca 100644 --- a/pkg/messages/types/svcServerInfo.go +++ b/pkg/messages/types/svcServerInfo.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcServerInfo struct { @@ -43,21 +42,6 @@ func ParseSvcServerInfo(reader *bitreader.Reader) SvcServerInfo { SkyName: reader.TryReadString(), HostName: reader.TryReadString(), } - writer.TempAppendLine("\t\tNetwork Protocol: %d", svcServerInfo.Protocol) - writer.TempAppendLine("\t\tServer Count: %d", svcServerInfo.ServerCount) - writer.TempAppendLine("\t\tIs Hltv: %t", svcServerInfo.IsHltv) - writer.TempAppendLine("\t\tIs Dedicated: %t", svcServerInfo.IsDedicated) - writer.TempAppendLine("\t\tServer Client CRC: %d", svcServerInfo.ClientCrc) - writer.TempAppendLine("\t\tString Table CRC: %d", svcServerInfo.StringTableCrc) - writer.TempAppendLine("\t\tMax Server Classes: %d", svcServerInfo.MaxServerClasses) - writer.TempAppendLine("\t\tServer Map CRC: %d", svcServerInfo.MapCrc) - writer.TempAppendLine("\t\tCurrent Player Count: %d", svcServerInfo.PlayerCount) - writer.TempAppendLine("\t\tMax Player Count: %d", svcServerInfo.MaxClients) - writer.TempAppendLine("\t\tInterval Per Tick: %f", svcServerInfo.TickInterval) - writer.TempAppendLine("\t\tPlatform: %s", svcServerInfo.Platform) - writer.TempAppendLine("\t\tGame Directory: %s", svcServerInfo.GameDir) - writer.TempAppendLine("\t\tMap Name: %s", svcServerInfo.MapName) - writer.TempAppendLine("\t\tSky Name: %s", svcServerInfo.SkyName) - writer.TempAppendLine("\t\tHost Name: %s", svcServerInfo.HostName) + return svcServerInfo } diff --git a/pkg/messages/types/svcSetPause.go b/pkg/messages/types/svcSetPause.go index d979ac5..1f6f25f 100644 --- a/pkg/messages/types/svcSetPause.go +++ b/pkg/messages/types/svcSetPause.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcSetPause struct { @@ -13,6 +12,6 @@ func ParseSvcSetPause(reader *bitreader.Reader) SvcSetPause { svcSetPause := SvcSetPause{ Paused: reader.TryReadBool(), } - writer.TempAppendLine("\t\tPaused: %t", svcSetPause.Paused) + return svcSetPause } diff --git a/pkg/messages/types/svcSetView.go b/pkg/messages/types/svcSetView.go index bdb6203..a60d547 100644 --- a/pkg/messages/types/svcSetView.go +++ b/pkg/messages/types/svcSetView.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcSetView struct { @@ -13,6 +12,6 @@ func ParseSvcSetView(reader *bitreader.Reader) SvcSetView { svcSetView := SvcSetView{ EntityIndex: uint16(reader.TryReadBits(11)), } - writer.TempAppendLine("\t\tEntity Index: %d", svcSetView.EntityIndex) + return svcSetView } diff --git a/pkg/messages/types/svcSounds.go b/pkg/messages/types/svcSounds.go index 1affeb4..34d99f6 100644 --- a/pkg/messages/types/svcSounds.go +++ b/pkg/messages/types/svcSounds.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcSounds struct { @@ -24,8 +23,6 @@ func ParseSvcSounds(reader *bitreader.Reader) SvcSounds { svcSounds.Length = reader.TryReadUInt16() } svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length)) - writer.TempAppendLine("\t\tReliable Sound: %t", svcSounds.ReliableSound) - writer.TempAppendLine("\t\tSound Count: %d", svcSounds.SoundCount) - writer.TempAppendLine("\t\tData: %v", svcSounds.Data) + return svcSounds } diff --git a/pkg/messages/types/svcSplitScreen.go b/pkg/messages/types/svcSplitScreen.go index 653438a..fc6acb4 100644 --- a/pkg/messages/types/svcSplitScreen.go +++ b/pkg/messages/types/svcSplitScreen.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcSplitScreen struct { @@ -17,7 +16,6 @@ func ParseSvcSplitScreen(reader *bitreader.Reader) SvcSplitScreen { Length: uint16(reader.TryReadBits(11)), } svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length)) - writer.TempAppendLine("\t\tRemove User: %t", svcSplitScreen.RemoveUser) - writer.TempAppendLine("\t\tData: %v", svcSplitScreen.Data) + return svcSplitScreen } diff --git a/pkg/messages/types/svcTempEntities.go b/pkg/messages/types/svcTempEntities.go index 407bfd6..41b1afb 100644 --- a/pkg/messages/types/svcTempEntities.go +++ b/pkg/messages/types/svcTempEntities.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcTempEntities struct { @@ -17,7 +16,6 @@ func ParseSvcTempEntities(reader *bitreader.Reader) SvcTempEntities { Length: uint32(reader.TryReadBits(17)), } svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length)) - writer.TempAppendLine("\t\tNumber Of Entries: %d", svcTempEntities.NumEntries) - writer.TempAppendLine("\t\tData: %v", svcTempEntities.Data) + return svcTempEntities } diff --git a/pkg/messages/types/svcUpdateStringTable.go b/pkg/messages/types/svcUpdateStringTable.go index 68c8fb5..ca716eb 100644 --- a/pkg/messages/types/svcUpdateStringTable.go +++ b/pkg/messages/types/svcUpdateStringTable.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcUpdateStringTable struct { @@ -21,7 +20,6 @@ func ParseSvcUpdateStringTable(reader *bitreader.Reader) SvcUpdateStringTable { } svcUpdateStringTable.Length = int32(reader.TryReadBits(20)) svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length)) - writer.TempAppendLine("\t\tTable ID: %d", svcUpdateStringTable.TableId) - writer.TempAppendLine("\t\tNumber Of Changed Entries: %d", svcUpdateStringTable.NumChangedEntries) + return svcUpdateStringTable } diff --git a/pkg/messages/types/svcUserMessage.go b/pkg/messages/types/svcUserMessage.go index 35c9e2d..652fbb5 100644 --- a/pkg/messages/types/svcUserMessage.go +++ b/pkg/messages/types/svcUserMessage.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcUserMessage struct { @@ -20,702 +19,13 @@ func ParseSvcUserMessage(reader *bitreader.Reader) SvcUserMessage { } svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length)) userMessageReader := bitreader.NewReaderFromBytes(svcUserMessage.Data.([]byte), true) - writer.TempAppendLine("\t\t%s (%d):", UserMessageType(svcUserMessage.Type).String(), svcUserMessage.Type) - switch UserMessageType(svcUserMessage.Type) { - case EUserMessageTypeGeiger: - svcUserMessage.parseGeiger(userMessageReader) - case EUserMessageTypeTrain: - svcUserMessage.parseTrain(userMessageReader) - case EUserMessageTypeHudText: - svcUserMessage.parseHUDText(userMessageReader) - case EUserMessageTypeSayText: - svcUserMessage.parseSayText(userMessageReader) - case EUserMessageTypeSayText2: - svcUserMessage.parseSayText2(userMessageReader) - case EUserMessageTypeTextMsg: - svcUserMessage.parseTextMsg(userMessageReader) - case EUserMessageTypeHUDMsg: - svcUserMessage.parseHUDMsg(userMessageReader) - case EUserMessageTypeResetHUD: - svcUserMessage.parseResetHUD(userMessageReader) - case EUserMessageTypeShake: - svcUserMessage.parseShake(userMessageReader) - case EUserMessageTypeFade: - svcUserMessage.parseFade(userMessageReader) - case EUserMessageTypeVGUIMenu: - svcUserMessage.parseVguiMenu(userMessageReader) - case EUserMessageTypeRumble: - svcUserMessage.parseRumble(userMessageReader) - case EUserMessageTypeBattery: - svcUserMessage.parseBattery(userMessageReader) - case EUserMessageTypeDamage: - svcUserMessage.parseDamage(userMessageReader) - case EUserMessageTypeVoiceMask: - svcUserMessage.parseVoiceMask(userMessageReader) - case EUserMessageTypeCloseCaption: - svcUserMessage.parseCloseCaption(userMessageReader) - case EUserMessageTypeKeyHintText: - svcUserMessage.parseKeyHintText(userMessageReader) - case EUserMessageTypeLogoTimeMsg: - svcUserMessage.parseLogoTimeMsg(userMessageReader) - case EUserMessageTypeAchievementEvent: - svcUserMessage.parseAchivementEvent(userMessageReader) - case EUserMessageTypeMPMapCompleted: - svcUserMessage.parseMpMapCompleted(userMessageReader) - case EUserMessageTypeMPMapIncomplete: - svcUserMessage.parseMpMapIncomplete(userMessageReader) - case EUserMessageTypeMPTauntEarned: - svcUserMessage.parseMpTauntEarned(userMessageReader) - case EUserMessageTypeMPTauntLocked: - svcUserMessage.parseMpTauntLocked(userMessageReader) - case EUserMessageTypePortalFX_Surface: - svcUserMessage.parsePortalFxSurface(userMessageReader) - case EUserMessageTypeScoreboardTempUpdate: + switch svcUserMessage.Type { + case 60: svcUserMessage.parseScoreboardTempUpdate(userMessageReader) - default: - writer.TempAppendLine("\t\t\tData: %v", svcUserMessage.Data) } return svcUserMessage } -func (svcUserMessage *SvcUserMessage) parseGeiger(reader *bitreader.Reader) { - geiger := struct{ Range uint8 }{ - Range: reader.TryReadUInt8(), - } - svcUserMessage.Data = geiger - writer.TempAppendLine("\t\t\tGeiger Range: %d", geiger.Range) -} - -func (svcUserMessage *SvcUserMessage) parseTrain(reader *bitreader.Reader) { - train := struct{ Pos uint8 }{ - Pos: reader.TryReadUInt8(), - } - svcUserMessage.Data = train - writer.TempAppendLine("\t\t\tPos: %d", train.Pos) -} - -func (svcUserMessage *SvcUserMessage) parseHUDText(reader *bitreader.Reader) { - hudText := struct{ Text string }{ - Text: reader.TryReadString(), - } - svcUserMessage.Data = hudText - writer.TempAppendLine("\t\t\tText: %s", hudText.Text) -} - -func (svcUserMessage *SvcUserMessage) parseSayText(reader *bitreader.Reader) { - sayText := struct { - Client uint8 - Message string - WantsToChat bool - }{ - Client: reader.TryReadUInt8(), - Message: reader.TryReadString(), - WantsToChat: reader.TryReadUInt8() != 0, - } - svcUserMessage.Data = sayText - writer.TempAppendLine("\t\t\tClient: %d", sayText.Client) - writer.TempAppendLine("\t\t\tMessage: %s", sayText.Message) - writer.TempAppendLine("\t\t\tWants To Chat: %t", sayText.WantsToChat) -} - -func (svcUserMessage *SvcUserMessage) parseSayText2(reader *bitreader.Reader) { - sayText2 := struct { - Client uint8 - WantsToChat bool - MessageName string - Messages []string - }{ - Client: reader.TryReadUInt8(), - WantsToChat: reader.TryReadUInt8() != 0, - MessageName: reader.TryReadString(), - Messages: []string{reader.TryReadString(), reader.TryReadString(), reader.TryReadString()}, - } - svcUserMessage.Data = sayText2 - writer.TempAppendLine("\t\t\tClient: %d", sayText2.Client) - writer.TempAppendLine("\t\t\tWants To Chat: %t", sayText2.WantsToChat) - writer.TempAppendLine("\t\t\tName: %s", sayText2.MessageName) - for index, message := range sayText2.Messages { - writer.TempAppendLine("\t\t\tMessage %d: %s", index, message) - } -} - -func (svcUserMessage *SvcUserMessage) parseTextMsg(reader *bitreader.Reader) { - const MessageCount int = 5 - textMsg := struct { - Destination uint8 - Messages []string - }{ - Destination: reader.TryReadUInt8(), - } - textMsg.Messages = make([]string, 5) - for i := 0; i < MessageCount; i++ { - textMsg.Messages[i] = reader.TryReadString() - } - svcUserMessage.Data = textMsg - writer.TempAppendLine("\t\t\tDestination: %d", textMsg.Destination) - for i := 0; i < MessageCount; i++ { - writer.TempAppendLine("\t\t\tMessage %d: %s", i+1, textMsg.Messages) - } -} - -func (svcUserMessage *SvcUserMessage) parseHUDMsg(reader *bitreader.Reader) { - const MaxNetMessage uint8 = 6 - hudMsg := struct { - Channel uint8 - Info struct { - X, Y float32 // 0-1 & resolution independent, -1 means center in each dimension - R1, G1, B1, A1 uint8 - R2, G2, B2, A2 uint8 - Effect uint8 - FadeIn, FadeOut, HoldTime, FxTime float32 // the fade times seem to be per character - Message string - } - }{ - Channel: reader.TryReadUInt8() % MaxNetMessage, - } - svcUserMessage.Data = hudMsg - writer.TempAppendLine("\t\t\tChannel: %d", hudMsg.Channel) - if reader.TryReadRemainingBits() >= 148 { - hudMsg.Info = struct { - X float32 - Y float32 - R1 uint8 - G1 uint8 - B1 uint8 - A1 uint8 - R2 uint8 - G2 uint8 - B2 uint8 - A2 uint8 - Effect uint8 - FadeIn float32 - FadeOut float32 - HoldTime float32 - FxTime float32 - Message string - }{ - X: reader.TryReadFloat32(), - Y: reader.TryReadFloat32(), - R1: reader.TryReadUInt8(), - G1: reader.TryReadUInt8(), - B1: reader.TryReadUInt8(), - A1: reader.TryReadUInt8(), - R2: reader.TryReadUInt8(), - G2: reader.TryReadUInt8(), - B2: reader.TryReadUInt8(), - A2: reader.TryReadUInt8(), - Effect: reader.TryReadUInt8(), - FadeIn: reader.TryReadFloat32(), - FadeOut: reader.TryReadFloat32(), - HoldTime: reader.TryReadFloat32(), - FxTime: reader.TryReadFloat32(), - Message: reader.TryReadString(), - } - svcUserMessage.Data = hudMsg - writer.TempAppendLine("\t\t\tX: %f, Y: %f", hudMsg.Info.X, hudMsg.Info.Y) - writer.TempAppendLine("\t\t\tRGBA1: %3d %3d %3d %3d", hudMsg.Info.R1, hudMsg.Info.G1, hudMsg.Info.B1, hudMsg.Info.A1) - writer.TempAppendLine("\t\t\tRGBA2: %3d %3d %3d %3d", hudMsg.Info.R2, hudMsg.Info.G2, hudMsg.Info.B2, hudMsg.Info.A2) - writer.TempAppendLine("\t\t\tEffect: %d", hudMsg.Info.Effect) - writer.TempAppendLine("\t\t\tFade In: %f", hudMsg.Info.FadeIn) - writer.TempAppendLine("\t\t\tFade Out: %f", hudMsg.Info.FadeOut) - writer.TempAppendLine("\t\t\tHold Time: %f", hudMsg.Info.HoldTime) - writer.TempAppendLine("\t\t\tFX Time: %f", hudMsg.Info.FxTime) - writer.TempAppendLine("\t\t\tMessage: %s", hudMsg.Info.Message) - } -} - -func (svcUserMessage *SvcUserMessage) parseResetHUD(reader *bitreader.Reader) { - resetHUD := struct{ Unknown uint8 }{ - Unknown: reader.TryReadUInt8(), - } - svcUserMessage.Data = resetHUD - writer.TempAppendLine("\t\t\tUnknown: %d", resetHUD.Unknown) -} - -func (svcUserMessage *SvcUserMessage) parseShake(reader *bitreader.Reader) { - type ShakeCommand uint8 - const ( - Start ShakeCommand = iota // Starts the screen shake for all players within the radius. - Stop // Stops the screen shake for all players within the radius. - Amplitude // Modifies the amplitude of an active screen shake for all players within the radius. - Frequency // Modifies the frequency of an active screen shake for all players within the radius. - RumbleOnly // Starts a shake effect that only rumbles the controller, no screen effect. - NoRumble // Starts a shake that does NOT rumble the controller. - ) - shake := struct { - Command uint8 - Amplitude float32 - Frequency float32 - Duration float32 - }{ - Command: reader.TryReadUInt8(), - Amplitude: reader.TryReadFloat32(), - Frequency: reader.TryReadFloat32(), - Duration: reader.TryReadFloat32(), - } - shakeCommandToString := func(cmd ShakeCommand) string { - switch cmd { - case Start: - return "Start" - case Stop: - return "Stop" - case Amplitude: - return "Amplitude" - case Frequency: - return "Frequency" - case RumbleOnly: - return "RumbleOnly" - case NoRumble: - return "NoRumble" - default: - return "Unknown" - } - } - svcUserMessage.Data = shake - writer.TempAppendLine("\t\t\tCommand: %v", shakeCommandToString(ShakeCommand(shake.Command))) - writer.TempAppendLine("\t\t\tAmplitude: %v", shake.Amplitude) - writer.TempAppendLine("\t\t\tFrequency: %v", shake.Frequency) - writer.TempAppendLine("\t\t\tDuration: %v", shake.Duration) -} - -func (svcUserMessage *SvcUserMessage) parseFade(reader *bitreader.Reader) { - type FadeFlag uint16 - const ( - None FadeFlag = 0 - FadeIn FadeFlag = 1 - FadeOut FadeFlag = 1 << 1 - Modulate FadeFlag = 1 << 2 // Modulate (don't blend) - StayOut FadeFlag = 1 << 3 // ignores the duration, stays faded out until new ScreenFade message received - Purge FadeFlag = 1 << 4 // Purges all other fades, replacing them with this one - ) - fade := struct { - Duration float32 - HoldTime uint16 - Flags uint16 - R uint8 - G uint8 - B uint8 - A uint8 - }{ - Duration: float32(reader.TryReadUInt16()) / float32(1<<9), // might be useful: #define SCREENFADE_FRACBITS 9 - HoldTime: reader.TryReadUInt16(), - Flags: reader.TryReadUInt16(), - R: reader.TryReadUInt8(), - G: reader.TryReadUInt8(), - B: reader.TryReadUInt8(), - A: reader.TryReadUInt8(), - } - getFlags := func(flags FadeFlag) []string { - var flagStrings []string - if flags&FadeIn != 0 { - flagStrings = append(flagStrings, "FadeIn") - } - if flags&FadeOut != 0 { - flagStrings = append(flagStrings, "FadeOut") - } - if flags&Modulate != 0 { - flagStrings = append(flagStrings, "Modulate") - } - if flags&StayOut != 0 { - flagStrings = append(flagStrings, "StayOut") - } - if flags&Purge != 0 { - flagStrings = append(flagStrings, "Purge") - } - return flagStrings - } - svcUserMessage.Data = fade - writer.TempAppendLine("\t\t\tDuration: %f", fade.Duration) - writer.TempAppendLine("\t\t\tHold Time: %d", fade.HoldTime) - writer.TempAppendLine("\t\t\tFlags: %v", getFlags(FadeFlag(fade.Flags))) - writer.TempAppendLine("\t\t\tRGBA: %3d %3d %3d %3d", fade.R, fade.G, fade.B, fade.A) -} - -func (svcUserMessage *SvcUserMessage) parseVguiMenu(reader *bitreader.Reader) { - vguiMenu := struct { - Message string - Show bool - KeyValues []map[string]string - }{ - Message: reader.TryReadString(), - Show: reader.TryReadUInt8() != 0, - } - count := reader.TryReadUInt8() - for i := 0; i < int(count); i++ { - vguiMenu.KeyValues = append(vguiMenu.KeyValues, map[string]string{"Key": reader.TryReadString(), "Value": reader.TryReadString()}) - } - svcUserMessage.Data = vguiMenu - writer.TempAppendLine("\t\t\tMessage: %s", vguiMenu.Message) - writer.TempAppendLine("\t\t\tShow: %t", vguiMenu.Show) - if len(vguiMenu.KeyValues) > 0 { - writer.TempAppendLine("\t\t\t%d Key Value Pairs:", len(vguiMenu.KeyValues)) - for _, kv := range vguiMenu.KeyValues { - writer.TempAppendLine("\t\t\t\t%s: %s", kv["Key"], kv["Value"]) - } - } else { - writer.TempAppendLine("\t\t\tNo Key Value Pairs") - } -} - -func (svcUserMessage *SvcUserMessage) parseRumble(reader *bitreader.Reader) { - type RumbleLookup int8 - const ( - RumbleInvalid RumbleLookup = -1 - RumbleStopAll RumbleLookup = 0 // cease all current rumbling effects. - PhyscannonOpen RumbleLookup = 20 - PhyscannonPunt RumbleLookup = 21 - PhyscannonLow RumbleLookup = 22 - PhyscannonMedium RumbleLookup = 23 - PhyscannonHigh RumbleLookup = 24 - PortalgunLeft RumbleLookup = 25 - PortalgunRight RumbleLookup = 26 - PortalPlacementFailure RumbleLookup = 27 - ) - getRumbleLookup := func(rumbleLookup RumbleLookup) string { - switch rumbleLookup { - case RumbleInvalid: - return "RumbleInvalid" - case RumbleStopAll: - return "RumbleStopAll" - case PhyscannonOpen: - return "PhyscannonOpen" - case PhyscannonPunt: - return "PhyscannonPunt" - case PhyscannonLow: - return "PhyscannonLow" - case PhyscannonMedium: - return "PhyscannonMedium" - case PhyscannonHigh: - return "PhyscannonHigh" - case PortalgunLeft: - return "PortalgunLeft" - case PortalgunRight: - return "PortalgunRight" - case PortalPlacementFailure: - return "PortalPlacementFailure" - default: - return fmt.Sprintf("%d", int(rumbleLookup)) - } - } - type RumbleFlag uint8 - const ( - None RumbleFlag = 0 - Stop RumbleFlag = 1 - Loop RumbleFlag = 1 << 1 - Restart RumbleFlag = 1 << 2 - UpdateScale RumbleFlag = 1 << 3 // Apply DATA to this effect if already playing, but don't restart. <-- DATA is scale * 100 - OnlyOne RumbleFlag = 1 << 4 // Don't play this effect if it is already playing. - RandomAmplitude RumbleFlag = 1 << 4 // Amplitude scale will be randomly chosen. Between 10% and 100% - InitialScale RumbleFlag = 1 << 4 // Data is the initial scale to start this effect ( * 100 ) - ) - rumble := struct { - Type int8 - Scale float32 - Flags uint8 - }{ - Type: reader.TryReadSInt8(), - Scale: float32(reader.TryReadUInt8()) / 100, - Flags: reader.TryReadUInt8(), - } - getFlags := func(flags RumbleFlag) []string { - var flagStrings []string - if flags&Stop != 0 { - flagStrings = append(flagStrings, "Stop") - } - if flags&Loop != 0 { - flagStrings = append(flagStrings, "Loop") - } - if flags&Restart != 0 { - flagStrings = append(flagStrings, "Restart") - } - if flags&UpdateScale != 0 { - flagStrings = append(flagStrings, "UpdateScale") - } - if flags&OnlyOne != 0 { - flagStrings = append(flagStrings, "OnlyOne") - } - if flags&RandomAmplitude != 0 { - flagStrings = append(flagStrings, "RandomAmplitude") - } - if flags&InitialScale != 0 { - flagStrings = append(flagStrings, "InitialScale") - } - return flagStrings - } - svcUserMessage.Data = rumble - writer.TempAppendLine("\t\t\tType: %s", getRumbleLookup(RumbleLookup(rumble.Type))) - writer.TempAppendLine("\t\t\tScale: %f", rumble.Scale) - writer.TempAppendLine("\t\t\tFlags: %v", getFlags(RumbleFlag(rumble.Flags))) -} - -func (svcUserMessage *SvcUserMessage) parseBattery(reader *bitreader.Reader) { - battery := struct{ BatteryVal uint16 }{ - BatteryVal: reader.TryReadUInt16(), - } - svcUserMessage.Data = battery - writer.TempAppendLine("\t\t\tBattery: %d", battery.BatteryVal) -} - -func (svcUserMessage *SvcUserMessage) parseDamage(reader *bitreader.Reader) { - damage := struct { - Armor uint8 - DamageTaken uint8 - BitsDamage int32 - VecFrom []float32 - }{ - Armor: reader.TryReadUInt8(), - DamageTaken: reader.TryReadUInt8(), - BitsDamage: reader.TryReadSInt32(), - VecFrom: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, - } - svcUserMessage.Data = damage - writer.TempAppendLine("\t\t\tArmor: %d", damage.Armor) - writer.TempAppendLine("\t\t\tDamage Taken: %d", damage.DamageTaken) - writer.TempAppendLine("\t\t\tBits Damage: %d", damage.BitsDamage) - writer.TempAppendLine("\t\t\tVecFrom: %v", damage.VecFrom) -} - -func (svcUserMessage *SvcUserMessage) parseVoiceMask(reader *bitreader.Reader) { - // const VoiceMaxPlayers = 2 - voiceMask := struct { - PlayerMasks []struct { - GameRulesMask int32 - BanMask int32 - } - PlayerModEnable bool - }{ - PlayerMasks: []struct { - GameRulesMask int32 - BanMask int32 - }{ - { - GameRulesMask: reader.TryReadSInt32(), - BanMask: reader.TryReadSInt32(), - }, - { - GameRulesMask: reader.TryReadSInt32(), - BanMask: reader.TryReadSInt32(), - }, - }, - PlayerModEnable: reader.TryReadUInt8() != 0, - } - svcUserMessage.Data = voiceMask - writer.TempAppendLine("\t\t\tPlayer Masks:") - writer.TempAppendLine("\t\t\t\t[0] Game Rules Mask: %d", voiceMask.PlayerMasks[0].GameRulesMask) - writer.TempAppendLine("\t\t\t\t[0] Ban Mask: %d", voiceMask.PlayerMasks[0].BanMask) - writer.TempAppendLine("\t\t\t\t[1] Game Rules Mask: %d", voiceMask.PlayerMasks[1].GameRulesMask) - writer.TempAppendLine("\t\t\t\t[1] Ban Mask: %d", voiceMask.PlayerMasks[1].BanMask) - writer.TempAppendLine("\t\t\t\tPlayer Mod Enable: %t", voiceMask.PlayerModEnable) -} - -func (svcUserMessage *SvcUserMessage) parseCloseCaption(reader *bitreader.Reader) { - type CloseCaptionFlag uint8 - const ( - None CloseCaptionFlag = 0 - WarnIfMissing CloseCaptionFlag = 1 - FromPlayer CloseCaptionFlag = 1 << 1 - GenderMale CloseCaptionFlag = 1 << 2 - GenderFemale CloseCaptionFlag = 1 << 3 - ) - closeCaption := struct { - TokenName string - Duration float32 - Flags uint8 - }{ - TokenName: reader.TryReadString(), - Duration: float32(reader.TryReadSInt16()) * 0.1, - Flags: reader.TryReadUInt8(), - } - getFlags := func(flags CloseCaptionFlag) []string { - var flagStrings []string - if flags&WarnIfMissing != 0 { - flagStrings = append(flagStrings, "WarnIfMissing") - } - if flags&FromPlayer != 0 { - flagStrings = append(flagStrings, "FromPlayer") - } - if flags&GenderMale != 0 { - flagStrings = append(flagStrings, "GenderMale") - } - if flags&GenderFemale != 0 { - flagStrings = append(flagStrings, "GenderFemale") - } - return flagStrings - } - svcUserMessage.Data = closeCaption - writer.TempAppendLine("\t\t\tToken Name: %s", closeCaption.TokenName) - writer.TempAppendLine("\t\t\tDuration: %f", closeCaption.Duration) - writer.TempAppendLine("\t\t\tFlags: %v", getFlags(CloseCaptionFlag(closeCaption.Flags))) -} - -func (svcUserMessage *SvcUserMessage) parseKeyHintText(reader *bitreader.Reader) { - keyHintText := struct { - Count uint8 - KeyString string - }{ - Count: reader.TryReadUInt8(), - KeyString: reader.TryReadString(), - } - svcUserMessage.Data = keyHintText - writer.TempAppendLine("\t\t\tCount: %d", keyHintText.Count) - writer.TempAppendLine("\t\t\tString: %s", keyHintText.KeyString) -} - -func (svcUserMessage *SvcUserMessage) parseLogoTimeMsg(reader *bitreader.Reader) { - logoTimeMsg := struct{ Time float32 }{ - Time: reader.TryReadFloat32(), - } - svcUserMessage.Data = logoTimeMsg - writer.TempAppendLine("\t\t\tTime: %f", logoTimeMsg.Time) -} - -func (svcUserMessage *SvcUserMessage) parseAchivementEvent(reader *bitreader.Reader) { - achivementEvent := struct{ AchivementID int32 }{ - AchivementID: reader.TryReadSInt32(), - } - svcUserMessage.Data = achivementEvent - writer.TempAppendLine("\t\t\tPortal Count: %v", achivementEvent.AchivementID) -} - -func (svcUserMessage *SvcUserMessage) parseMpMapCompleted(reader *bitreader.Reader) { - mpMapCompleted := struct { - Branch uint8 - Level uint8 - }{ - Branch: reader.TryReadUInt8(), - Level: reader.TryReadUInt8(), - } - svcUserMessage.Data = mpMapCompleted - writer.TempAppendLine("\t\t\tBranch: %d", mpMapCompleted.Branch) - writer.TempAppendLine("\t\t\tLevel: %d", mpMapCompleted.Level) -} - -func (svcUserMessage *SvcUserMessage) parseMpMapIncomplete(reader *bitreader.Reader) {} - -func (svcUserMessage *SvcUserMessage) parseMpTauntEarned(reader *bitreader.Reader) { - mpTauntEarned := struct { - TauntName string - AwardSilently bool - }{ - TauntName: reader.TryReadString(), - AwardSilently: reader.TryReadBool(), - } - svcUserMessage.Data = mpTauntEarned - writer.TempAppendLine("\t\t\tTaunt Name: %s", mpTauntEarned.TauntName) - writer.TempAppendLine("\t\t\tAward Silently: %t", mpTauntEarned.AwardSilently) -} - -func (svcUserMessage *SvcUserMessage) parseMpTauntLocked(reader *bitreader.Reader) { - mpTauntLocked := struct{ TauntName string }{ - TauntName: reader.TryReadString(), - } - svcUserMessage.Data = mpTauntLocked - writer.TempAppendLine("\t\t\tTaunt Name: %s", mpTauntLocked.TauntName) -} - -func (svcUserMessage *SvcUserMessage) parsePortalFxSurface(reader *bitreader.Reader) { - type PortalFizzleType int8 - const ( - PortalFizzleSuccess PortalFizzleType = iota // Placed fine (no fizzle) - PortalFizzleCantFit - PortalFizzleOverlappedLinked - PortalFizzleBadVolume - PortalFizzleBadSurface - PortalFizzleKilled - PortalFizzleCleanser - PortalFizzleClose - PortalFizzleNearBlue - PortalFizzleNearRed - PortalFizzleNone - ) - getPortalFizzleType := func(portalFizzleType PortalFizzleType) string { - switch portalFizzleType { - case PortalFizzleSuccess: - return "PortalFizzleSuccess" - case PortalFizzleCantFit: - return "PortalFizzleCantFit" - case PortalFizzleOverlappedLinked: - return "PortalFizzleOverlappedLinked" - case PortalFizzleBadVolume: - return "PortalFizzleBadVolume" - case PortalFizzleBadSurface: - return "PortalFizzleBadSurface" - case PortalFizzleKilled: - return "PortalFizzleKilled" - case PortalFizzleCleanser: - return "PortalFizzleCleanser" - case PortalFizzleClose: - return "PortalFizzleClose" - case PortalFizzleNearBlue: - return "PortalFizzleNearBlue" - case PortalFizzleNearRed: - return "PortalFizzleNearRed" - case PortalFizzleNone: - return "PortalFizzleNone" - default: - return fmt.Sprintf("%d", int(portalFizzleType)) - } - } - portalFxSurface := struct { - PortalEnt uint16 - OwnerEnt uint16 - Team uint8 - PortalNum uint8 - Effect uint8 - Origin []float32 - Angles []float32 - }{ - PortalEnt: reader.TryReadUInt16(), - OwnerEnt: reader.TryReadUInt16(), - Team: reader.TryReadUInt8(), - PortalNum: reader.TryReadUInt8(), - Effect: reader.TryReadUInt8(), - Origin: []float32{}, - Angles: []float32{}, - } - existsX, existsY, existsZ := reader.TryReadBool(), reader.TryReadBool(), reader.TryReadBool() - if existsX { - portalFxSurface.Origin = append(portalFxSurface.Origin, readBitCoord(reader)) - } else { - portalFxSurface.Origin = append(portalFxSurface.Origin, 0) - } - if existsY { - portalFxSurface.Origin = append(portalFxSurface.Origin, readBitCoord(reader)) - } else { - portalFxSurface.Origin = append(portalFxSurface.Origin, 0) - } - if existsZ { - portalFxSurface.Origin = append(portalFxSurface.Origin, readBitCoord(reader)) - } else { - portalFxSurface.Origin = append(portalFxSurface.Origin, 0) - } - existsX, existsY, existsZ = reader.TryReadBool(), reader.TryReadBool(), reader.TryReadBool() - if existsX { - portalFxSurface.Angles = append(portalFxSurface.Angles, readBitCoord(reader)) - } else { - portalFxSurface.Angles = append(portalFxSurface.Angles, 0) - } - if existsY { - portalFxSurface.Angles = append(portalFxSurface.Angles, readBitCoord(reader)) - } else { - portalFxSurface.Angles = append(portalFxSurface.Angles, 0) - } - if existsZ { - portalFxSurface.Angles = append(portalFxSurface.Angles, readBitCoord(reader)) - } else { - portalFxSurface.Angles = append(portalFxSurface.Angles, 0) - } - svcUserMessage.Data = portalFxSurface - _ = getPortalFizzleType(PortalFizzleType(2)) - writer.TempAppendLine("\t\t\tPortal Entity: %d", portalFxSurface.PortalEnt) - writer.TempAppendLine("\t\t\tOwner Entity: %d", portalFxSurface.OwnerEnt) - writer.TempAppendLine("\t\t\tTeam: %d", portalFxSurface.Team) - writer.TempAppendLine("\t\t\tPortal Number: %d", portalFxSurface.PortalNum) - writer.TempAppendLine("\t\t\tEffect: %s", getPortalFizzleType(PortalFizzleType(portalFxSurface.Effect))) - writer.TempAppendLine("\t\t\tOrigin: %v", portalFxSurface.Origin) - writer.TempAppendLine("\t\t\tAngles: %v", portalFxSurface.Angles) -} - func (svcUserMessage *SvcUserMessage) parseScoreboardTempUpdate(reader *bitreader.Reader) { scoreboardTempUpdate := struct { NumPortals int32 @@ -725,232 +35,6 @@ func (svcUserMessage *SvcUserMessage) parseScoreboardTempUpdate(reader *bitreade TimeTaken: reader.TryReadSInt32(), } svcUserMessage.Data = scoreboardTempUpdate - writer.TempAppendLine("\t\t\tPortal Count: %v", scoreboardTempUpdate.NumPortals) - writer.TempAppendLine("\t\t\tCM Ticks: %v", scoreboardTempUpdate.TimeTaken) -} - -type UserMessageType uint8 - -const ( - EUserMessageTypeGeiger UserMessageType = iota // done - EUserMessageTypeTrain // done - EUserMessageTypeHudText // done - EUserMessageTypeSayText // done - EUserMessageTypeSayText2 // done - EUserMessageTypeTextMsg // done - EUserMessageTypeHUDMsg // done - EUserMessageTypeResetHUD // done // called every respawn - EUserMessageTypeGameTitle - EUserMessageTypeItemPickup - EUserMessageTypeShowMenu - EUserMessageTypeShake // done - EUserMessageTypeTilt - EUserMessageTypeFade // done - EUserMessageTypeVGUIMenu // done // Show VGUI menu - EUserMessageTypeRumble // done // Send a rumble to a controller - EUserMessageTypeBattery // done - EUserMessageTypeDamage // done - EUserMessageTypeVoiceMask // done - EUserMessageTypeRequestState - EUserMessageTypeCloseCaption // done // Show a caption (by string id number)(duration in 10th of a second) - EUserMessageTypeCloseCaptionDirect // Show a forced caption (by string id number)(duration in 10th of a second) - EUserMessageTypeHintText // Displays hint text display - EUserMessageTypeKeyHintText // done // Displays hint text display - EUserMessageTypeSquadMemberDied - EUserMessageTypeAmmoDenied - EUserMessageTypeCreditsMsg - EUserMessageTypeLogoTimeMsg // done - EUserMessageTypeAchievementEvent // done - EUserMessageTypeUpdateJalopyRadar - EUserMessageTypeCurrentTimescale // Send one float for the new timescale - EUserMessageTypeDesiredTimescale // Send timescale and some blending vars - EUserMessageTypeCreditsPortalMsg // portal 1 end - EUserMessageTypeInventoryFlash // portal 2 start - EUserMessageTypeIndicatorFlash - EUserMessageTypeControlHelperAnimate - EUserMessageTypeTakePhoto - EUserMessageTypeFlash - EUserMessageTypeHudPingIndicator - EUserMessageTypeOpenRadialMenu - EUserMessageTypeAddLocator - EUserMessageTypeMPMapCompleted // done - EUserMessageTypeMPMapIncomplete // done - EUserMessageTypeMPMapCompletedData - EUserMessageTypeMPTauntEarned // done - EUserMessageTypeMPTauntUnlocked - EUserMessageTypeMPTauntLocked // done - EUserMessageTypeMPAllTauntsLocked - EUserMessageTypePortalFX_Surface // done - EUserMessageTypePaintWorld - EUserMessageTypePaintEntity - EUserMessageTypeChangePaintColor - EUserMessageTypePaintBombExplode - EUserMessageTypeRemoveAllPaint - EUserMessageTypePaintAllSurfaces - EUserMessageTypeRemovePaint - EUserMessageTypeStartSurvey - EUserMessageTypeApplyHitBoxDamageEffect - EUserMessageTypeSetMixLayerTriggerFactor - EUserMessageTypeTransitionFade - EUserMessageTypeScoreboardTempUpdate // done - EUserMessageTypeChallengeModCheatSession - EUserMessageTypeChallengeModCloseAllUI -) - -func (userMessageType UserMessageType) String() string { - switch userMessageType { - case EUserMessageTypeGeiger: - return "Geiger" - case EUserMessageTypeTrain: - return "Train" - case EUserMessageTypeHudText: - return "HudText" - case EUserMessageTypeSayText: - return "SayText" - case EUserMessageTypeSayText2: - return "SayText2" - case EUserMessageTypeTextMsg: - return "TextMsg" - case EUserMessageTypeHUDMsg: - return "HUDMsg" - case EUserMessageTypeResetHUD: - return "ResetHUD" - case EUserMessageTypeGameTitle: - return "GameTitle" - case EUserMessageTypeItemPickup: - return "ItemPickup" - case EUserMessageTypeShowMenu: - return "ShowMenu" - case EUserMessageTypeShake: - return "Shake" - case EUserMessageTypeTilt: - return "Tilt" - case EUserMessageTypeFade: - return "Fade" - case EUserMessageTypeVGUIMenu: - return "VGUIMenu" - case EUserMessageTypeRumble: - return "Rumble" - case EUserMessageTypeBattery: - return "Battery" - case EUserMessageTypeDamage: - return "Damage" - case EUserMessageTypeVoiceMask: - return "VoiceMask" - case EUserMessageTypeRequestState: - return "RequestState" - case EUserMessageTypeCloseCaption: - return "CloseCaption" - case EUserMessageTypeCloseCaptionDirect: - return "CloseCaptionDirect" - case EUserMessageTypeHintText: - return "HintText" - case EUserMessageTypeKeyHintText: - return "KeyHintText" - case EUserMessageTypeSquadMemberDied: - return "SquadMemberDied" - case EUserMessageTypeAmmoDenied: - return "AmmoDenied" - case EUserMessageTypeCreditsMsg: - return "CreditsMsg" - case EUserMessageTypeLogoTimeMsg: - return "LogoTimeMsg" - case EUserMessageTypeAchievementEvent: - return "AchievementEvent" - case EUserMessageTypeUpdateJalopyRadar: - return "UpdateJalopyRadar" - case EUserMessageTypeCurrentTimescale: - return "CurrentTimescale" - case EUserMessageTypeDesiredTimescale: - return "DesiredTimescale" - case EUserMessageTypeCreditsPortalMsg: - return "CreditsPortalMsg" - case EUserMessageTypeInventoryFlash: - return "InventoryFlash" - case EUserMessageTypeIndicatorFlash: - return "IndicatorFlash" - case EUserMessageTypeControlHelperAnimate: - return "ControlHelperAnimate" - case EUserMessageTypeTakePhoto: - return "TakePhoto" - case EUserMessageTypeFlash: - return "Flash" - case EUserMessageTypeHudPingIndicator: - return "HudPingIndicator" - case EUserMessageTypeOpenRadialMenu: - return "OpenRadialMenu" - case EUserMessageTypeAddLocator: - return "AddLocator" - case EUserMessageTypeMPMapCompleted: - return "MPMapCompleted" - case EUserMessageTypeMPMapIncomplete: - return "MPMapIncomplete" - case EUserMessageTypeMPMapCompletedData: - return "MPMapCompletedData" - case EUserMessageTypeMPTauntEarned: - return "MPTauntEarned" - case EUserMessageTypeMPTauntUnlocked: - return "MPTauntUnlocked" - case EUserMessageTypeMPTauntLocked: - return "MPTauntLocked" - case EUserMessageTypeMPAllTauntsLocked: - return "MPAllTauntsLocked" - case EUserMessageTypePortalFX_Surface: - return "PortalFX_Surface" - case EUserMessageTypePaintWorld: - return "PaintWorld" - case EUserMessageTypePaintEntity: - return "PaintEntity" - case EUserMessageTypeChangePaintColor: - return "ChangePaintColor" - case EUserMessageTypePaintBombExplode: - return "PaintBombExplode" - case EUserMessageTypeRemoveAllPaint: - return "RemoveAllPaint" - case EUserMessageTypePaintAllSurfaces: - return "PaintAllSurfaces" - case EUserMessageTypeRemovePaint: - return "RemovePaint" - case EUserMessageTypeStartSurvey: - return "StartSurvey" - case EUserMessageTypeApplyHitBoxDamageEffect: - return "ApplyHitBoxDamageEffect" - case EUserMessageTypeSetMixLayerTriggerFactor: - return "SetMixLayerTriggerFactor" - case EUserMessageTypeTransitionFade: - return "TransitionFade" - case EUserMessageTypeScoreboardTempUpdate: - return "ScoreboardTempUpdate" - case EUserMessageTypeChallengeModCheatSession: - return "ChallengeModCheatSession" - case EUserMessageTypeChallengeModCloseAllUI: - return "ChallengeModCloseAllUI" - default: - return "Unknown" - } -} - -func readBitCoord(reader *bitreader.Reader) float32 { - const ( - CoordIntBits uint64 = 14 - CoordFracBits uint64 = 5 - CoordDenom = 1 << CoordFracBits - CoordRes = 1.0 / CoordDenom - ) - val := float32(0) - hasInt := reader.TryReadBool() - hasFrac := reader.TryReadBool() - if hasInt || hasFrac { - sign := reader.TryReadBool() - if hasInt { - val += float32(reader.TryReadBits(CoordIntBits) + 1) - } - if hasFrac { - val += float32(reader.TryReadBits(CoordFracBits)) * CoordRes - } - if sign { - val = -val - } - } - return val + fmt.Printf("Portal Count: %d\n", scoreboardTempUpdate.NumPortals) + fmt.Printf("CM Ticks: %d\n", scoreboardTempUpdate.TimeTaken) } diff --git a/pkg/messages/types/svcVoiceData.go b/pkg/messages/types/svcVoiceData.go index c3e08ee..6ac8050 100644 --- a/pkg/messages/types/svcVoiceData.go +++ b/pkg/messages/types/svcVoiceData.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcVoiceData struct { @@ -21,8 +20,6 @@ func ParseSvcVoiceData(reader *bitreader.Reader) SvcVoiceData { svcVoiceData.Proximity = true } svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length)) - writer.TempAppendLine("\t\tFrom Client: %d", svcVoiceData.FromClient) - writer.TempAppendLine("\t\tProximity: %t", svcVoiceData.Proximity) - writer.TempAppendLine("\t\tData: %v", svcVoiceData.Data) + return svcVoiceData } diff --git a/pkg/messages/types/svcVoiceInit.go b/pkg/messages/types/svcVoiceInit.go index 03e0e25..eb6093f 100644 --- a/pkg/messages/types/svcVoiceInit.go +++ b/pkg/messages/types/svcVoiceInit.go @@ -2,7 +2,6 @@ package messages import ( "github.com/pektezol/bitreader" - "github.com/pektezol/demoparser/pkg/writer" ) type SvcVoiceInit struct { @@ -25,8 +24,6 @@ func ParseSvcVoiceInit(reader *bitreader.Reader) SvcVoiceInit { svcVoiceInit.SampleRate = 11025 } } - writer.TempAppendLine("\t\tCodec: %s", svcVoiceInit.Codec) - writer.TempAppendLine("\t\tQuality: %d", svcVoiceInit.Quality) - writer.TempAppendLine("\t\tSample Rate: %d", svcVoiceInit.SampleRate) + return svcVoiceInit } -- cgit v1.2.3