Guild icon
DDraceNetwork
Development / developer
Development discussion. Logged to https://ddnet.org/irclogs/ Connected with DDNet's IRC channel, Matrix room and GitHub repositories — IRC: #ddnet on Quakenet | Matrix: #ddnet-developer:matrix.org GitHub: https://github.com/ddnet
Between 2024-06-04 00:00:00Z and 2024-06-05 00:00:00Z
Avatar
maybe so but everyone i know who seriously uses rust on linux is linking with mold
Avatar
True, I'm using mold as well
Avatar
a7229e9 Use array of size NUM_DUMMIES instead of two variables - Robyt3 b7579b0 Ensure last input send time is reset when disconnecting - Robyt3 178a0da Remove dead code and unused variables - Robyt3 2904c4a Restructure input send checks without ifs - Robyt3 f94053b Rename variable w to Weapon - Robyt3 01be442 Rename variable MDistance to MouseDistance - Robyt3 1fcb8a5 Add GetMinMouseDistance function, remove variable MinDistance - Robyt3 4ec5b04 Use vec2 instead of two separate variables - Robyt3 4f22468 Merge pull request #8443 from Robyt3/Client-Controls-Minor-Refactoring - def-
Avatar
@trml @Jupstar ✪ do have you got any good ideas for a net message struct that could replace NETMSG_INPUT when sending more than 1 input at once to save size? It seems that nearly 100% of the client's upload bandwidth is already from sending NETMSG_INPUT which makes 8441 pretty expensive in bandwidth. I was able to reduce it from 800 inputs per second maximum to 250 inputs per second maximum by assuming a minimum of 1/4 packets reach the server which gets it to reasonable bandwidth levels but it doesn't perform nearly as well above even 30% packet loss which makes me sad. Currently the client sends about 0.5KB/s-1.75KB/s of NETMSG_INPUT (without dummy), after the PR it's about 6KB-12KB/s. If I limit it to 250 inputs/s it gets down to 2.5KB/s-7KB/s which is more reasonable. The compression ratio on these seems to be around 1.5-1.7:1.0 Other real time games seem to be in the 4-25KB/s range like CSGO/Overwatch/Valorant/Fornite. Those games of course probably already send duplicated inputs, but don't have a way for clients to manually adjust the "prediction margin", it would just be adjusted automatically based on network health so it would be much lower on average. DDNet client also attempts to adjust automatically but seems to fail very bad even in any scenario I tested, even with only 0-50ms random packet delay and 0% packet drop. For the most part there's only 4 pieces of info that change in every individual NETMSG_INPUT which is m_AckGameTick, m_PredTick, m_TargetX, m_TargetY. The other things are limited to your human ability to press a button quickly which is pretty slow. It would be pretty easy to send m_AckGameTick, and m_PredTick only once for the entire message then increment them manually on the server for each contained input but not as easy for m_TargetX, m_TargetY. I have some doubts about how well a naive "binary diff" will work like Juppey suggested, it doesn't seem viable for such tiny sizes. ChatGPT suggested bit packing all the button presses into single bits then sending mouse deltas instead of mouse positions after the initial one, but I'm not sure that helps since the deltas also need to be full ints I think. Also we have m_Fire which is hogging 8 bits minimum.
Avatar
Currently the client sends about 0.5KB/s-1.75KB/s of NETMSG_INPUT (without dummy), after the PR it's about 6KB-12KB/s. If I limit it to 250 inputs/s it gets down to 2.5KB/s-7KB/s which is more reasonable. The compression ratio on these seems to be around 1.5-1.7:1.0
I'm afraid our servers might get overloaded with that
Avatar
well that's why I'm writing this message
06:33
alternative would be just set a limit and accept whatever packet loss happens after that
Avatar
i dont understand why binary patching should not be the solution, isnt the input mostly the same for almost always?
Avatar
I don't understand how binary patching can define the patch position and the patch data in less bits than bitpacking+huffman (edited)
06:35
people on stackoverflow say it shouldn't be used like this
Avatar
but the bitpacking and huffman can be applied either way
06:36
actually compression even must be applied
Avatar
Avatar
deen
Currently the client sends about 0.5KB/s-1.75KB/s of NETMSG_INPUT (without dummy), after the PR it's about 6KB-12KB/s. If I limit it to 250 inputs/s it gets down to 2.5KB/s-7KB/s which is more reasonable. The compression ratio on these seems to be around 1.5-1.7:1.0
I'm afraid our servers might get overloaded with that
surely there can be some solution though as this input duplication idea was invented by quakeworld in 1996 with like 1% of our current bandwidth (edited)
Avatar
give me the raw data for an input chain and we can compare which method wins
06:38
i can write the binary patch part very quickly for it
Avatar
There is a lot of information about binary diff algorithms for pretty big files (1MB+). However, my use case is different. This is why it is not a duplicate. I have a collection of many objects, e...
06:39
idk
Avatar
well you have nothing to do, i'll do it
Avatar
just give me the binary data of your packets
06:40
and i'll try some stuff
Avatar
Replying to egyt literally 10 strings (or 13, if including PRs, who knows), and the trans…
Avatar
Avatar
Jupstar ✪
just give me the binary data of your packets
it only sends 1 packet per tick
Avatar
Avatar
Tater
it only sends 1 packet per tick
but it sends multiple packet chunks or whatever
06:41
or just give me the 40 bytes of the inputs
06:41
then tell me how tall that packet is on ddnet
06:41
and i try to beat it
Avatar
it's not that simple
Avatar
give me the packets before the packer struct is used
Avatar
ok but what do you mean the packets
06:42
before or after huffman
Avatar
before
06:42
the raw input data basically, but ofc all 20 or how many u have
Avatar
then ddnet sends a single packet with all.. this size is interesting bcs that's what to beat (minus the packet header)
Avatar
why don't you just clone my PR and write it manually then measure the bandwidth used
06:44
you can see outgoing bandwidth even if the server is ignoring your garbage packet data
Avatar
Avatar
Tater
@trml @Jupstar ✪ do have you got any good ideas for a net message struct that could replace NETMSG_INPUT when sending more than 1 input at once to save size? It seems that nearly 100% of the client's upload bandwidth is already from sending NETMSG_INPUT which makes 8441 pretty expensive in bandwidth. I was able to reduce it from 800 inputs per second maximum to 250 inputs per second maximum by assuming a minimum of 1/4 packets reach the server which gets it to reasonable bandwidth levels but it doesn't perform nearly as well above even 30% packet loss which makes me sad. Currently the client sends about 0.5KB/s-1.75KB/s of NETMSG_INPUT (without dummy), after the PR it's about 6KB-12KB/s. If I limit it to 250 inputs/s it gets down to 2.5KB/s-7KB/s which is more reasonable. The compression ratio on these seems to be around 1.5-1.7:1.0 Other real time games seem to be in the 4-25KB/s range like CSGO/Overwatch/Valorant/Fornite. Those games of course probably already send duplicated inputs, but don't have a way for clients to manually adjust the "prediction margin", it would just be adjusted automatically based on network health so it would be much lower on average. DDNet client also attempts to adjust automatically but seems to fail very bad even in any scenario I tested, even with only 0-50ms random packet delay and 0% packet drop. For the most part there's only 4 pieces of info that change in every individual NETMSG_INPUT which is m_AckGameTick, m_PredTick, m_TargetX, m_TargetY. The other things are limited to your human ability to press a button quickly which is pretty slow. It would be pretty easy to send m_AckGameTick, and m_PredTick only once for the entire message then increment them manually on the server for each contained input but not as easy for m_TargetX, m_TargetY. I have some doubts about how well a naive "binary diff" will work like Juppey suggested, it doesn't seem viable for such tiny sizes. ChatGPT suggested bit packing all the button presses into single bits then sending mouse deltas instead of mouse positions after the initial one, but I'm not sure that helps since the deltas also need to be full ints I think. Also we have m_Fire which is hogging 8 bits minimum.
but i dunno what u did to measure this
Avatar
just system process bandwidth usage (edited)
06:45
I used some windows utility program (edited)
06:45
NetLimiter, network monitoring and control tool
06:46
NETMSG_INPUT is like 99% of the realtime client upload bandwidth anyway so this is still accurate
Avatar
morning
cat_hello 1
Avatar
Avatar
Tater
@trml @Jupstar ✪ do have you got any good ideas for a net message struct that could replace NETMSG_INPUT when sending more than 1 input at once to save size? It seems that nearly 100% of the client's upload bandwidth is already from sending NETMSG_INPUT which makes 8441 pretty expensive in bandwidth. I was able to reduce it from 800 inputs per second maximum to 250 inputs per second maximum by assuming a minimum of 1/4 packets reach the server which gets it to reasonable bandwidth levels but it doesn't perform nearly as well above even 30% packet loss which makes me sad. Currently the client sends about 0.5KB/s-1.75KB/s of NETMSG_INPUT (without dummy), after the PR it's about 6KB-12KB/s. If I limit it to 250 inputs/s it gets down to 2.5KB/s-7KB/s which is more reasonable. The compression ratio on these seems to be around 1.5-1.7:1.0 Other real time games seem to be in the 4-25KB/s range like CSGO/Overwatch/Valorant/Fornite. Those games of course probably already send duplicated inputs, but don't have a way for clients to manually adjust the "prediction margin", it would just be adjusted automatically based on network health so it would be much lower on average. DDNet client also attempts to adjust automatically but seems to fail very bad even in any scenario I tested, even with only 0-50ms random packet delay and 0% packet drop. For the most part there's only 4 pieces of info that change in every individual NETMSG_INPUT which is m_AckGameTick, m_PredTick, m_TargetX, m_TargetY. The other things are limited to your human ability to press a button quickly which is pretty slow. It would be pretty easy to send m_AckGameTick, and m_PredTick only once for the entire message then increment them manually on the server for each contained input but not as easy for m_TargetX, m_TargetY. I have some doubts about how well a naive "binary diff" will work like Juppey suggested, it doesn't seem viable for such tiny sizes. ChatGPT suggested bit packing all the button presses into single bits then sending mouse deltas instead of mouse positions after the initial one, but I'm not sure that helps since the deltas also need to be full ints I think. Also we have m_Fire which is hogging 8 bits minimum.
What issue does this 12x increase in traffic solve?
Avatar
Avatar
Tater
surely there can be some solution though as this input duplication idea was invented by quakeworld in 1996 with like 1% of our current bandwidth (edited)
Sure, more expensive servers
Avatar
Avatar
deen
Sure, more expensive servers
Or less players per server
Avatar
Avatar
Learath2
What issue does this 12x increase in traffic solve?
06:59
Requires #8432 Does 2 main things. If the client has enough prediction margin that it can send send duplicated inputs before the original input reaches the "simulation tick" on the serve...
Avatar
Isn't this dangerous? It means we trust the client more now and the client can manipulate the past? I'm wondering if this can give attackers an advantage to cheat
07:00
client cannot change inputs that it already sent to server after https://github.com/ddnet/ddnet/pull/8432
The motivation for this PR is to make the server side input code easier to understand, and improve the way the input buffer for each client is handled. First change: This PR should allow clients to...
07:00
no extra trust
Avatar
Avatar
deen
Isn't this dangerous? It means we trust the client more now and the client can manipulate the past? I'm wondering if this can give attackers an advantage to cheat
even if, it can only manipulate queued inputs.. so there isn't really an advantage that isnt there yet.. it could not change past inputs (in the sense that the logic already processed them)
Avatar
it has danger after #8372
Avatar
The goal of this pr is to improve antiping player prediction 2024-05-17.12-55-33.mp4 This change sends inputs that already arrived at the server to the clients ...
Avatar
but ddnet is not PvP so really it doesn't matter
07:02
the client could already keep a local buffer of inputs if it really wanted
07:02
you could play the entire map offline then play it back as a replay bot
Avatar
Avatar
Tater
it has danger after #8372
but even here, if one player does not use prediction margins, the other player doesnt really gain anything
Avatar
in PvP you could do something like trick your opponent into thinking you're in 1 position then you change your inputs on the server so you're actually in another position
07:03
CS:GO had this vunerability and it is in cheats (edited)
07:04
because they let the client modify inputs it already sent to the server buffer
07:04
for some reason
Avatar
Avatar
Tater
in PvP you could do something like trick your opponent into thinking you're in 1 position then you change your inputs on the server so you're actually in another position
but still.. this only works if u use a reasonable high inputs queue in first place
07:05
a good client doesn't need a high prediction margin
Avatar
a cheating client doesn't care
Avatar
You can use less bytes for targetx and targety if their deltas are bounded. Similarly for ackgametick and predtick, you can only send deltas which are bounded
Avatar
Avatar
Tater
a cheating client doesn't care
so the cheating client sets a high prediction margin with low latency network basically? mh yeah that could work
Avatar
bounding the delta of targetx targety would be a change in client capabilities, is that ok?
07:06
idk how you even enforce that
Avatar
Avatar
Tater
bounding the delta of targetx targety would be a change in client capabilities, is that ok?
Is it even physically possible to go faster than like 2 bytes at a time
Avatar
Avatar
Tater
but ddnet is not PvP so really it doesn't matter
sometimes it is
Avatar
Avatar
Ewan
sometimes it is
t0 player has spoken
Avatar
Avatar
Learath2
Is it even physically possible to go faster than like 2 bytes at a time
targetx targety is scaled by zoom so you can move abritrarily fast in the client already
Avatar
Avatar
Tater
but ddnet is not PvP so really it doesn't matter
hmm, what about pvp mod hosters?
Avatar
Avatar
Jupstar ✪
t0 player has spoken
not often
Avatar
Avatar
Tater
targetx targety is scaled by zoom so you can move abritrarily fast in the client already
Ah, that's a shame
Avatar
Avatar
Nouaa
hmm, what about pvp mod hosters?
🌞
Avatar
Avatar
Nouaa
hmm, what about pvp mod hosters?
they will not receive this packet
07:08
ddnet only
Avatar
Perhaps a magic delta value that indicates the next targetx and targety are not delta but full
07:08
0xFFFF
Avatar
Avatar
Nouaa
hmm, what about pvp mod hosters?
also as I said there is no risk because the client cannot change values it already sent
Avatar
The rest of the input packet should compress very well though, do you do that yet?
Avatar
the compression performance of all packets is rather poor because the huffman table is 15 years old I think
07:10
I only got like 1.5:1
Avatar
I would be quite surprised if that is an actual issue
07:11
perhaps not
07:11
1.5:1 is not great either way
Avatar
But why rely on huffman anyway when we know the pattern already, the most common thing that will happen is that the input won't change. That's 1 bit you need to sneak in somewhere
Avatar
yes that's true, we can do better than huffman
Avatar
Why was huffman chosen in the first place? I think the nature of this kind of data makes it hard to compress
Avatar
huffman is just bonus
Avatar
Avatar
Ewan
Why was huffman chosen in the first place? I think the nature of this kind of data makes it hard to compress
ask magnus
07:13
although I don't think it's a terrible choice
07:14
it does better than nothing
Avatar
Avatar
Tater
huffman is just bonus
Exactly anything our naive but effective bit cant help with. Huffman can get a bit better
Avatar
there are instances where manually minimizing your data actually increases the overall size after compression because it has more entropy at the compressor, but I doubt this will be an issue for us because our huffman is very weak.
07:16
turning duplicate bits into smaller non-duplicate bits makes compression worse
07:16
sometimes
Avatar
Avatar
Ewan
Why was huffman chosen in the first place? I think the nature of this kind of data makes it hard to compress
Wherever structured data is involved, huffman coding usually works well-ish. It is also rather performant compared to alternatives
07:16
What would you use?
Avatar
Avatar
Tater
there are instances where manually minimizing your data actually increases the overall size after compression because it has more entropy at the compressor, but I doubt this will be an issue for us because our huffman is very weak.
Can I get a short TL;DR why we are talking about minimizing data?
Avatar
we would like to send duplicated input packets to minimize the lag that happens when packet loss occurs, but the total bandwidth is already 99% input packets so its important we minimize their size (edited)
Avatar
Avatar
Avolicious
Can I get a short TL;DR why we are talking about minimizing data?
He wants to resend inputs that havent been acknowledged by the server yet
Avatar
Oh I see, have you tried it already?
07:19
Or is everything theoretical?
07:19
possibly this would also make DDoS less effective if we can make the inputs small enough
Avatar
Only a meager 12x increase in traffic 😄
Avatar
Avatar
Tater
possibly this would also make DDoS less effective if we can make the inputs small enough
i doubt that, but it makes it less horrible for smaller lags
Avatar
Avatar
Learath2
Only a meager 12x increase in traffic 😄
Damn
Avatar
12x is worst case if client is spamming their keyboard
Avatar
also it assumes you actively use prediction margins
Avatar
Avatar
Jupstar ✪
also it assumes you actively use prediction margins
in theory the client should automatically adjust prediciton margin based on packet loss but this is a future issue
Avatar
Avatar
Tater
in theory the client should automatically adjust prediciton margin based on packet loss but this is a future issue
yes but then the ddos pattern simply changes to 2 second massive attacks
07:21
and then it doesnt work either way (edited)
Avatar
Avatar
Tater
possibly this would also make DDoS less effective if we can make the inputs small enough
Or worse because now our clients are also effectively ddosing us with inputs thinkies
Avatar
I doubt it
Avatar
How big is the rest of the input packet btw?
Avatar
wdym rest
Avatar
Except the 4 fields we already discussed
Avatar
40bytes for input + the 12 bytes for 3 extra info ints
Avatar
What are in the extra info ints? Also slow changing stuff?
Avatar
m_AckGameTick, m_PredTick, m_Size
07:23
m_Size is actually fixed at 40 and could maybe be deleted?
07:24
its only incase we increase the size of the input struct
07:24
I assume?
Avatar
Idk why it exists, been years since I last looked into input handling
Avatar
much of it is bad so it would not surprise me if we can remove it
07:25
the client and server sent the input struct as abstract data which gets copied back into the actual struct later
07:25
also I think the chance of us changing the input struct is pretty low (edited)
Avatar
If we chunk the input packet into bytes (or twobytes). We can have two (or one) byte(s) whose bits can track whether their respective bytes (or twobytes) have changed. That would compress 40 bytes to 2-1 bytes in the common case that input doesn't change
Avatar
I would be interested in game tick negotiation, so we could run 100 tick servers instead of 50
Avatar
Avatar
Learath2
Or worse because now our clients are also effectively ddosing us with inputs thinkies
if DDoS is killing server performance then duplicate inputs would not help/make it worse, but if the DDoS is clogging network bandwidth then it would help a lot
Avatar
but i guess this will kill the physics, no? they are heavily coupled to the ticks
Avatar
Avatar
Avolicious
I would be interested in game tick negotiation, so we could run 100 tick servers instead of 50
this changes physics too much I think
07:27
there was discussion and several prototypes on github
Avatar
Avatar
Tater
this changes physics too much I think
Absolutely
Avatar
it makes gores way easier :)
Avatar
Yeah 100ticks is a no go I think
Avatar
You could have a way to allow it for new maps, but it might feel strange for players used to 50 ticks
Avatar
Avatar
Avolicious
I would be interested in game tick negotiation, so we could run 100 tick servers instead of 50
for gores it could work
07:29
since it's not as bound to weird physics hacks 😄
Avatar
Anyone who implements it better have very concrete proof that if set at 50hz it still behaves the exact same as it used to
Avatar
Avatar
Avolicious
I would be interested in game tick negotiation, so we could run 100 tick servers instead of 50
we use sv_high_bandwidth on blockworlds, it might slightly change the physics but cosmetics are way smoother when it's enabled (edited)
Avatar
it does not change physics, just increases snapshot rate to clients
07:30
25->50 snaps/s
Avatar
Avatar
Nouaa
we use sv_high_bandwidth on blockworlds, it might slightly change the physics but cosmetics are way smoother when it's enabled (edited)
Interesting
Avatar
When neural network based prediction?
Avatar
would be nice to have on offical servers
Avatar
Avatar
Jupstar ✪
since it's not as bound to weird physics hacks 😄
Mhmmm, never tried before, but it could
Avatar
Avatar
Tater
would be nice to have on offical servers
We would have to check and see how much more bandwidth it would use. Snapshots are delta compressed so it shouldnt be too too bad
Avatar
But I'd be in favor of negotiation in first place 😄 Not just setting the server to 100 ticks
Avatar
I assume its near double
Avatar
Avatar
Avolicious
Interesting
so instead of 50 ticks/sec it's 100 ticks/sec
Avatar
Avatar
Tater
I assume its near double
I would guess about 1.5x
Avatar
Avatar
Nouaa
so instead of 50 ticks/sec it's 100 ticks/sec
NO
07:32
The state is snapshot more often. The state doesn't mutate more often. The tickrate refers to how quickly the state mutates
🤔 1
Avatar
Avatar
Learath2
We would have to check and see how much more bandwidth it would use. Snapshots are delta compressed so it shouldnt be too too bad
it depends, just because they are delta compressed doesn't mean it won't double it. Only if full snapshots stay the same and delta snapshots increase would it have less than 2x increase (edited)
07:33
but if most of the bandwidth is already deltas then it will 2x
07:33
since you can't get smaller than that
Avatar
Yeah would have to observe
Avatar
Avatar
Tater
it does not change physics, just increases snapshot rate to clients
oh okay
Avatar
also it affects demo size
07:34
on client PCs
Avatar
Avatar
Tater
m_Size is actually fixed at 40 and could maybe be deleted?
so all input packets are always the same size? can i assume that?
Avatar
nice
07:34
that makes it even easier
Avatar
Avatar
Nouaa
oh okay
It appears more smooth because you get a snapshot about every tick. Instead of the default every other tick
Avatar
Avatar
Learath2
The state is snapshot more often. The state doesn't mutate more often. The tickrate refers to how quickly the state mutates
I guess this is true
07:35
idk how much that helps but it does
07:35
if sending more snaps means you send less deltas per tick it could be lower (edited)
Avatar
I was referring to Noa's message still 🙃
Avatar
ah right
07:36
unintentially interesting idea tho xd
Avatar
Anyway, idk. I don't think we can guesstimate much since I actually don't remember how much of the traffic is deltas, but the sent deltas may or may not get smaller depending on whether we have things that change slower than 50hz faster than 25hz
Avatar
I think it should also reduce average latency by 20ms right?
Avatar
It should reduce it but I don't know why it would be by a flat number
Avatar
well on average
07:40
at any given point in time there is between 0-40ms until the next snap the server sends you on 25tps
07:40
at 50tps it's 0-20ms until the next one
Avatar
Ah, I see what you mean. Yeah that sounds about reasonable
Avatar
Increasing the speed of sending inputs would probably increase the accuracy of the antibot (at least my implementation), as often the change of inputs looks extremely strange, but in fact the reason for this is packet delays
Avatar
you're using client side antibot?
Avatar
server side ofc
Avatar
the server already recieves the full 50 inputs per second for every player. There can't be more than that unless you change the physics
07:44
only clients are limited to 25hz (for information about other players) (edited)
Avatar
This is in the perfect case, but in reality there are delays
Avatar
Avatar
Tater
the server already recieves the full 50 inputs per second for every player. There can't be more than that unless you change the physics
I guess sending it quicker wouldn't technically change the physics per se, but the feel 😄
Avatar
I'm not sure what you mean
07:45
client side prediction ensures the feel is the same regardless of how fast your input reaches the server
Avatar
@Tater so i have the binary diff now.. if u can now tell me how i can manually call compress from cpp code i can check how much better binary patching performs if i use ddnet's huffman compression
Avatar
Avatar
Faulty
This is in the perfect case, but in reality there are delays
@Tater 's new patch would mean input packets would be less likely to be lost. Which would make your antibot get a more continuous appearing data stream. But you should probably be correcting for random transmission delays as those convey no information really
Avatar
Avatar
Jupstar ✪
@Tater so i have the binary diff now.. if u can now tell me how i can manually call compress from cpp code i can check how much better binary patching performs if i use ddnet's huffman compression
I don't have some sort of compression testing framework for you to easily call a single function on the input data. You have to pack all the data for each input message (the 3 ints + player_input) into a single segment of memory, then add each segment of it to the message as an int.
Avatar
ok i'll just create a fake packet using the packer thing
07:48
lets see if that works
Avatar
yeah exactly
07:48
the packet can be garbage as far as the server knows
Avatar
Avatar
Jupstar ✪
ok i'll just create a fake packet using the packer thing
you just need to make sure that whatever you put into the message can theoretically be converted back into the full data on the other side with all the information you give it
Avatar
Avatar
Learath2
@Tater 's new patch would mean input packets would be less likely to be lost. Which would make your antibot get a more continuous appearing data stream. But you should probably be correcting for random transmission delays as those convey no information really
You right, I meant continuity exactly, delays could be handled but missed data not
Avatar
this guy on reddit had an interesting idea
Avatar
Avatar
Tater
you just need to make sure that whatever you put into the message can theoretically be converted back into the full data on the other side with all the information you give it
yeah since the input packets are same size that's super ez xd
Avatar
if you turn all the data into 0s then the generic compressor should make it really small
Avatar
There are many ways to compress slowly changing data
Avatar
less ways when it's only 52 bytes
Avatar
Well you can do exactly what he says and it would work fine, but I wouldn't really use something like lz4. Just rle
07:55
Or you can do what I suggested with one or two bytes tracking the rest of the bytes
Avatar
I'm still a little dissapointed with the 1.5:1 by the huffman. like 80% of the input struct should always be zeros without any special tricks (edited)
Avatar
so how can i identify my packet in wireshark now lmao
Avatar
Avatar
Jupstar ✪
so how can i identify my packet in wireshark now lmao
wireshark is hard sorry lol
07:59
look up some tutorials
Avatar
chiller would know it
Avatar
Avatar
Tater
I'm still a little dissapointed with the 1.5:1 by the huffman. like 80% of the input struct should always be zeros without any special tricks (edited)
Well the table is not for just inputs (I don't even know what the table is generated by/for). Huffman doesn't perform that well without seeing a lot of input
Avatar
I don't think the size of data to be comrpessed matters if the huffman table is fixed? (edited)
Avatar
We could have a huffman tree just for inputs and that might do better. It's have lots of sequences of zeros on short codes
Avatar
@Tater i think the constant 136 bytes are my packet
08:01
and the bigger ones are the normal resent packets
Avatar
I do not know how to use wireshark idk what you want from me lol
08:01
136bytes for 15 inputs?
Avatar
13 inputs
08:01
quite good I think right?
Avatar
i guess so
Avatar
using brotli compression i get exactly the same lol
Avatar
actually that's 6.8KB/s
08:02
I think
08:03
which is still better than what I had at 13 inputs probably
Avatar
Avatar
Jupstar ✪
using brotli compression i get exactly the same lol
ah but it would loose if i'd add packet headers rip
Avatar
are you spinning your mouse in circles?
08:03
that matters a lot
Avatar
Avatar
Tater
are you spinning your mouse in circles?
yes
Avatar
i tried to jump and spin
08:03
and move
08:03
and press alt + f4 at the same time
08:03
lmao
Avatar
Avatar
Jupstar ✪
and press alt + f4 at the same time
Rq
Avatar
Avatar
Jupstar ✪
using brotli compression i get exactly the same lol
But how fast is yours vs brotli?
Avatar
Avatar
Learath2
But how fast is yours vs brotli?
the brotli part is only interesting bcs i wrote it in rust
08:04
was just a test
Avatar
A lot of the big math smart guy optimizations don't kick in until sizes much larger than a couple hundred bytes 😛
Avatar
Avatar
Learath2
A lot of the big math smart guy optimizations don't kick in until sizes much larger than a couple hundred bytes 😛
that's correct
08:05
but i think for a general purpose compression that's still pretty good
Avatar
Yeah I think that's pretty good. How did you end up implementing it?
Avatar
also brotli is not designed for binary data actually lmao
Avatar
136 bytes is about 5:1 which is the same as the amount of zeros to data in the orignal struct that I calculated a few minutes ago
Avatar
Avatar
Learath2
Yeah I think that's pretty good. How did you end up implementing it?
the binary patch?
Avatar
very straight forward actually let mut writer = Vec::new(); let empty = vec![ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; let mut cur_last = &empty; for a in a_bytearr.iter() { fn diff(old: &[u8], new: &[u8], writer: &mut Vec<u8>) { for (index, old) in old.iter().enumerate() { writer.push(new[index].wrapping_sub(*old)); } } diff(cur_last, a, &mut writer); cur_last = a; }
08:07
a_bytearr is simply the i32 converted to u8
08:07
so for all input packets i simply create the binary diff towards the previous one
Avatar
I think I need my coffee and breakfast now. That looks like it encodes 40 bytes to 40 bytes diff
Avatar
Avatar
Learath2
I think I need my coffee and breakfast now. That looks like it encodes 40 bytes to 40 bytes diff
it simply takes the difference
08:09
thus creating lots of 0s
08:09
that's the whole point of it
08:10
and if not 0s then at least some smaller ints
Avatar
Ah, so you just let huffman coding take care of it
Avatar
yeah compression is applied nonethenless
08:11
i basically just want to help the compressor a bit
08:11
since inputs are always same size and always similar values
Avatar
I guess the longer sections of 0 are easier on the huffman table we have for some reason
Avatar
couldn't you just xor the previous input with the next one?
08:11
like the guy on reddit said
Avatar
You can
Avatar
well nice
08:12
but is xor even better? well i dunno
08:12
my math brain is off rn
Avatar
I can't imagine how much it changes rn. Not before breakfast
Avatar
is this not equivalent to xor?
08:13
if both are 40bytes the difference is actually just the xor?
08:13
idk what your code does
Avatar
Avatar
Tater
idk what your code does
Bytewise sub
08:13
bitwise is better tho?
08:14
or it needs bytewise?
Avatar
Avatar
Tater
bitwise is better tho?
maybe int wise is even better than byte wise
Avatar
There is no bitwise sub :F
Avatar
since it doesnt destroy the whole int
Avatar
But bitwise xor of the entire thing is probably better than everything
Avatar
yes thats what I was thinking
Avatar
but anyway
08:15
the idea is clear
08:15
i'd try smth like that
Avatar
ok but 6.8KB/s is not acceptable yet I think
Avatar
no matter how good ur compression is.. context based information is just OP (edited)
Avatar
that's still 12x increase?
Avatar
Well you'll need to set up a better way to test this and test a couple things
Avatar
Avatar
Tater
that's still 12x increase?
really? wow, didnt know ddnet is so efficient upload wise
Avatar
the input is the ONLY upload
08:16
lol
Avatar
@Tater but even if u only pack the latest 5 inputs with a similar size it would already help
08:16
15 inputs is simply a lot
Avatar
Try the xor thing, try the delta compression I suggested, try xor followed by run length encoding
Avatar
you don't get the same packet loss protection characteristics with a limit like that (edited)
08:17
the overwatch guy said they send 15 inputs, he was also like "it compresses super well" without explaining how they do it xd
Avatar
If you are ambitious, try a new huffman table
Avatar
how do u even restore from xor?
08:17
i dont understand anything
08:17
ah right
08:17
u know one side
08:17
lmao
Avatar
Avatar
Jupstar ✪
how do u even restore from xor?
Xor
Avatar
ok i do xor
08:18
just for u
Avatar
I wonder if bitpacking+xor would be better
08:19
less zeros is less data
Avatar
brotli already gets worse with xor xD
Avatar
Actually one issue, does this not make the packet loss tolerance 0? If somehow an input packet truly gets lost, how would you recover?
Avatar
now let me move it to cpp
Avatar
Avatar
Learath2
Actually one issue, does this not make the packet loss tolerance 0? If somehow an input packet truly gets lost, how would you recover?
all the inputs are in the same packet
08:20
oh
Avatar
Avatar
Tater
all the inputs are in the same packet
And the window of inputs is always from the last acknowledged input seq? (Idk if we even keep track of that)
Avatar
no we won't do that
08:20
just the size of prediction margin buffer
Avatar
91 bytes
08:20
that's significant
Avatar
so xor wins for huffman
Avatar
is this with the 3 extra info ints as well?
08:21
or just 40 bytes of input
Avatar
Avatar
Tater
is this with the 3 extra info ints as well?
thats the inner size of the UDP packet
Avatar
Avatar
Tater
no we won't do that
So if somehow a sequenced input gets lost from the head before it's processed by the server, how does the client recover? Can it recover?
Avatar
the inputs are only sequenced within a single packet (edited)
08:22
each packet can be processed without any others
08:22
you send redundent inputs incase one of the packets gets dropped the others have the same data, so the server can fill it in
08:22
that's the whole idea
Avatar
Say we have a window of 3 inputs for simplicity. We have a, b, c. We send a packet with a, b, c. The nex packet will be b, c, d. If the first is lost. a is truly lost, no?
Avatar
Avatar
meloƞ
can someone try and reproduce crashing the client by rendering a demo, setting the playback time to 0.1 - forwarding a bit and then quitting out of it without finishing rendering using the X on the bottom right? - my client became unresponsive for a solid minute, outputted me this: 2024-06-04 00:18:38 I demo_player: Stopped playback 2024-06-04 00:18:38 I demo_player: Loading demo 'demos/replays/asdasd.demo' 2024-06-04 00:18:38 I datafile: could not open 'maps/Adrenaline 3.map' 2024-06-04 00:18:38 I videorecorder: Recording to 'videos/asdasd.mp4.mp4' 2024-06-04 00:18:59 I client: disconnecting. reason='unknown' 2024-06-04 00:18:59 I video_recorder: ------------ 2024-06-04 00:18:59 I video_recorder: ------------ 2024-06-04 00:18:59 I demo_player: Stopped playback and then closed (using DDNet 18.2) this is the output on latest upstream: 2024-06-04 00:22:47 W videorecorder/libav: Too many bits 32768.000000 > 12288 per frame requested, clamping to max 2024-06-04 00:22:47 I videorecorder: Recording to 'videos/aseasdasdasd.mp4' 2024-06-04 00:22:51 I videorecorder/libav: frame I:114 Avg QP:14.91 size:177571 2024-06-04 00:22:51 I videorecorder/libav: frame P:412 Avg QP:24.00 size: 10011 2024-06-04 00:22:51 I videorecorder/libav: frame B:831 Avg QP:25.97 size: 3511 2024-06-04 00:22:51 I videorecorder/libav: consecutive B-frames: 12.7% 9.6% 22.3% 55.4% 2024-06-04 00:22:51 I videorecorder/libav: mb I I16..4: 32.8% 25.2% 41.9% 2024-06-04 00:22:51 I videorecorder/libav: mb P I16..4: 0.7% 0.4% 0.5% P16..4: 7.7% 2.8% 2.0% 0.0% 0.0% skip:85.9% 2024-06-04 00:22:51 I videorecorder/libav: mb B I16..4: 0.3% 0.0% 0.0% B16..8: 7.4% 1.6% 0.5% direct: 1.3% skip:88.7% L0:51.0% L1:37.3% BI:11.7% 2024-06-04 00:22:51 I videorecorder/libav: 8x8 transform intra:24.9% inter:51.0% 2024-06-04 00:22:51 I videorecorder/libav: coded y,uvDC,uvAC intra: 30.4% 34.5% 30.3% inter: 2.5% 1.3% 0.7% 2024-06-04 00:22:51 I videorecorder/libav: i16 v,h,dc,p: 77% 21% 2% 0% 2024-06-04 00:22:51 I videorecorder/libav: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 72% 4% 24% 0% 0% 0% 0% 0% 0% 2024-06-04 00:22:51 I videorecorder/libav: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 41% 30% 7% 3% 3% 4% 3% 4% 4% 2024-06-04 00:22:51 I videorecorder/libav: i8c dc,h,v,p: 68% 18% 12% 2% 2024-06-04 00:22:51 I videorecorder/libav: Weighted P-Frames: Y:0.0% UV:0.0% 2024-06-04 00:22:51 I videorecorder/libav: ref P L0: 60.3% 2.7% 9.1% 27.8% 2024-06-04 00:22:51 I videorecorder/libav: ref B L0: 73.7% 21.5% 4.8% 2024-06-04 00:22:51 I videorecorder/libav: ref B L1: 92.7% 7.3% 2024-06-04 00:22:51 I videorecorder/libav: kb/s:9651.27 2024-06-04 00:22:51 I videorecorder/libav: Qavg: 65418.816 2024-06-04 00:22:51 I demo_player: Stopped playback
Several demo rendering related crashes were fixed in nightly so it's likely this was already fixed and only happens in 18.2 and earlier if you can't reproduce it anymore
Avatar
Then applying the deltas, you can no longer get to a consistent state ever
Avatar
Avatar
Robyt3
Several demo rendering related crashes were fixed in nightly so it's likely this was already fixed and only happens in 18.2 and earlier if you can't reproduce it anymore
i was able to not reproduce the same behaviour, but i still got the client to freeze with latest upstream
Avatar
I don't understand what your concern is
Avatar
I think before we apply a resending patch like https://github.com/ddnet/ddnet/pull/8441, we should first figure out if packet loss like that is even a thing on ddnet servers
08:24
it adds quite the complexity and as such should only be applied if it actually does something
08:24
not just theoretically
Avatar
Previously since the input packet contained the entire thing, even if a couple were lost, you could always resync because well the entire thing is there
Avatar
I think it happens of course
Avatar
Avatar
meloƞ
i was able to not reproduce the same behaviour, but i still got the client to freeze with latest upstream
Please open an issue for that
Avatar
will do
Avatar
Avatar
heinrich5991
I think before we apply a resending patch like https://github.com/ddnet/ddnet/pull/8441, we should first figure out if packet loss like that is even a thing on ddnet servers
ask any gores player and they will tell you how many hundreds of times they die due to small lag
Avatar
yeah was about to say
08:25
lets join KoG Turkey xd
Avatar
then I guess we should do the measurement on KoG turkey
Avatar
it's silly to say packet loss does not happen
08:26
even if 1/10000 packets is dropped we have zero redundancy
08:26
so it will always cause client desync
Avatar
why? AFAIK packet loss is rare on the actual internet
Avatar
packet delay is effectively the same
Avatar
Avatar
Tater
it's silly to say packet loss does not happen
but tbf, then it's about if u want to permanentely play with prediction margin Because otherwise it could never recover from it anyway
08:26
even with automatic prediction margin not
08:27
it cannot guess random laggs
08:27
*drops
Avatar
I already mentioned it should adjust automatically
Avatar
but even then
Avatar
all these ideas are well documented and impliemented in multiplayer games for like 20 years
Avatar
how should it know the 10000th packet will drop
Avatar
I am not creating any ideas here
Avatar
that doesnt matter xD
08:27
it simply makes no sense
08:27
I mean 1/10000 chance
08:27
not every 1/10000 packets sequentailly
Avatar
Avatar
Tater
I don't understand what your concern is
This method does not guarantee a sequenced input will be never lost, unless it's coupled with server side acks and a window that grows infinitely. If you let the window slide, then you should make sure the entire packet is recoverable without needing the previous packet ever
Avatar
if u have a prediction margin of 1ms and the 10000th packet will drop, how do u want to handle that?
08:28
how does the automatic prediction timer prepare for that?
Avatar
if you have a margin of 1ms you cannot do anything
Avatar
see, so you either have to accept to play with at least 20ms ALWAYS
Avatar
please watch the GDC talk I can't explain it as well as them
Avatar
or it doesnt really work anyway 😄
Avatar
Avatar
Tater
please watch the GDC talk I can't explain it as well as them
but any kind of prediction margin always also means more input latency, which is totally ok for ddrace
Avatar
Avatar
Jupstar ✪
see, so you either have to accept to play with at least 20ms ALWAYS
Is that not what you already do? The client is always ahead of the server
Avatar
the margin should increase automatically based on the server not acking your input when you expect
Avatar
i just want it to be clear
08:29
without prediction margin of 20 or actually even 30 it's basically useless
08:29
without mininmum*
Avatar
Avatar
Jupstar ✪
but any kind of prediction margin always also means more input latency, which is totally ok for ddrace
Avatar
Avatar
Tater
the margin should increase automatically based on the server not acking your input when you expect
yes sure, but not if it's only every 10000th packet
08:30
u can never guess that xD
08:30
so a minimum prediction margin would be around 30ms
Avatar
Avatar
Learath2
Is that not what you already do? The client is always ahead of the server
yeah but only a bit 😄
Avatar
Avatar
Jupstar ✪
yeah but only a bit 😄
I'd guess it's not less than 20ms
Avatar
steps to reproduce: select a demo render cut to video and set the playback time to 0.1 pause the demo rendering forward a bit Close the rendering happens on steam stable, steam nightly and latest upstream this is the console output on latest and nightly steam: ``` 2024-06-04 10:28:29 I demo_player: Stopped playback 2024-06-04 10:28:29 I demo_player: Loading demo 'demos/auto/fddfdssdgsd.demo' 2024-06-04 10:28:29 I datafile: could not open 'maps/Samsara VI.map' 2024-06-04 10...
Avatar
if you start dropping inputs don't you think it's better that you gain a little latency than you are no longer able to controll your tee?
Avatar
Avatar
Learath2
I'd guess it's not less than 20ms
it's 10
08:31
by default
Avatar
Avatar
Tater
if you start dropping inputs don't you think it's better that you gain a little latency than you are no longer able to controll your tee?
i'd say it's at least fair to say it's a change that is noticable
Avatar
Avatar
Tater
if you start dropping inputs don't you think it's better that you gain a little latency than you are no longer able to controll your tee?
I'd really like to see some data on this. if it is not actually happening like you say, then this patch doesn't do anything
Avatar
bcs antiping will "lag" more
Avatar
Huh, I remembered the default being 20
Avatar
Avatar
heinrich5991
I'd really like to see some data on this. if it is not actually happening like you say, then this patch doesn't do anything
the worlds best gores player could not solo a map on CHN servers
08:33
you just have to press CTRL+SHIFT+D then CTRL+SHIFT+G and the ingame graph will show you your packet delays
Avatar
I guess the PR is not about improving european player's experience on chinese servers, is it? but yea, I agree that there is packet loss to china
08:34
china has a very weird connection to the rest of the internet though, with the great firewall interfering and all
Avatar
what exactly do you want me to do to collect data
08:35
will you say my ISP is specially bad compared to average
Avatar
write a small patch for the ddnet server that checks what inputs were missed
Avatar
the server can't know
Avatar
Dont we have sequence numbers on inputs?
Avatar
write a small patch for the ddnet server and client to see what inputs were missed
Avatar
Avatar
Learath2
Dont we have sequence numbers on inputs?
client only sends input sometimes
08:36
it assumes the server will reuse past input
08:36
which btw makes packet drops worse
Avatar
Avatar
heinrich5991
write a small patch for the ddnet server and client to see what inputs were missed
the client already has the graph that shows you network issues
08:37
just go join some servers and view it
Avatar
which of these graphs? they look pretty stable to me
Avatar
it's too early anyway
Avatar
the gametime graph shows me when I tab into ddnet
Avatar
4 p.m. and turkey servers suck xddd
Avatar
It might be more useful during ddos too
Avatar
ddos is too heavy
08:40
i doubt this patch really helps
Avatar
Avatar
Jupstar ✪
4 p.m. and turkey servers suck xddd
but why? if it's not bandwidth limited, why should packets be dropped?
08:41
(and if it were bandwidth limited, this patch would make it worse)
Avatar
Avatar
heinrich5991
but why? if it's not bandwidth limited, why should packets be dropped?
i dunno, i guess the bandwidth is kinda limited, whole europe then sends packets
Avatar
Avatar
heinrich5991
but why? if it's not bandwidth limited, why should packets be dropped?
Turkey is connected to the backbone using fishing wire
Avatar
i mean it's probably about short spikes and rerouting etc.
Avatar
why would ddnet be immune to packet loss but other games routing over UDP are not?
Avatar
do you have something where I can read about it? I'm not into watching long videos (edited)
Avatar
"The best servers in whole Europe are the USA ones" - Jupstar
Avatar
Avatar
heinrich5991
do you have something where I can read about it? I'm not into watching long videos (edited)
do you want evidence of packet loss or explanation of my PR
Avatar
Tbf there might not even be much written about it since it's such an obvious thing to do. They basically treat inputs as semi-vital
Avatar
Avatar
Tater
do you want evidence of packet loss or explanation of my PR
packet loss
Avatar
@archimede67 Control find (in the in-game console) seems to highlight more then it should when searching for strings with cyrillic characters (edited)
Avatar
byte vs "char" count, probably?
Avatar
Avatar
heinrich5991
packet loss
Is this not very tough to show? All teeworlds servers get some amount of ddos, how would you rule that out? My internet here is on some days shit, how would you rule that out?
Avatar
Avatar
Learath2
Is this not very tough to show? All teeworlds servers get some amount of ddos, how would you rule that out? My internet here is on some days shit, how would you rule that out?
by writing a small patch on the server, we can see how it affects actual players
Avatar
I mean if packet loss was extremely rare, tcp wouldn't really need to exist, nor would we need vital messages
Avatar
packet loss is rare AFAIK
08:51
tcp does more things, e.g. congestion control
08:51
packet loss goes up when you're close to saturating your connection
Avatar
But not rare enough to remove the vital delivery from our networking stack
08:53
I don't remember how we do it but if we clear our backroom on ack, the size of the backroom on average might be a decent measure
08:53
Though vital messages don't have nearly the same amount of "throughput" so maybe not great
Avatar
just because it's rare doesn't mean it doesn't matter
08:54
under normal conditions it's rare but intermittent periods of instability are very common
Avatar
why not drop this discussion and get some actual data?
Avatar
Because it's not exactly trivial to get the data you want. The server can't know if it missed an input packet
Avatar
you can include a "previous input packet" number with each input on the client
08:55
then the server will know that there was a missed one
Avatar
Well sure. I wouldn't mind merging that to see
Avatar
the design would probably look like this: server indicates that it wants to receive this extra data, client sends it with input packets, only if the server wanted to have it
Avatar
people have instability in their home network too, if you are playing on wifi from a laptop then simply being 50ft further away from your router will cause loss
Avatar
I think wifi does re-sends
Avatar
Wifi does do resends
Avatar
and this is also something that will be seen in these statistics
09:02
they're end-to-end, I don't think they can miss anything
Avatar
just because it does resend doesn't mean it's adequate. The router needs to acknowledge that it did not receive the message, in which time the client could have already sent another packet with the previous data that gets sent immediately before the resend of the first packet happens
Avatar
Anyway, just from the fact that I know most other games are much more careful with their inputs that I will guess packet loss is more common than heinrich expects, but definitely not very common. I'll guess it affects about 1% of the players on a given day
Avatar
it affected me on 90%+ of days as a gores player
09:10
go type "lag" into the discord search bar
Avatar
Well sadly your experience is just anectodal evidence. You won't convince people with that
Avatar
I don't see what's wrong with gathering some statistics
09:13
we'll be able to see what you say
Avatar
there's nothing wrong with gathering statistics but you are denying a well documented problem
Avatar
Avatar
heinrich5991
I don't see what's wrong with gathering some statistics
It's extra mundane work that no one really wants to do 🙃
Avatar
also that
Avatar
Implementing cool new thing that requires you to think about cutting edge compression magic is fun
09:14
Adding a grafana hook or sth to a sequence number, not so much
Avatar
it sounds good to know the benefit if we duplicate our traffic for it
Avatar
I agree though. We should do it properly, log it and see how prevalent it is
09:16
If its more like 1 in a thousand it just might not be worth (in the best case) increasing our traffic even 3x
Avatar
how do you quantify the impact it has on the player experience
Avatar
Post game survey on people that experienced packet loss 😛 idk it's not easy to measure something so abstract as "impact on player experience"
Avatar
you can get the survey if you put lag in the search bar 🙂
Avatar
I didn't want ot measure the player experience, but the packet loss
Avatar
ok I think I am done with this discussion today
Avatar
Avatar
murpi
@archimede67 Control find (in the in-game console) seems to highlight more then it should when searching for strings with cyrillic characters (edited)
Can you open an issue with an example?
Avatar
if the patch improves the player experience by sending an input that is otherwise delayed (even if not dropped) too far that would still be a win
Avatar
Avatar
archimede67
Can you open an issue with an example?
I can, later this evening
Avatar
Avatar
murpi
I can, later this evening
Alright, thanks!
Avatar
are there any frontend (react) devs here? need some help and im willing to pay 100€ for ~1hr of work
Avatar
Avatar
GutZuFusss
are there any frontend (react) devs here? need some help and im willing to pay 100€ for ~1hr of work
if u just post your question i might be able to help
Avatar
there is no question, im just a dumbass who has a deadline to hold, but I do not know shit about JS
Avatar
lmao
Avatar
Avatar
GutZuFusss
are there any frontend (react) devs here? need some help and im willing to pay 100€ for ~1hr of work
10:00
Every now and then, in online chat rooms I hang around in, someone pops in and says something in the lines of, Foobar123:Any Java experts around? This is bad form, for several reasons. What the person is actually asking here is Foobar123:Any Java experts around who are willing to commit into looking into my problem, whatever that may turn out to be, even if it's not actually related to Java or if someone who doesn't know anything about Java could actually answer my question? :P (edited)
Avatar
basically I have a JS lib with react 16 with a desired design, and another one with an old design.
Avatar
he wants someone to do his homework xD
Avatar
frontend.. freddie maybe? XD
Avatar
if this was homework I was hardly offering 100 clams
Avatar
i indeed know react xdd
pepepopcorn 1
Avatar
and I can't break API
Avatar
Have you tried outsourcing it to chatgpt?
pepe_holy 1
Avatar
Avatar
Learath2
Have you tried outsourcing it to chatgpt?
use phind, easier to track down the sources it fetches stuff from (edited)
Avatar
in rust we trust
Avatar
Avatar
Ryozuki
in rust we trust
When will you migrate to edlang?
Avatar
Hahaha lol maybe don't send this to this guy
Avatar
Avatar
Learath2
When will you migrate to edlang?
when its somewhat usable xd
Avatar
Avatar
Jupstar ✪
i indeed know react xdd
get that bag 💰
Avatar
you guys are mean
10:30
I'll just donate the money and work the night
10:30
and then proceed to cry myself to sleep
tear 1
Avatar
chillerdragon BOT 2024-06-04 10:37:12Z
@GutZuFusss: is the code public? So what is the task? Copy pasting a design from one react version to another?
Avatar
basically, yes. with the twist of keeping the new library's API (as much as possible) intact
10:39
code is not public
10:39
and I cannot share, that would be a teamviewer session xd
Avatar
chillerdragon BOT 2024-06-04 10:39:46Z
Yikes sorry I’m out
Avatar
though so, if i need some whitespaces removed i will @ you ❤️
troll 1
Avatar
i would not take that ChillerDragon
10:55
me personally
Avatar
why? i used the heart emoji
Avatar
Switching from x11 to wayland, tripled my fps Oo. Anyone with similar experiences?
Avatar
Avatar
Fussel
Switching from x11 to wayland, tripled my fps Oo. Anyone with similar experiences?
i peaked my FPS to 21K on wayland, peaked at 16K on x11 iirc - so yea :P
Avatar
well, it's the difference between <200 and >600 here ^^
11:48
I don't need 21k, I'm not a pro :p
🧢 1
Avatar
So, you don't play on GNOME?
Avatar
chillerdragon BOT 2024-06-04 12:13:37Z
GNOME best for gaming
Avatar
Avatar
Fussel
Switching from x11 to wayland, tripled my fps Oo. Anyone with similar experiences?
I switched to Wayland once but had a rather bad experience so I'll try again once it is a little more polished :D
Avatar
Avatar
Fussel
Switching from x11 to wayland, tripled my fps Oo. Anyone with similar experiences?
not tripple but i also observed small increase 😄
12:33
other than that i can only say what teero said xD
12:34
rather bad experience ye (edited)
Avatar
well, it doesn't configure faster than awesome ^^
Avatar
hi gentooers
Avatar
There has been a remarkable breakthrough towards the Riemann hypothesis (though still very far from fully resolving this conjecture) by Guth and Maynard making the first substantial improvement to a classical 1940 bound of Ingham regarding the zeroes of the Riemann zeta function (and more generally, controlling the large values of various Dirich...
Avatar
Pasting a 6 digit hex code into the editor color hex should append FF on the end, not 00 at the front
Avatar
Avatar
Teero
Click to see attachment 🖼️
bahah nice one
Avatar
This post was fact-checked by true Liberland patriots
Replying to @Teero archlinux.gif
Avatar
Avatar
louis
Pasting a 6 digit hex code into the editor color hex should append FF on the end, not 00 at the front
You mean into the hex color text box? It should work like you want already, when you paste with Shift+Left click directly on the color picker, which should also be faster (Shift+right click copies the color as RGBA, but you can paste RGB or RGBA correctly).
Avatar
Only those 10 left and that's all... anyone? (edited)
Replying to egyt So, this is the list of strings I couldn't translate, some because I don…
Avatar
game paused appear when ingame match gets paused :P follow is about following player in spectator mode grabs are grabs of flag in ctf like mods
Avatar
Avatar
egyt
So, this is the list of strings I couldn't translate, some because I don't know where they occure, and some because I don't know technical terms behind them (paused) All combined Folder Link Follow Game paused Grabs Moved ingame Replace video Searching [Graphics error] An error during command recording occurred. Try to update your GPU drivers. (edited)
(paused)
Shown in demo render popup when the demo player should initially start paused.
All combined
Show for a Folder Link in the demo browser that represented all storage locations combined. Easiest way to get this is to create a folder demos inside your data folder. Then you can navigate up another folder with ../ in the demo browser.
Folder Link
See above. This is shown for folders on the root level in the demo browser when multiple demos folders exist.
Follow
Shown in the spectator menu during demo playback. Represents the default spectation target for which the demo was recorded.
Game paused
Part of the HUD when the game is paused. Use pause in the rcon of a local server.
Grabs
Represents the number of times the enemy flag was grabbed in CTF, i.e. touched without necessarily being captured.
Moved ingame
Shown in the editor when your character was moved ingame. While in a server, jump then quickly open the editor with Ctrl+Shift+E to see this.
Replace video
Shown in a popup when the video file (mp4) you are trying to render to already exists.
Searching
When searching in the local/remote console. Enable with Ctrl+F while console is open.
[Graphics error] An error during command recording occurred. Try to update your GPU drivers.
Translate literally.
Avatar
hey Robyt3 (edited)
Avatar
hey Robyt3 (edited)
Avatar
morning linux enjoyers and others
Avatar
morning leetcode.com enjoyer - its 8PM - did you just wake up?
Avatar
no i didn't and its 9pm
Avatar
its 1 ahead of UTC+1 (summertime UTC+2) so it has to be madagascar!
18:27
@MilkeeyCat get leaked
Avatar
It's Ukraine 😏
18:28
@MilkeeyCat get leaked
Avatar
woops, wrong direction
Avatar
Still can't find "Follow", will be grateful for a screenshot or something alike Also, what is "command recording"?
Replying to @Robyt3
(paused) […]
Avatar
Avatar
Robyt3
Click to see attachment 🖼️
follow what
Avatar
!
Replying to @cyberFighter follow what
Avatar
Follow the camera that was recorded in the demo
Avatar
oh
18:44
can we have specvoted inside that menu ingame
18:50
The End? (edited)
Avatar
egyt next robyt fr
Avatar
"egyt is the next contributor who contributes as much as @Robyt3, for real!" (edited)
Avatar
LaTeX is pretty good for writing letters too. I have pretty much migrated all my writing and design over to latex and it has been really enjoyable. I would recommend to anyone who doesn't feel like using a word processor. Much better for the programatically minded 😛
Avatar
it has the nice side effect of being versionable
19:06
however, I feel there's a better language than latex that hasn't been developed yet
19:06
it feels very old
Avatar
10000%
19:07
LaTeX is HARD to use
19:07
For simple things it's not too bad, but as soon as you do anything that involves being more concrete about positioning stuff it gets really hard
19:08
Perhaps HTML+CSS is that language now that I think about it, but idk it feels overkill
Avatar
Avatar
Learath2
LaTeX is HARD to use
And then there are individual packages like TikZ that are probably as complex as LaTeX itself justatest
Avatar
I used some tikz to decorate my CV (more like fill up some space so it doesn't look too empty) 😄
Avatar
Hehe, I hope I don't cause problems
Replying to @heinrich5991 "egyt is the next contributor who contributes as much as Robyt3"
Avatar
I also used it to draw some system diagrams for my control theory course, but it is far too slow to take notes on the go with it, so I started just drawing it by hand in excalidraw and putting a screenshot in my notes instead
19:10
s/slow/verbose/
Avatar
Avatar
egyt
Hehe, I hope I don't cause problems
I think that was meant positively
Avatar
I'll also add "Tee" (#8444) and "%d/%d KiB (%.1f KiB/s)" (#8423), so I don't have to add them later
Replying to egyt Hehe, I hope I don't cause problems
Avatar
sounds good
Avatar
soon™️ (im such a paint pro) (edited)
Avatar
Whyn't Krita?
Replying to @meloƞ soon™️
Avatar
i dont like krita for image manipulation - only for drawing if i'm bored justatest
Avatar
Avatar
meloƞ
i dont like krita for image manipulation - only for drawing if i'm bored justatest
flameshot!!
Avatar
Avatar
Learath2
LaTeX is pretty good for writing letters too. I have pretty much migrated all my writing and design over to latex and it has been really enjoyable. I would recommend to anyone who doesn't feel like using a word processor. Much better for the programatically minded 😛
i drifted out of latex a lil bit, because it's a freaking pain to make slides and courses with it...
Avatar
Avatar
heinrich5991
however, I feel there's a better language than latex that hasn't been developed yet
lemme introduce you to typst that is rust based: https://github.com/typst/typst
A new markup-based typesetting system that is powerful and easy to learn. - typst/typst
Avatar
Avatar
Chairn
i drifted out of latex a lil bit, because it's a freaking pain to make slides and courses with it...
So you are back to powerpoint or whatever libreoffice equivalent?
Avatar
libreoffice impress for now
Avatar
ah right, I've seen that before. haven't checked it out yet
Avatar
i might redo the slides in latex later though
Avatar
Avatar
Chairn
lemme introduce you to typst that is rust based: https://github.com/typst/typst
This looks so cool
Avatar
Avatar
Chairn
i might redo the slides in latex later though
If you make a template, then stick to it, it's not too too bad, but I do understand why you might not want to bother
Avatar
Avatar
Chairn
lemme introduce you to typst that is rust based: https://github.com/typst/typst
oh my god i could use this for my school assignments - this looks great :o
Avatar
the problem of latex is that you have to use it everyday, otherwise you struggle with it
Avatar
My biggest issues have been tables and system drawings. tabularx has helped a lot with tables
Avatar
and given that i have long periods where i don't use it, i just forget everything
Avatar
Avatar
Chairn
the problem of latex is that you have to use it everyday, otherwise you struggle with it
Aha, you put it into better words than I ever could. I cool down off of latex very quickly aswell. It's an unintuitive and easy to forget syntax
Avatar
i should probably have a file with every tricks i used at some point with some keyword to search for
Avatar
typst looks much better though, atleast in that aspect
Avatar
And why my GIF got deleted?
Replying to egyt Whyn't Krita?
Avatar
it was using so much vertical space for little content
Avatar
It was fine on my side 👀
19:23
So, now I check if I ordered everything in alphabetical order...
Avatar
don't!
19:26
there's a script that does that
Avatar
Will Still :^)
19:30
Maybe I'll catch some mistakes on the way
Avatar
Avatar
Chairn
lemme introduce you to typst that is rust based: https://github.com/typst/typst
f3
19:30
my bud uses it for lectures instead of latex
19:30
x100 speed up
Avatar
i've never used it or even looked it up, but a colleague tried it this year
19:31
i wonder if it's possible to do some drawing with it
Avatar
typst is super easy to use aswell :o
19:38
lets see if i can actually do something cool with it kek
Avatar
heard of AsciiDoc?
Avatar
i dont care about Esperanto justatest
Avatar
Avatar
meloƞ
lets see if i can actually do something cool with it kek
is it easy to align cells though ? in latex, it's a pain in the ass
Avatar
their documentation is quite good, lets see
19:45
give me like 10 minutes to play around with it :D
Avatar
can you align all vertically to the heighest (rightmost) cell ?
Avatar
might take longer than expected - a lot of stuff to read
Avatar
Make value selector behavior consistent with the generic button logic. Consistently check for completed mouse clicks on the value selector UI element instead of handling some mouse down and mouse up events separately. Fix text mode being activated when moving the mouse over value selectors with held down mouse button. Fix text mode being deactivated immediately when the mouse leaves text area while holding down the mouse button, which is inconvenient when selecting text. Remove unnecessary us...
Avatar
Avatar
Chairn
can you align all vertically to the heighest (rightmost) cell ?
didnt really check with grid and cell allignment yet, but their general text allignment is pretty straight forward - will test with grids soon aswell
Avatar
sorry to disturb you, are there any known bugs about maps crashing the client? like map size too big or anything? its about a 2000x125 map
20:26
last time I fuzzed the format I stopped after around 20000 crashes 😄
20:27
2000x125 shouldn't be too large though
20:27
unless you have a lot of layers
Avatar
do quads matter?
Avatar
if you use Windows, you should get a crash log in the dumps folder that would help debug this
Avatar
there are some layers of opacity here, hmm
Avatar
Avatar
Balami
do quads matter?
I'm not aware of crashes with quads if you only use the client tool to edit the map
20:29
Crash log would be useful
20:29
Or send the map
Avatar
I remade the Ukrainian translation, because its quality was "meh". Thanks to everyone who helped me on the way (especially @BlaiZephyr and @heinrich5991 ❤️)

Checklist

  • [x] Tested the change ingame
  • [ ] Provided screenshots if it is a visual change
  • [ ] Tested in combination with possibly related configuration options
  • [ ] Written a unit test (especially base/) or added coverage to integration test
  • [ ] Considered possible null pointers and out of bounds array indexing
  • [ ] ...
Avatar
MY PR GOT A PALINDROME NUMBER 🤯 (edited)
20:33
ye im asking for a friend, he is reading 😅
Avatar
egyt did you run a script to sort your file? it seems to be completly off :o
Avatar
scripts for those who have skill issues, real chads do everything by hand
Avatar
I didn't 👀
Replying to @meloƞ egyt did you run a script to sort your file? it seems to be completly of…
Avatar
https://github.com/ddnet/ddnet/tree/master/scripts/languages there are some scripts for language files in here
DDraceNetwork, a free cooperative platformer game. Contribute to ddnet/ddnet development by creating an account on GitHub.
Avatar
Avatar
egyt
I didn't 👀
may I edit your PR to sort the file so that the diff is better?
owo 1
Avatar
Why are you even asking?
Avatar
Avatar
egyt
Why are you even asking?
dunno, maybe you want to do it yourself
Avatar
Doesn't crash for me on Windows with Vulkan/OpenGL, please send crash log if you/they have one
Avatar
Avatar
Robyt3
Crash log would be useful
Avatar
Well, will that break my alphabetical order?
Avatar
Avatar
Shkyyl
Click to see attachment 🖼️
Do you have an .RTP file?
Avatar
Avatar
egyt
Well, will that break my alphabetical order?
it will break the order you currently have, yes
Avatar
Avatar
Shkyyl
nah
Does it crash consistently? Maybe you could run with a debugger attached to get a stack trace
Avatar
its crashing when initalizing map logic
Avatar
okay, if it is that necesary :^(
Replying to @heinrich5991 it will break the order you currently have, yes
20:41
was sorting it for so long
Avatar
not really necessary, but it will clean up the shown diff and keep its style with other translation files :P
Avatar
Avatar
egyt
was sorting it for so long
I told you not to 😦
Avatar
Avatar
meloƞ
not really necessary, but it will clean up the shown diff and keep its style with other translation files :P
it's necessary in the end, since the script will do that on the next translation update otherwise
Avatar
I was sorting it from the start, just so you know
Avatar
thats some serious dedication
Avatar
sorry 😦
Avatar
Avatar
egyt
was sorting it for so long
heinrich literally said that there's a script for that and yet you decided to do it yourself
Avatar
well, it was also comfortable to me, so I could see which strings I have translated and which not
20:43
@MilkeeyCat ^
Replying to egyt I was sorting it from the start, just so you know
Avatar
yo robyt3 we are doing experiments, i deleted almost all layers and the music, now it doesnt crash - hmm gotta test alot for more info
Avatar
I tried on Ubuntu but it also doesn't crash there for me. Please let me know if you narrowed it down further and send a minimal map that causes the crash
Avatar
i removed the music and now it works, lol
21:06
yep we switched back and forth between with music and without music versions, lucky guess, basically the first thing i tried 😅
Avatar
Can you try to create a map with only the music that still crashes?
21:13
it still crashes on that
21:13
sorry for the name 😅
21:14
do you need more tests? like testing the music files individually?
Avatar
If you have the time, yeah, I can't reproduce the crash unfortunately
Avatar
this is the bugged music
Avatar
Avatar
Balami
sorry for the name 😅
cool sounds but it doesnt crash for me either
Avatar
yeah it works for most of us
21:19
only one player had those issues yet (or only one mentioned issues) (edited)
Avatar
-> also did the reverse test, with only that file removed, shkyyl was able to join
Avatar
Reported by Balami and Shkyyl on Discord. The client crashes consistently on "Initializing map logic" System information: 2024-06-04 22:35:43 I engine: running on unix-linux-steam-amd64 2024-06-04 22:35:43 I engine: arch is little endian 2024-06-04 22:35:43 I engine: operating system version: Linux 6.8.7-201.fsync.fc39.x86_64 (x86_64, #1 SMP PREEMPT_DYNAMIC TKG Sun Apr 28 08:28:35 UTC 2024); "Steam Runtime 3 (sniper)" Seems related to a particular map sound. Minimal ma...
👍 1
Avatar
Are you using the Steam version or from https://ddnet.org/downloads/ ? You could try the other to see if that changes anything
21:25
Ah, yeah, log says Steam
Avatar
i'm playing on steam version
21:25
yeah but i tested from the ddnet.org too
Avatar
stupid bug froze my entire computer
Avatar
just an addition, it even crashes with the "use sound" checkbox disabled
21:29
Wonderful said he downloaded sound from internet and converted it to opus through convertio, same converter he used for other sounds
Avatar
can he - for quick measure just use another converter? for example this one: https://audio.online-convert.com/convert-to-opus (edited)
Convert your files to the new OPUS audio format with this free online audio converter. Choose among several settings to obtain high quality results.
Avatar
should just downlaod wavpack
pepe_holy 1
Avatar
Loading map sounds fails when sound is disabled globally, since no sounds will be loaded then, but this should not show the warning "Some map sounds could not be loaded. Check the local console for details."
Avatar
Avatar
Balami
just an addition, it even crashes with the "use sound" checkbox disabled
Probably because he didn't restart the client after changing the "use sound" setting, I don't think it should try to load the sound at all otherwise
Avatar
the mapper uploaded a new version, they used the converter mentioned and now it seems to work (edited)
Avatar
ban convertio fr
f3 2
Avatar
should still not crash using convert.io
Avatar
well, he used convertio.co
Avatar
or convertio.co
21:43
(or any converter)
Avatar
idk how it works but using another converter for this exact sound worked
Avatar
The sound also works on Windows (and my Ubuntu), but it shouldn't crash for anyone with any sound (edited)
Avatar
@Jupstar ✪ I got it to 3.9KB/s max for 14 inputs with bit packing and the xor trick.
23:18
2.1KB/s with infrequent sending
23:19
which is only like 1.8x normal
Avatar
Avatar
Tater
@Jupstar ✪ I got it to 3.9KB/s max for 14 inputs with bit packing and the xor trick.
Can I try aswell? Are you still working on the same pr branch?
Avatar
yes but I haven't commited anything because all the code is just for testing and very messy
23:33
also I'm only doing the client compression without decompressing on the server yet
Avatar
I'll give it a go tomorrow
Avatar
I'm working with the assumption that m_Size can be removed and m_AckGameTick and m_PredTick can be added only once for the whole bundle of inputs. I also don't touch the original regular input at the moment but if you added that to the bundle it could save up to 0.5KB/s I think
Avatar
Avatar
Tater
I'm working with the assumption that m_Size can be removed and m_AckGameTick and m_PredTick can be added only once for the whole bundle of inputs. I also don't touch the original regular input at the moment but if you added that to the bundle it could save up to 0.5KB/s I think
I'm a little unsure whether you can just add those ticks once per bundle ngl. I'd have to dig around to make sure since it's been a while
Avatar
well each input just increments both of them by 1
23:37
so as long as you know how many inputs are in the bundle you can just put it once
Avatar
If you are certain that it's always only ever incremented, it should be fine
Avatar
it depends how you want to handle it on the server
23:38
m_AckGameTick should only ever be the highest value that the server has ever recieved so you don't even need to increment actually
23:38
unless it's -1 but you put a special exception for that
23:39
m_PredTick is always sequential
23:40
you can check before sending the inputs that they are actually generated by the client sequentially and fill in any missing ones with a copy of the previous which will get XORed into 0s and compress well
23:41
I'm still not sure what to do with TargetX and TargetY. If you zoom out to the maximum it fits into 17 bits so I'm just packing it into that size for now. Maybe we can simply make it stop scaling with zoom and then it should fit into 10-12 bits
Avatar
we explicitly made it scale with zoom so that the server can know what you point at
23:45
note that you can unlock zoom and zoom out further
Avatar
doesn't the server also know your zoom value?
Avatar
not directly. it knows what area the client wants to receive data for
23:51
Stack Overflow is the largest, most trusted online community for developers to learn, share​ ​their programming ​knowledge, and build their careers.
Avatar
scaling it by zoom also makes anticheat really hard
23:52
people get false banned all the time on FNG for playing with non standard zoom values
Avatar
I don't want to get into details of anticheat, but nonstandard zoom values in FNG already sound like cheats to me
Avatar
hmm I guess that's true
Avatar
Control find (CTRL+F, in the in-game console) seems to highlight more then it should when searching for strings with cyrillic characters. Screenshot: !DDNet_VNZVeQcRy2
Avatar
^ @archimede67
Avatar
actually it's probably still less expensive to just send the full 32 bit zoom value once per bundle and the non-scaled mouse positions then scale them on the server
23:59
and then just assume that clients won't change their zoom value extremely fast, a mouse position with wrong magnitude is still much better than no input at all (edited)
Exported 735 message(s)