Guild icon
DDraceNetwork
Development / developer
Development discussion. Logged to https://ddnet.tw/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 2022-12-11 00:00:00Z and 2022-12-12 00:00:00Z
Avatar
Avatar
Devinci
1. maybe keeping track of how many hammers / hooks there is between 2 players? That's usually how fights are (even tho players you are just "playing around" would also be here). 2. If a player gets hooked into freeze, there are players alive close the him, but he stays in freeze for X (a lot) of seconds, that would be blocking? Anyways, I feel like any "blocking algorythm" would still a human vote (with less votes to be successful) to confirm if a player is really blocking. Unless it's a really good trained ai xD. But yeah, as long as we have mods... it not too much of an issue?
that's not good
00:46
you will want to figure out what applied the force/velocity to the player (edited)
00:46
did he move by himself? ignore. did he get pulled/hammered? proceed with logic. eg. is the player in a freeze now. haven't looked at the netcode yet. but maybe there already is logic for that. I really hope the server doesn't blindly accept calculations done by the client. because this game seems to only do position/state updates for your and other players characters. I think the real issue is to "remember" things for a longer time -> who applied how much velocity (of what type) to the player, for example, how long did the player stay in the freeze, did the player respawn, counting how many "kills" the velocity issuer got within a specific time (only if people tried to kick them before). My idea of this would be a karma system. Killing players = -trust. Saving them = unchanged/+trust. This needs to be thought out more cleverly though. (edited)
Avatar
Avatar
Jupstar ✪
@nori so i am on wayland now. there is also a "allow tearing options" as expected starting with xwayland vulkan also does not warn that there is no immediate mode fps were good, around 13k but wayland clamped my FPS to around 1k and also vulkan warned that immediate not available so i build mesa from source now its completely broken xD xwayland: it shows 1k fps for few seconds then 10k fps then 1k agian etc. wayland: basically like before so i assume some packages are not ready yet. i dunno if the wayland protocol is only for the compositor, or under the hood also is a direct kernel call and i need to wait for a kernel update for now i cannot really test it yet, im not really sure if there is tearing with xwayland, but on 240hz with good fps tearing is hard to notice anyway :/ I'll try again next year xD
Kde Neon with Wayland DDNet is running pretty stable between 4k-5k fps
Avatar
375c9da R Adrenachill 5 Part 1, A Tinyhold - ddnet-maps
Avatar
Avatar
Yek
Kde Neon with Wayland DDNet is running pretty stable between 4k-5k fps
It used to run better for me before too. I used latest git code. But I'm more interested in the immediate mode anyway
Avatar
chillerdragon BOT 2022-12-11 08:55:43Z
Okay static sure but why? Why not do it the same way vanilla does it? (@heinrich5991)
ChillerDragon: if you move that variable out of the class and inside the function, the methods don't have to be class methods anymore and can be static instead
Avatar
better dont add 0.7 bloat at all ^^ chillerdragon: what heinrich basically is saying is. u make things more complicated than they are. the variable can live on the stack instead of class member
Avatar
chillerdragon BOT 2022-12-11 09:00:58Z
No worries we can remove 0.6 bloat after it’s finished (@Jupstar ✪)
better dont add 0.7 bloat at all ^^ chillerdragon: what heinrich basically is saying is. u make things more complicated than they are. the variable can live on the stack instead of class member
Avatar
Avatar
chillerdragon
No worries we can remove 0.6 bloat after it’s finished (@Jupstar ✪)
probably not bcs we'd drop all old ddnet clients
09:01
but if we add 0.7 support and have it for 1 year the same applies to all new ddnet clients
09:01
so better implement new network wait 1-2 years and then remove both 0.6 and 0.7
09:02
that would be the sanest thing to do
Avatar
chillerdragon BOT 2022-12-11 09:02:08Z
Both xd
Avatar
yes
09:02
7 players play on 0.7 xd
Avatar
chillerdragon BOT 2022-12-11 09:02:49Z
Because ddnet isn’t supporting it
Avatar
and that's also good like that
Avatar
chillerdragon BOT 2022-12-11 09:03:03Z
Ddnet basically killed vanilla
Avatar
it didnt kill vanilla as a game mode but yeah tw client is dead
09:03
and it should stay dead
Avatar
Avatar
chillerdragon
Ddnet basically killed vanilla
how so? Did vanilla have many more players before ddnet?
Avatar
chillerdragon BOT 2022-12-11 09:04:05Z
before 0.7 I feel yes
Avatar
but ddnet also existed then
09:04
you mean we killed ddnet because we didn't go to 0.7
Avatar
so u basically say 0.7 killed tw? XD
Avatar
we killed vanilla*
Avatar
chillerdragon BOT 2022-12-11 09:04:38Z
ddnet not updating was followed by a decrease in vanilla activities
Avatar
I remember vanilla was pretty empty even 12 years ago. That's why I went to ictf and later ddracemax, because no one was online playing vanilla
Avatar
chillerdragon BOT 2022-12-11 09:07:20Z
I don’t have proper statistics. I just see CTF5 empty way more often than it used to be in 0.6 times. And rqza once told me the pro scene is also struggling. Which makes sense because all pro players are forced to switch clients all the time if they also want to play ddnet with full feature support.
Avatar
So if we move DDNet away to a different protocol we make it even worse for Vanilla, not better?
09:07
because they still have to switch clients
Avatar
chillerdragon BOT 2022-12-11 09:08:04Z
That’s my assumption
Avatar
If vanilla would be dead on its own without DDNet then I wouldn't blame DDNet for that
Avatar
chillerdragon BOT 2022-12-11 09:08:58Z
Yes but is it dead on its own?
09:09
I mean I would play vanilla for example if ddnet Client would allow me to
09:10
You can argue without ddnet I might have quit tw. But that’s why I’m saying all together is nice
Avatar
I don't think it's that much effort to start up another client to play something else
Avatar
chillerdragon BOT 2022-12-11 09:11:10Z
I think it is because you also do not have the 0.7 master in the client. And for me personally it’s not an option because I can not control my mouse in the vanilla client
09:11
Why would you start a new client if you do not see in the master what you are missing out on
Avatar
So why don't the vanilla players stay on 0.6? Was there anything good in 0.7 for them?
Avatar
chillerdragon BOT 2022-12-11 09:12:54Z
There is a relevant part of the vanilla players that play with vanilla client
09:13
OG old school pros that play only vanilla and new players
Avatar
then tell them to play vanilla on ddnet client
Avatar
chillerdragon BOT 2022-12-11 09:13:37Z
09:13
That’s fucked up
Avatar
no
09:14
0.7 added like 4-5 new features
Avatar
chillerdragon BOT 2022-12-11 09:14:11Z
What is the issue with 0.7?
Avatar
i doubt u miss them so much, and even if u could add some new stuff to ddnet
Avatar
chillerdragon BOT 2022-12-11 09:14:28Z
Or the teeworlds protocol in general?
Avatar
other than teeworlds, which is completely dead on github
Avatar
chillerdragon BOT 2022-12-11 09:14:34Z
Why do you even want to fork?
Avatar
dude
09:14
oy is dead
Avatar
chillerdragon BOT 2022-12-11 09:14:55Z
So?
Avatar
and ego
Avatar
chillerdragon BOT 2022-12-11 09:15:09Z
Imo the protocol is still fine
Avatar
We want to keep things working the same for our community, didn't like the new skins of 0.7, so we stayed on 0.6
Avatar
so why the fuck u want any kind of vanilla support or stay compatible to upstream?
09:16
if teeworlds would have other maintainers that are open to make teeworlds really good again. with proper mod support and modernizing network etc. but this is simply not the reality
👍 1
Avatar
sixup added a few crashes and other bugs. Adding the reverse will have similar risk I think
Avatar
vanilla is basically maintained by robytes unmerged PRs
Avatar
chillerdragon BOT 2022-12-11 09:17:00Z
Isn’t that a pro? Not a con?
Avatar
u could go even further: if we add support we are responsible for it so if we dont properly test it and it creates more risk for security problems. then its our fault for adding support for things we dont even care about
Avatar
chillerdragon BOT 2022-12-11 09:17:37Z
It just reduces the chance of having to update to 0.8 any time soon
09:17
I care
Avatar
yes nice that u care. but if i add a pr. i test it on latest ddnet with latest ddnet server
09:18
and not on vanilla
Avatar
chillerdragon BOT 2022-12-11 09:18:50Z
Sure already in the CI in my local branch
09:19
It’s so hard for me to understand how nobody seems to be bothered that there is this incompatibility to this small other world
Avatar
we have these discussions since years now. if we just would have give up on all these backward compability. we'd be far further i dunno why its so important to you and sadly also to heinrich, but maybe snap back to reality and see the facts vanilla is dead and it should stay dead. dont bloat ddnet with dead stuff
👍 1
Avatar
chillerdragon BOT 2022-12-11 09:20:48Z
How further?
Avatar
Anything you want in new protocol?
Avatar
chillerdragon BOT 2022-12-11 09:21:03Z
What is holding you back?
Avatar
encryption, esp whispers new threading model to overcome kernel calls better checks already inside the network thread so the higher level components can rely on a working packet without additional checks less workarounds for all the extensions we have
09:22
so remove bloat etc.
Avatar
encryption is a good point
Avatar
and yeah i dunno if it helps but give QUIC a try
09:22
maybe it helps a bit with ddos
Avatar
yes, ddos protection would be my main reason for a new protocol
09:23
so we'd have to end up switching to something standard instead of rolling our own
Avatar
yeah sounds sane 😄
Avatar
I'm currently experimenting with QUIC
09:33
maybe it'll progress a little more during christmas break 🙂
Avatar
sounds cool
Avatar
I'm wondering if hosters provide QUIC DoS protection yet, but the situation should only improve, assuming QUIC will actually be adoped widely
Avatar
remove sixup
Avatar
I don't think I've seen QUIC DoS protection
Avatar
cloudflare?
09:36
maybe with enterprise xd
Avatar
maybe we can slap the source engine protocol on top ^^
Avatar
sometimes i receive http/3 from cloudflare webs
Avatar
Avatar
heinrich5991
maybe we can slap the source engine protocol on top ^^
you want to wrap quic inside source engine packets? 😄 That sounds messy
Avatar
Avatar
Ryozuki
maybe with enterprise xd
we have enterprise
Avatar
oh lol
09:38
for free?
Avatar
Avatar
deen
you want to wrap quic inside source engine packets? 😄 That sounds messy
yes
Avatar
Avatar
deen
you want to wrap quic inside source engine packets? 😄 That sounds messy
but only as an experiment. regular one would be just QUIC
Avatar
I don't know how Cloudflare would react to a long-living QUIC connection though
Avatar
if you're talking about cloudflare's http3 support, that doesn't help us
09:39
cloudflare only talks http/1.1 to the backend
Avatar
No, you can enable it to talk http3
Avatar
to the backend?
Avatar
huh
09:40
got a link?
09:40
I think you have access to the ddnet cloudflare interface, I enabled that a few days ago
Avatar
that looks like it's not to the backend
Avatar
oooh, it's only http/2 to origin
Avatar
only http2
Avatar
sorry, misremembered :/
Avatar
but that's also news to me
09:41
^^
Avatar
u can use a origin cert iirc
09:41
and its http2?
09:41
Avatar
that seems unrelated to http2/3
Avatar
i guess xd
Avatar
Avatar
chillerdragon
What is holding you back?
0.7 sucks and there's only ddnet having players lol, it's dead af
09:49
you start the game you only see playercount thanks to sixup
Avatar
Talking about the server (because this is the main place for modifications), I'm wonder why there is no some 'protocol' internal API which could hide most of the "sixup" and ddnet versioning stuff? E.g. for the Snap() methods implementation instead of many if(SnappingClientVersion >= VERSION_DDNET_MULTI_LASER) {} else {} like here: https://github.com/ddnet/ddnet/pull/5886/files#diff-df2ce2969f31b753247baa59b8cc1c53ee6a8d1ebb3e84867dff031d72e1487bR84-R108 we can have some SnapLaserObject(const SSnapContext &Context, int SnapID, const vec2 &To, const vec2 &From, int StartTick, int Owner, int Type) // I've put sixup / ClientVersion into the Context This SnapLaserObject() can then snap CNetObj_Laser or protocol7::CNetObj_Laser or CNetObj_DDNetLaser or whatever is better for this context (client version). This way we can have less branches in the high level game code and have protocol detail in one place (instead of spreading the protocol through all CEntities and other high level classes). I see that this approach would have issues with 0.7 in cases of a data member moved from one object to another (ClientInfo ) but it is still doable and will cleanup the game code from protocol details used here/there/everywhere. Also there are cases in which we try to reduce the server load by fetching/calculating the data only for the clients which are able to use it. It is also solvable via the Context — if the protocol API implementation will fetch some extra data for some clients it still would be a simpler code.
Avatar
yes we talked about abstractions, but i guess in case of sixup simply bcs its kinda lot of work
Avatar
You (as the dev team) seems to care about maintenance burden, speaking of which the abstraction would be quickly payed out. (edited)
Avatar
in the end its still the question if this abstraction is really worth it over a completely new design, that is more future ready but generally abstractions are usually a good sign for future compability e.g. if u swap a library or some code^^
Avatar
Avatar
Kaffeine
You (as the dev team) seems to care about maintenance burden, speaking of which the abstraction would be quickly payed out. (edited)
yep probably yes
10:22
but its still hard to maintain
10:22
bcs u would test the 0.7 stuff
Avatar
I'm talking about the existing/merged code and also about if(SnappingClientVersion >= VERSION_DDNET_MULTI_LASER) {. (edited)
Avatar
yeah, but i doubt this was bcs whoever wrote it didnt think about it at all, but more to get things done this is often a problem in development tbh. A more clear design takes more time usually So i understand what u mean, i'd still argue even with abstractions/better design. u end up breaking the abstraction at some point to have it work for whatever is added in future and might still break other code(e.g. 0.7) e.g. lets say u add a completely new skin system, u might accedentially break the 0.7 stuff without noticing bcs its not tested
10:26
i'd also like to rewrite graphics_threaded, bcs i think its not really well designed. But i'd need to test all opengl backends and maybe 1 month later i have a better idea and have to test everything again
Avatar
learath diid it iirc
Avatar
Avatar
Kaffeine
Talking about the server (because this is the main place for modifications), I'm wonder why there is no some 'protocol' internal API which could hide most of the "sixup" and ddnet versioning stuff? E.g. for the Snap() methods implementation instead of many if(SnappingClientVersion >= VERSION_DDNET_MULTI_LASER) {} else {} like here: https://github.com/ddnet/ddnet/pull/5886/files#diff-df2ce2969f31b753247baa59b8cc1c53ee6a8d1ebb3e84867dff031d72e1487bR84-R108 we can have some SnapLaserObject(const SSnapContext &Context, int SnapID, const vec2 &To, const vec2 &From, int StartTick, int Owner, int Type) // I've put sixup / ClientVersion into the Context This SnapLaserObject() can then snap CNetObj_Laser or protocol7::CNetObj_Laser or CNetObj_DDNetLaser or whatever is better for this context (client version). This way we can have less branches in the high level game code and have protocol detail in one place (instead of spreading the protocol through all CEntities and other high level classes). I see that this approach would have issues with 0.7 in cases of a data member moved from one object to another (ClientInfo ) but it is still doable and will cleanup the game code from protocol details used here/there/everywhere. Also there are cases in which we try to reduce the server load by fetching/calculating the data only for the clients which are able to use it. It is also solvable via the Context — if the protocol API implementation will fetch some extra data for some clients it still would be a simpler code.
The code is not the cleanest mostly because I was about to have a mental breakdown when implementing all that. I had a cleaner abstraction like you suggest but there was a bug that I just couldn't find. So I took 3 days off, came back and just branched the fuck out of it without moving the code
11:30
Atleast for the sixup stuff. The version branches are by everyone. I think no one really changed their style after greyfox first started adding them
11:32
Oh another problem I've had with abstractions is that you end up with massive function signatures. Going out of the class you are snapping/creating a netmsg in means you need to either pass like a dozen things, or create a friend class, both not great
Avatar
Avatar
chillerdragon
It’s so hard for me to understand how nobody seems to be bothered that there is this incompatibility to this small other world
Why? It'd be absurd if we weren't bothered by an issue that affects 1k people. It's not that weird that no one is really very concerned about a dozen or so people that have to use 0.7 for god knows what reason
Avatar
Avatar
Learath2
The code is not the cleanest mostly because I was about to have a mental breakdown when implementing all that. I had a cleaner abstraction like you suggest but there was a bug that I just couldn't find. So I took 3 days off, came back and just branched the fuck out of it without moving the code
I think you didn't have to work alone. You could give your branch to someone else.
Avatar
I did leave it there for a bit, no one else wanted to touch it
Avatar
Avatar
Learath2
Oh another problem I've had with abstractions is that you end up with massive function signatures. Going out of the class you are snapping/creating a netmsg in means you need to either pass like a dozen things, or create a friend class, both not great
Yes, so in some cases I had to add a number of Context classes just to bypass the data. It's still worth it. (edited)
Avatar
Avatar
Learath2
I did leave it there for a bit, no one else wanted to touch it
You severely overestimate the amount of people that cared about any kind of 0.7 support. I wanted to experiment, heinrich sort of cares about vanilla compatibility but he is permabusy and that's it
Avatar
Avatar
Learath2
I did leave it there for a bit, no one else wanted to touch it
I wish I knew it. (edited)
Avatar
Slicing a demo removes all demo markers. This also applies to all replay demos, because they are always sliced when done. Reported by @teini94.
Avatar
I work (time to time) on a mod-specific client and I have to send some mod specific snap data, so in my case there could be a lot of if(SnappingInfclassClientVersion >= VERSION_INFC_FORCED_SPEC) {.
Avatar
@Robyt3 Why didn't you make separate variable for editor smooth zoom, i think most people would like to turn it off but remain in-game smooth zoom justatest
Avatar
Avatar
Anime.pdf
@Robyt3 Why didn't you make separate variable for editor smooth zoom, i think most people would like to turn it off but remain in-game smooth zoom justatest
I didn't make sense to me that someone would use smooth zoom ingame but unsmooth in editor when both work exactly the same.
Avatar
Avatar
Learath2
You severely overestimate the amount of people that cared about any kind of 0.7 support. I wanted to experiment, heinrich sort of cares about vanilla compatibility but he is permabusy and that's it
You severely overestimate the amount of people that cared about any kind of 0.7 support.
11:59
key point kek
11:59
afaik me and jupstar dont care
Avatar
Jupstar would actively be for removing it, let alone care about it 😄
Avatar
well me too tbh xd
12:00
its code bloat
12:00
and anyone playing ddnet on 0.7 is actively hurting themselves lol
Avatar
Avatar
Robyt3
I didn't make sense to me that someone would use smooth zoom ingame but unsmooth in editor when both work exactly the same.
Mapping is not playing, personally i think about mapping as a task that requires more efficiency then pleasure from smooth zooming, waiting for zoom animation makes process kinda delayed and weird, even if its 0.3s or smth, i had small convo about this today with aoe and louis, in general they share this idea, and option to disable it(and not disable other feature) makes sense
Avatar
One way or another, it might be wise to abstract Snap() implementations from the protocol. We can remove protocol7 but we'll have various versions of DDNet client. We'd better hide the protocol implementation details from the high level game code.
Avatar
Add ed_smooth_zoom_time option for smooth zooming in editor separate from the cl_smooth_zoom_time that's used for smooth zooming ingame, as some mappers seem to prefer unsmooth zooming in the editor but smooth zooming ingame.

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
  • [ ] ...
Avatar
Avatar
Kaffeine
One way or another, it might be wise to abstract Snap() implementations from the protocol. We can remove protocol7 but we'll have various versions of DDNet client. We'd better hide the protocol implementation details from the high level game code.
yeah, i was thinking how i'd implement the game code generally a few times already: the network code should be completely uncoupled, and also run in a different thread. It should generate valid game messages (checked network packages for invalid input), which can be handled by all objects referring to these messages, probably by registering to a msg callback (depending on if its a server or client, more later). so no more immediate mode, a character handler would thus only understand the character index, but no the position of the character, since this is part of the character itself. all entities should define 2 cores, a tick core and a prediction tick core. both share the same logic so they can be cleanly used in an array and accessed based on the index that is currently handled m_aCore[2] in some .cpp: m_aCore[CurTickMode] = ... m_aCore[PrevTickMode] = ... (e.g. if one must access the previous state) (note here prev: is basically the current for client, while cur is the prediction, on server both would be the same, so u basically only access a core) I don't think a third core is needed (smth like prev core), this usually only creates delays. If we want smoother interpolation for smth like cursor movement we can think about increasing the package count for such things, the way its handled rn is really weird (tsfreddie and me talked about it long before). If the server sends fewer cores/snapshots the client should simply rely on its prediction cores (swap the current prediction core with the current simulation tick). Smooth prediction should uses the 2 cores to calculate whatever state is wanted. and it should only do it when its needed, and that's usually at rendering. (edited)
12:43
The main purpose i want this merged is, that we can merge server code with client code again. The client's prediction tick is basically a server that runs one tick ahead (and if the server only sends cores every few ticks, it can still rely on its prediction code), the server basically only runs on the current tick and "smooth" prediction is not needed. So these could be abstracted in inherited code or completely new code CRenderCharacter whatever... On client side the current tick core is overwritten by the server or by prediction tick if no current server core exists. On the server this is obv not needed. so generally, esp. for game related stuff, the client should basically only extend server side stuff. For edge cases we call still alter the design as needed, generally tho the difference should be minimized. This probably also makes it easier to write mods with prediction in mind in ddnet and ddnet client tbf i've no idea why prediction code rn is just duplicate code rn So overall, even game msg should be invisible for gameplay stuff. A clean design that hides what happens actually and only acts if game objects are more like a state machine, which can be accessed by whatever relies on it. Rn we often access the gameclient or the snaps for such info i hope its clear i know i suck at explaining whatever my brain thinks lol (edited)
👍 1
Avatar
71139f3 Add separate option for smooth zooming in editor - Robyt3 0f53061 Merge #6117 - bors[bot]
Avatar
in theory we could even increase traffic for the sake of better prediction, as soon as input from client hits the server and the server would share it with all clients again the prediction tick, which runs every frame on the client, would be able to respect this input, similar on how local input would also be respected), so it can assume what comes next sooner -> the smooth prediction is faster adapting to this change. even if that would give, in best case, a maximum of 20ms better prediction, it would reflect the "real" ping much better (edited)
13:12
man i have 1 trillion ideas to improve everything, we need smth like a playground where we can do more aggressive changes without thinking too much about consequences 😄
Avatar
We added something like that for sixup, we have a DDNet7 flag in all 0.7 ranks
13:16
so we can delete them again if something goes wrong
13:17
We can also run some kind of beta servers if you want to try new features
Avatar
well i want client and server changes actually 😄
13:18
no compability garantuees
Avatar
Would be fine to host it I think
13:22
make the DDNet7 an integer instead of boolean and use value 2, then we could run some experiments
13:22
For client I can make a new Steam release channel (preview or experiment)
Avatar
sounds interesting indeed. we should maybe extend the next normal release by a warning which we can someday trigger by e.g. the info.ddnet.org json, which will tell if older clients will not be supported (or incompatible with newer servers -> no players are playing on that server anymore) (ofc only trigger this warning some day in future, just so we have this feature ^^) esp. ddnet from e.g. debian packages are probably often outdated, which kinda sucks ^^
Avatar
Not so many players from Linux, so some workaround like an error message when joining the server would be good enough
Avatar
yeah, but i also meant the few ppl that always stay few releases behind
13:51
but i guess they'll notice if no servers pop up
13:51
so probs not needed too much
13:52
but anyway, i think a playground could be cool im not yet sure if it should be a seperate ddnet project tho. it will probably break quite a bit of stuff, which makes it hard to port normal release stuff to the playground and vice versa
Avatar
When slicing a demo, also copy the demo markers that are within the sliced segment to the new demo. This also fixes timeline markers not being added to replay demos, as the replay demos are always created by slicing. Closes #6116.

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 ...
Avatar
Avatar
deen
Not so many players from Linux, so some workaround like an error message when joining the server would be good enough
A nice to have feature would be a textbox with such a warning in future clients - during the enter process like the password box
Avatar
One Question I have with this game would be if you use something special for the fullscreen mode. My screen dozes off when I alt-tab out of the game after a long session. I fix it by turning off my monitor and turning it back on. Might just be some NVIDIA/monitor optimization or something. But it only happens for the DDNet game client.
Avatar
Avatar
default
One Question I have with this game would be if you use something special for the fullscreen mode. My screen dozes off when I alt-tab out of the game after a long session. I fix it by turning off my monitor and turning it back on. Might just be some NVIDIA/monitor optimization or something. But it only happens for the DDNet game client.
r u on linux?
Avatar
Windows 11 (checking what version brb) (edited)
Avatar
what do you mean by dozes off? it goes into sleep?
Avatar
no. screen is black. basically.
14:11
like it doesn't draw anything else now. (edited)
14:11
only the game
Avatar
so u play in fullscreen and it gets black when u alt tab after a while?
Avatar
after a long session, yea
Avatar
and it stays black?
14:12
i fix it by "restarting" my monitor
Avatar
so it gets black when u tab in again?
Avatar
no then the game gets drawn again
Avatar
mhh
14:12
next time it happens press WINDOWS + D
14:13
but this sounds like a bug in the driver or windows to me
14:13
whats ur GPU, what driver version are u on?
14:13
ddnet should never be able to control what happens outside of ddnet
14:13
i dont see any reason ddnet could cause this tbh
Avatar
NVIDIA GeForxe RTX 3090 x 2
14:14
latest game ready drivers
Avatar
Avatar
Jupstar ✪
i dont see any reason ddnet could cause this tbh
I mean it is weird because it only happens for ddnet That's why I asked if you use some hacky fullscreen implementation (edited)
Avatar
yeah but as soon as ddnet is minimized its out of ddnet's control
14:14
also i never heard of such a problem before
14:15
we use SDL2
14:15
the windows version is indeed bit outdated
14:15
dunno if it could cause such problems on win11 tho
Avatar
I mean next time it happens I can record it and send it in
Avatar
yes and try WINDOWS + D, which minimizes all apps
Avatar
but I will try Windows + D
Avatar
and maybe even ctrl + alt + del
14:16
i cannot imagine really how ddnet should have this control, but i'd love to be proven wrong xd
Avatar
7958b99 Copy the demo timeline markers when slicing a demo - Robyt3 4695a6b Merge #6118 - bors[bot]
14:21
When the client stops a replay demo and tries to remove the temporary file when being disconnected, it's not checked whether a recording of a replay demo has ever been started. In this case the filename is empty, which leads to the client trying to delete the user's directory, which will fail with an error message, as it's a folder and cannot be deleted with the function designed for deleting files. This is fixed by calling the function DemoRecorder_Stop to delete the temporary demo file...
Avatar
I initially made it so only one hat key can be active at the same time, which seemed sensible for actual joystick POV hats that can only be moved to exactly one of 4 or 8 directions. But for controllers that map the D-Pad to hat inputs this doesn't work well, as you can't jump while moving, as the key for moving will be released when jumping. @Cheeser0613
Avatar
144a692 Fix client attempting to delete user directory when stopping replay demo - Robyt3 c963104 Merge #6119 - bors[bot]
Avatar

