After doing a replace of all OR and AND to | and & it worked.
by Koriolis
at http://koriolis.free.fr/forum/viewtopic.php?t=53
Koriolis I have to say I'm Impressed! The code is public right?
I can't say I can follow the code, but I'm quite sure I can use it =)
I do have one problem with it..
Let's say someone want to send their X,Y,Dir in a package then I'll put them all into string form and then add them together PlayerData$ =IntToVarLenStr$(X)+IntToVarLenStr$(Y)+IntToVarLenStr$(Dir). Now the receiveing player have to know the size of each X,Y,Dir somehow to be able to decode it into a usable int form.
Example: if I'm at position 12,123 Dir 90 then I could send my fullupdate as a 3byte package! Impressive! But how would the receiveing player know that my X,Y,Dir are 1byte each? It seems like I have to send something like this:
PlayerData$ = IntToVarLenStr$(X)+"/"+IntToVarLenStr$(Y)+"/"+IntToVarLenStr$(Dir)
So that I can sort the values from eachother. Am I right? Do I still win data this way?
Because it is a very very convinient way to do it, but it adds uneccecery data. Perhaps some bytes +/- doesn't matter in the end.. I don't know.
Great job with the functions anyway!
by Koriolis
at http://koriolis.free.fr/forum/viewtopic.php?t=53
Function test(n%) s$ = IntToVarLenStr(n) n2% = VarLenStrToInt(s) DebugLog n + " -> " + n2 + " [" + Len(s) + " byte(s)]" End Function test(0) test(-1) test(1) test(63) test(64) test(-64) test(-65) test(8191) test(8192) test(-8192) test(-8193) test(1048575) test(1048576) test(-1048576) test(-1048577) DebugLog ("--- random ---") For i = 1 To 15 n% = Rand(0,$10000) | (Rand(0,$10000) Shl 16) test(n) Next Function IntToVarLenStr$(n%) If n < 0 n = ((~n) Shl 1) | 1 Else n = n Shl 1 EndIf If Not (n & $ffffff80) Return Chr(n | $80) ElseIf Not (n & $ffffc000) Return Chr(n Shr 7) + Chr((n & $7f) | $80) ElseIf Not (n & $ffe00000) Return Chr(n Shr 14) + Chr((n Shr 7) & $7f) + Chr((n & $7f) | $80) ElseIf Not (n & $f0000000) Return Chr(n Shr 21) + Chr((n Shr 14) & $7f) + Chr((n Shr 7) & $7f) + Chr((n & $7f) | $80) Else Return Chr(n Shr 28) + Chr((n Shr 21) & $7f) + Chr((n Shr 14) & $7f) + Chr((n Shr 7) & $7f) + Chr((n & $7f) | $80) EndIf End Function Function VarLenStrToInt%(s$) Local n% = 0 Local b% = Asc(s) s = Right(s, Len(s)-1) If b < $80 n = b b = Asc(s) s = Right(s, Len(s)-1) If b < $80 n = (n Shl 7) | b b = Asc(s) s = Right(s, Len(s)-1) If b < $80 n = (n Shl 7) | b b = Asc(s) s = Right(s, Len(s)-1) If b < $80 n = (n Shl 7) | b n = (n Shl 7) | (Asc(s) & $7f) Else n = (n Shl 7) | (b & $7f) EndIf Else n = (n Shl 7) | (b & $7f) EndIf Else n = (n Shl 7) | (b & $7f) EndIf Else n = b & $7f EndIf If (n & 1) Return ~(n Shr 1) Else Return n Shr 1 EndIf End Function
Koriolis I have to say I'm Impressed! The code is public right?
I can't say I can follow the code, but I'm quite sure I can use it =)
I do have one problem with it..
Let's say someone want to send their X,Y,Dir in a package then I'll put them all into string form and then add them together PlayerData$ =IntToVarLenStr$(X)+IntToVarLenStr$(Y)+IntToVarLenStr$(Dir). Now the receiveing player have to know the size of each X,Y,Dir somehow to be able to decode it into a usable int form.
Example: if I'm at position 12,123 Dir 90 then I could send my fullupdate as a 3byte package! Impressive! But how would the receiveing player know that my X,Y,Dir are 1byte each? It seems like I have to send something like this:
PlayerData$ = IntToVarLenStr$(X)+"/"+IntToVarLenStr$(Y)+"/"+IntToVarLenStr$(Dir)
So that I can sort the values from eachother. Am I right? Do I still win data this way?
Because it is a very very convinient way to do it, but it adds uneccecery data. Perhaps some bytes +/- doesn't matter in the end.. I don't know.
Great job with the functions anyway!