@@ -169,7 +169,7 @@ class DetailsReader_Beta(DetailsReader_Base):
169169
170170class MessageEventsReader_Base (Reader ):
171171 POFFSET = - 1
172-
172+ TARGET_BITS = 3
173173 def __call__ (self , data , replay ):
174174 # The replay.message.events file is a single long list containing three
175175 # different element types (minimap pings, player messages, and some sort
@@ -187,7 +187,7 @@ def __call__(self, data, replay):
187187 t = data .read_bits (3 )
188188 flags = data .read_byte ()
189189
190- if flags == 0x83 :
190+ if flags in ( 0x83 , 0x89 ) :
191191 # We need some tests for this
192192 x = data .read_int (LITTLE_ENDIAN )
193193 y = data .read_int (LITTLE_ENDIAN )
@@ -198,16 +198,19 @@ def __call__(self, data, replay):
198198 packets .append (PacketEvent (frame , pid , flags , info ))
199199
200200 elif flags & 0x80 == 0 :
201- target = flags & 0x07
202- extension = (flags & 0x18 ) << 3
201+ lo_mask = 2 ** self .TARGET_BITS - 1
202+ hi_mask = 0xFF ^ lo_mask
203+ target = flags & lo_mask
204+ extension = (flags & hi_mask ) << 3
203205 length = data .read_byte ()
204206 text = data .read_bytes (length + extension )
205- messages .append (ChatEvent (frame , pid , flags , target , text ))
207+ messages .append (ChatEvent (frame , pid , flags , target , text , ( flags , lo_mask , hi_mask , length , extension ) ))
206208
207209 return AttributeDict (pings = pings , messages = messages , packets = packets )
208210
209211class MessageEventsReader_Beta_24247 (MessageEventsReader_Base ):
210212 POFFSET = 0
213+ TARGET_BITS = 4
211214
212215class GameEventsReader_Base (object ):
213216 PLAYER_JOIN_FLAGS = 4
0 commit comments