00:07 <+bridge> [ddnet] so i tried doing this for the menu just to see if i could create a mockup for preview rendering 00:07 <+bridge> [ddnet] turns out this softlocked my computer into fronting the frozen client and i had to restart. was this not a valid shortcut? 00:07 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997625473498628116/unknown.png 00:07 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997625473825767526/unknown.png 00:08 <+bridge> [ddnet] inb4 im called yanderedev 00:08 <+bridge> [ddnet] `IsRifle = false` 00:08 <+bridge> [ddnet] is that a single equals? 00:08 <+bridge> [ddnet] oh fuck 00:09 <+bridge> [ddnet] fixed 00:09 <+bridge> [ddnet] it looks like you might want to use a different font πŸ˜„ 00:09 <+bridge> [ddnet] it looks hard to distinguish in your font ^^ 00:09 <+bridge> [ddnet] i'm using Fira Code 00:10 <+bridge> [ddnet] Your font is too fancy, it replaces -> with an actual arrow, == with a long =. That looks slightly confusing πŸ˜„ 00:11 <+bridge> [ddnet] I mean the arrow isn't that bad, but the equals apparently leads to problems πŸ˜› 00:11 <+bridge> [ddnet] do you have font reccomendations? 00:12 <+bridge> [ddnet] no, I mostly use defaults 00:12 <+bridge> [ddnet] I think my terminal uses dejavu sans mono or so 00:18 <+bridge> [ddnet] I just disabled ligatures. It's a bit better now. 00:18 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997628286555389972/unknown.png 00:19 <+bridge> [ddnet] weird colors 00:21 <+bridge> [ddnet] YES 00:21 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997629000388198410/unknown.png 00:23 <+bridge> [ddnet] nice 00:24 <+bridge> [ddnet] little tip, you don't need `== true` or `== false` on bools 00:30 <+bridge> [ddnet] Ohh. That's useful. 00:40 <+bridge> [ddnet] Is there anywhere a concrete list of symbols you can write in chat? 00:40 <+bridge> [ddnet] is there any symbol you can't write in chat? 00:41 <+bridge> [ddnet] I'm just wondering on what types of emotes you can write or anything for that matter 00:41 <+bridge> [ddnet] ah 00:42 <+bridge> [ddnet] idk, you'd probably have to look at the font for that 00:44 <+bridge> [ddnet] what's the font? 00:46 <+bridge> [ddnet] much better πŸ˜‰ 00:46 <+bridge> [ddnet] dejavu sans I think 00:47 <+bridge> [ddnet] DejaVuSans.ttf 00:47 <+bridge> [ddnet] there's also Icons.otf, but i don't know what it contains 00:48 <+bridge> [ddnet] there's also some fallback font for asian languages 00:52 <+bridge> [ddnet] how to I make the two weapons stack and not overlap? 00:52 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997636723506937896/unknown.png 00:59 <+bridge> [ddnet] do another HSplitTop I think 01:00 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997638852359499846/unknown.png 01:01 <+bridge> [ddnet] Nowhere near close to the final product, but this is a solid head start for what I want the idea to head to. 01:18 <+bridge> [ddnet] @Zim progress 01:22 <+bridge> [ddnet] which code do you prefer ? 01:22 <+bridge> [ddnet] ```c++ 01:22 <+bridge> [ddnet] new(pDemoHeader) std::remove_pointer::type; 01:22 <+bridge> [ddnet] new(pTimelineMarkers) CTimelineMarkers; 01:22 <+bridge> [ddnet] ``` 01:22 <+bridge> [ddnet] first line ensure type is safe but is more verbose 01:23 <+bridge> [ddnet] second line makes no guarentee on the type if pTimelineMarkers type is changed, new will override neighboring memory or not initialize enough (with the wrong parameters) 01:25 <+bridge> [ddnet] can't you do `decltype(*pDemoHeader)` in the first case? 01:28 <+bridge> [ddnet] no, 😦 01:28 <+bridge> [ddnet] and for why 01:29 <+bridge> [ddnet] `error: new cannot be applied to a reference type` 01:30 <+bridge> [ddnet] roughly, `decltype(*pDemoHeader)` returns a reference to a class (here `CDemoHeader&`) which cannot be passed to `new`... 01:34 <+bridge> [ddnet] ah, unlucky 01:35 <+bridge> [ddnet] The hard quit shortcut ctrl+shift+q should always work iirc 01:37 <+bridge> [ddnet] didn't that shortcut get removed because of trolling? 01:38 <+bridge> [ddnet] Hm, if it did then you are stuck, which is annoying 01:38 <+bridge> [ddnet] Maybe we should add it back with a `#ifdef DEBUG` it's so useful in debug builds 01:39 <+bridge> [ddnet] yeah closing the game is annoying when you're in fullscreen and get an exception 01:40 <+bridge> [ddnet] looks like it got removed 01:40 <+bridge> [ddnet] it has no effect on latest master 01:40 <+bridge> [ddnet] Should definitely get it back in for debug builds, it saved my ass so many times while debugging SDL issues on macOS 01:41 <+bridge> [ddnet] first form also works for array which is nice πŸ™‚ 01:41 <+bridge> [ddnet] Literally the only way out is that hard bind 01:41 <+bridge> [ddnet] alt f4 is always a thing 01:41 <+bridge> [ddnet] I like the first one, but the second one is definitely prettier 01:41 <+bridge> [ddnet] df82d24ff (deen/pr-ctrl-shift-q) Remove panic quit button (1 year, 11 months ago) 01:42 <+bridge> [ddnet] when messing with things like SDL you can cause that event to get eaten aswell accidentally 01:42 <+bridge> [ddnet] 01:42 <+bridge> [ddnet] ahahahha, you accepted the PR @Learath2 01:42 <+bridge> [ddnet] heh, I guess the alt+f4 argument convinced me back in the day πŸ˜„ 01:43 <+bridge> [ddnet] why would it not work anyway? 01:43 <+bridge> [ddnet] if main loop is running, it should work? 01:44 <+bridge> [ddnet] well on mac once I was messing around with raw input, I ended up in a state where I was stealing all the inputs 01:45 <+bridge> [ddnet] ddnet as keylogger, nice one πŸ˜„ 01:45 <+bridge> [ddnet] did you manage to steal your own password πŸ˜› ? 01:45 <+bridge> [ddnet] πŸ˜„ 01:45 <+bridge> [ddnet] It was more to try to get the mouse to capture, but even with raw input it didn't look very good so I gave up on that 01:46 <+bridge> [ddnet] Another weird issue on mac again is real fullscreen, if you launch the game in real fullscreen it'll launch just a blackscreen with a non-running appdelegate, so all your cmd+q are going nowhere 01:47 <+bridge> [ddnet] But yeah, outside of mac weirdness I guess the WMs kill shortcut should just work 01:48 <+bridge> [ddnet] on linux even if that doesn't work you can drop down to a tty, on windows I think ctrl+alt+del doesn't even go through the WM, the kernel is catching it iirc 03:41 <+bridge> [ddnet] wowow looks so cool cant wait 03:42 <+bridge> [ddnet] nice 03:42 <+bridge> [ddnet] hm? 03:42 <+bridge> [ddnet] i was linking you to the photo 10:43 <+bridge> [ddnet] I prefer `std::make_unique` 11:20 <+bridge> [ddnet] I'm getting lots of these in the console 11:20 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997794873765802027/unknown.png 11:21 <+bridge> [ddnet] I can't find any references to the numbers in steam documentation idk what they mean 12:08 <+ChillerDragon> stem 12:31 <+bridge> [ddnet] This is not the same, im using placement new to initialize objects rather than mem_zero. Im not allocating memory 12:33 <+bridge> [ddnet] why even use new 12:33 <+bridge> [ddnet] *pPtr = CClass() 12:34 <+bridge> [ddnet] you can do that? 12:34 <+bridge> [ddnet] i never tried πŸ˜„ 12:35 <+bridge> [ddnet] does new(buffer) CClass even call the destructor? 12:35 <+bridge> [ddnet] sounds rather dangerous to experiment with such things if you not sure what u doing 12:35 <+bridge> [ddnet] placement new just call the constructor on the given address 12:35 <+bridge> [ddnet] so the old object stays active? 12:35 <+bridge> [ddnet] or is not properly destructed 12:35 <+bridge> [ddnet] old object is overridden 12:35 <+bridge> [ddnet] * 12:36 <+bridge> [ddnet] so not properly destructed which was already the case before with mem_zero 12:36 <+bridge> [ddnet] so its no improvement over mem_zero 12:36 <+bridge> [ddnet] u just make it just as bad xD 12:37 <+bridge> [ddnet] well, they don't have destructor anyway, but i can still call it before if you want πŸ™‚ 12:39 <+bridge> [ddnet] looks like i can't call constructor: 12:39 <+bridge> [ddnet] ` error: invalid use of β€˜CNetConsole::CNetConsole’ 12:39 <+bridge> [ddnet] 11 | this->CNetConsole()` 12:41 <+bridge> [ddnet] this create new object on the stack rather than reinitializing old object, so not the same behavior 12:41 <+bridge> [ddnet] and the object is definitely destructed at the end of the function but it should leave longer 12:41 <+bridge> [ddnet] Use smart pointers everywhere 12:41 <+bridge> [ddnet] :PES4_MadGe: 12:41 <+bridge> [ddnet] and the object is definitely destructed at the end of the function but it should live longer 12:42 <+bridge> [ddnet] ? 12:42 <+bridge> [ddnet] where is the stack variable? 12:43 <+bridge> [ddnet] CClass() is stack variable 12:43 <+bridge> [ddnet] but there is an asignment 12:43 <+bridge> [ddnet] = 12:43 <+bridge> [ddnet] Whats this new() thing as the type 12:43 <+bridge> [ddnet] oh 12:43 <+bridge> [ddnet] stupid me 12:43 <+bridge> [ddnet] also its not a variable, its a pure r value 12:44 <+bridge> [ddnet] lel, assignment much better πŸ™‚ 12:44 <+bridge> [ddnet] Ah places an object into allocated memory 12:44 <+bridge> [ddnet] i don't understand your question 12:44 <+bridge> [ddnet] The placement new thing 12:44 <+bridge> [ddnet] Never heard of it till today xd 12:45 <+bridge> [ddnet] @Not Keks what would you do for array of objects? 12:45 <+bridge> [ddnet] placement new can init array but assignment requires loop 12:45 <+bridge> [ddnet] it will also loop internally 12:46 <+bridge> [ddnet] bcs all objects will call constructor 12:46 <+bridge> [ddnet] i know, im just lazy to type the loop 12:46 <+bridge> [ddnet] dunno use foreach or smth 17:42 <+bridge> [ddnet] so you are done with that? or is it just the menu yet, where you can define every color in its own preview function? 17:46 <+bridge> [ddnet] other question: any good alternatives to electron, cross plattform guis? 17:47 <+bridge> [ddnet] other question: any good alternatives to electron, but it should be a cross plattform gui? 18:42 <+bridge> [ddnet] well, clang does not know loop and gcc kinda store variable per variable: 18:42 <+bridge> [ddnet] https://godbolt.org/z/6d17Teq6W 18:42 <+bridge> [ddnet] 19:03 <+bridge> [ddnet] <⁄(⁄ ⁄‒⁄-⁄‒⁄ ⁄)⁄> I do not update the list of servers (there is an eternal update), but only on windows 8.1, before that was windows 7 and everything worked fine, and before windows 7 was windows 8.1 and it also does not update, I think the problem is somehow connected with the system 19:03 <+bridge> [ddnet] <⁄(⁄ ⁄‒⁄-⁄‒⁄ ⁄)⁄> πŸ€” 20:11 <+bridge> [ddnet] "xd sure chillerbot.png is lyfe" lol 21:43 <+bridge> [ddnet] @Tater damn before I went away a week ago I opened your shadertoy page. now that I'm back that was the first page I have open and I'm absolutely amazed :D 21:48 <+bridge> [ddnet] its just the menu 21:51 <+bridge> [ddnet] i hate the fact that `std::size` cannot be used in a constexpr when the array is stored in a struct in a vector... 22:15 <+bridge> [ddnet] hm, why? 22:15 <+bridge> [ddnet] show code or did not happen 22:17 <+bridge> [ddnet] ```c++ 22:17 <+bridge> [ddnet] constexpr int ArraySize = std::size(Container.m_vQuads[0].m_aVertices); // operator[] is not constexpr so compilation fails 22:17 <+bridge> [ddnet] constexpr int ArraySize = sizeof(Container.m_vQuads[0].m_aVertices)/sizeof(Container.m_vQuads[0].m_aVertices[0]); // ok 22:17 <+bridge> [ddnet] ``` 22:18 <+bridge> [ddnet] Ah, I see what you mean 22:18 <+bridge> [ddnet] so its not about std::size or structs, but only about accessing an array πŸ˜„ 22:18 <+bridge> [ddnet] i tried everything 22:18 <+bridge> [ddnet] you cant use `::` on non static member 22:19 <+bridge> [ddnet] constexpr reference operator[]( size_type pos ); 22:19 <+bridge> [ddnet] (since C++20) 22:19 <+bridge> [ddnet] so i had to resort to the good old sizeof 22:19 <+bridge> [ddnet] c++20 bro 22:19 <+bridge> [ddnet] i wish we used c++ 20, i need auto generated `operator==` 22:19 <+bridge> [ddnet] all versions before c++20 just suck no joke xD 22:19 <+bridge> [ddnet] and in 1 year i say the same with c++23 22:20 <+bridge> [ddnet] i wonder what c++ will look like in 20 years 22:20 <+bridge> [ddnet] in 20years KIs are coding what we want 22:20 <+bridge> [ddnet] we just type in the idea 22:20 <+bridge> [ddnet] finally they will have implemented everything that people needed since 2000 ;:D 22:20 <+bridge> [ddnet] finally they will have implemented everything that people needed since 2000 :D 22:20 <+bridge> [ddnet] ki? 22:20 <+bridge> [ddnet] AI 22:21 <+bridge> [ddnet] what kind of keyboard do you have? 22:21 <+bridge> [ddnet] a and k are opposite side 22:21 <+bridge> [ddnet] its the german shortcut 22:21 <+bridge> [ddnet] ah 22:21 <+bridge> [ddnet] i am just used to call it KI xD 22:21 <+bridge> [ddnet] artificial = kartificial? 22:21 <+bridge> [ddnet] kΓΌnstliche 22:21 <+bridge> [ddnet] in french its even worse, we use IA instead of AI 22:22 <+bridge> [ddnet] so i always mix them up 22:22 <+bridge> [ddnet] @Chairn `constexpr auto k = std::tuple_size::value;` maybe? πŸ˜„ 22:22 <+bridge> [ddnet] yeah i saw that, but i thought that sizeof should be enough 22:23 <+bridge> [ddnet] uh, the stackoverflow i saw had only one decltype 22:23 <+bridge> [ddnet] use sizeof, put a comment TODO: c++20 u nobos 22:23 <+bridge> [ddnet] and its fine 22:23 <+bridge> [ddnet] I'm not sure if this is even fine in C++20 actually 22:24 <+bridge> [ddnet] Isn't that constexpr operator only available if the vector itself is constexpr? 22:24 <+bridge> [ddnet] possible, but he uses it in a constexpr, so i assume it is? 22:25 <+bridge> [ddnet] or why is his function constexpr in first place 22:25 <+bridge> [ddnet] people will still code like its C 22:26 <+bridge> [ddnet] The size of the array inside the struct inside the vector is constant at compile time, the vector doesn't have to be constexpr for that 22:27 <+bridge> [ddnet] I wonder why `std::array::size()` can't be static aswell actually, that would solve this and be sane 22:27 <+bridge> [ddnet] well but he is clearly accessing stuff, if he wants the size of the array, he can just constexpr the size of it 22:28 <+bridge> [ddnet] hm, it wasn't that clear to me atleast 22:29 <+bridge> [ddnet] yeah actually nvm 22:29 <+bridge> [ddnet] just dont do std::size here, just declare the array size 22:29 <+bridge> [ddnet] can put a constexpr inside the struct probs? 22:29 <+bridge> [ddnet] so he can access it 22:30 <+bridge> [ddnet] `constexpr auto k = decltype(decltype(v_vec)::value_type::m_arr)::size();` if this was the case, that'd be so nice 22:30 <+bridge> [ddnet] Hm, that could work actually 22:31 <+bridge> [ddnet] mh no doesnt πŸ˜„ 22:31 <+bridge> [ddnet] anyway, the sizeof works too, so whatever 22:34 <+bridge> [ddnet] @Learath2 @Chairn ez pz no problem 22:34 <+bridge> [ddnet] ```c++ 22:34 <+bridge> [ddnet] 22:34 <+bridge> [ddnet] struct s{ 22:34 <+bridge> [ddnet] std::array a; 22:35 <+bridge> [ddnet] 22:35 <+bridge> [ddnet] 22:35 <+bridge> [ddnet] static constexpr std::size_t t = std::size(decltype(a)()); 22:35 <+bridge> [ddnet] }; 22:35 <+bridge> [ddnet] ``` 22:35 <+bridge> [ddnet] do you actually need the static too? 22:35 <+bridge> [ddnet] inside the struct yes 22:35 <+bridge> [ddnet] but should work outside of the struct too 22:40 <+bridge> [ddnet] uh that doesn't work? Can't use a temporary inside std::size, that's what it told me when i tried 22:40 <+bridge> [ddnet] if its a constexpr why not 22:40 <+bridge> [ddnet] std::array constructor should be constexpr, but maybe only c++20 again xd 22:41 <+bridge> [ddnet] ah you probs using it on a datatype 22:41 <+bridge> [ddnet] maybe that datatype needs constexpr constructor too 22:41 <+bridge> [ddnet] `error: temporary of non-literal type 'CGraphics_Threaded::SQuadContainer::SQuad' in a constant expression` 22:43 <+bridge> [ddnet] yeah 22:43 <+bridge> [ddnet] SQuad constexpr constructor 22:43 <+bridge> [ddnet] gogog 22:44 <+bridge> [ddnet] this branch is becoming a huge mess πŸ˜„ 22:44 <+bridge> [ddnet] ^^ 22:44 <+bridge> [ddnet] i should split commits like Robyt does 22:44 <+bridge> [ddnet] i guess we're both extreme 22:44 <+bridge> [ddnet] what is this branch doing exactly :o 22:45 <+bridge> [ddnet] i bundle everything in a single commit, he breaks his pr in multiple small commits 22:45 <+bridge> [ddnet] Thanks :D 22:45 <+bridge> [ddnet] initialize everything everywhere 22:46 <+bridge> [ddnet] but it breaks the code right now (and im not sure, but im afraid it breaks protocol also...) 22:46 <+bridge> [ddnet] is that even good btw? 22:46 <+bridge> [ddnet] that prevents catching logic errors that are caused if you didnt want a default 0 initialization 22:47 <+bridge> [ddnet] some part of the code are literally waiting to be broken to be honest 22:47 <+bridge> [ddnet] i imagine faster loading time 22:47 <+bridge> [ddnet] yes but i wouldnt just blindly say initializzing everything to default is a MUST be good 22:47 <+bridge> [ddnet] should actually be slower, but in my preliminous tests, it was actually faster, i dont know why and how 22:47 <+bridge> [ddnet] yeah i agree 22:48 <+bridge> [ddnet] im kinda in machine mode, not thinking 22:48 <+bridge> [ddnet] should actually be slower, but in my preliminary tests, it was actually faster, i dont know why and how 22:48 <+bridge> [ddnet] but anyway future coders could simply initialize values where its declared 22:48 <+bridge> [ddnet] struct a{ 22:48 <+bridge> [ddnet] int i = 2 22:48 <+bridge> [ddnet] } 22:48 <+bridge> [ddnet] less error prone 22:48 <+bridge> [ddnet] ;D 22:48 <+bridge> [ddnet] not even possible πŸ™‚ 22:49 <+bridge> [ddnet] but currently we also have constructors, oninit, onconsoleinit, onchillerdragonsmodneedssomeinitinit 22:49 <+bridge> [ddnet] because this auto declares constructor and can turn some classes into virtual... 22:49 <+bridge> [ddnet] which breaks all the mem_zero calls 22:49 <+bridge> [ddnet] i think i will revert all init and just fix the mem_zero, mem_copy and mem_comp calls 23:05 <+bridge> [ddnet] servelist is refreshing, when you switch tabs, but not when you come from ingome to server browser. is it worth to add a refresh there? 23:05 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/997972174147166248/refresh_serverlist.mp4 23:08 <+bridge> [ddnet] at least that's what i meant, that's the behavior for me, i'd expect to be the browser always up to date, when i focus it 23:09 <+bridge> [ddnet] coming from ingame, ingame, opening ingame browser, switching tabs, starting ddnet client, maybe even refreshing after a certain amount of time, when leaving the server browser open while afk or doing stuff 23:10 <+bridge> [ddnet] coming from ingame, opening ingame browser, switching tabs, starting ddnet client, maybe even refreshing after a certain amount of time, when leaving the server browser open while afk or doing stuff 23:16 <+bridge> [ddnet] ``sizeof(*(int *)nullptr)` isn't UB, right? 23:16 <+bridge> [ddnet] `sizeof(*(int *)nullptr)` isn't UB, right? 23:17 <+bridge> [ddnet] no idea, but i'd say it compiles and runs fine? 23:18 <+bridge> [ddnet] or does the standard require compiler to evaluate the expression inside sizeof, in which case it would segfault ? 23:18 <+bridge> [ddnet] or does the standard require compiler to evaluate the expression inside sizeof, in that/ case it would segfault ? 23:18 <+bridge> [ddnet] or does the standard require compiler to evaluate the expression inside sizeof, in that case it would segfault ? 23:25 <+bridge> [ddnet] hey all 23:25 <+bridge> [ddnet] i wanna understand why some parts get generated with a python script 23:26 <+bridge> [ddnet] for example why does protcol.h gets generated with network.py? 23:26 <+bridge> [ddnet] for example why does protocol.h gets generated with network.py? 23:26 <+bridge> [ddnet] Why cant protocol.h cant be just a static file 23:26 <+bridge> [ddnet] Why cant protocol.h just be a static file 23:28 <+bridge> [ddnet] shouldn't be, evaluating that stmt is UB, but sizeof doesn't evaluate it's operand 23:28 <+bridge> [ddnet] well expression, not statement