01:24 < bridge_> chillerdragon: got smarter on this issue? i'd like to fix this aswell - it's annoying having this everywhere
01:24 < bridge_>
01:24 < bridge_> ```
01:24 < bridge_> 2025-04-13 01:20:16 I account: saving account 'meloƞ' CID=0 AccountId=1 Logout=1
01:24 < bridge_> 2025-04-13 01:20:16 T game: kill killer='0:meloƞ' victim='0:meloƞ' weapon=-3 special=0
01:24 < bridge_> 2025-04-13 01:20:16 I chat: *** 'meloƞ' has left the game
01:24 < bridge_> 2025-04-13 01:20:16 I game: leave player='0:meloƞ'
01:24 < bridge_> 2025-04-13 01:20:16 I mysql: can't free last result (free_result:stmt:5025): Statement has no result set
01:25 < bridge_> 2025-04-13 01:20:16 I sql: [8] save user done on read database 0
01:25 < bridge_> 2025-04-13 01:20:16 I mysql: can't free last result (free_result:stmt:5025): Statement has no result set
01:25 < bridge_> 2025-04-13 01:20:16 I sql: [9] logout user done on read database 0
01:25 < bridge_> ```
01:34 < bridge_> ```File "\scripts\languages\twlang.py", line 58, in check_file
01:34 < bridge_> matches = re.findall(r"(Localize|Localizable)\s*\(\s*\"((?:(?:\\\")|[^\"])+)\"(?:\s*,\s*\"((?:(?:\\\")|[^\"])+)\")?\s*\)", fileobj.read())
01:34 < bridge_> ~~~~~~~~~~~~^^
01:34 < bridge_> File "", line 325, in decode
01:34 < bridge_> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe0 in position 1056: invalid continuation byte```
01:34 < bridge_> why does this happen?
01:34 < bridge_> trying to execute anaylze.py
01:34 < bridge_> the other scripts also seem to be broken for me for some reason
01:36 < bridge_> ah, utf-8-sig i think
01:41 < bridge_> ah, no, some weird character
01:45 < bridge_> windows doesnt like italian letters or french i think
02:48 < ws-client> yea no idea melon
07:14 < bridge_> hello all, lmk if you have any tips- I'm bad with toolchain stuff
07:14 < bridge_>
07:14 < bridge_> CMake configure said "using bundled" for a couple of things, but then the exe says it cant find dlls (libfreetype, SDL2, libpng16-16, avformat-61).
07:14 < bridge_>
07:14 < bridge_> Are these found in the ddnet-libs submodule somewhere or should they be installed in my system already somehow
07:16 < bridge_> `git submodule update —init —recursive` will bring ddnet libs in (yes that’s where u get it btw)
07:17 < bridge_> idk what package manager you use but i usually install the libs that way
07:19 < bridge_> hm, well it seems like my ddnet-libs is up to date but cmake isn't getting the libs
08:55 < bridge_> ok ignore what I said before, the dependencies are all being built properly but the exe lands in build/debug but the dlls are in build/
08:56 < bridge_> am I supposed to be copying everything into one place? or should I change cmake build type to not be debug?
10:51 < bridge_> honeypot on 8303?
10:55 < bridge_> @0xdeen btw. fix master please if you are online
10:55 < bridge_> can't put my PRs on draft with GH app :/
11:59 < bridge_> @hokepoke: how do you build?
12:08 < bridge_> I remember this, and I talked with Robyt3 about it. It's something that happens when you use the msvc tool chain and something we wanted to look at so everything is properly placed in the correct directory. I didn't find a way to do so yet so I, out of spite switched to gnu using msys2 :monkalaugh:
12:09 < bridge_> I remember this, and I talked with Robyt3 about it. It's something that happens when you use the msvc tool chain and something i wanted to look at so everything is properly placed in the correct directory. I didn't find a way to do so yet so I, out of spite switched to gnu using msys2 :monkalaugh:
12:13 < bridge_> @0xfaulty did you see my wire message?
12:14 < bridge_> @0xfaulty:
12:14 < bridge_> @0xfaulty ^
12:14 < bridge_> Argh
13:09 < bridge_> When testing with MSVC I build with `DEV=OFF` so I also get the package folders like `pack_DDNet-19.2-win64_zip` which are ready to use
13:39 < bridge_> Does anyone know how I can tell gcc to create a lookup table for a switch Statement?
13:44 < bridge_> Hmm afaik the compiler selects this automatically
13:51 < bridge_> Trust the compiler
13:51 < bridge_> unless you are super pro
14:01 < bridge_> I wonder how it handles default for lookup optimization
14:15 < bridge_> if default can never happen use __builtin_unreachable so you allow the compiler to make a lookup table
14:15 < bridge_> or whatever is equivalent in c++
14:16 < bridge_> else the compiler won't make a lookup table afaik. because it can never know what values the switch number can have.
14:23 < bridge_> perfekt, this is what I was looking for 👍 thx
14:39 < bridge_> else the compiler won't make a lookup table. because it can never know what values the switch number can have.
14:45 < bridge_> Teero: 10x engineer
14:46 < bridge_> literally
14:48 < bridge_> gdb is weird - i wanted to debug an entirely differen crash happening in my code, i run gdb, place a breakpoint, and suddenly it segfaults on clientEnter
14:48 < bridge_> running it without gdb in both debug and release doesnt crash
14:48 < bridge_> i hate this game
14:49 < bridge_> looks like you have ub but it only actually causes a crash when you use gdb
14:49 < bridge_> looks like you have UB but it only actually causes a crash when you use gdb
14:50 < bridge_> @blaiszephyr you should probably do a asan/ubsan run xd
14:50 < bridge_> :(
14:50 < bridge_> Hey @essigautomat , why can’t I move in the direction of the arrow? Both force and max speed are set to 1. Is this the expected behavior?
14:50 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1360960311469015040/simplescreenrecorder-2025-04-13_20.37.23.mp4?ex=67fd048f&is=67fbb30f&hm=0f6ef7959d02b63bdfca01ac2f8c71263ed9bc2491370e8a0c61f25da57a1717&
14:51 < bridge_> are these the new speeders? i thought they looked different
14:51 < bridge_> are these the new speeders? i thought they looked different than the normal ones
14:52 < bridge_> Yes, they're new speeders. And I can move in the old one.
14:57 < bridge_> you are moving but very slowly, with speed of 1
14:57 < bridge_> as you said theyre max speed 1
15:10 < bridge_> Setting max speed to 2 still doesn’t allow movement, but setting it to 3 works. Is there really such a big difference in speed between the two?
15:10 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1360965256360235121/simplescreenrecorder-2025-04-13_21.05.07.mp4?ex=67fd092a&is=67fbb7aa&hm=53890662f2a7d40990bafb277ee6437aff64acb259feafbc1f47409195bd8b0b&
15:10 < bridge_> it is probably a quantization issue
15:10 < bridge_> Setting max speed to 2 still doesn’t allow movement, but setting it to 3 works. Is there really such a big difference in speed between the two?
15:10 < bridge_> Does it crash in gdb even if you dont set a breakpoint? This is really never supposed to happen with how gdb is designed
15:11 < bridge_> Setting max speed to 2 still doesn’t allow movement, but setting it to 3 works. Is there really such a big difference in speed between the two?
15:11 < bridge_> (sorry, uploaded a invalid attachment)
15:11 < bridge_> Even with a breakpoint it's not really supposed to happen. Gdb freezes all threads at the same time. So even the relative timings shouldnt change
15:12 < bridge_> gdb might offset the stack no? this might lead to UB actually crashing instead of modifying something unknowingly
15:12 < bridge_> gdb might offset the memory no? this might lead to UB actually crashing instead of modifying something unknowingly
15:13 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1360966126309343422/simplescreenrecorder-2025-04-13_21.11.40.mp4?ex=67fd09fa&is=67fbb87a&hm=8357ae1b967b52870f0789688542b8dd113677f3a52cfc0608376b2b64b60165&
15:14 < bridge_> maybe
15:14 < bridge_> Offset? I don't think it should be touching the memory at all. Aslr does move things around every launch, but it shouldn't consistently only crash in gdb
15:14 < bridge_> Let me try to think of something gdb influences
15:15 < bridge_> its funny, the function in itself was broken but didnt crash when running without gdb
15:16 < bridge_> gdb basically just told me the function is broken
15:16 < bridge_> but why does it run without
15:16 < bridge_> Software watchpoints slow down execution I guess. That could do it
15:16 < bridge_> the function was called which tried accessing invalid memory, but it still executes and doesnt segfault
15:16 < bridge_> so weird
15:16 < bridge_> Conditional breakpoints also slow down execution but gdb shouldn't ever make them itself if you arent using a plugin or sth
15:16 < bridge_> @blaiszephyr exactly as i said :nouis:
15:16 < bridge_> So running it outside gdb accessing invalid memory worked fine?
15:17 < bridge_> yes xD
15:20 < bridge_> I really do not remember gdb touching the stack, it just spawns a normal process then uses the kernel to attach to it remotely
15:20 < bridge_> Weird
15:21 < bridge_> The only thing I can think of is gdb disabling aslr
15:22 < bridge_> If you still have the code maybe try enabling aslr under gdb, I'm curious 😄
15:22 < bridge_> Could it detect that it's being debugged and enable more strict assertions?
15:22 < bridge_> i'll order pizza and investigate it a bit. - it just bugs me that a broken function is getting called, half executed and i dont get a segfault
15:24 < bridge_> use asan/ubsan
15:26 < bridge_> He seems to have already found the bug
15:31 < bridge_> i know
15:32 < bridge_> Open your speed hud, this is speeding you up but eaten up by quantization, the old speeders clamped 1 to 5
15:34 < bridge_> so set max_speed on the new ones to 5 and they should behave **similar**
15:38 < bridge_> We thought about it but people decided against it, I was really in favor of adding different speeders, I might introduce a second variant for max_speed > 0, it's almost trivial to do
15:38 < bridge_> Ok I got. Thank you!
16:45 < bridge_> @ryozuki why is a function call a kind of a terminator?
16:49 < bridge_> functions can diverge
16:50 < bridge_> I'm a caveman, I'll make it an `Rvalue`
17:25 < bridge_> @ryozuki you have an error. https://edgl.dev/blog/sdl2-cmake/
17:25 < bridge_> on the last line it should be $(nproc) not ${nproc}
17:27 < bridge_> @ryozuki you have an error. https://edgl.dev/blog/sdl2-cmake/
17:27 < bridge_> on the last line it should be `$(nproc)` not `${nproc}`
18:27 < bridge_> curious thing, my gentoo has been picking a mirror in south africe recently, all the way from italy
18:28 < bridge_> it seems fast, so doesn't really matter, but still curious, why? 😄
18:35 < bridge_> Hello, handsome people!. How is it going?
18:35 < bridge_> I suddenly changed of internet connection and now the game detect me like i was playing with vpn
18:36 < bridge_> Any idea about why?
18:47 < bridge_> @ryozuki will your language have support for expression statements?
19:13 < bridge_> probs
19:13 < bridge_> mm rly old post xd
19:19 < bridge_> fix it!!!
20:20 < bridge_> this is a certified visual studio moment. you can force set CMAKE_RUNTIME_OUTPUT_DIRECTORY, CMAKE_LIBRARY_OUTPUT_DIRECTORY and CMAKE_ARCHIVE_OUTPUT_DIRECTORY to the same thing
20:20 < bridge_> these ppl don’t use visual studio my friend
20:54 < bridge_> Where issue?
20:54 < bridge_> (but PR is fire 🎉)
20:56 < bridge_> I switched to vscode with cmake tools extension, tried visual studio but it was very confusing
20:56 < bridge_> boooo
20:56 < bridge_> msys2 >
20:57 < bridge_> I also tried mingw within WSL but had 0 success
20:57 < bridge_> it is, but both were working for me out of the box, VS Ui is so full of things, too overloaded
20:57 < bridge_> which distro
20:57 < bridge_> arch cross compile is pretty ez
20:57 < bridge_> but all of that is useless when u have msys2
20:57 < bridge_> fr ong
20:57 < bridge_> Ubuntu yay
20:58 < bridge_> yea i cant imagine it'd be all that easy
20:58 < bridge_> CMake extension for VSC rules
20:59 < bridge_> it's alright
20:59 < bridge_> i dont think u should have to make the targets manually
20:59 < bridge_> qt creator makes them for you
20:59 < bridge_> exactly
21:00 < bridge_> VS found too many targets for me for comparison
21:00 < bridge_> each target for release/debug/release with debug symbols/idk what the 4th was/...
21:00 < bridge_> Please make skins for the rest of the chess pieces so someone can create a full chess game mode :bluekitty:
21:01 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1361053575534481518/image.png?ex=67fd5b6b&is=67fc09eb&hm=68a6b2d8941be831ebf69cd3a70d706a26601753225bbc0dfef44213573aa5ea&
21:01 < bridge_> can we name the King just heinrich? :kek:
21:02 < bridge_> also why a black and white variant? We do have colors
21:03 < bridge_> Doesn't work because of the limited lighting with custom colors
21:03 < bridge_> Then it would be dark and light grey instead
21:27 < bridge_> they don have feet D:
21:33 < bridge_> i dont see feet here
21:33 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1361061693525852381/phpZTvydV.png?ex=67fd62fb&is=67fc117b&hm=8072623ceec96f11f8c213a8682a44821bbba769097004dfc245f50ae0066177&
21:34 < bridge_> all tees should have feet x-x
21:35 < bridge_> ```cpp
21:35 < bridge_> ==257417==ERROR: AddressSanitizer: stack-overflow on address 0x7ffc1d0a6870 (pc 0x5986fd54a640 bp 0x7ffc1dd35870 sp 0x7ffc1d0a5f80 T0)
21:35 < bridge_> 2025-04-13 22:28:31 I http: task done: https://info.ddnet.org/info?name=bun%20bun
21:35 < bridge_> #0 0x5986fd54a640 in CBgDraw::OnRender() /home/solly/Code/ddnet/src/game/client/components/tclient/bg_draw.cpp:290
21:35 < bridge_> #1 0x5986fd77f624 in CGameClient::OnRender() /home/solly/Code/ddnet/src/game/client/gameclient.cpp:835:15
21:35 < bridge_> #2 0x5986fca43e7f in CClient::Render() /home/solly/Code/ddnet/src/engine/client/client.cpp:1076:17
21:35 < bridge_> #3 0x5986fca8665a in CClient::Run() /home/solly/Code/ddnet/src/engine/client/client.cpp:3377:5
21:35 < bridge_> #4 0x5986fcace1ba in main /home/solly/Code/ddnet/src/engine/client/client.cpp:5045:11
21:35 < bridge_> #5 0x7be9b7235487 in __libc_start_call_main /usr/src/debug/glibc/glibc/csu/../sysdeps/nptl/libc_start_call_main.h:58:16
21:35 < bridge_> #6 0x7be9b723554b in __libc_start_main /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:360:3
21:35 < bridge_> #7 0x5986fc196b14 in _start (/home/solly/mnt/icovps/Code/ddnet/build/builddebug/DDNet+0x143db14) (BuildId: 2c1dc242f93c455af15461c83b2aad5fce026484)
21:35 < bridge_> ```
21:35 < bridge_> any1 know why this is happening x-x
21:35 < bridge_>
21:35 < bridge_> ```cpp
21:35 < bridge_> void CBgDraw::OnRender()
21:35 < bridge_> {
21:35 < bridge_> if(Client()->State() != IClient::STATE_ONLINE && Client()->State() != IClient::STATE_DEMOPLAYBACK)
21:36 < bridge_> return;
21:36 < bridge_> ```
21:36 < bridge_> line 290 is the `{`
21:36 < bridge_> i dont think im using... alot of stack space, and theres no recursion
21:37 < bridge_> it happens because of stack overflow
21:38 < bridge_> amazing analysis
21:40 < bridge_> is this code available on github?
21:41 < bridge_> it can be
21:41 < bridge_> i can try to help
21:41 < bridge_> thankz
21:42 < bridge_> https://github.com/SollyBunny/ddnet/tree/temp_bgdraw_stackoverflow
21:42 < bridge_>
21:50 < bridge_> removing the block of code in onrender works
21:50 < bridge_> i will continiously readd things till it breaks
21:50 < bridge_> forgot i could do that
21:59 < bridge_> @hokepoke here's how compile with msys2 instead of visual studio if u dont wanna do the workaround btw
21:59 < bridge_> ```sh
21:59 < bridge_> # deps
21:59 < bridge_> pacman -S git --noconfirm # long-term, better to set up git from Git for Windows repos (it's faster)
21:59 < bridge_> pacboy -S toolchain cmake curl ffmpeg freetype glew glslang libpng ninja opusfile python3 rust SDL2 spirv-tools sqlite vulkan-headers vulkan-loader wavpack x264 --noconfirm # rust is optional, install rustup & add to your PATH otherwise
21:59 < bridge_>
21:59 < bridge_> # ddnet
21:59 < bridge_> git clone https://github.com/ddnet/ddnet && cd ddnet
21:59 < bridge_>
21:59 < bridge_> cmake -B build -S . -DSECURITY_COMPILER_FLAGS=off # mingw quirk;
21:59 < bridge_> cmake --build build --config Release --parallel # optionally specify core count
21:59 < bridge_>
21:59 < bridge_> ./build/DDNet.exe
21:59 < bridge_> ```
22:04 < bridge_> @hokepoke here's how compile with msys2 instead of visual studio if u dont wanna do the workaround btw
22:04 < bridge_> ```sh
22:04 < bridge_> # deps
22:04 < bridge_> pacman -S git --noconfirm # long-term, better to set up git from Git for Windows repos (it's faster)
22:04 < bridge_> pacboy -S toolchain cmake curl ffmpeg freetype glew glslang libpng ninja opusfile python3 rust SDL2 spirv-tools sqlite vulkan-headers vulkan-loader wavpack x264 --noconfirm # rust is optional, install rustup & add to your PATH otherwise
22:04 < bridge_>
22:04 < bridge_> # ddnet
22:04 < bridge_> git clone https://github.com/ddnet/ddnet && cd ddnet
22:04 < bridge_>
22:04 < bridge_> cmake -B build -S . -DSECURITY_COMPILER_FLAGS=off -G"Ninja Multi-Config" # mingw quirk; can use normal ninja generator but must add CMAKE_BUILD_TYPE & remove --config below instead
22:04 < bridge_> cmake --build build --config Release --parallel # optionally specify core count
22:04 < bridge_>
22:04 < bridge_> ./build/DDNet.exe
22:04 < bridge_> ```
22:04 < bridge_> i edited it to add a non default thing i have & forgot about
22:04 < bridge_> ninja multi config is nice bcs you don't have to re-generate if you want to make a debug build & it's currently configured for release, it can do both. if u don't specify that it'll just fall back to normal ninja & then the makefiles you generate are tailored for that build type
22:10 < bridge_> https://github.com/SollyBunny/ddnet/blob/8a637708643ffc8c2458db39973fd2102a3930d0/src/game/client/components/tclient/bg_draw.cpp#L309-L310
22:10 < bridge_> you should use `GameClient()` instead of `CGameClient()`
22:11 < bridge_> i had isolated the issue to those lines, i couldnt for the life of me figure out what it was xd
22:11 < bridge_> thanks
22:11 < bridge_> what does CGameClient() do?
22:11 < bridge_> make a new one every frame xd
22:12 < bridge_> would be nice if asan showed you what things took up stack space
22:25 < bridge_> more arcane cpp errors i have no clue how they happen
22:25 < bridge_> ```cpp
22:25 < bridge_> float CurrentWidth() const
22:25 < bridge_> {
22:25 < bridge_> if(m_ForceWidth.has_value())
22:25 < bridge_> return m_ForceWidth.value();
22:25 < bridge_> return (float)g_Config.m_ClBgDrawWidth * m_This.m_Camera.m_Zoom;
22:25 < bridge_> }
22:25 < bridge_> ```
22:25 < bridge_> somehow causes ub and segfault
22:25 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1361074907299057744/message.txt?ex=67fd6f49&is=67fc1dc9&hm=19d720ede01eb229afca6d5e3a24ccee3261a400d7ad6844b9a2c93110454b61&
22:27 < bridge_> How do you create the object? Somehow `m_ForceWidth` is an uninitialized optional
22:27 < bridge_> emplace_back
22:27 < bridge_> it should be inited to std::nullopt
22:27 < bridge_> ```cpp
22:27 < bridge_> std::optional m_ForceWidth = std::nullopt;
22:27 < bridge_> std::optional m_ForceColor = std::nullopt;
22:27 < bridge_> ```
22:28 < bridge_> What do you do with the object containing it?
22:28 < bridge_> its stored in a std::list inside the component
22:30 < bridge_> ` m_pvItems->emplace_back(*GameClient(), Dummy, Pos);`
22:30 < bridge_> creates the containing object
22:30 < bridge_> the constructor creates the item (which has m_ForceWidth)
22:30 < bridge_> ```cpp
22:30 < bridge_> CBgDrawItem(CGameClient &This, int Dummy, vec2 StartPos)
22:30 < bridge_> : CBgDrawItem(This, Dummy, CBgDrawItemDataPoint(StartPos, CurrentWidth(), CurrentColor()))
22:30 < bridge_> {}
22:30 < bridge_> CBgDrawItem(CGameClient &This, int Dummy, CBgDrawItemDataPoint StartPoint) :
22:30 < bridge_> m_This(This), m_Dummy(Dummy), m_QuadContainerIndex(m_This.Graphics()->CreateQuadContainer()),
22:30 < bridge_> m_LastPos(StartPoint.Pos()), m_BoundingBoxMin(StartPoint.Pos()), m_BoundingBoxMax(StartPoint.Pos())
22:30 < bridge_> {
22:30 < bridge_> m_Data.push_back(StartPoint);
22:30 < bridge_> }
22:30 < bridge_> ```
22:30 < bridge_> ah
22:30 < bridge_> i see
22:31 < bridge_> i did too much wizardry
22:31 < bridge_> and got punished for it
22:31 < bridge_> `CBgDrawItem(This, Dummy, CBgDrawItemDataPoint(StartPos, CurrentWidth(), CurrentColor()))`
22:31 < bridge_> currentWidth() is ub
22:33 < bridge_> Why is this a pointer to a list`std::list *m_pvItems;`? You probably want a `std::list