08:00 < bridge> @sollybunny: was rejected upstream :/ 08:01 < bridge> hi chillerdragon 08:01 < bridge> how you doing 08:02 < bridge> Hungover 08:02 < bridge> U? 08:03 < bridge> morning 08:04 < bridge> morning hungover 08:08 < bridge> doing great 08:08 < chillerbot12> Elo @Assa I just wanted to remind you that: test if long map setup times cause client getting stuck in loading screen waiting for server response 08:08 < bridge> messing around with ddnet-insta 08:13 < bridge> !remind 40 fix ddrace teams 08:13 < chillerbot12> Helo chillerdragon I will remind you at Thu Sep 11 2025 08:53:39 GMT+0200 (Central European Summer Time) about your matter again. 08:53 < chillerbot12> Elo @chillerdragon I just wanted to remind you that: fix ddrace teams 09:32 < bridge> good bot 🙂 09:32 < bridge> :heartw: 09:47 < bridge> 20 seconds for map loading, server still responds, can't confirm that this is an issue 09:48 < bridge> I don't know if the client sends keep alives or something 10:12 < bridge> damn 10:12 < bridge> getting SMP is haaard 10:13 < bridge> Survival Multiplayer? :justatest: 10:21 < bridge> somehow the scheduler from core 1 dies after a few runs 10:21 < bridge> 20 seconds isn't very long, may add delays manually and try multiple minutes :justatest: I tested using very long map map download and couldn't reproduce the issue 10:26 < bridge> I wonder if the callback does anything else except swap in the graphic backend and updating the UI. Maybe it breaks if a single layer takes to long? 🤔 10:27 < bridge> The RenderLoading doesn't do networking I think 10:42 < bridge> okay after 100 seconds you fly out for too weak connection xD 10:46 < bridge> :brownbear: 10:57 < bridge> @chillerdragon wwhhyyy 10:58 < bridge> germans 10:58 < bridge> check ur phones in 2 mins 10:58 < bridge> im gonna hack em and play a loud sound 11:03 < bridge> you hacked my BOS Melder as well I assume 11:11 < ws-client> **** @ryozuki i saw a coffee machine being affected that is not connected to the internet <:tee_thinking:478629518358085653> 11:11 < ws-client> **** how did you hack into an airgapped device watfak 11:12 < ws-client> **** @Solly (bun bun) wat why? you mean my commit msg nitpick? 11:13 < ws-client> **** I would like to strictly enforce conventional commits for change log layout consistency and filtering. Also helps to differentiate between ddnet and ddnet-insta commits in the log. And helps reads to ignore things they dont care about. 11:13 < bridge> Haha wrong reply 11:13 < bridge> Why was it rejected upstream 11:14 < ws-client> **** shiet failed reply guess, i fell off 11:14 < ws-client> **** because heinrich 11:14 < ws-client> **** https://github.com/ddnet/ddnet/issues/9877 11:36 < bridge> Who knows how to make sure that in the game, if the player has registered /spec, then he disappears from the map while he is watching , it is in the ddnet or opengores code 11:43 < bridge> `sv_pauseable 1` 11:44 < ws-client> **** ew spec 11:45 < bridge> bro im fucking blind 11:45 < bridge> it says "char" nor "chat" 11:54 < bridge> @chillerdragon btw we are repeating work by kaizo-insta 11:54 < bridge> 11:54 < bridge> it woulda been easier to steal from them then redo the entire thing and they will have 2 of the same gamemode now so weve wasted their work 11:54 < bridge> i dont care if the one we have is comparably good 11:55 < bridge> credit is not required as they didnt create foot 11:55 < bridge> credit for who originally did maybes 11:55 < bridge> like ryo for tsmash 11:55 < bridge> also in ddnet-insta i cant /spec 11:55 < ws-client> **** ah so you just talk about wasted time hm yes 11:56 < ws-client> **** but the damage is already done we cant revert time now, can we? 11:56 < bridge> nop! 11:56 < ws-client> **** so what are you suggesting we do now? 11:56 < bridge> replying to: "i dont care if the one we have is comparably good" 11:56 < bridge> which is why . 11:56 < bridge> my msg on the github was just informing as i didnt previously know kaizo had a foot 11:56 < ws-client> **** well we all knew xd 11:57 < bridge> i didnt! 11:57 < ws-client> **** u must be new here 11:57 < bridge> i am! 11:57 < ws-client> **** ok so what now 11:57 < bridge> continue as previosuly 11:57 < ws-client> **** ok 11:57 < bridge> annoiy kaizo person a bit 11:57 < ws-client> **** not sure if it annoys him 11:57 < ws-client> **** i think he might have hard forked already 11:58 < bridge> oh true 11:58 < bridge> did pull from ddnet instead of ddnet-insta 11:58 < ws-client> **** if he cares he can let me know and i am ready to bend my self in any direction to make his fork life easier 11:58 < bridge> 👻 11:58 < bridge> spec broken in insta 11:58 < ws-client> **** whats broken about it 11:58 < bridge> 🥺 11:59 < bridge> command not found 11:59 < ws-client> **** in which mode? 11:59 < bridge> ddrace 11:59 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415637822412689519/image.png?ex=68c3eef6&is=68c29d76&hm=e879c9bc49eaef312073ad03c31b1004e0639d3e2ee9f2184f71b5e1eb872e7a& 11:59 < ws-client> **** seems like a bug indeed 11:59 < ws-client> **** could you open an issue? 11:59 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415637918231433289/image.png?ex=68c3ef0c&is=68c29d8c&hm=bf79587caa8edad05dc7988d09a6c90b4817407f2b27dc90b755c45cfd4f77a5& 11:59 < bridge> urmm 11:59 < bridge> did i ef something 11:59 < bridge> or is that just cuz i have test cmds on 12:00 < ws-client> **** i assume `aGameType[16]` is your problem 12:00 < bridge> oh i meant the fact it is test 12:00 < bridge> not the being cutoff 12:00 < ws-client> **** a 12:00 < bridge> i think everyone deals with that 12:00 < ws-client> **** do you have testings cmds 12:01 < bridge> yis 12:01 < bridge> with another server 12:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415638388328890409/image.png?ex=68c3ef7d&is=68c29dfd&hm=679cb87fa1eac855b54349391ab38ad09779b3fc7e6da2f09a58b4867a692e3f& 12:01 < bridge> and /spec works 12:05 < bridge> @chillerdragon free merge right 12:05 < bridge> https://github.com/ddnet/ddnet/pull/10885 12:05 < bridge> once ci clears 12:05 < bridge> these are the important ones tho 12:05 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415639468680937566/image.png?ex=68c3f07e&is=68c29efe&hm=38d15e91a3b3a724743edb4301014fe009a29b6540281f6130882c8a4a427436& 12:05 < bridge> so idk 12:11 < bridge> What parameter is needed when starting the DDNet Server to load the server.cfg config In the directory with the DDNet server itself 12:12 < bridge> -f or exec 12:12 < bridge> I also recommend deleting system wide configs to avoid confusion 12:13 < bridge> @sollybunny: spec availability is not related to test or not. This is a bug introduced by PvP modes. Go send issue 12:13 < bridge> i did 12:14 < bridge> Thank 12:14 < bridge> s 12:14 < bridge> native btw 12:14 < bridge> idk what this means, me being native shouldnt imply that i have perfect spelling grammer and punctuation 12:14 < bridge> I think I found the worst performing map :pepeW: 12:14 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415641758293033022/screenshot_2025-09-11_12-14-32.png?ex=68c3f2a0&is=68c2a120&hm=6143e16abad148c27ad00ff019298ea76668dcb5db83240a425402722aed31c3& 12:15 < bridge> snap limit reached 12:15 < bridge> it just means all my life ive heard and spoke english how other people have spoken english 12:22 < bridge> @kebscs this is caused by dragger prediction, not even by the laser head 12:23 < bridge> it directly points me to `int CCollision::IntersectNoLaser(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision)` :pepeW: 12:25 < bridge> i can check why but i didnt add dragger prediction 12:26 < bridge> i can check why, but i didnt add dragger prediction 12:28 < bridge> collision code is shared and prediction looks same as on server 12:28 < bridge> why is clamp an offender here oO 12:28 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415645246175576064/Unbenannt.png?ex=68c3f5e0&is=68c2a460&hm=68247ffe0c98b87312448d26db0500b1fbb8ca9b546e208750febd8d21285063& 12:28 < bridge> so idk without possibly changing server physics 12:30 < bridge> well if this is the only thing in a tight loop ofc it is 12:32 < bridge> you may be able to take out the clamp and have special behaviour for if the sides are oob 12:37 < ws-client> **** std bloat hitting again 12:37 < ws-client> **** i rather have an std in my pants than in my c++ 12:39 < bridge> the previous clamp we had was an std::clamp wrapper 12:39 < bridge> given std::.. is just wrappers for what we already have it only effects compile time not performance 12:39 < bridge> and insentivies using expensive constructs but eh 12:43 < bridge> it's actually a good idea to move part of this out of this loop 12:43 < bridge> multiplying a fixed NX/NY with a might be much faster 13:06 < bridge> I guess if I fix this, I am changing physics again ._. 13:07 < bridge> if u just take the clamp out without accounting for this you do change fixes 13:07 < bridge> if u just take the clamp out without accounting for this you do change physics 13:07 < bridge> stop 13:07 < bridge> but u dont have to 13:07 < bridge> the extra behaviour for oob is cold path anyway 13:08 < bridge> why gh trolling 13:08 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415655243731046491/image.png?ex=68c3ff2f&is=68c2adaf&hm=35b8b0eb60a73d191b0ad81ad45c1cea441316f439b6e698dc50d920cf11050f& 13:14 < bridge> technically this would need a proper grid traversal algorithm and not this bullshit, but changing this may cause other physics, because tiles may not be skipped that previously have been 13:14 < bridge> yeye I stop Teero don't worry 13:15 < bridge> you can even be lazy about it, if oob do old code, if not oob do new code 13:16 < bridge> yea if we actually decide to change the shit line intersection and movebox i'd like to be part of it xD 13:16 < bridge> oh yeah teero upstream tas code B) 13:16 < bridge> those are the main bottlenecks for the physics (not including multi-tee) 13:16 < bridge> :feelsbadman: 13:17 < bridge> maybe i should break physics as much as possible to achieve max performance without any notable visual/gameplay changes 13:17 < bridge> that would be nice 13:18 < bridge> do everything in fixed so theres no weird float shenangns (apart from prediction) 13:18 < bridge> okay, what about quantization? 13:19 < bridge> what does thine mean 13:19 < bridge> velocity and position can only be units of 1/32 already right? 13:19 < bridge> velocity and position can only be units of 1/32 of a block already right? 13:19 < bridge> https://github.com/ddnet/ddnet/blob/c3b10b56df901707034db6f42739bc63a21134d2/src/game/gamecore.cpp#L695-L700 13:20 < bridge> this is hard to do while keeping corner edges 13:20 < bridge> if you ignore than 1 thing then you can optimize fully 13:21 < bridge> yea they're not needed, fuck them. there will be more major changes lmao xd 13:21 < bridge> well 13:21 < bridge> why couldnt you keep them 13:21 < bridge> you could actually do them on purpose 13:21 < bridge> also it's mostly used by bots/tas anyways so its just for cheaters imo 13:21 < bridge> you can do fast block collision for seeing if you are inside them at all then do a slow manual check 13:21 < bridge> actually yea wait 13:21 < bridge> just say that the tiniest 1% of the corner is allowed to pass through 13:21 < bridge> (i dont think its that slow) 13:22 < bridge> (corner edges are going slightly into freeze?) 13:22 < bridge> yea just return if you find 2 freeze px xd 13:23 < bridge> @totar do i keep the global distance field? XD its kinda very expensive rn 13:23 < bridge> for what 13:23 < bridge> for line intersection 13:23 < bridge> right 13:23 < bridge> the precompute 13:23 < bridge> Teero care this isn't safe space™! 13:23 < bridge> for hypothetical upstream physics or in your library 13:24 < bridge> also what melon said 13:24 < bridge> but I don't think your library is supposed to be secret? 13:24 < bridge> I don't think ddnet should calculate and store a distance field lol, not worth 13:24 < bridge> oh is this a DDNet physics in c99 talk? I didn't pay attention 13:25 < bridge> making the line intersection formula correct is already like 10 times fastert 13:25 < bridge> :justatest: 13:25 < bridge> making the line intersection formula correct is already like 10 times faster 13:25 < bridge> making the line intersection formula correct is already like 10 times faster, if you're accepting physics changes 13:25 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415659455596724304/image.png?ex=68c4031b&is=68c2b19b&hm=68ae9e81da9bcb5f49c59e300b562c324542a11775f3205f2eebff36c9340d27& 13:25 < bridge> AI? 13:25 < bridge> sus 13:25 < bridge> wheres libteero 13:25 < bridge> Botters hijacked \#developer again 13:26 < bridge> libteero is sharp and difficult to handle, be careful 13:26 < bridge> libteero isnt public 13:26 < bridge> idk I don't control that 13:27 < bridge> what is this lmao 13:27 < bridge> if it was me I would make a much less optimized library for general use 13:27 < bridge> your very official tiktok content 13:27 < bridge> @totar but adding back the clamps and max velocity and moving pickups would be bad 13:27 < bridge> but if i can just mess up the ordering 13:27 < bridge> then i dont car 13:27 < bridge> then i dont care 13:28 < bridge> you can keep your library cutting edge, it's ok 13:28 < bridge> I didn't say YOU should do it 13:28 < bridge> i wanna tho 13:28 < bridge> still not at 10mil tbh xD 13:28 < bridge> 9.89 or smth 13:28 < bridge> bot clients will need the best performance possible, a noble cause 13:28 < bridge> xd 13:29 < bridge> dont worry no one cares about tas runs anymore 13:29 < bridge> its killing the game, but their ability to make good tasses doesnt effect how fast it kills the game 13:29 < bridge> also if we break the physics to make them more optimized then you need 2 versions of prediction for all vanilla and all the old ddnet servers 13:29 < bridge> the music XDDDDDDDDDD 13:30 < bridge> just update everything to ddnet-insta 13:30 < bridge> #UpstreamDDNet-insta 13:30 < bridge> (I have no idea what's in it) 13:30 < bridge> (everything i think) 13:30 < bridge> all the vanilla gamemodes and the common mod gamemodes 13:31 < bridge> i added tsmash 13:31 < bridge> is the code bad tho 13:31 < bridge> in my honest opinion 13:31 < bridge> a bit 13:31 < bridge> theres some weird inheritance stuff going on 13:32 < bridge> I'm not opposed to upstreaming ddnet-insta in theory and we completely reverse #7777, but the issue is that then you need to PR against ddnet instead of ddnet-insta which is probably much harder 13:32 < bridge> https://github.com/ddnet/ddnet/issues/7777 13:32 < bridge> fuck I didn't mean to do that 13:32 < bridge> do what? 13:32 < bridge> huh? 13:32 < bridge> huh 13:32 < bridge> mustve been the wind 13:33 < bridge> adding stuff to ddnet-insta is much easier than ddnet 13:33 < bridge> probloom is that you cant do split maintaining because vulnrabilities exist and i dont think other maintainers would be happy handing over ddnet-insta chunk just to chiller 13:34 < bridge> get their grimey hands all over the vanilla they threw away 13:34 < bridge> i dont think having ddnet-insta seperate is that bad 13:34 < bridge> if only the server and client physics were factored into a single library, it would be so good for moddability and maintability. utopia for all 13:34 < bridge> ik 13:34 < bridge> thats what ddnet-rs does right 13:34 < bridge> it's even better 13:34 < bridge> the physics is a module that the server sends to the client 13:34 < bridge> excoose me 13:34 < bridge> isnt that 13:34 < bridge> bad 13:34 < bridge> WASM 13:34 < bridge> o 13:34 < bridge> nuh uh 13:35 < bridge> but one step at a time 13:35 < bridge> we don't need that 13:36 < bridge> (also wasm is slow, so we can pretend this is important) 13:36 < bridge> (confirmation bias) 13:36 < bridge> man 13:37 < bridge> fzcj i need to complete skin rendering for tas tool finally so i can have my own client to test the physics directly xd 13:37 < bridge> ^ hacker 13:37 < bridge> [ban](https://cdn.discordapp.com/emojis/892423037046128702.webp?size=48&name=ban) 13:37 < bridge> since if i am not doing proper physics anyways it will be hard to test if things work 13:38 < bridge> unless i use the tool i already have in my cleint 13:38 < bridge> but thats annoying 13:38 < bridge> but you don't need skin rendering, manually create a circle, and some ovals for feat/eyes. 13:38 < bridge> cuz rendering is only half complete there 13:38 < bridge> good enough 13:38 < bridge> ok 13:38 < bridge> doing right now 13:39 < bridge> build failed ): 13:39 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415663151592116266/image.png?ex=68c4068d&is=68c2b50d&hm=2d6d694e38d453bb6a457058a9692536926bad7424a4d9d157e4af9e5fdaf299& 13:40 < bridge> omg you have that turned on 13:40 < bridge> it just goes into a label i ignore 13:40 < bridge> fair 13:40 < bridge> [cat_uwu](https://cdn.discordapp.com/emojis/1230626195649990696.webp?size=48&name=cat_uwu) 13:40 < bridge> oh yeah i need to do 13:40 < bridge> tater stuff 13:40 < bridge> oh yeah i need to do tater 13:40 < bridge> :justatest: 13:40 < bridge> so u can release 13:41 < bridge> yes 13:41 < bridge> hehe 13:41 < bridge> wait 13:41 < bridge> thats so funny 13:41 < bridge> you edited that message 13:41 < bridge> to make it more funny 13:41 < bridge> what is ur time 13:41 < bridge> we don't talk about it 13:41 < bridge> no 13:41 < bridge> as in what time is it 13:41 < bridge> refer 13:41 < bridge> er 13:42 < bridge> 742 am? 13:42 < bridge> 0742 am? 13:42 < bridge> (everyone lives in new york) 13:42 < bridge> ```cpp 13:42 < bridge> constexpr std::string VersionNumberToString(int Version) 13:42 < bridge> { 13:42 < bridge> return std::format("{}.{}.{}", Version / 1000, (Version / 100) % 10, Version % 10); 13:42 < bridge> } 13:42 < bridge> 13:42 < bridge> constexpr std::pair[] DOMAINS = { 13:42 < bridge> {"DDNet", VersionNumberToString(DDNET_VERSION_NUMBER)}, 13:42 < bridge> {"TClient", TCLIENT_VERSION}, 13:42 < bridge> }; 13:42 < bridge> ``` 13:42 < bridge> no constexpr std::format 13:43 < bridge> that is wack 13:43 < bridge> lol 13:43 < bridge> is cpp version not high enough 13:43 < bridge> its not constexpr ever 13:43 < bridge> https://en.cppreference.com/w/cpp/utility/format/format.html 13:44 < bridge> are there any contexpr string manipulation things 13:44 < bridge> idk 13:44 < bridge> are there any constexpr string manipulation things 13:44 < bridge> i think i might be overengineering 13:44 < bridge> checking a file for a string 13:44 < bridge> that's scaring me 13:45 < bridge> ```cpp 13:45 < bridge> DDNet 19.5.0 13:45 < bridge> TClient 10.4.0 13:45 < bridge> ``` 13:45 < bridge> am looking for ^ 13:45 < bridge> oh are you fixing the cmake version mess 13:45 < bridge> mm no 13:45 < bridge> ok 13:45 < bridge> im trying to make it so if u update only DDNet.exe it tells u u are an idiot 13:45 < bridge> and making it so you could theoretically upstream this 13:46 < bridge> I regret bumping tclient major version so many times, if I keep doing it then it will catch up to ddnet version. Which would be confusing unless we fly past it and keep bumping. 13:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415664954551566347/image.png?ex=68c4083a&is=68c2b6ba&hm=84874be8a6d5fb8acc3b55b6799f4a76bd52134f7b216d48bba600cd8968da2b& 13:47 < bridge> why do u major version bump? 13:47 < bridge> idk, I was doing it for major features, but I never expected to reach 10 13:47 < bridge> we could keep up with ddnet versions 13:47 < bridge> and just use patch 13:47 < bridge> since ddnet rarely uses it 13:47 < bridge> and we rarely patch 13:47 < bridge> it make sense when the major version doubled the number of custom features 13:47 < bridge> it made sense when the major version doubled the number of custom features 13:48 < bridge> idk what you mean 13:48 < bridge> ddnet 19.5.0 = tclient 19.5.0 13:48 < bridge> eh 13:48 < bridge> that's how it was for a while 13:48 < bridge> its a bit of a pain due to nightly version bump 13:49 < bridge> it's good enuf, we're probably not going to reach 19 13:49 < bridge> we would have to do the deen make a branch for the version 13:49 < bridge> if we get close then we can just change the format so it doesn't look so similar 13:49 < bridge> 0.4.10 13:49 < bridge> reverse semvar 13:49 < bridge> do lik rust software 13:49 < bridge> 0.0.2 13:49 < bridge> 0.0.56 13:49 < bridge> lol 13:49 < bridge> xd 13:50 < bridge> https://0ver.org/ 13:50 < bridge> In short, software versioning best practice is like the modern list/array: 0-based. 13:50 < bridge> sometimes I look at browsers and think "wow their version number is so high they must be irresponsible with it" but actually they're just 20 years old and millions of features 13:51 < bridge> its just a number 13:51 < bridge> yeah 13:51 < bridge> (:justatest: ) 13:52 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415666209696907404/image.png?ex=68c40966&is=68c2b7e6&hm=5719a26766ba05e935ce8566f4c5d75e31e4babbb9aa1e6e84c837146fad3ce1& 13:52 < bridge> https://tenor.com/view/caught-in-4k-you-exposed-gif-21379673 13:52 < bridge> https://tenor.com/view/rip-bozo-gif-22294771 13:52 < bridge> I'm in another project that somehow does 4 decimal semvar, 1.4.1.3 13:52 < bridge> thats common in java world 13:52 < bridge> yet Linux is version 6.16 13:52 < bridge> and c# 13:52 < bridge> ok I guess that explains it 13:53 < bridge> btw terraria is like that 13:53 < bridge> its c# 13:53 < bridge> I've seen x.x.x.x versions in a few backends before 13:53 < bridge> 13:53 < bridge> Major, minor, Bugfix, hotfix 13:53 < bridge> yeah it's C# 13:53 < bridge> i think last is revision 13:53 < bridge> Oh? 13:53 < bridge> we use it like how melon said 13:53 < bridge> the besty obiously is date based versioning 13:53 < bridge> 4th is for hotfix 13:53 < bridge> imho the one conveying most info 13:53 < bridge> vs 2069 13:54 < bridge> just add -beta or -alpha if ur not prod rdy 13:54 < bridge> do minecraft and have all 3 13:54 < bridge> java has snapshots too 13:54 < bridge> The "I give up" versioning scheme: 13:54 < bridge> just one number that gets incremented with every release 13:55 < bridge> I think it's good to have an easy way of knowing if the new version break the API 13:55 < bridge> if there is an API yes 13:56 < bridge> it's very easy to version your API, you just follow the rules 13:56 < bridge> I think it's good to have an easy way of knowing if the new version breaks the API 13:56 < bridge> Clearly DDNet should only increment major version when the protocol breaks backwards compat 13:56 < bridge> we still in 1.x 13:56 < bridge> versioning api depends heavily on the language package manager and rules it uses to select compaatible packages 13:57 < bridge> semantic versioning basically 13:57 < bridge> Clearly DDNet should only increment major version when the protocol breaks backwards compat 13:57 < bridge> we still in 1.x (or maybe a couple versions more idk my history) 13:57 < bridge> the 1. is implied. Actual version is secretly 1.19.4 13:57 < bridge> It's like floating point! 13:58 < bridge> Or maybe it's 0.19.4? 13:58 < bridge> And 0. Is implied 14:00 < bridge> how would breaking the ddnet protocol even work. If the server and client support 0.6 then they can always connect. but I guess the extensions would be disabled? 14:01 < bridge> We remove vanilla support on DDRace servers 14:01 < bridge> :gigachad: 14:01 < bridge> well that would certainly be breakings 14:01 < bridge> well that would certainly be breaking 14:02 < bridge> Btw it seems like making map settings only writable during a mao load is complicated 14:03 < bridge> I looked at the code a bit and there isn't an obvious solution 14:03 < bridge> honestly I'm surprised how easily jupstar did the protocol translation for ddnet-rs. We could probably redesign the entire protocol from scratch and still have a working translation for connecting to old servers. 14:04 < bridge> What about breaking config files? Like what if a command was removed? 14:05 < bridge> I think it saves unknown commands now 14:05 < bridge> so it doesn't break 14:05 < bridge> idk tho 14:05 < bridge> haven't tested it 14:05 < bridge> I meant breaking in the sense that those configs would no longer work 14:06 < bridge> Major version-worthy? 14:06 < bridge> idk that's pretty easy, just load the old config format and save it to a new file 14:06 < bridge> then nothing breaks 14:06 < bridge> idk that's pretty easy, just load the old config format and save it to a new file with new format 14:06 < bridge> I meant more like we actually remove a client feature 14:06 < bridge> Bro mine ringed multiple times, dunno if that was some multisim bug 😂 14:07 < bridge> removing a config doesn't really break anything, it just gets removed 14:07 < bridge> it's been done before 14:07 < bridge> But it breaks expected behaviour that people rely on 14:07 < bridge> that's the sort of thing that libraries get major version bumps for 14:07 < bridge> is what I'm arguing 14:07 < bridge> i removed a config! 14:08 < bridge> idk I think server compatibility is the only thing that would justify a real major version 14:08 < bridge> idk I think server client compatibility is the only thing that would justify a real major version 14:09 < bridge> but nothing matters, version however you want 14:11 < bridge> afaict we are predicting all entities, even the ones that are not on screen? 14:11 < bridge> if you have showall off the server clips the entities for you 14:12 < bridge> otherwise yes 14:12 < bridge> hmm okay 14:18 < bridge> does anyone know the variable where the snaplimit is stored? 14:19 < ChillerDragon> have your tried searching for MAX_SNAP`xd 14:19 < bridge> i searched for various combination of snap limit :p 14:20 < bridge> version 2025-09-11 14:21 < ChillerDragon> @Assa editor issue then 14:21 < ChillerDragon> i find MAX_SNAP 14:21 < ChillerDragon> MAX_SNAPSHOT_PACKSIZE 900 in protocol.h 14:26 < bridge> CSnapshot 14:27 < bridge> CSnapshot::MAX_ITEMS? 14:28 < ChillerDragon> so many limits 14:31 < bridge> there is no way there are 900 entities, right? 14:32 < bridge> 1 for dragger, 1 for beam so maybe? 14:33 < bridge> hmm aren't they handled by the same entitiy? 14:34 < bridge> both beam and dragger have a SnapLaserObject 14:34 < bridge> so im guessing separate 14:37 < bridge> I wonder if we should just stop predicting at a certain number of entities 14:37 < bridge> like if you have more than 20 doors around you, the prediction has no value anyway 14:37 < bridge> doors prediction is lightweight 14:37 < bridge> it just places tiles once 14:38 < bridge> I mean per entity type 14:39 < bridge> draggers are just bad 14:39 < bridge> other entities are limited by snap handling, not prediction 14:42 < ChillerDragon> @Assa snap is smol af 14:43 < ChillerDragon> reaching the limit is quite common if you actually do stuff 14:44 < ChillerDragon> especially with bloated ddnet snap extensions. I feel like after 128pr got merged and all the snap extensions for characters are in you wont be able to see anything on screen anymore 14:47 < bridge> if only we had server demos 14:49 < ChillerDragon> we have 14:51 < bridge> tee historian is not server demos 14:52 < bridge> firstly only mods can access it xd 14:58 < bridge> Why would you want server demos even? 15:02 < bridge> because people have terminal didnt record demo, dont want to disconnect, no /showall 15:02 < bridge> including me 15:05 < ws-client> **** wdym no way @Assa there is an infinite amount of ways 15:06 < ws-client> **** oh scrolling issue xd 15:06 < bridge> ? 15:06 < ws-client> **** replying to ur 900 max statement cuz i scrolled like a goof xd 15:06 < bridge> there may be an infinite amount of ways, but all lead to rome 🧠 15:06 < ws-client> **** @Solly (bun bun) we have regular demo demos for the server 15:07 < bridge> who is we 15:07 < ws-client> **** we the ddnet 15:07 < ws-client> **** https://github.com/ddnet/ddnet 15:07 < bridge> peopel 15:07 < bridge> yes i got that 15:07 < ws-client> **** has server side demos 15:07 < bridge> oke 15:07 < bridge> ermm 15:07 < bridge> why ddnet no record 15:07 < ws-client> **** u mean official servers? 15:08 < ws-client> **** because they got pitched by the teehistorian lobby 15:08 < bridge> yah 15:08 < bridge> well big 15:08 < ws-client> **** one of the teehistorian CEOs actually has a seat in ddnet 15:09 < bridge> todays plane counter is already at 5 :justatest: 15:09 < ChillerDragon> assa wat does that mean? xd is this some kind of autism joke? 15:11 < bridge> no, I life near an airbase and I just notice the unusual high amount of noise, like they are very active 15:12 < bridge> training? 15:12 < bridge> over warsaw a lot of black hawk helicopters training today 15:12 < bridge> rly close to buildings 15:13 < bridge> no, I am not close to poland. They are probably observing with their special planes. They have an attachement which looks like a shroom 15:13 < bridge> i mean they dont need to train in poland, they can where u live 15:14 < bridge> shroom attachment i would guess a radar? 15:15 < bridge> oh yeah, it's the AWACS, it's actually radar 15:20 < bridge> 6... 15:20 < bridge> We can't possibly store an amount even close to what we have with teehistorian 15:21 < bridge> with radar ofc theyre military, but you can check flightradar where theyre going 15:22 < bridge> if not on radar then probably training or smth 15:23 < bridge> it's a single plane driving circles for hours, probably one radar plane observing 15:23 < bridge> getting trolled by the military 16:01 < bridge> im sure theres stuff that can be cut from demos or stuff added too teehistorian to make either usable 16:01 < bridge> Teehistorian is supposed to be what you get if you cut everything you possibly can from the demos 16:02 < bridge> i only really care about the a day or 2 in the past for full demos 16:02 < bridge> It's the minimum amount of data required to reproduce a demo + 1 redundancy 16:02 < bridge> except they dont have chat/secret sauce 16:03 < bridge> (do they i thought u said something about recording a bit of secret sauce in teehistorian) 16:15 < bridge> [0.202709] wrote bytes 16:15 < bridge> [0.203119] Content: Ok("hello written") 16:15 < bridge> [0.203495] Kernel heap 8852 kb / 131072 kb 16:15 < bridge> [1.012563] hello from cpu 1 16:15 < bridge> [2.015492] hello from cpu 1 16:15 < bridge> [3.018496] hello from cpu 1 16:15 < bridge> i got multiple cpus 16:16 < bridge> ``` 16:16 < bridge> [1.017214] hello from cpu 1 16:16 < bridge> [1.017349] hello from cpu 1 16:16 < bridge> [1.017796] hello from cpu 1 16:16 < bridge> [1.018048] hello from cpu 1 16:16 < bridge> [1.021964] hello from cpu 1 16:16 < bridge> [2.021159] hello from cpu 1 16:16 < bridge> [2.021380] hello from cpu 1 16:16 < bridge> [2.021769] hello from cpu 1 16:16 < bridge> [2.022037] hello from cpu 1 16:16 < bridge> [2.025965] hello from cpu 1 16:16 < bridge> [3.025170] hello from cpu 1 16:16 < bridge> [3.025325] hello from cpu 1 16:16 < bridge> [3.025756] hello from cpu 1 16:16 < bridge> [3.025913] hello from cpu 1 16:16 < bridge> [3.029956] hello from cpu 1 16:16 < bridge> ``` 16:16 < bridge> pog 16:16 < bridge> (the log 1 is hard coded ignore it xd) 16:17 < bridge> had to debug with gdb along qemu to find a deadlock 16:17 < bridge> :justatest: 16:20 < bridge> @chillerdragon 🥺 16:20 < bridge> even chatgpt thinks its a good change 16:21 < bridge> sorta 16:22 < bridge> thinks that the reassignments are scary 16:22 < bridge> but Intra is passed by value and the original is never used 16:23 < bridge> i wonder how out ancestors made the first kernels, without something like QEMU, insane skill tbh, you could say maybe older arches where simpler, but i doubt a emulator existef when x86-64 first came out 16:23 < bridge> i wonder how our ancestors made the first kernels, without something like QEMU, insane skill tbh, you could say maybe older arches where simpler, but i doubt a emulator existef when x86-64 first came out 16:23 < bridge> how do u even debug 16:23 < bridge> have a dummy machine with a fake disk which actually just reads a partition in your disk 16:23 < bridge> printf spam 16:24 < bridge> but how u debug, the issues u encontee cant be printed 16:24 < bridge> with enough print statements you can debug everything 16:24 < bridge> unless the sideeffects of printf get in the way 16:24 < bridge> u can always printf to serial 16:25 < bridge> or actually just have a small kernal which reads 16:25 < bridge> and then runs, a bootloader 16:25 < bridge> maybe u can stick debug tools in the bootloader aswell 16:27 < bridge> Ah true, no chat. It is the minimum required to reproduce the gameplay is more accurate 16:28 < bridge> How old are we talking? If you go back far enough we had debug leds and oscilloscopes 😄 16:31 < bridge> A literal step button on the board was also common. You'd step through and look at the leds 16:33 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415706722521321473/image.png?ex=68c42f21&is=68c2dda1&hm=634bbf39e21c791f8ed420bc89e294ad8b5603393fbca1098dde8e972ab9e831& 16:33 < bridge> my deadlock was at the serial output i had 16:33 < bridge> the broadcast had a deadlock cuz 2 internal rwlocks 16:33 < bridge> i moved it to 1 outer rwlock 16:33 < bridge> Mutex* 16:34 < bridge> hmm old when x86-64 (64bit) came out 16:34 < bridge> like how did first kernel devs for it knew all the tricks 16:34 < bridge> @learath2 do u know the insanity that is bringing up non bootstrap processors? 16:34 < bridge> xd 16:34 < bridge> there is no "standard" 16:35 < bridge> 8086 had an ICE, an ICE basically exposed extra pins of the CPU you could use to control the internals and execution 16:35 < bridge> ohh 16:35 < bridge> do modern cpus have that? 16:35 < bridge> can you "freeze" a cpu to inspect like u would with gdb 16:36 < bridge> Well we UARTs and JTAG 16:36 < bridge> These external things are usually no longer possible. We have onboard debugging now 16:36 < bridge> btw first i tried to do manually ,after 4 hours i think i had some triple faults cuz stuff, and then i saw limine has a boot request to bring up SMP and u just need to provide a entry point 16:37 < bridge> someday ill do it the more manual way 16:37 < bridge> also with rust its a bit hard to do with inline asm cuz rust inline asm doesnt support 16 bit code 16:37 < bridge> E.g. whatever gdb does 16:37 < bridge> i had to hack nasm 16:37 < bridge> together 16:38 < bridge> What do you mean by tricks btw? You usually got an official manual from the vendor detailing how to bring up the cpu and set it up 16:38 < bridge> try to look at linux openbsd and others 16:38 < bridge> they dont do it exactly same, some have longer waits or no waits between sipi etc 16:38 < bridge> small things that may be relevant 16:38 < bridge> but if u dont know its confusing 16:39 < bridge> In the very olden things, it was also much simpler, there was an entrypoint the cpu jumped to and that was that 16:39 < bridge> well with x86-64 u have to go to long mode xd 16:40 < bridge> (anyway my struggle is probs mostly cuz im a noob) 16:40 < bridge> No, it is very complex to bring up a modern cpu. It's just that the complexity was built over time 16:40 < bridge> the limine api is beautiful 16:40 < bridge> 16bit stuff was absolutely trivial 16:41 < bridge> I really need to check it out 16:41 < bridge> 64bit upgrade was really where the complexity boomed out of control. So many new quirks needed for the cpu to keep operating properly in legacy mode 16:42 < bridge> ```x86asm 16:42 < bridge> ; this code will be relocated to 0x8000, sets up environment for calling a C function 16:42 < bridge> .code16 16:42 < bridge> ap_trampoline: 16:42 < bridge> cli 16:42 < bridge> cld 16:42 < bridge> ljmp $0, $0x8040 16:42 < bridge> .align 16 16:42 < bridge> _L8010_GDT_table: 16:42 < bridge> .long 0, 0 16:42 < bridge> .long 0x0000FFFF, 0x00CF9A00 ; flat code 16:42 < bridge> .long 0x0000FFFF, 0x008F9200 ; flat data 16:42 < bridge> .long 0x00000068, 0x00CF8900 ; tss 16:42 < bridge> _L8030_GDT_value: 16:42 < bridge> .word _L8030_GDT_value - _L8010_GDT_table - 1 16:42 < bridge> .long 0x8010 16:42 < bridge> .long 0, 0 16:42 < bridge> .align 64 16:42 < bridge> _L8040: 16:42 < bridge> xorw %ax, %ax 16:42 < bridge> movw %ax, %ds 16:42 < bridge> lgdtl 0x8030 16:42 < bridge> movl %cr0, %eax 16:42 < bridge> orl $1, %eax 16:42 < bridge> movl %eax, %cr0 16:42 < bridge> ljmp $8, $0x8060 16:42 < bridge> .align 32 16:42 < bridge> .code32 16:42 < bridge> _L8060: 16:42 < bridge> movw $16, %ax 16:43 < bridge> movw %ax, %ds 16:43 < bridge> xd 16:43 < bridge> osdev is nice but rly outdated, they only do 32 bit stuff tbh 16:43 < bridge> At my last soft sec lecture everyone was very confused as to why writing to eax zeros the rest of rax but writing to al doesn't 16:43 < bridge> anyway now i can go to the fun part 16:43 < bridge> passing threads across cores and balancing work 16:43 < bridge> but first i should have a real filesystem i guess 16:43 < bridge> actually i got fat32 already, with a read cache 16:43 < bridge> i just need to do the syscalls 16:44 < bridge> If you want to see even weirder stuff look at uefi firmware. You have to do things I didn't think were even possible. They set up an execution environment local to the cpu. You set up the L3 cache as temporary RAM 16:44 < bridge> Because it's so complicated now to bring up a pc that you need drivers to set up the real ram, and those drivers need an execution environment 16:45 < bridge> @learath2 btw this rly low level code loves long jumps and things modern devs have fears of at night xd 16:45 < bridge> Yep, lots of jumping around needed 16:46 < bridge> Oh another very bizarre thing you'd find in early processors is the actual use of segment registers, quite an elegant solution 16:47 < bridge> @learath2 do u know if riscv or arm is the same? 16:47 < bridge> i would guess booting is way easier 16:47 < bridge> and bringing up APs too 16:47 < bridge> or do they have compat baggagew? 16:47 < bridge> or do they have compat baggage? 16:47 < bridge> Well as far as I know it's not standardized 16:47 < bridge> :pepeW: 16:49 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415710829407637515/image.png?ex=68c432f4&is=68c2e174&hm=ee6c5922d61b238c296ca22d7e4ff3339ff4dafc7021bae3e89b408862f3a4be& 16:49 < bridge> im so proud 16:49 < bridge> i was about to give up 16:49 < bridge> xd 16:49 < bridge> Wooo 16:50 < bridge> Do you have any multitasking set up @ryozuki ? 16:51 < bridge> no i just have independent scheduler per cores 16:52 < bridge> i need to setup now scheduler communicatiion 16:52 < bridge> but its complex 16:52 < bridge> if i do a new mapping or a user process makes a new mapping 16:52 < bridge> i need to send the info about this to do a TLB flush 16:52 < bridge> on other cores 16:52 < bridge> "shootdown" 16:52 < bridge> https://stackoverflow.com/questions/3748384/what-is-tlb-shootdown 16:52 < bridge> > 16:52 < bridge> > 16:52 < bridge> > A TLB (Translation Lookaside Buffer) is a cache of the translations from virtual memory addresses to physical memory addresses. When a processor changes the virtual-to-physical mapping of an address, it needs to tell the other processors to invalidate that mapping in their caches. 16:52 < bridge> > 16:52 < bridge> > That process is called a "TLB shootdown". 16:52 < bridge> this 16:53 < bridge> among a long list of other complex things 16:53 < bridge> xd 16:53 < bridge> Maybe first do preemption 16:53 < bridge> i do have preemption 16:53 < bridge> dont u see the logs? 16:53 < bridge> they are kernel threads 16:53 < bridge> each with their own stack etc 16:53 < bridge> they get preempted 16:53 < bridge> and the image is a user program showing the logs 16:53 < bridge> which also gets preempted 16:54 < bridge> (it calls a syscall to get kernel logs) 16:54 < bridge> Ah, cool. When you said you don't have multitasking I assumed no preemption either 16:54 < bridge> i have proper single core multitasking 16:54 < bridge> ah sorry 16:54 < bridge> i missunderstood xd 16:54 < bridge> i dont have multi core multitasking* 16:55 < bridge> 🙇‍♂️ 16:57 < bridge> Hm, actually doesn't that also entail context switching? Didn't you already solve the TLB issue then? 17:00 < bridge> i have context switching, when going from kernel to user, i load the user pml4, which should invalidate the tlb right, but my kernel threads all share the same kernel page (because why not and thats what most kernels do) 17:00 < bridge> i guess i have it half solved yeah 17:01 < bridge> also when going from user to kernel i load the kernel page, even tho in user pages i have the higher half mapped like kernel 17:09 < bridge> What to do, I removed from the config votes for server shutdowns, etc., but they still appear 17:21 < bridge> @learath2 also my kernel is definitly not memory optimized lol xd 17:21 < bridge> but ram is free kek 17:21 < bridge> :justatest: 17:22 < bridge> Just download more ram 17:23 < bridge> instead of dinamyc allocating per cpu data i just reserve space for 64 possible cores xd 17:23 < bridge> via linker 17:24 < bridge> instead of dynamic allocating per cpu data i just reserve space for 64 possible cores xd 17:29 < bridge> @learath2 does qemu support https://en.wikipedia.org/wiki/Zilog_Z80 17:29 < bridge> can u even make a kernel in this 17:29 < bridge> How am I supposed to know? 😄 17:29 < bridge> u told me to ask u before the gpt xd 17:29 < bridge> im joking 17:29 < bridge> ill google 17:29 < bridge> https://wiki.qemu.org/Features/Z80 17:29 < bridge> it does lol 17:30 < bridge> I wrote some Z80-like assembly but only for gameboy 17:30 < bridge> ah its separate 17:30 < bridge> https://repo.or.cz/w/qemu/z80.git 17:30 < bridge> Idk what a kernel would entail for a device like that tbh 17:31 < bridge> There are no processes to coordinate between, there are no devices that need drivers 17:32 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415721605153296534/1920px-Zilog_Z-80_Microprocessor_ad_May_1976.png?ex=68c43cfd&is=68c2eb7d&hm=813e1abf1b574833820307a21cc8b632d65da6060bc9f1668c0ba28898b0acb1& 17:32 < bridge> who's to say there are no devices? 17:32 < bridge> I guess you could write an OS for it, like those ancient single user non-preempting ones 17:32 < bridge> And multitasking is always on the table if you want it enough 17:33 < bridge> it has interrupt modes 17:33 < bridge> u cant preempt? 17:33 < bridge> i guess it lacks a PIC? xd 17:33 < bridge> Well usually it's all MMIO back in those days 17:33 < bridge> So blessed tbh 17:34 < bridge> We took the wrong path 17:34 < bridge> You can, I guess. It's just so weak that I don't think anyone ever bothered with something like multitasking 17:34 < bridge> I need my cathode rays and blinkenlights 17:35 < bridge> btw my kernel is kinda modern 17:35 < bridge> maybe too modern 17:35 < bridge> i dont support xapic 17:35 < bridge> only x2apic 17:35 < bridge> xd 17:35 < bridge> I want to jack in to share information 17:35 < bridge> gpt says any processor from 2009 has x2apic 17:36 < bridge> or was 2006 17:36 < bridge> idk 17:37 < bridge> i also expect to have a HPET 17:37 < bridge> not just a PET 17:37 < bridge> (im too lazy to put fallbacks) 17:37 < bridge> (backwards compat is for weaks) 17:38 < bridge> It just has a single interrupt line btw. You pull it high, it jumps to the hardcoded interrupt handler address, that's all you have 17:39 < bridge> Just develop for one single widely available system 17:39 < bridge> im developing for 2010+ 17:39 < bridge> the old school way of making one OS for one machine 17:40 < bridge> x86-64 is generic enough i guess 17:40 < bridge> i also use MSI for pci interrupts 17:40 < bridge> instead of intx 17:40 < bridge> You should disable virtual memory for your OS. Give users the power as god intended 17:40 < bridge> xdd 17:40 < bridge> thats a gigachad move 17:41 < bridge> but i think makes things harder 17:41 < bridge> i like virtual memory 17:41 < bridge> i guess msi is fast irl but qemu emulates msi way faster than legacy interrupts 17:41 < bridge> i got a 2x 17:42 < bridge> cant wait to put the io thread in another core 17:42 < bridge> (and the new bugs) 17:44 < bridge> Multi-core as a requirement? :lol: 17:44 < bridge> He should design the OS so that it is not needed 17:44 < bridge> non open surce app run in emulator 17:44 < bridge> I actually don't know what that would look like 😄 17:44 < bridge> rest is full trust 17:44 < bridge> Everything is the kernel 17:46 < bridge> TempleOS 17:46 < bridge> I dunno if I want to be shot just bcs I am a christian conservative OS enjoyer 17:46 < bridge> Does that count as dark humour? 17:47 < ChillerDragon> yes but dark humor is good 17:50 < bridge> Too soon 17:50 < bridge> America is really a shit country tbh xD 17:57 < bridge> Not nice 17:57 < bridge> i wont say what i think 17:57 < bridge> but well lack of gun laws 17:57 < bridge> ill just say that 18:00 < ChillerDragon> its the second time someone asked me when i finish accounts for ddnet in game. Because they were told i am the only one working on it xd. Who is spreading these fake news!? 18:02 < bridge> my camera transforms are not working 18:02 < bridge> i hate this shit 18:03 < bridge> for what 18:03 < bridge> idk man ask tater 18:28 < bridge> America is a continent 🤓 18:28 < bridge> but yeah i agree 18:28 < bridge> murica 18:38 < bridge> america = usa 18:38 < bridge> the americas = the continent 18:46 < bridge> that country is honestly in the mud. Just waiting for a civil war tbh 18:46 < bridge> maybe they get rid of the 2 party system afterwards 18:57 < bridge> my profiler is bugged, I keep profiling old code even after I changed it 18:57 < bridge> I don't get it 🙁 19:01 < bridge> it kept debugging the debug exe without warning oO man MS eat shit 19:01 < bridge> murica? 19:09 < bridge> You dunno the beloved murica? 19:10 < bridge> It's the only america 19:10 < bridge> there is no south america 19:17 < bridge> now I profiled the release client, and the slowest function is 19:17 < bridge> ``` 19:17 < bridge> CEntity *CGameWorld::GetEntity(int Id, int EntityType) 19:17 < bridge> { 19:17 < bridge> for(CEntity *pEnt = m_apFirstEntityTypes[EntityType]; pEnt; pEnt = pEnt->m_pNextTypeEntity) 19:17 < bridge> if(pEnt->m_Id == Id) 19:17 < bridge> return pEnt; 19:17 < bridge> return nullptr; 19:17 < bridge> } 19:17 < bridge> ``` 19:17 < bridge> 19:17 < bridge> for the entity heavy map 19:17 < bridge> Now the question: Why is that a linked list D: 19:28 < bridge> is there any performance impact on having demos/replays enabled? 19:29 < bridge> no 19:29 < bridge> not in a sense of fps, but it can cause fps spikes when u hit start line or smth 19:30 < bridge> our demo system is awwwww 19:30 < bridge> amazing 19:31 < bridge> i see, i cant really test it myself since uncapping my fps jumps between 8K-12K fps and i dont notice a thing with it turned on/off, but someone mentioned they had to disable demos because it `lags their PC` 19:33 < bridge> rather a hardware issue, afaik demos made to not load pc as much as possible 19:33 < bridge> never had less fps even on potato pc 19:52 < bridge> it is what it is 19:54 < bridge> I just botched an unorded map over it and it improved performance. 19:54 < bridge> I think if I'd do a PR for that, you would tear me appart 19:56 < bridge> i would not 19:56 < bridge> I don't mean you specifically 😄 19:56 < bridge> i mean me specifically 19:57 < bridge> i would prefer ordered ones tho 19:59 < bridge> I just put the entity ID in it, you don't know when it will be removed and can't really ensure an order, idk 20:00 < bridge> @robyt3 I also see the expensive flag check <.< 20:26 < bridge> i mean the old teeworlds code was anti-std so ye, a map in this era is probably fine 20:32 < bridge> for the flags we are checking all the existing snapshot items which is really bad 20:36 < bridge> okay my camera transformations are finally working xd. best attempt at a twinbop 20:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415768010492350555/image.png?ex=68c46835&is=68c316b5&hm=7c1f793fc3af5ee051835fc7de1e7b7a4f96fe627034ae5a1969f9082d967b67& 20:40 < bridge> wicked 20:48 < bridge> darn cant team 0 20:48 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415770944110067742/image.png?ex=68c46af0&is=68c31970&hm=5485cb506c29e6d708d2469c2fed82b41cf24a2c48382480c60091d2533c82a9& 20:48 < bridge> plz fuix 20:49 < bridge> time to physics 20:54 < bridge> @essigautomat ermm https://github.com/ddnet/ddnet/pull/10864 21:00 < bridge> I did say *I* would optimize this https://discord.com/channels/252358080522747904/293493549758939136/1414690107352682639 :thonk: 21:00 < bridge> yeah it is, and robyts PR is better 21:01 < bridge> I am mad now 🙁 21:01 < bridge> I even reacted to it 21:01 < bridge> fuck 21:01 < bridge> at least I read deep enough into the issue, that I can savely approve your PR 21:02 < bridge> I find it quite interesting, how our implementations diverse 21:03 < bridge> dw :deen_star: 21:04 < bridge> why, they are slower :< 21:04 < bridge> tbh element x is pretty good 21:07 < bridge> you're right i just didn't thought carefully. I guess enumeration isn't needed 21:13 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415777328054669402/image.png?ex=68c470e2&is=68c31f62&hm=533f17b1677a1cf6c007b4e8e68e35ef5c2dbb1d5954b2676a2142d91bd2a8a5& 21:13 < bridge> :justatest: 21:15 < bridge> are typedefs invalidated by other typedefs? 21:15 < bridge> cant i have a single struct with multiple names? 21:16 < bridge> Why would you want to do that... 21:16 < bridge> is it not working 21:16 < bridge> r u getting a compiler error? 21:17 < bridge> struct {} urmom; typedef .. 21:17 < bridge> i forgot C... 21:17 < bridge> ah nvm my lsp was doing weird stuffs 21:17 < bridge> xd 21:17 < bridge> it'd be typedef struct in that format 21:17 < bridge> struct Name {} otherwise 21:17 < bridge> ah ye 21:17 < bridge> i had 21:17 < bridge> ```cpp 21:17 < bridge> typedef struct { 21:17 < bridge> SCollision collision; 21:17 < bridge> SWorldCore world_core; 21:17 < bridge> 21:18 < bridge> } physics_handler_t; 21:18 < bridge> typedef physics_handler_t ph_t; 21:18 < bridge> ``` 21:18 < bridge> so i dont have to type physics_handler_t for all the function declerations xd 21:18 < bridge> and it wouldnt let me use the full one in another file 21:18 < bridge> but lsp was just trolling me 21:46 < bridge> Oopsies, yes the team bug is fixed now •.• 21:50 < bridge> I'm trying to host Catch64 https://github.com/AssassinTee/catch64 21:50 < bridge> It gives me this error: `error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory` 21:50 < bridge> Looking at dependencies, I can't tell which one I'm missing: https://github.com/AssassinTee/catch64?tab=readme-ov-file#installing 21:52 < bridge> openssl? xd 21:52 < bridge> are you sure you have it installed? 21:53 < bridge> I don't know if I have it installed, but it doesn't say `openssl` in the README 21:53 < bridge> I'll try it anyway 21:53 < bridge> well it def part of openssl. 21:54 < bridge> well it#s def part of openssl. 21:54 < bridge> well it's def part of openssl. 21:54 < bridge> Yeah it's already installed 21:54 < bridge> I mean `openssl` 21:54 < bridge> @robyt3 can I get you to take a look at #10732 this week please? After this I only have 2 minor things in mind and I'll be finished with major rendering PRs 21:54 < bridge> https://github.com/ddnet/ddnet/pull/10732 21:55 < bridge> Yeah, I'll have more time next week 21:55 < bridge> thanks ❤️ 21:55 < bridge> Have you finished animated rotation? 21:55 < bridge> I wrote that I want to do this in a followup 21:56 < bridge> Why 21:56 < bridge> The bounding box calculation can also be used for non animated ones 21:57 < bridge> guess I am just lazy to write code for a layer, which I then need to rewrite again for the quad cluster 21:57 < bridge> the bounding box calculation is already done in current master for the full layer for everything except rotating envelopes. This includes non animated ones 21:58 < bridge> non animated ones are even better, because they're grouped (like the mona lisa) 21:58 < bridge> But do you use the same bounding box calculation that I suggested for animated quads? 21:59 < bridge> you mean for rotated animated quads? I plan to do that, yes 21:59 < bridge> you mean for rotating animated quads? I plan to do that, yes 21:59 < bridge> Ah shet it seems I have to install older version of openssl 21:59 < bridge> But why not do it before we merge the PR so the diff is low 😄 21:59 < bridge> @jupeyy_keks btw, Loken said she could try working on animations for ddnet-rs 21:59 < bridge> I guess I'll do it in Docker 21:59 < bridge> !! 22:00 < bridge> Cool, I can see on weekend if I make animations importable, then she can change those files.. tho it's probs bit annoying by hand 22:00 < bridge> Maybe need an editor sooner or later :/ 22:00 < bridge> I was thinking we could just use .plist files like geometry dash does 22:00 < bridge> the diff won't be low, the envelope extrema will just have a flag "rotating" and we need to calculate over each quad in order to estimate the hitbox. The quad iteration is part of the render layer and this part is also changed a lot in clustered quads 22:01 < bridge> let me search the clip calculation for you... 22:01 < bridge> dunno most stuff is json, but will take a look 22:02 < bridge> iirc adobe animate (The software she uses) can export as that 22:02 < bridge> lemme check rq 22:02 < bridge> there is no need for such a flag 22:02 < bridge> @jupeyy_keks https://github.com/ddnet/ddnet/blob/401874f0642197e055015ab5dd49e6c377ce75a2/src/game/map/render_layer.cpp#L1110 22:02 < bridge> 22:02 < bridge> As you may imagine, this also changes for clustered quads 22:02 < bridge> the rotated bounding box is the maximum for all rotations 22:02 < bridge> you can completely ignore rotation then 22:03 < bridge> These are the formats something can be exported in Adobe Animate 22:03 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415789860970696804/image.png?ex=68c47c8e&is=68c32b0e&hm=586ffc9b4aa908514321cee2c3ffb5ed768d642edcfafcfadd4e79601601121e& 22:03 < bridge> The "Cocos2D v2" is the one I mentioned before 22:04 < bridge> well the content of a json is not like a standard. so it depends on what they actually export 22:04 < bridge> if you can give me one exported file i can take a look 22:04 < bridge> we probs need: 22:04 < bridge> x,y 22:04 < bridge> rot 22:04 < bridge> scale_x,scale_y 22:04 < bridge> but the rotation is different for each quad? 22:04 < bridge> so? 22:05 < bridge> I don't get your point 22:05 < bridge> Bounding box per quad. then calc however you extended your bounding box to include all quads and their env x,y positions (+- size) 22:09 < bridge> yes, this needs to be extended a third time if we need to address rotation? 22:09 < bridge> ne 22:09 < bridge> no 22:10 < bridge> the bounding box per square will include all rotations 22:10 < bridge> rotations are always around the center 22:10 < bridge> yes and the center can be outside of the quad, currently only the corners are used for bounding box calculations? 22:11 < bridge> by "center" I mean the green point 22:12 < bridge> time for paint 22:12 < bridge> if the center is outside that changes noothing 22:12 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415792132379115671/image.png?ex=68c47eac&is=68c32d2c&hm=560b7e0c50888e6fa64bfa1ec5ea4ee10960debbf620daadfaf09975cded990b& 22:13 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415792274163372032/image.png?ex=68c47ece&is=68c32d4e&hm=2291e016f49bc14347a0cb2512776d0146084b9267622f4ba5cd76e059f97455& 22:13 < bridge> it's after 22 22:13 < bridge> longest distance to center defines the bounding box size 22:13 < bridge> my current bounding box aligns with the white quad itself and is rectangular 22:13 < bridge> yes, but why do we use bounding boxes 22:13 < bridge> so you suggest a bigger more loose bounding box just from the rotation, I get it 22:13 < bridge> we actually want achsis aligned bounding boxes 22:14 < bridge> they are the fastest 22:14 < bridge> I use axis aligned bounding boxes 22:14 < bridge> proof to me that wasting cpu is worth it on all your maps 22:14 < bridge> more than 50fps 22:14 < bridge> or 100 22:14 < bridge> or dunno what your benchmarks were 22:14 < bridge> more than 5% 22:14 < bridge> xD 22:15 < bridge> a uglygon cant be axis algined or can it 22:15 < bridge> it's always a nice rectangle 22:15 < bridge> just wait 22:15 < bridge> blue is my current bounding box 22:15 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415792961848999986/Unbenannt.png?ex=68c47f72&is=68c32df2&hm=3c57d9f82bfc346d5583bfb1b99d09d179453f4efcc3f0168c611db6995629f8& 22:16 < bridge> idk what you mean by uglygon, this is a rectangle 22:16 < bridge> yeah yeah fine, just annoying for rotations 22:16 < bridge> it's not even done like this, I am just min/maxing X,Y for all quad corner positions 🤷‍♂️ don't know what's ugly about this 22:17 < bridge> so, unless the quad layer only has 1 quad, I'll never have a bounding box around a single quad 22:17 < bridge> well you said the bounding aligns with the white one 22:17 < bridge> yours is axis aligned 22:17 < bridge> u can make a white aligned (rotated) 22:18 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415793574490144901/image.png?ex=68c48004&is=68c32e84&hm=53bcb7cc651f2cc7ca96d2f0aafdfe4d60799fd77bd927440d53c5314f55877d& 22:18 < bridge> this would be white aligned to me 22:18 < bridge> current master is axis aligned 22:18 < bridge> good, but just try rotated 22:18 < bridge> ^ 22:18 < bridge> Then we solved this issue too and see if it's worth it 22:18 < bridge> without extra code 22:19 < bridge> Yeah bro but back then I didn't know this information 22:19 < bridge> idk, I can just hit you up with a PR which includes rotating quads if you demand 22:19 < bridge> It was information against information 22:20 < bridge> can you not simply benchmark it 22:20 < bridge> That should be insanely easy to change 22:20 < bridge> your bb 22:21 < bridge> ofc, and I'd benchmark it. Might be incredibly map dependend (as you need rotating quads in the first place), but I bet some of the maps in my current benchmark list will see improvements 22:21 < bridge> Well I am more interested in how much it decreases fps 22:21 < bridge> E.g. do this rotated bb for all quads 22:22 < bridge> it doesn't, this is calculated on map setup time. 22:22 < bridge> but the bounding box is bigger 22:22 < bridge> thus the clip region is bigger 22:22 < bridge> you just have more bounding boxes that might improve fps 22:22 < bridge> thus it's potentially more likely to render a quad not actually visible 22:22 < bridge> Anyway 22:22 < bridge> Just try and see 22:22 < bridge> don't write code that doesn't optimize anything 22:23 < bridge> If we can solve the problem with rotation included lets go with that 22:23 < bridge> no it isn't, I'll only calculate it if the env contains rotation. Currently the bounding box for rotating quads is basically infinite 22:23 < bridge> We can always improve later 22:23 < bridge> Yes yes yes 22:23 < bridge> but the non rotated ones 22:23 < bridge> bounding boxes would have to store a rotation value as well which not be more efficient 22:23 < bridge> should use same algorithm 22:23 < bridge> please 22:23 < bridge> that's bs 22:23 < bridge> what would be the bottleneck? 22:24 < bridge> bs. You calculate clip x, clip y, w, h ONCE ON SETUP TIME 22:24 < bridge> anyway i am off, pulse 390 after 22 is dead 22:24 < bridge> please don't die D: 22:24 < bridge> good night 🙂 22:24 < bridge> well I said might, cuz I wanted to mention what bottlenecks are there? Like, are the bottlenecks about transfer to the GPU? 22:25 < bridge> well I said might, cuz I wanted to mention what bottlenecks are there? Like, are the bottlenecks about transfer to the GPU (to shader)? 22:25 < bridge> @jupeyy_keks would it be better if it was 24 fps or just with tweens? 22:26 < bridge> or is the boundary box check inefficient? 22:26 < bridge> I can't promise that, same as yours? I have no idea what you're doing 22:26 < bridge> oh didnt saw this oops 22:34 < bridge> ``` 22:34 < bridge> radv/amdgpu: The CS has been rejected, see dmesg for more information (-2). 22:34 < bridge> [vulkan] Error: VkResult = -4 22:34 < bridge> [2] 122616 IOT instruction ./ddnet_frametee 22:34 < bridge> ``` 22:34 < bridge> i kms 23:15 < bridge> ChillerDragon: In which order should I review your 23 PRs? 23:18 < bridge> haruhi release order 23:27 < bridge> split into 23 lesser robys 23:36 < bridge> the build in distance function doesn't work really well on integers oO 23:37 < bridge> I do the same calculation now on doubles, and the error I had just disappeared 23:39 < bridge> proably some overflow 23:42 < bridge> time to make benchmarks so jupey is happy 23:54 < bridge> https://github.com/torvalds/linux/pull/1290 23:54 < bridge> please review 23:54 < bridge> @jupeyy_keks none of the maps I benchmark benefit from implementing this 🙁 23:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1415817849863147611/Unbenannt.png?ex=68c496a0&is=68c34520&hm=feee0d7a2029135fe98021fbb7ee896eac10ff30cdcbbb2a10afd5c826a6bc7e& 23:55 < bridge> the extremly small less fps could be anything, from other changes in nightly, to other compiler, to my PC mining bitconins due to chillerdragon or something