00:02 < bridge> We have the chat command /showall for all hmm. So that would be then /showallteam? Not to be confused with the new /showteam 00:06 < bridge> :nouis: 00:07 < bridge> I think that condition is just, does this entry not null 00:08 < bridge> other than that, it won't be ever go through 08:56 < bridge> this is a regression imo 09:15 < bridge> this is a regression imo (oh not yet, since the players tab is still present 09:16 < bridge> this is a regression imo (oh not yet, since the players tab is still present) 09:48 < bridge> I have spent whole afternoon to write some useless codes just for coding OOP in C. 09:48 < bridge> :nouis: 09:56 < bridge> 🤔 09:57 < bridge> Are there any C++23 features in DDNet codes now? 09:57 < bridge> afaict ddnet is at C++17 09:59 < bridge> But I wonder if any code changes are needed when we upgrade to 20 10:02 < bridge> What? 10:03 < bridge> i think we're at 20 10:03 < bridge> Hasn't ddnet been C++20 for several months? 10:04 < bridge> ` set_property(TARGET ${target} PROPERTY CXX_STANDARD 20)` 10:04 < bridge> we're at 20 10:07 < bridge> I basically haven't read the ddnet code since it upgraded to C++20. :3 10:10 < bridge> I just set it to 23 and it just builds 🤷‍♂️ 10:10 < bridge> at least on ubuntu 10:12 < bridge> Yeah, that means ddnet does not use any features that were deprecated in C++23. 10:12 < bridge> I am currently checking 10:13 < bridge> @robyt3 would you have any objections upgrading to C++23? Would you prefer directly going to C++26 or stay at C++20 10:14 < bridge> The constraint is usually what deen's build machine supports 10:14 < bridge> I think C++ 26 is too aggressive, at least now. 10:15 < bridge> I agree on that, but I wanted to include the option :owo: 10:15 < bridge> MSVC currently does not support any of the core language features of C++ 26. 10:16 < bridge> so deen has a dedicated machine for building, does it run on windows (10?) 10:16 < bridge> Debian I think, see previous issues about upgrading C++ 10:18 < bridge> It would be *nice* to install C/C++ libraries on Windows without any other tools like vcpkg or MSYS2. 10:18 < bridge> I found it, thank you :deen_star: Debian is correct, C++20 was introduced in July btw 10:22 < bridge> for C++ deen would need at least gcc 14 (for basic support), in july the build machine was on gcc 11 10:22 < bridge> Wait what? 10:22 < bridge> You can install mingw with rustup??? 10:23 < bridge> C++23 is out until 1. July 2026, 10:24 < bridge> !remind 7months Upgrade C++ 10:24 < chillerbot12> Helo Assa I will remind you at Mon Dec 01 2025 10:31:09 GMT+0100 (Central European Standard Time) about your matter again. 10:25 < bridge> :thonk: 10:25 < bridge> I must be in 2035. 10:29 < bridge> Oh nothing, that was for Rust. 10:31 < chillerbot12> Elo @Assa I just wanted to remind you that: Upgrade C++ 10:47 < bridge> <0xdeen> and the limitation is that we want to build on an old Debian version to keep compat. with many old Linux distributions because glibc isn't backwards compat. 11:40 < bridge> I'm switching browser from firefox to edge 11:40 < bridge> firefox just takes too much memory 11:42 < bridge> I really shouldn't hesitate on hardware upgrade 11:43 < bridge> Hm? 11:44 < bridge> I would say that 11:44 < bridge> At least, edge takes more memory than firefox on my computer. 11:45 < bridge> Now I only use edge on my mobile phone. 11:55 < bridge> https://media.discordapp.net/attachments/1443657084817113273/1444973578406858846/image1.gif?ex=692ea803&is=692d5683&hm=5a5f54bd841154c2790f9c319e4ef2b5f607e2cc6d058655bbf79da36a613102&=&width=577&height=769 11:55 < bridge> https://media.discordapp.net/attachments/1443657084817113273/1444973578721427486/image2.gif?ex=692ea803&is=692d5683&hm=c34e3bea65a158ff412d49be7de98c516228374b09f2fca92a97ef0975210c11&=&width=577&height=769 11:55 < bridge> https://media.discordapp.net/attachments/1443657084817113273/1444973579077685299/image3.gif?ex=692ea803&is=692d5683&hm=ff0e1e37f21e02257eb2b44fa4c3da8bc808e24caa3d27ce452c6b1384a12ee8&=&width=577&height=769 11:55 < bridge> https://media.discordapp.net/attachments/1443657084817113273/1444973579371548684/image4.gif?ex=692ea803&is=692d5683&hm=ea1e467daaacc5f824776c446f03067d1263a790b526d4fc577f642b7d2a021a&=&width=577&height=769 11:55 < bridge> @Discord Mod 11:58 < bridge> Vcpkg is so easy to use tho 12:04 < bridge> too bad half their ports are broken 15:22 < bridge> @stormaxd gentle reminder, that you have a PR that I'd merge if you fix the small issues 🙂 15:28 < bridge> @totar can you rebase teleports? 15:40 < bridge> I would be extremely surprised to hear chromium does better, chromium is a known memory hog 15:45 < bridge> Is this a valid website from us? If yes then it's not loading 15:45 < bridge> Fehlercode: 522 No Reason Phrase huh 15:45 < bridge> `Fehlercode: 522 No Reason Phrase` huh 16:00 < bridge> Can sb explain to me NetObjectEx, is this an extension of the existing object? 16:00 < bridge> 16:00 < bridge> ``` 16:00 < bridge> 16:00 < bridge> NetObjectEx("PlayerInfo", "player-info@netobj.ddnet.org", [ 16:00 < bridge> NetIntRange("m_TimeScoreMillis", 0, 'max_int'), 16:00 < bridge> ]), 16:00 < bridge> ``` 16:01 < bridge> in my understanding it is, and I could just create an extension like this 16:02 < bridge> It is a completely new object, it is however an extended object, meaning mostly that its type is a uuid rather than just an integer. I doubt it is very interesting to you how that is achieved, but it is for all intents and purposes just a normal object type 16:03 < bridge> It is a completely new object type, it is however an extended object, meaning mostly that its type is a uuid rather than just an integer. I doubt it is very interesting to you how that is achieved, but it is for all intents and purposes just a normal object type 16:03 < bridge> (basically the netobj equivalent of the netmsg extension) 16:03 < bridge> so I need to send the old type, and if applicable, send the new type behind it as well 16:03 < bridge> Yes, that's how we do it, you just send both 16:04 < bridge> something something bandwidth higher? 16:05 < bridge> deltashots mean an object that doesn't change doesn't have a bandwidth cost 16:07 < bridge> Also for our "extensions" to old objects we obviously only send new fields, not mimic all the fields from the old object 16:09 < bridge> @learath2 do you know what's the point of move with sign extension instruction which has operands of the same size -.-? 16:09 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1445069394916147270/image.png?ex=692f013f&is=692dafbf&hm=02c35543158a0060dc95f06c2f134b24005a01d336fb826b57f09db27239786d& 16:10 < bridge> @learath2 do older clients just ignore the new message, or do I need to check for this? 16:10 < bridge> (like introduce DDNET_VERISON_ALLOW_FOR_MY_COOL_NEW_NETMESSAGE 19.6 16:11 < bridge> (like introduce DDNET_VERISON_ALLOW_FOR_MY_COOL_NEW_NETMESSAGE 19.6) 16:11 < bridge> older clients should (silently?) drop it, the extension was designed like that 16:13 < bridge> mh, it makes no sense, so maybe it just is cheap to decode it that way and it doesn't matter? 😄 16:13 < bridge> (with rex.w set that instruction becomes movsxd r64, r/m64 as you see in that footnote there) 16:14 < bridge> (with rex.w set that instruction becomes movsxd r64, r/m32 as you see in that footnote there) 16:14 < bridge> i still haven't learned what rex.w is xd 16:15 < bridge> Version check 16:16 < bridge> Send old for old clients, new obj version check, this is done for few events already 16:16 < bridge> The rexw bit is basically how they bolted on 64bit onto x86 16:16 < bridge> it seems firefox just let pages run whatever they want and take the memory, while edge free memory based on usage, tho may result in cold start when switching back to a page 16:16 < bridge> at least what feels to me 16:18 < bridge> last question, how would I catch the netmessage on the client? 16:19 < bridge> Are we talking netmsg or netobj? 16:20 < bridge> Gameclient? 16:20 < bridge> Depends what msg, look the ones that look similar 16:21 < bridge> Engine netmsgs you'd handle in `CClient::ProcessServerPacket` game netmsgs you'd handle in either `CGameClient::OnMessage` or sometimes in a `CComponent::OnMessage` 16:25 < bridge> Netobjs depend quite a bit on what you are doing, usually most stuff will get "cached"/"indexed" within `CGameClient::OnNewSnapshot`. Sometimes stuff is looked up within the snap when needed 16:30 < bridge> playerInfo 16:31 < bridge> I can check in 20min if you still need it 16:32 < bridge> does the message then have their own netobj-type? 16:34 < bridge> I feel you might be confusing terms here, netobjs and netmsgs are quite unrelated 16:34 < bridge> the problem is, that's aweful, the player info objects are sorted by name or by score 16:35 < bridge> if you need to look them up a different way you usually build another "index"ing structure 16:36 < bridge> yes, but I want the server to send time by milliseconds, but this is the exact thing that it's sorted by 🙁 16:37 < bridge> I have an idea how to solve this, but robyt will put me on the cross 16:38 < bridge> I don't get the issue, send it by millis, add a new `m_apInfoByRaceTimeMillis` use that where you want to use it 16:38 < bridge> how do I pair player infos and their millis then? I can't do a search for each item, at least that would be bad 16:40 < bridge> Maybe read around a little for how we add extra info like that, that shouldn't really be a problem you are having 16:41 < bridge> You receive a `cid -> millis` mapping when sending that netobj, you don't need to do a lookup or anything at all, you already have a ground `cid -> player-info` mapping from the legacy player info object 16:43 < bridge> I can't just extend the existing object, right? 16:44 < bridge> I noticed I don't even have the cid 16:44 < bridge> You do, that is encoded in the id of the snap object you are creating 16:46 < bridge> that's neat 👍 16:53 < bridge> @essigautomat for me looks like CNetObj_DDNetPlayer is extension of playerinfo 17:00 < bridge> with it you can check m_ReceivedDDNetPlayer and show new time with millisenconds 17:01 < bridge> can I just extend the extension? 17:02 < bridge> yes, if its Net*Ex you can just add a field 17:03 < bridge> old clients will just ignore the new field 17:03 < bridge> yes, if its Net* **Ex** you can just add a field 17:14 < bridge> CNetObj_DDNetPlayer Writes directly into m_aClients 17:14 < bridge> idk if I should just add the new field to m_aClients as well 17:15 < bridge> why not 17:15 < bridge> I found that it's interesting to code some simple useless libraries. 17:15 < bridge> :nouis: 17:15 < bridge> every client can have a finish time 17:24 < bridge> Time to make a draft PR so you can cross me 🙂 17:42 < bridge> ye looks good 17:42 < bridge> idk why still use the magic -9999 etc but netobj part looks good 18:04 < bridge> driving home I thought about that, this can't work 18:05 < bridge> like I still need to detect, that I am sending a newer extended info compared to the old extended info 18:05 < bridge> idk how I do that 18:06 < bridge> i dont undestand u 18:06 < bridge> server needs to detect it? 18:07 < bridge> like what If I joint with a new client on the old server, it still sends me the extended info, but is missing the new field 18:07 < bridge> if you join old server you wont get the info 18:07 < bridge> and you can add default value to the field so you just use that 18:07 < bridge> so u count as 0 millis, or in ur case -9999 18:08 < bridge> I will, because CNetObj_DDNetPlayer is not new 18:08 < bridge> only the field is 18:09 < bridge> thats why you use default value for the millis 18:09 < bridge> if you get -999 meaning its not set or 0 18:09 < bridge> what does the client receive for a field it doesn't know? 18:10 < bridge> I don't get it 18:10 < bridge> `NetIntRange("m_TimeScoreMillis", 0, 'max_int', default=-9999),` 18:10 < bridge> if you do this 18:10 < bridge> itll receive -9999 if server doesnt know it 18:11 < bridge> can I still clamp it to 0 btw? xD 18:11 < bridge> but cant you just send millis and count that instead of doing some jank with old score and -9999, uint32 is 49 days 18:11 < bridge> I think the 0 is also wrong 18:11 < bridge> ofc if you want send minus values and your min is 0 18:11 < bridge> I do that, how do I show NO score then? 18:11 < bridge> 0 ? 18:12 < bridge> you cant finish in 0 milis? 18:12 < bridge> or can you 18:12 < bridge> no you can't, and if 0 is reserved for NO SCORE, what do I do for NO VALUE then? 18:13 < bridge> btw teeworlds 0.7 is sending the same, just time in ms and -9999 for no score 18:13 < bridge> DDNet is sending time in negative seconds, and -9999 for NO SCORE 18:13 < bridge> and then it breaks if you have a finish time of 9999 seconds 🙂 18:13 < bridge> wdym no value 18:14 < bridge> default value for detecting, that the server didn't send me this 18:14 < bridge> also 0? if you have 0 meaning you didnt finish 18:14 < bridge> because -9999 already has a meaning 18:14 < bridge> why cant it be 0 18:14 < bridge> yes, but I need to detect when I need to use the old score 18:15 < bridge> I can't do this if both is 0 18:15 < bridge> ah i see, if you join old server you'll default to 0s and you wont know if this is actual time or server doesnt have that fiels 18:15 < bridge> ah i see, if you join old server you'll default to 0s and you wont know if this is actual time or server doesnt have that field 18:15 < bridge> YES 18:16 < bridge> max uint then? 18:16 < bridge> and what if you finish with max uint? 18:16 < bridge> is that possible 18:16 < bridge> idk tbh xD 18:17 < bridge> what is the highest finish time ever achieved 18:17 < bridge> maybe I need a long long anyway 18:17 < bridge> u die of old time 18:17 < bridge> before u overflow i think 18:17 < bridge> is the server tick an int? then you are correct 18:18 < bridge> race timer 18:18 < bridge> yes just checked its int 18:18 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1445101719099936820/image.png?ex=692f1f5a&is=692dcdda&hm=8fb8e873102f5344bf9cf6a3798a81c90f5c9a70f9ae516a1765e0bd6459da34& 18:18 < bridge> then the maximum possible time is max-int / 50 18:19 < bridge> then the maximum possible time is max-int / 50 (seconds) 18:20 < bridge> longest linear time is 16h 18:20 < bridge> divided by 1000 for milliseconds 18:20 < bridge> i dont think anyone got 49 days 18:20 < bridge> tbh 18:20 < bridge> the int type is too small, because it maxes out at ~12 hours 18:21 < bridge> u can just go on time penalty tile map and spam the time penalties to get to the old age 18:22 < bridge> im p sure there is 18:22 < bridge> longest multimap time iirc, or multeasy i forgot 18:22 < bridge> maybe some encode for the time then 18:24 < bridge> multeasy last time 40 h 18:29 < bridge> max_uint doesn't exist 18:29 < bridge> neither does max_long or anything besides int 18:29 < bridge> max int is 24 days anyway 18:30 < bridge> how do you arrive at this number? 18:30 < bridge> I think you're off by 2 18:30 < bridge> 2147483647 / 86400000 18:31 < bridge> ah milliseconds per hour 18:31 < bridge> 86400000 millis in a day 18:32 < bridge> I mean I could add a second field and reconstruct by it 18:32 < bridge> I don't know how much this approach would be liked 18:34 < bridge> i would just send millis and leave the -999 as no value 18:34 < bridge> 24 days time most likely doesnt exist 18:34 < bridge> I read that as 24 hours xD 18:35 < bridge> wat 18:35 < bridge> ye that's okay 18:35 < bridge> 24 days time definitely does exist or will exist 18:36 < bridge> wont tick overflow first? 18:36 < bridge> how 18:36 < bridge> im looking at someone with a 99day time rn 18:36 < bridge> can you link 18:36 < bridge> flw me ingame 'uubie' 18:36 < bridge> no, because you have morre millisecond per second, than you have ticks per second 18:37 < bridge> 2000 hours 18:37 < bridge> https://ddstats.tw/leaderboard/worsttimes 18:37 < bridge> XD 18:38 < bridge> that are only 4 days 18:38 < bridge> so, _for now_, my datatype is enough 18:38 < bridge> i think colo-colo is trying to beat the 2k hours tho 18:38 < bridge> is time going differently in germany 18:39 < bridge> 2k hrs is 83 days not 4 18:39 < bridge> idk what I smoked 18:40 < bridge> so maybe instead of sending full time in the extra msg, maybe just millis 18:40 < bridge> so you still have hours minutes in old time, now just append millis 18:40 < bridge> yeye, let me just make an array type out of it 18:43 < bridge> nvm max time possible is 497 days 18:44 < bridge> with 50 ticks per second, before int overflows 18:44 < bridge> with 50 ticks per second, before game int overflows 18:44 < bridge> with 50 ticks per second, before game tick int overflows 18:46 < bridge> @kebscs where did you define the default values for the tune zones? 18:46 < bridge> oh nevermind shared/protocol.h is not generated 19:03 < bridge> @essigautomat can you rerun the failed job? 19:03 < bridge> I highly doubt the game works fine after the ticks roll over anyway, idk if anyone tried it 19:05 < bridge> people already died of old age 19:14 < bridge> I love the stupid comment 19:14 < bridge> the only other reason is you waited 5 years 19:14 < bridge> or actually its ticks its probably less 19:15 < bridge> ``` 19:15 < bridge> ((2^31 - 1) / 50) × second ➞ year 19:15 < bridge> 19:15 < bridge> = 1.36102 yr [Time] 19:15 < bridge> ``` 19:15 < bridge> tees cannonically live for about 1.3 years 19:39 < bridge> the server I have seen this happening was > 350 days or something, idk 19:58 < bridge> ChillerDragon: I think you broke forcing votes too somehow 20:30 < bridge> @kebscs yes my proposal is a bit insane, it also generalizes 07 race 20:33 < bridge> In theory, you could now have a time AND a score 20:33 < bridge> but who am I telling the race game what to do 😄 20:54 < bridge> Not sure if kebs tries to troll me, or hates my PR 20:55 < bridge> why XD 20:56 < bridge> valid review 20:56 < bridge> from me 20:56 < bridge> okay, if you say so xD 20:56 < bridge> thanks for the review 👍 20:56 < bridge> did you understand the min max issue? 20:56 < bridge> or should I explain it 20:56 < bridge> i see the comments 20:56 < bridge> the max one also sorts with the `>` smybol 20:57 < bridge> the max one also sorts with the `>` symbol 20:57 < bridge> because it calculates with negative scores :pepeW: and I hate it 20:57 < bridge> Shit what broke 20:58 < bridge> the max one also sorts with the `<` symbol 20:58 < bridge> I just turned pc off 20:58 < bridge> FinishTime or FinishTimes 20:58 < bridge> singular is better imo 20:58 < bridge> Could you open an issue and ping me @learath2 I will fix tomorrow 20:58 < bridge> same as TuneZone and not TuneZones 21:00 < bridge> done 21:03 < bridge> last few nitpicks 21:03 < bridge> and i like the pr 21:05 < bridge> time to eat anything ^.^ or anyone 😈 21:06 < bridge> ✅ 21:07 < bridge> and squash commits 21:07 < bridge> 👍 21:07 < bridge> he did not ask for that 21:07 < bridge> maintainers usually do before merge 21:07 < bridge> and pr is very nice 21:08 < bridge> if he wants the commits squashed he can say 21:11 < bridge> I did the mistake before, and then sb did very well commits that would all compile if you do them one by one 21:11 < bridge> do your commits compile one by one @totar ? 21:12 < bridge> btw, average DDNet contributor experience xD 21:12 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1445145474636972217/Unbenannt.png?ex=692f481a&is=692df69a&hm=d7dfd8fb044c949c310a5860a87e9467a9d7cd796ec1aaf6a7a0d3b8b7e0434a& 21:14 < bridge> they do all compile yes 21:14 < bridge> actually 21:15 < bridge> maybe only on windows 21:15 < bridge> I could fix that tho hold on 21:16 < bridge> but they dont do separate things, commits alone with just "fix clang format" or "bump teehistorian" dont give value by itself without other context 21:16 < bridge> ok they do now 21:16 < bridge> commit separation is also a thing I struggle with 21:17 < bridge> most of my PRs are just 1 21:17 < bridge> I can squash the teehistorian commit 21:20 < bridge> ok it's 8 commits now 21:22 < bridge> @chillerdragon how would you solve this, with a different message? 21:33 < bridge> clang format too :p 21:33 < bridge> also idk how multiple commits would work here when only 1 has the teehistorian bump 21:34 < bridge> I cba 21:34 < bridge> take it or leave it 21:35 < bridge> i mostly dont bother and squash all 22:42 < bridge> @totar can i ask for something 22:43 < bridge> you can ask, I can't stop you 22:45 < bridge> hmmm no 22:45 < bridge> yes , i am using your client on android its good but not made for mobile , can you make it more usable in mobile , best upgrade would be scaling the gui for mobile phones cuz tapping on menu buttons harder than tapping on close the ad buttons 22:57 < bridge> you have ads in your Android Client? 23:01 < bridge> i meant the ads that show up on 1+gb sized still 5 verticle player running games 23:01 < bridge> they got small buttons too except download one 23:33 < bridge> i got a buff for all the dummy players out there 🥀 23:52 < bridge> what is the buff 23:52 < bridge> animation prediction 23:52 < bridge> and angle 23:52 < bridge> o 23:53 < bridge> lowkey yea 23:53 < bridge> its annoying when high ping 23:53 < bridge> and ur dummy 23:53 < bridge> is tweaking 23:53 < bridge> im litteraly playing on chile server rn and dummy feels so weird 23:53 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1445186094164606996/DDNet_75RjrbeM0M.png?ex=692f6def&is=692e1c6f&hm=0d1fa5e45a6f5aa7825e10b7dd7be0f764968dfbefb1d9e2cc569080e3fdb187& 23:53 < bridge> now itll feel like 0 ping 23:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1445186223869001759/2025-12-01_23-41-33.mp4?ex=692f6e0e&is=692e1c8e&hm=a12f23988a44012e3e4a990f6e2d958dd94c33a605db5dcf275d6cbf3b33f418& 23:54 < bridge> this is with margin 300, so basically 300 ping 23:54 < bridge> and sound prediction too 23:54 < bridge> you cant even tell on the video its 300 ping 23:57 < bridge> goat 23:57 < bridge> and particles