01:17 <+bridge> yes 🥹 05:24 <+bridge> 1 second into the run. looks like more than 4 blocks from the start to me. i need something to tell me if i got a fast swing or slow swing because you cant really tell otherwise. on this map specificly, you need to hold your speed for so long that it adds up 05:24 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/822482005148434522/screenshot_2021-03-19_15-41-05.png?ex=6a505dcf&is=6a4f0c4f&hm=933ee2a7c4e831ecfca862974139ad231efd5bc544176fa5f5ee32dfa1741e2f& 10:32 <+bridge> I get this error currently on the steam beta: 10:32 <+bridge> ``` 10:32 <+bridge> 2026-07-09 10:31:47 I sdl: SDL version 2.32.10 (compiled = 2.0.6) 10:32 <+bridge> 2026-07-09 10:31:47 I gfx: Created Vulkan 1.1 context 10:32 <+bridge> 2026-07-09 10:31:48 E gfx/vulkan: Initialization failed for unknown reason. 10:32 <+bridge> 2026-07-09 10:31:48 W gfx/vulkan: Initialization failed for unknown reason. 10:32 <+bridge> 2026-07-09 10:31:48 W gfx: Failed to initialize graphics. Setting GL version 1.1.0 and trying again. 10:32 <+bridge> 2026-07-09 10:31:48 I sdl: SDL version 2.32.10 (compiled = 2.0.6) 10:32 <+bridge> 2026-07-09 10:31:48 I gfx: Created OpenGL 3.0 context 10:32 <+bridge> X Error of failed request: BadValue (integer parameter out of range for operation) 10:32 <+bridge> Major opcode of failed request: 150 (GLX) 10:32 <+bridge> Minor opcode of failed request: 3 (X_GLXCreateContext) 10:32 <+bridge> Value in failed request: 0x0 10:32 <+bridge> Serial number of failed request: 326 10:32 <+bridge> Current serial number in output stream: 327 10:32 <+bridge> ``` 10:32 <+bridge> never seen this before :thonk: 10:33 <+bridge> oh might be a case of "installed updates and didn't reboot you idiot" 11:57 <+bridge> Yes it is 11:57 <+bridge> Seen it before when I forgot to reboot arch after updating 11:59 <+bridge> Maybe there is a way to detect this version mismatch at runtime and show a more useful error message 12:19 <+bridge> you could also PR it to the ddnet-translations repo 12:26 <+bridge> is there a reason the discord button has a slightly different alpha? 12:26 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1524723459710783579/screenshot_2026-07-09_12-26-20.png?ex=6a50c8e0&is=6a4f7760&hm=a049f5a0daf48cf9fa05fb99bde7ce11c6f6a44edbe7d10d7feec767e9aa540c& 12:27 <+bridge> for "news" it's obviously intentional, but this doesn't look intentional to me 12:30 <+bridge> I don't see that in the code 12:31 <+bridge> they're all `ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f)` 12:33 <+bridge> could be the background fade ? 12:34 <+bridge> could be the background color fading ? 12:34 <+bridge> nvm wouldn't be like this 12:35 <+bridge> no, I am adressing an issue that looks almost unpatchable to me, since it involves a default config variable which needs change 12:36 <+bridge> tell me about it 12:36 <+bridge> maybe we can find a solution 🙂 12:39 <+bridge> I am currently implementing https://github.com/ddnet/ddnet/issues/12155 properly, with coloring the UI instead of the background. But the default value for g_Config.m_UiColor already has already a value of `// 160 70 175 228` hasalpha which is not black and not at alpha 255 12:40 <+bridge> I guess I can fix the last point in this, so you can make the UI more opaque 12:41 <+bridge> if you change the default value of a config option, people with the existing default will get the new default 12:42 <+bridge> that's desirable here, no? 12:43 <+bridge> do they? Do we track if a person set the default value themselves? 12:45 <+bridge> I guess with this we support full-contrast-mode 12:45 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1524728171822579712/screenshot_2026-07-09_12-45-10.png?ex=6a50cd44&is=6a4f7bc4&hm=8e2e230612e06ff5eca41e1a9c8c4f92ad98406766d26b4e04c63f61a29bbe3c& 12:45 <+bridge> no 12:46 <+bridge> yes. no 12:49 <+bridge> two stacked diecord buttons 👀? 12:49 <+bridge> two stacked discord buttons 👀? 12:50 <+bridge> no just alpha 0.5 instead of 0.25 12:50 <+bridge> hmhm 12:51 <+bridge> I see 12:51 <+bridge> ```c++ 12:51 <+bridge> if(GameClient()->m_Menus.DoButton_Menu(&s_DiscordButton, Localize("Discord"), 0, &Button, BUTTONFLAG_LEFT, nullptr, IGraphics::CORNER_ALL, 5.0f, 0.0f, ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f))) 12:51 <+bridge> if(GameClient()->m_Menus.DoButton_Menu(&s_LearnButton, Localize("Learn"), 0, &Button, BUTTONFLAG_LEFT, nullptr, IGraphics::CORNER_ALL, 5.0f, 0.0f, ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f))) 12:51 <+bridge> ``` 12:51 <+bridge> both 0.25f alpha 12:52 <+bridge> I don't think the alpha is supposed to apply to the offline menu. I use alpha ingame but I wouldn't want the offline menu alpha to be changed. 12:53 <+bridge> I guess I must have made some copy pasta then ... 12:53 <+bridge> yeah 🤦‍♂️ 12:55 <+bridge> I can address this 12:56 <+bridge> How? You'd probably have to separate it into three options: ingame menu, offline menu, background color of the checker-background when not using a theme. 12:58 <+bridge> by 12:58 <+bridge> - making the background none-theme constantly multiplied by the current value, so it's not configurable 12:58 <+bridge> - making alpha only apply ingame 12:58 <+bridge> btw the scoreboard is also not colored in the menu theme 13:02 <+bridge> yes this would end up like this - or I introduce a background UI color variable as you suggest 13:02 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1524732530459410453/screenshot_2026-07-09_13-02-08.png?ex=6a50d153&is=6a4f7fd3&hm=48698c086789bf6d8c8b133bbfbacecafaeda508796c8ca882a65b646148745b& 13:03 <+bridge> Scoreboard isn't really a menu. 13:03 <+bridge> This doesn't look good I think. 13:03 <+bridge> hmmm, but it does belong to the UI 13:04 <+bridge> I wonder what people use the UI color variable for, and whether it makes sense in their use case to color the scoreboard 13:05 <+bridge> Ingame I mostly care about the alpha. But offline I want to change the background color instead. 13:07 <+bridge> I am thinking about blending these colors 13:12 <+bridge> Blending them works (even tho I don't do this correct according to color experts 🤷‍♂️ ) 13:12 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1524734933220986930/screenshot_2026-07-09_13-11-36.png?ex=6a50d390&is=6a4f8210&hm=b70b0abbe91c74c947ec73f61dcdb351397d2beddf688715759c30db1a81c2d6& 13:12 <+bridge> yes this extreme case looks ugly - but if you want to have the client look like pink unicorns, I won't stop you 13:16 <+bridge> Having the background and UI with the same color generally seems less readable. 13:17 <+bridge> do we have a theme as default? 13:18 <+bridge> Yes, the seasons-theme is the default 13:21 <+bridge> I don't know what to do with this issue now - either we close it and let it be like it is, make this color the UI properly or remove this "feature" - right now it looks only broken to me, if I have a theme activated it does nothing in the offline menu and only colors the menu ingame, but ingame everything is colored then 13:22 <+bridge> The minimal change to me would be separating the menu background color and moving this setting next to the theme selection. Then rename the existing UI color to ingame UI color and also move it (it doesn't belong in the graphics settings I think). 13:34 <+bridge> @heinrich5991 interesting that we have a hook state that can be reached for 1 tick which just does nothing <.< I wonder what the implication is 13:39 <+bridge> I guess this is just an extra tick where the hook retracts 13:47 <+bridge> https://discord.com/channels/252358080522747904/1524743635374051430/1524743635374051430 built a neat thing you might find fun :) 14:40 <+bridge> wat the thing do? 14:40 <+bridge> identify maps based on tile collision patterns 14:40 <+bridge> quite neat 14:41 <+bridge> so the reason is that an extra frame needed to identify whether the hook is in a block or not 14:41 <+bridge> that sounds cheesy 14:41 <+bridge> cuz, you could just count to 2 frames from the previous state instead and achieve the same effect 14:43 <+bridge> But either way, since it's just a small impact to the whole implementation, I wouldn't mess with it imo 14:48 <+bridge> Like a map finder based on a partial match? 14:48 <+bridge> What is it for? To cheat in geo guesser? 15:13 <+bridge> you could go implement Tee guesser - have a screenshot from a map and guess which it is 15:13 <+bridge> doesnt it already exist? 15:14 <+bridge> oooor, have a map segment as your guess and you have to go through each map to find it. The farther your chosen map's index from the actual guess, the worse points you get 15:14 <+bridge> And the closer you get your guess to the map segment, the better bonus points you get 15:15 <+bridge> maybe indexing should go in map creation date order 15:18 <+bridge> chillerdragon: to recognize maps on screenshots based on tile patterns. I already have the neural image recognition model, which can't deal with entities properly. 16:03 <+bridge> I'm a bit confused, why roll back the version and why isn't this commit on a branch?? 18:21 <+bridge> rip chillerdragon 18:22 <+bridge> write it in rust and its merged 18:32 <+bridge> chillers adventures in the ddnet codebase feat. github PRs. 18:33 <+bridge> chillers adventures in the ddnet codebase feat. github ~~PRs~~issues. 18:33 <+bridge> chillers adventures in the ddnet codebase feat. github ~~PRs~~ issues. 18:45 <+bridge> Our releases are generally tags and not branches. Looks like the release tag was rebased on a later commit from 20.0 again, so for the release the version needed to be reverted. 19:43 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1524833405089353758/1783100302490.jpeg?ex=6a512f45&is=6a4fddc5&hm=c5f71d14c0c5d28fe0cd95491a00b909585416bd09c14a60b134dca01e677c71& 19:43 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1524833405395534096/1781977017646.jpeg?ex=6a512f45&is=6a4fddc5&hm=357a3f17888b5f485e7116b824a2d2698f21cabcd29eabb6a5785a4d5ce8ab04& 19:52 <+bridge> https://andrewkelley.me/post/my-thoughts-bun-rust-rewrite.html 19:53 <+bridge> he was pulling no punches 19:54 <+bridge> > Jarred was already writing slop well before he had access to LLMs. 20:23 <+bridge> sour blog post lmfao 21:33 <+bridge> I need small help with my custom Variant type in https://github.com/VertaireStudio/RatLab/blob/main/Core/Types/variant.hpp 21:33 <+bridge> How should I return a function in a way, that based on a switch case, I return the type itself and not just a pre-made type to typeof() from? 21:34 <+bridge> I would save a ton of space if I get a function like that working 21:56 <+bridge> could try a visitor template that simply calls func(val) per member 21:56 <+bridge> 21:56 <+bridge> i.e 21:56 <+bridge> 21:56 <+bridge> ```cpp 21:56 <+bridge> template 21:56 <+bridge> void visitor(T&& func) { 21:56 <+bridge> switch (current_type) { 21:56 <+bridge> case TYPES::BOOL: func(value_bool); return; 21:56 <+bridge> case TYPES::U8: func(value_u8); return; 21:56 <+bridge> ... 21:56 <+bridge> } 21:56 <+bridge> } 21:56 <+bridge> ``` 21:56 <+bridge> 21:56 <+bridge> you'd then just do 21:56 <+bridge> 21:56 <+bridge> ```cpp 21:56 <+bridge> visitor([&](auto &...) {...} 21:56 <+bridge> ``` 21:56 <+bridge> within your setter 21:59 <+bridge> all of your 21:59 <+bridge> 21:59 <+bridge> ```cpp 21:59 <+bridge> func void set(X p_value) { current_type == p_value.get_type() ? value_bool = p_value : get_value() = (typeof(p_value))p_value; }` 21:59 <+bridge> ``` 21:59 <+bridge> 21:59 <+bridge> would collapse to a single 21:59 <+bridge> ```cpp 21:59 <+bridge> template 21:59 <+bridge> void set(T p_value) { 21:59 <+bridge> visitor([&](auto& stored) { 21:59 <+bridge> stored = static_cast>(p_value); 21:59 <+bridge> }); 21:59 <+bridge> } 21:59 <+bridge> ``` 21:59 <+bridge> 21:59 <+bridge> tho this drops the type-match check and always coerces into whatevers active, so it will fail instead of silently working now :D 22:00 <+bridge> all of your 22:00 <+bridge> ```cpp 22:00 <+bridge> func void set(X p_value) { current_type == p_value.get_type() ? value_bool = p_value : get_value() = (typeof(p_value))p_value; }` 22:00 <+bridge> ``` 22:00 <+bridge> would collapse to a single 22:00 <+bridge> ```cpp 22:00 <+bridge> template 22:00 <+bridge> void set(T p_value) { 22:00 <+bridge> visitor([&](auto& stored) { 22:00 <+bridge> stored = static_cast>(p_value); 22:00 <+bridge> }); 22:00 <+bridge> } 22:00 <+bridge> ``` 22:00 <+bridge> tho this drops the type-match check and always coerces into whatevers active, so it will fail instead of silently working now :D 22:00 <+bridge> could try a visitor template that simply calls func(val) per member 22:00 <+bridge> 22:00 <+bridge> i.e 22:00 <+bridge> ```cpp 22:00 <+bridge> template 22:00 <+bridge> void visitor(T&& func) { 22:00 <+bridge> switch (current_type) { 22:00 <+bridge> case TYPES::BOOL: func(value_bool); return; 22:00 <+bridge> case TYPES::U8: func(value_u8); return; 22:00 <+bridge> ... 22:00 <+bridge> } 22:00 <+bridge> } 22:00 <+bridge> ``` 22:01 <+bridge> you'd then just do 22:01 <+bridge> ```cpp 22:01 <+bridge> visitor([&](auto &...) {...} 22:01 <+bridge> ``` 22:01 <+bridge> within your setter 22:01 <+bridge> ah wait no it wouldnt... gimme a second i'll test it out 22:07 <+bridge> it's kinda an issue when I cannot identify what is and isn't supported 22:07 <+bridge> Variant should only allow specific types to interact with it, and likewise - Variant interacting with only the types it supports 22:08 <+bridge> could wrap it in a variant concept 22:08 <+bridge> 22:08 <+bridge> ```cpp 22:08 <+bridge> template 22:08 <+bridge> concept Variant = std::same_as || std::same_as || ... 22:08 <+bridge> ``` 22:08 <+bridge> could wrap it in a variant concept 22:08 <+bridge> 22:08 <+bridge> ```cpp 22:08 <+bridge> template 22:08 <+bridge> concept VariantA = std::same_as || std::same_as || ... 22:08 <+bridge> ``` 22:08 <+bridge> std::same_as() huh 22:09 <+bridge> https://en.cppreference.com/cpp/concepts/same_as 22:09 <+bridge> 22:09 <+bridge> its awesome ^^ 22:12 <+bridge> thing is, I don't want to condense it down to a boolean, but rather just returning the type itself, so that I don't need to perform checks just to pass 'typeof(foo)' 22:13 <+bridge> Cuz that way, I can make a better 'get_value()' without worrying about the T template so much 22:15 <+bridge> as in, when having a Variant with a boolean type of 'true' as current: 22:15 <+bridge> 22:15 <+bridge> get_current_type() should return 'Bool', as the type itself 22:15 <+bridge> get_current_value() should return 'true' as the type's value 22:15 <+bridge> I don't wanna AI it, cuz I know it will be even more unreadable 22:44 <+bridge> where is matricks currently working at? only reading bad news for idTech 👀 22:44 <+bridge> where is matricks currently working at? only reading bad news about idTech 👀 23:18 <+bridge> his best next place to work would be alongside valve with the source engine 23:36 <+bridge> @blaiszephyr I was thinking, can't I just merge all the data of Variant into an array which acts as a way to index into whatever variables you want, based on the indexing of 'TYPES'? 23:36 <+bridge> would it be stupid or genius 23:43 <+bridge> depends on how much you control you'd like 23:43 <+bridge> you're thinking union but rawdogging style 23:43 <+bridge> which comes with more boilerplate but more control 23:45 <+bridge> well, I could private the data anytime, nothing's stopping me from it 23:46 <+bridge> but then pointing to those data individually will be tricky 23:47 <+bridge> I think having as much control for such a versatile struct as possible is the idea