aboutsummaryrefslogtreecommitdiff
path: root/pkg/messages
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-11-06 18:37:11 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-11-06 18:37:11 +0300
commit2f8c92f261586f68a976efce0cfcdd0401f402e0 (patch)
tree33189cc48987789dff4e7fba0a74d2b2326f0a04 /pkg/messages
parentconvert cm ticks correctly (diff)
downloadsdp.go-2f8c92f261586f68a976efce0cfcdd0401f402e0.tar.gz
sdp.go-2f8c92f261586f68a976efce0cfcdd0401f402e0.tar.bz2
sdp.go-2f8c92f261586f68a976efce0cfcdd0401f402e0.zip
dont try to understand it, feel itlp-parser
Diffstat (limited to 'pkg/messages')
-rw-r--r--pkg/messages/messages.go83
-rw-r--r--pkg/messages/types/netDisconnect.go17
-rw-r--r--pkg/messages/types/netFile.go44
-rw-r--r--pkg/messages/types/netNop.go12
-rw-r--r--pkg/messages/types/netSetConVar.go33
-rw-r--r--pkg/messages/types/netSignOnState.go73
-rw-r--r--pkg/messages/types/netSplitScreenUser.go17
-rw-r--r--pkg/messages/types/netStringCmd.go17
-rw-r--r--pkg/messages/types/netTick.go21
-rw-r--r--pkg/messages/types/svcBspDecal.go62
-rw-r--r--pkg/messages/types/svcClassInfo.go41
-rw-r--r--pkg/messages/types/svcCmdKeyValues.go19
-rw-r--r--pkg/messages/types/svcCreateStringTable.go37
-rw-r--r--pkg/messages/types/svcCrosshairAngle.go27
-rw-r--r--pkg/messages/types/svcEntityMessage.go23
-rw-r--r--pkg/messages/types/svcFixAngle.go29
-rw-r--r--pkg/messages/types/svcGameEvent.go19
-rw-r--r--pkg/messages/types/svcGameEventList.go24
-rw-r--r--pkg/messages/types/svcGetCvarValue.go19
-rw-r--r--pkg/messages/types/svcMenu.go21
-rw-r--r--pkg/messages/types/svcPacketEntities.go35
-rw-r--r--pkg/messages/types/svcPaintmapData.go19
-rw-r--r--pkg/messages/types/svcPrefetch.go17
-rw-r--r--pkg/messages/types/svcPrint.go18
-rw-r--r--pkg/messages/types/svcSendTable.go21
-rw-r--r--pkg/messages/types/svcServerInfo.go47
-rw-r--r--pkg/messages/types/svcSetPause.go17
-rw-r--r--pkg/messages/types/svcSetView.go17
-rw-r--r--pkg/messages/types/svcSounds.go28
-rw-r--r--pkg/messages/types/svcSplitScreen.go21
-rw-r--r--pkg/messages/types/svcTempEntities.go21
-rw-r--r--pkg/messages/types/svcUpdateStringTable.go25
-rw-r--r--pkg/messages/types/svcUserMessage.go41
-rw-r--r--pkg/messages/types/svcVoiceData.go25
-rw-r--r--pkg/messages/types/svcVoiceInit.go29
35 files changed, 0 insertions, 1019 deletions
diff --git a/pkg/messages/messages.go b/pkg/messages/messages.go
deleted file mode 100644
index 9b2422f..0000000
--- a/pkg/messages/messages.go
+++ /dev/null
@@ -1,83 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5 messages "github.com/pektezol/demoparser/pkg/messages/types"
6)
7
8func ParseMessages(messageType uint64, reader *bitreader.Reader) any {
9 var messageData any
10 switch messageType {
11 case 0:
12 messageData = messages.ParseNetNop(reader)
13 case 1:
14 messageData = messages.ParseNetDisconnect(reader)
15 case 2:
16 messageData = messages.ParseNetFile(reader)
17 case 3:
18 messageData = messages.ParseNetSplitScreenUser(reader)
19 case 4:
20 messageData = messages.ParseNetTick(reader)
21 case 5:
22 messageData = messages.ParseNetStringCmd(reader)
23 case 6:
24 messageData = messages.ParseNetSetConVar(reader)
25 case 7:
26 messageData = messages.ParseNetSignOnState(reader)
27 case 8:
28 messageData = messages.ParseSvcServerInfo(reader)
29 case 9:
30 messageData = messages.ParseSvcSendTable(reader)
31 case 10:
32 messageData = messages.ParseSvcClassInfo(reader)
33 case 11:
34 messageData = messages.ParseSvcSetPause(reader)
35 case 12:
36 messageData = messages.ParseSvcCreateStringTable(reader) // TODO:
37 case 13:
38 messageData = messages.ParseSvcUpdateStringTable(reader) // TODO:
39 case 14:
40 messageData = messages.ParseSvcVoiceInit(reader)
41 case 15:
42 messageData = messages.ParseSvcVoiceData(reader)
43 case 16:
44 messageData = messages.ParseSvcPrint(reader)
45 case 17:
46 messageData = messages.ParseSvcSounds(reader) // TODO:
47 case 18:
48 messageData = messages.ParseSvcSetView(reader)
49 case 19:
50 messageData = messages.ParseSvcFixAngle(reader)
51 case 20:
52 messageData = messages.ParseSvcCrosshairAngle(reader)
53 case 21:
54 messageData = messages.ParseSvcBspDecal(reader) // untested
55 case 22:
56 messageData = messages.ParseSvcSplitScreen(reader) // skipped
57 case 23:
58 messageData = messages.ParseSvcUserMessage(reader) // TODO:
59 case 24:
60 messageData = messages.ParseSvcEntityMessage(reader) // skipped
61 case 25:
62 messageData = messages.ParseSvcGameEvent(reader) // TODO:
63 case 26:
64 messageData = messages.ParseSvcPacketEntities(reader) // TODO:
65 case 27:
66 messageData = messages.ParseSvcTempEntities(reader) // skipped
67 case 28:
68 messageData = messages.ParseSvcPrefetch(reader)
69 case 29:
70 messageData = messages.ParseSvcMenu(reader) // skipped
71 case 30:
72 messageData = messages.ParseSvcGameEventList(reader) // TODO:
73 case 31:
74 messageData = messages.ParseSvcGetCvarValue(reader)
75 case 32:
76 messageData = messages.ParseSvcCmdKeyValues(reader)
77 case 33:
78 messageData = messages.ParseSvcPaintmapData(reader)
79 default:
80 return nil
81 }
82 return messageData
83}
diff --git a/pkg/messages/types/netDisconnect.go b/pkg/messages/types/netDisconnect.go
deleted file mode 100644
index 10a8b05..0000000
--- a/pkg/messages/types/netDisconnect.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type NetDisconnect struct {
8 Text string
9}
10
11func ParseNetDisconnect(reader *bitreader.Reader) NetDisconnect {
12 netDisconnect := NetDisconnect{
13 Text: reader.TryReadString(),
14 }
15
16 return netDisconnect
17}
diff --git a/pkg/messages/types/netFile.go b/pkg/messages/types/netFile.go
deleted file mode 100644
index fc65229..0000000
--- a/pkg/messages/types/netFile.go
+++ /dev/null
@@ -1,44 +0,0 @@
1package messages
2
3import (
4 "fmt"
5
6 "github.com/pektezol/bitreader"
7)
8
9type NetFile struct {
10 TransferId uint32
11 FileName string
12 FileFlags string
13}
14
15type NetFileFlags int
16
17const (
18 ENetFileFlagsNone NetFileFlags = 0
19 ENetFileFlagsFileRequested NetFileFlags = 1
20 ENetFileFlagsUnknown NetFileFlags = 1 << 1
21)
22
23func (netFileFlags NetFileFlags) String() string {
24 switch netFileFlags {
25 case ENetFileFlagsNone:
26 return "None"
27 case ENetFileFlagsFileRequested:
28 return "FileRequested"
29 case ENetFileFlagsUnknown:
30 return "Unknown"
31 default:
32 return fmt.Sprintf("%d", int(netFileFlags))
33 }
34}
35
36func ParseNetFile(reader *bitreader.Reader) NetFile {
37 netFile := NetFile{
38 TransferId: reader.TryReadUInt32(),
39 FileName: reader.TryReadString(),
40 FileFlags: NetFileFlags(reader.TryReadBits(2)).String(),
41 }
42
43 return netFile
44}
diff --git a/pkg/messages/types/netNop.go b/pkg/messages/types/netNop.go
deleted file mode 100644
index 826da6b..0000000
--- a/pkg/messages/types/netNop.go
+++ /dev/null
@@ -1,12 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type NetNop struct{}
8
9func ParseNetNop(reader *bitreader.Reader) NetNop {
10
11 return NetNop{}
12}
diff --git a/pkg/messages/types/netSetConVar.go b/pkg/messages/types/netSetConVar.go
deleted file mode 100644
index 03e9e0d..0000000
--- a/pkg/messages/types/netSetConVar.go
+++ /dev/null
@@ -1,33 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type NetSetConVar struct {
8 Length uint8
9 ConVars []conVar
10}
11
12type conVar struct {
13 Name string
14 Value string
15}
16
17func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar {
18 length := reader.TryReadUInt8()
19 convars := []conVar{}
20
21 for count := 0; count < int(length); count++ {
22 convar := conVar{
23 Name: reader.TryReadString(),
24 Value: reader.TryReadString(),
25 }
26
27 convars = append(convars, convar)
28 }
29 return NetSetConVar{
30 Length: length,
31 ConVars: convars,
32 }
33}
diff --git a/pkg/messages/types/netSignOnState.go b/pkg/messages/types/netSignOnState.go
deleted file mode 100644
index 65e17a4..0000000
--- a/pkg/messages/types/netSignOnState.go
+++ /dev/null
@@ -1,73 +0,0 @@
1package messages
2
3import (
4 "fmt"
5
6 "github.com/pektezol/bitreader"
7)
8
9type NetSignOnState struct {
10 SignOnState string
11 SpawnCount int32
12 NumServerPlayers uint32
13 IdsLength uint32
14 PlayersNetworksIds []byte
15 MapNameLength uint32
16 MapName string
17}
18
19type SignOnState int
20
21const (
22 ESignOnStateNone SignOnState = iota // no state yet, about to connect
23 ESignOnStateChallenge // client challenging server, all OOB packets
24 ESignOnStateConnected // client is connected to server, netchans ready
25 ESignOnStateNew // just got server info and string tables
26 ESignOnStatePreSpawn // received signon buggers
27 ESignOnStateSpawn // ready to receive entity packets
28 ESignOnStateFull // we are fully connected, first non-delta packet received
29 ESignOnStateChangeLevel // server is changing level, please wait
30)
31
32func (signOnState SignOnState) String() string {
33 switch signOnState {
34 case ESignOnStateNone:
35 return "None"
36 case ESignOnStateChallenge:
37 return "Challenge"
38 case ESignOnStateConnected:
39 return "Connected"
40 case ESignOnStateNew:
41 return "New"
42 case ESignOnStatePreSpawn:
43 return "PreSpawn"
44 case ESignOnStateSpawn:
45 return "Spawn"
46 case ESignOnStateFull:
47 return "Full"
48 case ESignOnStateChangeLevel:
49 return "ChangeLevel"
50 default:
51 return fmt.Sprintf("%d", int(signOnState))
52 }
53}
54
55func ParseNetSignOnState(reader *bitreader.Reader) NetSignOnState {
56 netSignOnState := NetSignOnState{
57 SignOnState: SignOnState(reader.TryReadUInt8()).String(),
58 SpawnCount: reader.TryReadSInt32(),
59 NumServerPlayers: reader.TryReadUInt32(),
60 IdsLength: reader.TryReadUInt32(),
61 }
62
63 if netSignOnState.IdsLength > 0 {
64 netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength))
65
66 }
67 netSignOnState.MapNameLength = reader.TryReadUInt32()
68 if netSignOnState.MapNameLength > 0 {
69 netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength))
70
71 }
72 return netSignOnState
73}
diff --git a/pkg/messages/types/netSplitScreenUser.go b/pkg/messages/types/netSplitScreenUser.go
deleted file mode 100644
index 8b14f63..0000000
--- a/pkg/messages/types/netSplitScreenUser.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type NetSplitScreenUser struct {
8 Slot bool
9}
10
11func ParseNetSplitScreenUser(reader *bitreader.Reader) NetSplitScreenUser {
12 netSplitScreenUser := NetSplitScreenUser{
13 Slot: reader.TryReadBool(),
14 }
15
16 return netSplitScreenUser
17}
diff --git a/pkg/messages/types/netStringCmd.go b/pkg/messages/types/netStringCmd.go
deleted file mode 100644
index 2f7e830..0000000
--- a/pkg/messages/types/netStringCmd.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type NetStringCmd struct {
8 Command string
9}
10
11func ParseNetStringCmd(reader *bitreader.Reader) NetStringCmd {
12 netStringCmd := NetStringCmd{
13 Command: reader.TryReadString(),
14 }
15
16 return netStringCmd
17}
diff --git a/pkg/messages/types/netTick.go b/pkg/messages/types/netTick.go
deleted file mode 100644
index 49e997e..0000000
--- a/pkg/messages/types/netTick.go
+++ /dev/null
@@ -1,21 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type NetTick struct {
8 Tick uint32
9 HostFrameTime float32
10 HostFrameTimeStdDeviation float32
11}
12
13func ParseNetTick(reader *bitreader.Reader) NetTick {
14 netTick := NetTick{
15 Tick: reader.TryReadUInt32(),
16 HostFrameTime: float32(reader.TryReadUInt16()) / 1e5,
17 HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5,
18 }
19
20 return netTick
21}
diff --git a/pkg/messages/types/svcBspDecal.go b/pkg/messages/types/svcBspDecal.go
deleted file mode 100644
index 6bf96a3..0000000
--- a/pkg/messages/types/svcBspDecal.go
+++ /dev/null
@@ -1,62 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcBspDecal struct {
8 Pos []vectorCoord
9 DecalTextureIndex int16
10 EntityIndex uint16
11 ModelIndex uint16
12 LowPriority bool
13}
14
15type vectorCoord struct {
16 Value float32
17 Valid bool
18}
19
20func ParseSvcBspDecal(reader *bitreader.Reader) SvcBspDecal {
21 svcBspDecal := SvcBspDecal{
22 Pos: readVectorCoords(reader),
23 DecalTextureIndex: int16(reader.TryReadBits(9)),
24 }
25 if reader.TryReadBool() {
26 svcBspDecal.EntityIndex = uint16(reader.TryReadBits(11))
27 svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11))
28 }
29 svcBspDecal.LowPriority = reader.TryReadBool()
30
31 return svcBspDecal
32}
33
34func readVectorCoords(reader *bitreader.Reader) []vectorCoord {
35 const COORD_INTEGER_BITS uint8 = 14
36 const COORD_FRACTIONAL_BITS uint8 = 5
37 const COORD_DENOMINATOR uint8 = 1 << COORD_FRACTIONAL_BITS
38 const COORD_RESOLUTION float32 = 1.0 / float32(COORD_DENOMINATOR)
39 readVectorCoord := func() float32 {
40 value := float32(0)
41 integer := reader.TryReadBits(1)
42 fraction := reader.TryReadBits(1)
43 if integer != 0 || fraction != 0 {
44 sign := reader.TryReadBits(1)
45 if integer != 0 {
46 integer = reader.TryReadBits(uint64(COORD_INTEGER_BITS)) + 1
47 }
48 if fraction != 0 {
49 fraction = reader.TryReadBits(uint64(COORD_FRACTIONAL_BITS))
50 }
51 value = float32(integer) + float32(fraction)*COORD_RESOLUTION
52 if sign != 0 {
53 value = -value
54 }
55 }
56 return value
57 }
58 x := reader.TryReadBits(1)
59 y := reader.TryReadBits(1)
60 z := reader.TryReadBits(1)
61 return []vectorCoord{{Value: readVectorCoord(), Valid: x != 0}, {Value: readVectorCoord(), Valid: y != 0}, {Value: readVectorCoord(), Valid: z != 0}}
62}
diff --git a/pkg/messages/types/svcClassInfo.go b/pkg/messages/types/svcClassInfo.go
deleted file mode 100644
index a20bfa3..0000000
--- a/pkg/messages/types/svcClassInfo.go
+++ /dev/null
@@ -1,41 +0,0 @@
1package messages
2
3import (
4 "math"
5
6 "github.com/pektezol/bitreader"
7)
8
9type SvcClassInfo struct {
10 ClassCount uint16
11 CreateOnClient bool
12 ServerClasses []serverClass
13}
14
15type serverClass struct {
16 ClassId int16
17 ClassName string
18 DataTableName string
19}
20
21func ParseSvcClassInfo(reader *bitreader.Reader) SvcClassInfo {
22 svcClassInfo := SvcClassInfo{
23 ClassCount: reader.TryReadUInt16(),
24 CreateOnClient: reader.TryReadBool(),
25 }
26 classes := []serverClass{}
27
28 if !svcClassInfo.CreateOnClient {
29
30 for count := 0; count < int(svcClassInfo.ClassCount); count++ {
31 classes = append(classes, serverClass{
32 ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))),
33 ClassName: reader.TryReadString(),
34 DataTableName: reader.TryReadString(),
35 })
36
37 }
38 }
39 svcClassInfo.ServerClasses = classes
40 return svcClassInfo
41}
diff --git a/pkg/messages/types/svcCmdKeyValues.go b/pkg/messages/types/svcCmdKeyValues.go
deleted file mode 100644
index 61d6290..0000000
--- a/pkg/messages/types/svcCmdKeyValues.go
+++ /dev/null
@@ -1,19 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcCmdKeyValues struct {
8 Length uint32
9 Data []byte
10}
11
12func ParseSvcCmdKeyValues(reader *bitreader.Reader) SvcCmdKeyValues {
13 svcCmdKeyValues := SvcCmdKeyValues{
14 Length: reader.TryReadUInt32(),
15 }
16 svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length))
17
18 return svcCmdKeyValues
19}
diff --git a/pkg/messages/types/svcCreateStringTable.go b/pkg/messages/types/svcCreateStringTable.go
deleted file mode 100644
index 8d36fcf..0000000
--- a/pkg/messages/types/svcCreateStringTable.go
+++ /dev/null
@@ -1,37 +0,0 @@
1package messages
2
3import (
4 "math"
5
6 "github.com/pektezol/bitreader"
7)
8
9type SvcCreateStringTable struct {
10 Name string
11 MaxEntries int16
12 NumEntries int8
13 Length int32
14 UserDataFixedSize bool
15 UserDataSize int16
16 UserDataSizeBits int8
17 Flags int8
18 StringData int
19}
20
21func ParseSvcCreateStringTable(reader *bitreader.Reader) SvcCreateStringTable {
22 svcCreateStringTable := SvcCreateStringTable{
23 Name: reader.TryReadString(),
24 MaxEntries: reader.TryReadSInt16(),
25 }
26 svcCreateStringTable.NumEntries = int8(reader.TryReadBits(uint64(math.Log2(float64(svcCreateStringTable.MaxEntries))) + 1))
27 svcCreateStringTable.Length = int32(reader.TryReadBits(20))
28 svcCreateStringTable.UserDataFixedSize = reader.TryReadBool()
29 if svcCreateStringTable.UserDataFixedSize {
30 svcCreateStringTable.UserDataSize = int16(reader.TryReadBits(12))
31 svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4))
32 }
33 svcCreateStringTable.Flags = int8(reader.TryReadBits(2))
34
35 reader.SkipBits(uint64(svcCreateStringTable.Length)) // TODO: StringTable parsing
36 return svcCreateStringTable
37}
diff --git a/pkg/messages/types/svcCrosshairAngle.go b/pkg/messages/types/svcCrosshairAngle.go
deleted file mode 100644
index f689876..0000000
--- a/pkg/messages/types/svcCrosshairAngle.go
+++ /dev/null
@@ -1,27 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcCrosshairAngle struct {
8 Angle crosshairAngles
9}
10
11type crosshairAngles struct {
12 X float32
13 Y float32
14 Z float32
15}
16
17func ParseSvcCrosshairAngle(reader *bitreader.Reader) SvcCrosshairAngle {
18 svcCrosshairAngle := SvcCrosshairAngle{
19 Angle: crosshairAngles{
20 X: float32(reader.TryReadBits(16)),
21 Y: float32(reader.TryReadBits(16)),
22 Z: float32(reader.TryReadBits(16)),
23 },
24 }
25
26 return svcCrosshairAngle
27}
diff --git a/pkg/messages/types/svcEntityMessage.go b/pkg/messages/types/svcEntityMessage.go
deleted file mode 100644
index c4676ec..0000000
--- a/pkg/messages/types/svcEntityMessage.go
+++ /dev/null
@@ -1,23 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcEntityMessage struct {
8 EntityIndex uint16
9 ClassId uint16
10 Length uint16
11 Data []byte
12}
13
14func ParseSvcEntityMessage(reader *bitreader.Reader) SvcEntityMessage {
15 svcEntityMessage := SvcEntityMessage{
16 EntityIndex: uint16(reader.TryReadBits(11)),
17 ClassId: uint16(reader.TryReadBits(9)),
18 Length: uint16(reader.TryReadBits(11)),
19 }
20 svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length))
21
22 return svcEntityMessage
23}
diff --git a/pkg/messages/types/svcFixAngle.go b/pkg/messages/types/svcFixAngle.go
deleted file mode 100644
index f00c239..0000000
--- a/pkg/messages/types/svcFixAngle.go
+++ /dev/null
@@ -1,29 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcFixAngle struct {
8 Relative bool
9 Angle fixAngles
10}
11
12type fixAngles struct {
13 X float32
14 Y float32
15 Z float32
16}
17
18func ParseSvcFixAngle(reader *bitreader.Reader) SvcFixAngle {
19 svcFixAngle := SvcFixAngle{
20 Relative: reader.TryReadBool(),
21 Angle: fixAngles{
22 X: float32(reader.TryReadBits(16)),
23 Y: float32(reader.TryReadBits(16)),
24 Z: float32(reader.TryReadBits(16)),
25 },
26 }
27
28 return svcFixAngle
29}
diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go
deleted file mode 100644
index ec96653..0000000
--- a/pkg/messages/types/svcGameEvent.go
+++ /dev/null
@@ -1,19 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcGameEvent struct {
8 Length uint16
9 Data []byte // TODO: GameEvent[]
10}
11
12func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent {
13 svcGameEvent := SvcGameEvent{
14 Length: uint16(reader.TryReadBits(11)),
15 }
16 svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length))
17
18 return svcGameEvent
19}
diff --git a/pkg/messages/types/svcGameEventList.go b/pkg/messages/types/svcGameEventList.go
deleted file mode 100644
index ca2cf76..0000000
--- a/pkg/messages/types/svcGameEventList.go
+++ /dev/null
@@ -1,24 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcGameEventList struct {
8 Events int16
9 Length int32
10 GameEventDescriptor []gameEventDescriptor
11}
12
13type gameEventDescriptor struct {
14}
15
16func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList {
17 svcGameEventList := SvcGameEventList{
18 Events: int16(reader.TryReadBits(9)),
19 Length: int32(reader.TryReadBits(20)),
20 }
21 reader.TryReadBitsToSlice(uint64(svcGameEventList.Length))
22
23 return svcGameEventList
24}
diff --git a/pkg/messages/types/svcGetCvarValue.go b/pkg/messages/types/svcGetCvarValue.go
deleted file mode 100644
index b0513d0..0000000
--- a/pkg/messages/types/svcGetCvarValue.go
+++ /dev/null
@@ -1,19 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcGetCvarValue struct {
8 Cookie int32
9 CvarName string
10}
11
12func ParseSvcGetCvarValue(reader *bitreader.Reader) SvcGetCvarValue {
13 svcGetCvarValue := SvcGetCvarValue{
14 Cookie: reader.TryReadSInt32(),
15 CvarName: reader.TryReadString(),
16 }
17
18 return svcGetCvarValue
19}
diff --git a/pkg/messages/types/svcMenu.go b/pkg/messages/types/svcMenu.go
deleted file mode 100644
index df14048..0000000
--- a/pkg/messages/types/svcMenu.go
+++ /dev/null
@@ -1,21 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcMenu struct {
8 Type uint16
9 Length uint32
10 Data []byte
11}
12
13func ParseSvcMenu(reader *bitreader.Reader) SvcMenu {
14 svcMenu := SvcMenu{
15 Type: reader.TryReadUInt16(),
16 Length: reader.TryReadUInt32(),
17 }
18 svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length))
19
20 return svcMenu
21}
diff --git a/pkg/messages/types/svcPacketEntities.go b/pkg/messages/types/svcPacketEntities.go
deleted file mode 100644
index 8000a55..0000000
--- a/pkg/messages/types/svcPacketEntities.go
+++ /dev/null
@@ -1,35 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcPacketEntities struct {
8 MaxEntries uint16
9 IsDelta bool
10 DeltaFrom int32
11 BaseLine bool
12 UpdatedEntries uint16
13 Length uint32
14 UpdatedBaseline bool
15 Data []byte
16}
17
18func ParseSvcPacketEntities(reader *bitreader.Reader) SvcPacketEntities {
19 svcPacketEntities := SvcPacketEntities{
20 MaxEntries: uint16(reader.TryReadBits(11)),
21 IsDelta: reader.TryReadBool(),
22 }
23 if svcPacketEntities.IsDelta {
24 svcPacketEntities.DeltaFrom = reader.TryReadSInt32()
25 } else {
26 svcPacketEntities.DeltaFrom = -1
27 }
28 svcPacketEntities.BaseLine = reader.TryReadBool()
29 svcPacketEntities.UpdatedEntries = uint16(reader.TryReadBits(11))
30 svcPacketEntities.Length = uint32(reader.TryReadBits(20))
31 svcPacketEntities.UpdatedBaseline = reader.TryReadBool()
32 svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length))
33
34 return svcPacketEntities
35}
diff --git a/pkg/messages/types/svcPaintmapData.go b/pkg/messages/types/svcPaintmapData.go
deleted file mode 100644
index 49aa433..0000000
--- a/pkg/messages/types/svcPaintmapData.go
+++ /dev/null
@@ -1,19 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcPaintmapData struct {
8 Length uint32
9 Data []byte
10}
11
12func ParseSvcPaintmapData(reader *bitreader.Reader) SvcPaintmapData {
13 svcPaintmapData := SvcPaintmapData{
14 Length: reader.TryReadUInt32(),
15 }
16 svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length))
17
18 return svcPaintmapData
19}
diff --git a/pkg/messages/types/svcPrefetch.go b/pkg/messages/types/svcPrefetch.go
deleted file mode 100644
index a9a88fe..0000000
--- a/pkg/messages/types/svcPrefetch.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcPrefetch struct {
8 SoundIndex int16
9}
10
11func ParseSvcPrefetch(reader *bitreader.Reader) SvcPrefetch {
12 svcPrefetch := SvcPrefetch{
13 SoundIndex: int16(reader.TryReadBits(13)),
14 }
15
16 return svcPrefetch
17}
diff --git a/pkg/messages/types/svcPrint.go b/pkg/messages/types/svcPrint.go
deleted file mode 100644
index 5868ab2..0000000
--- a/pkg/messages/types/svcPrint.go
+++ /dev/null
@@ -1,18 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcPrint struct {
8 Message string
9}
10
11func ParseSvcPrint(reader *bitreader.Reader) SvcPrint {
12 svcPrint := SvcPrint{
13 Message: reader.TryReadString(),
14 }
15 // common psycopath behaviour
16
17 return svcPrint
18}
diff --git a/pkg/messages/types/svcSendTable.go b/pkg/messages/types/svcSendTable.go
deleted file mode 100644
index 4397db0..0000000
--- a/pkg/messages/types/svcSendTable.go
+++ /dev/null
@@ -1,21 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcSendTable struct {
8 NeedsDecoder bool
9 Length uint8
10 Props uint32
11}
12
13func ParseSvcSendTable(reader *bitreader.Reader) SvcSendTable {
14 svcSendTable := SvcSendTable{
15 NeedsDecoder: reader.TryReadBool(),
16 Length: reader.TryReadUInt8(),
17 }
18 svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length)))
19
20 return svcSendTable
21}
diff --git a/pkg/messages/types/svcServerInfo.go b/pkg/messages/types/svcServerInfo.go
deleted file mode 100644
index 507b7ca..0000000
--- a/pkg/messages/types/svcServerInfo.go
+++ /dev/null
@@ -1,47 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcServerInfo struct {
8 Protocol uint16
9 ServerCount uint32
10 IsHltv bool
11 IsDedicated bool
12 ClientCrc int32
13 StringTableCrc uint32
14 MaxServerClasses uint16
15 MapCrc uint32
16 PlayerCount uint8
17 MaxClients uint8
18 TickInterval float32
19 Platform string
20 GameDir string
21 MapName string
22 SkyName string
23 HostName string
24}
25
26func ParseSvcServerInfo(reader *bitreader.Reader) SvcServerInfo {
27 svcServerInfo := SvcServerInfo{
28 Protocol: reader.TryReadUInt16(),
29 ServerCount: reader.TryReadUInt32(),
30 IsHltv: reader.TryReadBool(),
31 IsDedicated: reader.TryReadBool(),
32 ClientCrc: reader.TryReadSInt32(),
33 StringTableCrc: reader.TryReadUInt32(),
34 MaxServerClasses: reader.TryReadUInt16(),
35 MapCrc: reader.TryReadUInt32(),
36 PlayerCount: reader.TryReadUInt8(),
37 MaxClients: reader.TryReadUInt8(),
38 TickInterval: reader.TryReadFloat32(),
39 Platform: reader.TryReadStringLength(1),
40 GameDir: reader.TryReadString(),
41 MapName: reader.TryReadString(),
42 SkyName: reader.TryReadString(),
43 HostName: reader.TryReadString(),
44 }
45
46 return svcServerInfo
47}
diff --git a/pkg/messages/types/svcSetPause.go b/pkg/messages/types/svcSetPause.go
deleted file mode 100644
index 1f6f25f..0000000
--- a/pkg/messages/types/svcSetPause.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcSetPause struct {
8 Paused bool
9}
10
11func ParseSvcSetPause(reader *bitreader.Reader) SvcSetPause {
12 svcSetPause := SvcSetPause{
13 Paused: reader.TryReadBool(),
14 }
15
16 return svcSetPause
17}
diff --git a/pkg/messages/types/svcSetView.go b/pkg/messages/types/svcSetView.go
deleted file mode 100644
index a60d547..0000000
--- a/pkg/messages/types/svcSetView.go
+++ /dev/null
@@ -1,17 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcSetView struct {
8 EntityIndex uint16
9}
10
11func ParseSvcSetView(reader *bitreader.Reader) SvcSetView {
12 svcSetView := SvcSetView{
13 EntityIndex: uint16(reader.TryReadBits(11)),
14 }
15
16 return svcSetView
17}
diff --git a/pkg/messages/types/svcSounds.go b/pkg/messages/types/svcSounds.go
deleted file mode 100644
index 34d99f6..0000000
--- a/pkg/messages/types/svcSounds.go
+++ /dev/null
@@ -1,28 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcSounds struct {
8 ReliableSound bool
9 SoundCount uint8
10 Length uint16
11 Data []byte
12}
13
14func ParseSvcSounds(reader *bitreader.Reader) SvcSounds {
15 svcSounds := SvcSounds{
16 ReliableSound: reader.TryReadBool(),
17 }
18 if svcSounds.ReliableSound {
19 svcSounds.SoundCount = 1
20 svcSounds.Length = uint16(reader.TryReadUInt8())
21 } else {
22 svcSounds.SoundCount = reader.TryReadUInt8()
23 svcSounds.Length = reader.TryReadUInt16()
24 }
25 svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length))
26
27 return svcSounds
28}
diff --git a/pkg/messages/types/svcSplitScreen.go b/pkg/messages/types/svcSplitScreen.go
deleted file mode 100644
index fc6acb4..0000000
--- a/pkg/messages/types/svcSplitScreen.go
+++ /dev/null
@@ -1,21 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcSplitScreen struct {
8 RemoveUser bool
9 Length uint16
10 Data []byte
11}
12
13func ParseSvcSplitScreen(reader *bitreader.Reader) SvcSplitScreen {
14 svcSplitScreen := SvcSplitScreen{
15 RemoveUser: reader.TryReadBool(),
16 Length: uint16(reader.TryReadBits(11)),
17 }
18 svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length))
19
20 return svcSplitScreen
21}
diff --git a/pkg/messages/types/svcTempEntities.go b/pkg/messages/types/svcTempEntities.go
deleted file mode 100644
index 41b1afb..0000000
--- a/pkg/messages/types/svcTempEntities.go
+++ /dev/null
@@ -1,21 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcTempEntities struct {
8 NumEntries uint8
9 Length uint32
10 Data []byte
11}
12
13func ParseSvcTempEntities(reader *bitreader.Reader) SvcTempEntities {
14 svcTempEntities := SvcTempEntities{
15 NumEntries: reader.TryReadUInt8(),
16 Length: uint32(reader.TryReadBits(17)),
17 }
18 svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length))
19
20 return svcTempEntities
21}
diff --git a/pkg/messages/types/svcUpdateStringTable.go b/pkg/messages/types/svcUpdateStringTable.go
deleted file mode 100644
index ca716eb..0000000
--- a/pkg/messages/types/svcUpdateStringTable.go
+++ /dev/null
@@ -1,25 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcUpdateStringTable struct {
8 TableId uint8
9 NumChangedEntries uint16
10 Length int32
11 Data []byte
12}
13
14func ParseSvcUpdateStringTable(reader *bitreader.Reader) SvcUpdateStringTable {
15 svcUpdateStringTable := SvcUpdateStringTable{
16 TableId: uint8(reader.TryReadBits(5)),
17 }
18 if reader.TryReadBool() {
19 svcUpdateStringTable.NumChangedEntries = reader.TryReadUInt16()
20 }
21 svcUpdateStringTable.Length = int32(reader.TryReadBits(20))
22 svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length))
23
24 return svcUpdateStringTable
25}
diff --git a/pkg/messages/types/svcUserMessage.go b/pkg/messages/types/svcUserMessage.go
deleted file mode 100644
index a39e64b..0000000
--- a/pkg/messages/types/svcUserMessage.go
+++ /dev/null
@@ -1,41 +0,0 @@
1package messages
2
3import (
4 "fmt"
5 "math"
6
7 "github.com/pektezol/bitreader"
8)
9
10type SvcUserMessage struct {
11 Type int8
12 Length int16
13 Data any
14}
15
16func ParseSvcUserMessage(reader *bitreader.Reader) SvcUserMessage {
17 svcUserMessage := SvcUserMessage{
18 Type: int8(reader.TryReadBits(8)),
19 Length: int16(reader.TryReadBits(12)),
20 }
21 svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length))
22 userMessageReader := bitreader.NewReaderFromBytes(svcUserMessage.Data.([]byte), true)
23 switch svcUserMessage.Type {
24 case 60:
25 svcUserMessage.parseScoreboardTempUpdate(userMessageReader)
26 }
27 return svcUserMessage
28}
29
30func (svcUserMessage *SvcUserMessage) parseScoreboardTempUpdate(reader *bitreader.Reader) {
31 scoreboardTempUpdate := struct {
32 NumPortals int32
33 TimeTaken int32
34 }{
35 NumPortals: reader.TryReadSInt32(),
36 TimeTaken: reader.TryReadSInt32(),
37 }
38 svcUserMessage.Data = scoreboardTempUpdate
39 fmt.Printf("Portal Count: %d\n", scoreboardTempUpdate.NumPortals)
40 fmt.Printf("CM Ticks: %d\n", int(math.Round(float64((float32(scoreboardTempUpdate.TimeTaken)/100.0)/float32(1.0/60.0)))))
41}
diff --git a/pkg/messages/types/svcVoiceData.go b/pkg/messages/types/svcVoiceData.go
deleted file mode 100644
index 6ac8050..0000000
--- a/pkg/messages/types/svcVoiceData.go
+++ /dev/null
@@ -1,25 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcVoiceData struct {
8 FromClient uint8
9 Proximity bool
10 Length int16
11 Data []byte
12}
13
14func ParseSvcVoiceData(reader *bitreader.Reader) SvcVoiceData {
15 svcVoiceData := SvcVoiceData{
16 FromClient: reader.TryReadUInt8(),
17 }
18 proximity := reader.TryReadUInt8()
19 if proximity != 0 {
20 svcVoiceData.Proximity = true
21 }
22 svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length))
23
24 return svcVoiceData
25}
diff --git a/pkg/messages/types/svcVoiceInit.go b/pkg/messages/types/svcVoiceInit.go
deleted file mode 100644
index eb6093f..0000000
--- a/pkg/messages/types/svcVoiceInit.go
+++ /dev/null
@@ -1,29 +0,0 @@
1package messages
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcVoiceInit struct {
8 Codec string
9 Quality uint8
10 SampleRate int32
11}
12
13func ParseSvcVoiceInit(reader *bitreader.Reader) SvcVoiceInit {
14 svcVoiceInit := SvcVoiceInit{
15 Codec: reader.TryReadString(),
16 Quality: reader.TryReadUInt8(),
17 }
18 if svcVoiceInit.Quality == 0b11111111 {
19 svcVoiceInit.SampleRate = reader.TryReadSInt32()
20 } else {
21 if svcVoiceInit.Codec == "vaudio_celt" {
22 svcVoiceInit.SampleRate = 22050
23 } else {
24 svcVoiceInit.SampleRate = 11025
25 }
26 }
27
28 return svcVoiceInit
29}