Checklist

  • [ ] 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
  • [ ] Changed no physics that affect existing maps
  • [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-ad...
15:25

Checklist

  • [ ] 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
  • [ ] Changed no physics that affect existing maps
  • [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-ad...
Avatar
Avatar
GitHub
Click to see attachment 🖼️
LOL
Avatar
Avatar
Jupstar ✪
ah and make sure to scale player pos to viewport size
i dont understand the size thing, what is CalcScreenParams returning exactly? And how do i convert it to the unit used for players?
Avatar
explaining it in details is very hard, it makes sense mathematically but just imagine it like this teeworlds only allows certain aspect ratios, and depending on that it will use ur current aspect ratio and clamp it to some values it considers as "max" into width or height
Avatar
Avatar
Jupstar ✪
Amount is clear I guess. You want resolution independent scaling. The backend's screen mapping will scale down all variables so we have normalized values across all resolutions, so that you end up in a NDC. Basically how pretty much all projection matrices would also do it. Now sqrt(Amount) is the length of one side of the new resolution. I guess this is clear too? Pretty basic geometric math. Now lets do some math. Imagine we subsitute the Amount at the very last step, even if it breaks math. But we want to transform into a different resolution anyway.. in the resolution of Amount: x * y = x * y | / y (x * y) / y = x | * x (x * y) * (x / y) = x^2 | sqrt sqrt(x * y) * sqrt(x / y) = x At this point it's clear where our journey ends xd x / y is the Aspect ratio.. The function takes the Aspect ratio as parameter so our new x is: x = sqrt(Amount) * sqrt(AspectRatio) and y is y = sqrt(Amount) / sqrt(AspectRatio) now look at the original formular float f = sqrtf(Amount) / sqrtf(Aspect); *w = f * Aspect; *h = f; its the exact same. f is basically = y and we go from y to x by multipling AspectRatio And AspectRatio / sqrt(AspectRatio) = sqrt(AspectRatio) You can think about this geometrically too, but I cannot explain it. Draw it on your paper or watch some videos about geometrical mean of sqrt. About WMax and HMax. Basically disallow zooming. And yes / 32 is to get the tile count at normal zoom
here is the mathematical proof if u care
15:51
the message bellow also explains it with an example
Avatar
Avatar
Vy0x2
i dont understand the size thing, what is CalcScreenParams returning exactly? And how do i convert it to the unit used for players?
i am not sure rn how player coords are saved, if they saved normalized, like 1 = 1 tile simply scale it by tile size else normalize it first.. i think 1 physic tile = 32.0f
15:53
"normalize" in a sense of normalizing it independent of whatever we use these values for
15:53
a tile size is 64 i think ^^
15:56
MapScreenToWorld is maybe more interesting if u ignore parallax etc. it shows u how the screen points are built
Avatar
FRS would increase the FPS? tee_thinking
Avatar
Avatar
Jupstar ✪
a tile size is 64 i think ^^
but its probs only 32 probably mh
Avatar
Avatar
Yek
FRS would increase the FPS? tee_thinking
if u render smth complex yes
15:57
in entities it would probs destroy performance
Avatar
Avatar
Jupstar ✪
i am not sure rn how player coords are saved, if they saved normalized, like 1 = 1 tile simply scale it by tile size else normalize it first.. i think 1 physic tile = 32.0f
okay thanks i made some progress :-)
Avatar
5c445fe Update simplified_chinese.txt - Cheeser0613 dd2f12d Update simplified_chinese.txt - Cheeser0613 95528af Merge #6121 - bors[bot]
Avatar
15234ce Update traditional_chinese.txt - Cheeser0613 ac678e6 Merge #6122 - bors[bot]
Avatar
is there a way to hide the death messages on the top-right?
Avatar
Avatar
Teero
is there a way to hide the death messages on the top-right?
why do you wanto to hide it?
Avatar
its annoying... sometimes i just wanna hide everything except the necessary stuff
Avatar
cl_showkillmessages 0
Avatar
so hide death messages, chat, nameplates and the other stuff
Avatar
Avatar
murpi
cl_showkillmessages 0
oh ty
20:35
cool
Avatar
Avatar
Teero
oh ty
You can find all available commands here: https://ddnet.org/settingscommands/
Avatar
yy i was just lazy
Avatar
Avatar
louis
regarding the release candidate editor smooth zoom change: https://discord.com/channels/252358080522747904/746534464984973323/1051365509507067934
both zooms are now seperate (edited)
Avatar
ah didn't see that, nice
Avatar
d2f9105 Fix grep warning: stray \ before / - def-
22:03
57bf45f Update settings & commands - def-
22:04
f14d789 Version 16.6 - def- 193a8b9 add missing translating in russian.txt - lolipodass d26cb0e Update russian.txt - lolipodass 7e83beb Update russian.txt - lolipodass 37db1db Remove check for pResponseToken, which isn't used on this code path - Robyt3 03318c2 Bump friends limit from 1024 to 4096 (fixes #6096) - def- 3304cff Revert "Notify about possible save codes right away" - def- 7f8bfc3 Revert "Make semaphore wait handle EINTR" - def- 95c0207 Revert "Store ranks in sqlite first to not loose them if server shuts down during stuck mysql transaction" - def- 14400c8 Update brazilian_portuguese.txt - rffontenelle 269b23a Add separate option for smooth zooming in editor - Robyt3 febe54b Update simplified_chinese.txt - Cheeser0613 b79ca94 Update simplified_chinese.txt - Cheeser0613 4364967 Update traditional_chinese.txt - Cheeser0613
22:08
22:08
254d24b Version 16.6 - def- 57bf45f Update settings & commands - def- 115545c Merge pull request #230 from ddnet/pr-16.6 - def-
Avatar

Checklist

  • [ ] 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
  • [ ] Changed no physics that affect existing maps
  • [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-ad...
22:31
Reported in 16.6 by cyberFighter: https://discord.com/channels/252358080522747904/295908390956433410/1051623412507889756 The steam overlay seems to be involved too. ``` Error occurred on Sunday, December 11, 2022 at 23:15:16. DDNet.exe caused an Access Violation at location 00007FFC1281CEBA in module amdvlk64.dll Reading from location 0000000000000008. AddrPC Params 00007FFC1281CEBA 000001D04E9A55B0 000000C4F61FF2A0 000001D05171E570 amdvlk64.dll!vk_icdNegotiateLoaderICDIn...
Avatar
db021f8 Update spanish.txt - n0Ketchp 34a5609 Merge #6123 - bors[bot]
Exported 269 message(s)