00:05 < bridge> jupstar sell me your gpu 00:09 < bridge> Ok, when AMD gives me new Gen 00:09 < bridge> The 7000 series was too few of an upgrade sadly 00:09 < bridge> when they giving u the 7900 xt 00:09 < bridge> any guidestyle? 00:09 < ChillerDragon> @gerdoe instead of vectoring aliases in a command just register multiple commands for every alias 00:09 < bridge> @gerdoe i just dont know what you mean 00:10 < bridge> Is it even trivially copied? 00:10 < bridge> Is it pod rn? 00:10 < bridge> Is it ever trivially copied? 00:11 < bridge> bloat 00:11 < bridge> yeah its just couple of char arrays 00:11 < bridge> Well you gotta be careful with mem copy of we still use the unsafe variant of it 00:12 < bridge> Else i guess it's rather constant data, right? 00:13 < bridge> Well you gotta be careful with mem copy if we still use the unsafe variant of it 00:14 < bridge> then its not that obvious to implement pod ccommands with aliases in them hm 00:15 < bridge> how much aliases do commands have usually? 00:15 < bridge> is like 3-5 enough 00:15 < bridge> If it's a one time setup thing u can defs go with vec 00:15 < bridge> Also the char arrays should also be strings 00:15 < bridge> Why waste memory if ccommands never change 00:16 < bridge> @learath2 where are you, memory fanboy 00:16 < bridge> Stop wasting my bytes 00:16 < bridge> ill bite the byte 00:20 < bridge> ah no 00:20 < bridge> it gets set 1 time 00:20 < bridge> I see 00:21 < bridge> Also string views of the chars are string literals 00:21 < bridge> Ok night xd 00:23 < bridge> wut 00:23 < bridge> I'm in Milan. I'll allow the waste of bytes 00:23 < bridge> lerato why they didn't mod me 00:24 < bridge> I veto'd it 00:24 < bridge> so real 00:24 < bridge> You don't enjoy C enough 00:24 < bridge> fucked up... 00:27 < bridge> anyway a little bit more insight than 'there was more competition' would be helpful so i can know what's up if i decide to apply next time 00:27 < bridge> the message was copy pasted anyway so it's like anyone who didn't get it was given the same message 00:28 < bridge> probably you're just a little newer to the community and haven't interacted with many people compared to other candidates if id guess 00:28 < bridge> i guess 00:30 < bridge> i think there was only 1 other usa applicant 00:31 < bridge> https://tenor.com/view/speed-wheelchair-me-running-late-gif-14178485 00:31 < bridge> im coming to Milan to show you new CComand 00:31 < bridge> xd 00:31 < bridge> If you put a vector in it I'll do a crime 00:32 < bridge> kill me already 00:32 < bridge> anyway question is still open 00:32 < bridge> any other way to implement multi command name 00:32 < bridge> If we needed one more US mod you'd probably be it 00:33 < bridge> Yesh 00:33 < bridge> suggest then :D 00:34 < bridge> Just mimic whatever we have rn. Register twice nice simple, it even wastes memory Jupstra would love it 00:35 < bridge> xd okey 00:35 < bridge> i wanna ddnetware not bloatware 00:36 < bridge> c&p ftw 00:36 < bridge> the ddnet way™ you mean 00:36 < bridge> ofc 00:42 < bridge> ddnet codebase doesnt like innovation 00:48 < bridge> registering twice is likely less expensive than introducing a vector for all commands 00:51 < bridge> but you setting the same 256 bytes 00:51 < bridge> like twice or more 00:51 < bridge> its not that much tbh but iwhy vector will consume more than this 00:52 < bridge> because the vector is already 24 bytes, and will likely get added for each command. plus its contents 00:54 < bridge> so lets do the little math: 2 times standard ccommand object = 512 bytes, 1 time vector ccomand object = 24+(lets bring the maximum of command name)32+224=280 bytes 00:55 < bridge> i can be wrong btw im just curious about how to do better multi-alias 00:56 < bridge> Are they really this big? 00:56 < bridge> ah wait vector ccommand will consume 312 at maximum if we have to store 2 aliases 00:56 < bridge> ah, I was talking about the whole picture 00:56 < bridge> 256 bytes 1 pod ccommand 00:56 < bridge> we have very few aliases 00:57 < bridge> but a vector in the command struct 00:57 < bridge> applies to all commands, not just those that have aliases 00:57 < bridge> yeah good point 00:57 < bridge> That is more than I expect ngl 00:57 < bridge> btw any reason why chat commands should be stored as pod structs in vector 00:57 < bridge> and not like some constant thing 00:58 < bridge> wait 00:59 < bridge> i was looking at client ccomand all the time 00:59 < bridge> holy crap 00:59 < bridge> 3 am hits different 01:00 < bridge> yeah there's no reason to add vector in it 01:01 < bridge> its just 3 const char* 01:08 < bridge> #4100 was a mistake xddd 01:08 < bridge> https://github.com/ddnet/ddnet/pull/4100 01:11 < bridge> What is a pod 01:12 < bridge> https://stackoverflow.com/questions/146452/what-are-pod-types-in-c 01:12 < bridge> plain old data 01:12 < bridge> a 01:12 < bridge> Thank 01:14 < bridge> Afaik it’s a term that has been deprecated in the standard 01:31 < bridge> it’s not much of an explanation 01:32 < bridge> chiller afaik pod structs are classes or structs which can only be comprised of c-compatible types (primitives and other POD structs) so they can be treated as a contiguous chunk of data and not something more conceptual like classes in cpp 01:33 < bridge> so a POD struct won’t be decorated with things like automatic ctors and dtors 01:33 < bridge> Ah no nesting hm 01:34 < bridge> I thought it’s just about not having behavior/methods 01:34 < bridge> yea 01:34 < bridge> Ah said they can contain other pod structs 01:34 < bridge> Red your message wrong 01:34 < bridge> yea 01:35 < bridge> pod is a myth anyway 01:35 < bridge> Ok 01:35 < bridge> you shouldn’t need to have your struct be represented in this way unless you’re working with c code which needs to be able to understand your structure 01:36 < bridge> the representation in memory is just an added bonus to that 01:36 < bridge> You want StandardLayoutType nowadays 01:40 < bridge> i got my dog back from the groomer 01:40 < bridge> she is a very sweet girl 01:42 < bridge> thats why i bringed SO answer but whatever 02:17 < bridge> nice this multialias workaround has no sense since name is first argument and we can't use variadic without messing up whole file to only get some fancy brackets 02:17 < bridge> also brackets are disallowed in c macro 02:17 < bridge> not the brackets itself tho 02:18 < bridge> like preprocesser thinks that `MACRO({"first", "second"})` has two arguments isntead of one 02:18 < bridge> im giving up on this 02:18 < bridge> 2 hours of lurking xd 04:43 < bridge> i didn’t see it 04:44 < bridge> quotes around and escape the pair item quotes 04:44 < bridge> it will get you somewhere with stringify 10:20 < bridge> why xd 10:36 < ChillerDragon> jopsti where do u live 10:38 < bridge> morning vietnam 10:38 < bridge> https://www.youtube.com/watch?v=khZq6JKVnlk 10:40 < bridge> chillerdragon: in almania 10:48 < bridge> Protip: `MACRO(({"first", "second"}))` 😛 10:49 < bridge> time to write yet another proc macro 10:50 < bridge> it will be my 10th proc macro. 10:50 < bridge> 10:50 < bridge> I am getting better in this 10:52 < ChillerDragon> jopsti which city 10:52 < bridge> good morning 10:53 < bridge> jopsti which street 10:53 < bridge> which house 10:53 < bridge> all i will say is, that it is "Münsterland" 10:53 < ChillerDragon> https://zillyhuhn.com/cs/.1702806809.png 10:53 < ChillerDragon> lerato! 10:53 < ChillerDragon> im close to rq 10:54 < ChillerDragon> next to bielefeld lmao 10:55 < ChillerDragon> lerato whats your guess how many times or days we have been in the same city at the same time 10:56 < bridge> yeah 10:56 < bridge> teero or smth is from bielefeld 10:56 < bridge> this nobo 10:56 < ChillerDragon> xd 10:56 < ChillerDragon> imagine nobody beliving you where you come from 10:57 < bridge> if you want some interesting history 10:57 < bridge> https://en.wikipedia.org/wiki/Battle_of_the_Teutoburg_Forest 10:58 < bridge> this is the most famous one 10:58 < bridge> also one of the most beautiful places around here 11:04 < ChillerDragon> o 11:04 < ChillerDragon> im onto somsin 11:05 < ChillerDragon> lerato u knew the full solution all along didnt u -,- 11:05 < ChillerDragon> why am i coding this then 11:07 < ChillerDragon> https://zillyhuhn.com/cs/.1702807653.png 11:07 < ChillerDragon> https://zillyhuhn.com/cs/.1702807666.png 11:08 < ChillerDragon> im sure heinrich loves the simplicity xd 11:09 < ChillerDragon> im still not sure i like all the added ({}) 11:17 < bridge> why do you use a macro? 11:27 < bridge> @chillerdragon ```cpp 11:27 < bridge> #include 11:27 < bridge> using namespace std; 11:27 < bridge> 11:27 < bridge> template constexpr auto last_of(H const& h, T const&... t) 11:27 < bridge> { 11:27 < bridge> if constexpr (sizeof...(t)) return last_of(t...); else return h; 11:27 < bridge> } 11:27 < bridge> 11:27 < bridge> template constexpr void A(H const& h, T const&... t) 11:27 < bridge> { 11:27 < bridge> cout << h << " " << last_of(t...) << endl; 11:27 < bridge> if constexpr (sizeof...(t) > 1) A(t...); 11:27 < bridge> } 11:27 < bridge> 11:28 < bridge> int main(int, char**) 11:28 < bridge> { 11:28 < bridge> A("r","rescue", "command for ChillerDragon"); 11:28 < bridge> A("top","top5", "mess with selfesteem"); 11:28 < bridge> A("earrape", "fng only"); 11:28 < bridge> } 11:28 < bridge> ``` 11:28 < bridge> could be eased if the helptext comes first in the parameter list 11:33 < ws-client> macros can be redefined as something else 11:33 < ws-client> but i just realized my approach is fucked 11:33 < bridge> Do. Not. Use. Macros. Where. You. Can. Avoid. Them. 11:34 < ws-client> Can we avoid them? 11:34 < bridge> not always ^^ 11:34 < bridge> but it's rare 11:34 < ws-client> i mean in our case 11:34 < ws-client> not in general 11:34 < ws-client> Imo the macros bring something really nice for us here 11:34 < bridge> I posted a solution 11:35 < ws-client> what about the client side then? 11:35 < bridge> I've to confess I don't have a clue what you mean 😦 11:36 < ws-client> the client also includes the file 11:36 < ws-client> but tbh we are not really using the power of macros yet 11:36 < ws-client> but i would like to do that 11:36 < ws-client> to also generate the function definitions of the callbacks 11:36 < bridge> macros are very difficult to debug 11:37 < ws-client> https://github.com/ddnet/ddnet/blob/4af28fd2d87e8e1c5629874b2a0ee16d0860a18b/src/game/client/components/chat.cpp#L34 11:37 < ws-client> here we want the macro to mean something else than on the server side 11:37 < ws-client> tbh i am also pro removing that 11:37 < bridge> Check lua source code :troll: 11:37 < ws-client> @Fussel did anyone ever have to debug them? 11:37 < bridge> You don't really need macros and templates here, just always use `{"cmd"}` also if there is only one command and only work with an initializer list 11:38 < ws-client> @robyt3 you also wanna remove all macros!? 11:38 < bridge> he wanted to get rid of the `{}`, it was his choice 😄 11:39 < ChillerDragon> https://zillyhuhn.com/cs/.1702809540.png 11:39 < ChillerDragon> sos 11:39 < bridge> sose 11:39 < ChillerDragon> seems like the initializer list goes out of scope and then all breaks 11:39 < bridge> here we want the macro to mean something else than on the server side ← and this is a good example for where things easily go wrong but are difficult to debug 11:40 < ChillerDragon> @Fussel i do not remember debugging being an issue there ever 11:40 < ChillerDragon> also do you recommend to change the whole current implementation of 10yr old macro code just because it could be difficult to debug? xd 11:40 < bridge> as long as a macro works as intended, you don't need to do ^^ 11:41 < bridge> no, but it's unnecessary to _proceed_ with this 11:41 < ChillerDragon> @robyt3 i am not sure i understood what you mean 11:42 < bridge> I imagine it would looks like this, untested: 11:42 < bridge> ```cpp 11:42 < bridge> #define CHAT_COMMAND(names, params, flags, callback, userdata, help) \ 11:42 < bridge> for(const char *pName : names) \ 11:42 < bridge> m_pConsole->Register(name, params, flags, callback, userdata, help); 11:42 < bridge> 11:42 < bridge> CHAT_COMMAND({"map"}, "?r[map]", CFGFLAG_CHAT | CFGFLAG_SERVER | CFGFLAG_NONTEEHISTORIC, ConMap, this, "Vote a map by name") 11:42 < bridge> ``` 11:43 < bridge> I imagine it would look like this, untested: 11:43 < bridge> ```cpp 11:43 < bridge> #define CHAT_COMMAND(names, params, flags, callback, userdata, help) \ 11:43 < bridge> for(const char *pName : names) \ 11:43 < bridge> m_pConsole->Register(pName, params, flags, callback, userdata, help); 11:43 < bridge> 11:43 < bridge> CHAT_COMMAND({"map"}, "?r[map]", CFGFLAG_CHAT | CFGFLAG_SERVER | CFGFLAG_NONTEEHISTORIC, ConMap, this, "Vote a map by name") 11:43 < bridge> ``` 11:44 < ws-client> wont work 11:44 < ChillerDragon> i guess 11:44 < ChillerDragon> because you didnt put ( 11:45 < ChillerDragon> ``CHAT_COMMAND({"map", "bar"}, "?r[map]", CFGFLAG_CHAT | CFGFLAG_SERVER | CFGFLAG_NONTEEHISTORIC, ConMap, this, "Vote a map by name")`` 11:45 < ChillerDragon> here the , between map and bar ist a seperator for the macro args 11:45 < ChillerDragon> so you need partenthesis around 11:46 < ChillerDragon> which then breaks the : loop 11:46 < bridge> Makes sense 11:47 < ChillerDragon> and then the () are included 11:48 < ChillerDragon> https://zillyhuhn.com/cs/.1702810081.png 11:48 < ChillerDragon> without it works fine 11:48 < ChillerDragon> with it doesnt 11:48 < ChillerDragon> so i decided to call std::initilaizer_list manually and let it use the parenthesis 11:48 < ChillerDragon> problem is that variable i defined now goes out of scope and leaves a dangling pointer 11:49 < ChillerDragon> in my test env i had warnings off and all worked fine but in ddnet code -Wdangling broke :c 11:49 < bridge> Once maybe 11:49 < ChillerDragon> yea sounds realistic 11:49 < ChillerDragon> chiler reply guessing pro 11:50 < ChillerDragon> i srsly developed another sense 11:51 < bridge> Now that is nasty, + it still requires the extra parens too because macros don't care about braces 11:51 < ChillerDragon> so how to fix 11:51 < ChillerDragon> im out of ideas 11:52 < bridge> Remove the macro entirely and pass an initializer list directly to an overloaded function :pepeH: 11:52 < bridge> Just mess around with it until you get bored. I'll give it a lookover if you don't find the solution 11:52 < ChillerDragon> omg robsit 11:53 < ChillerDragon> but then it breaks my epic macro plan 11:53 < ChillerDragon> of deleting half of gamecontext.h 11:53 < bridge> If you want to get rid of macros you can also use polymorphism to achieve the difference in behaviour 11:53 < ChillerDragon> i do not 11:54 < ChillerDragon> want 11:54 < ChillerDragon> to 11:54 < ChillerDragon> get 11:54 < ChillerDragon> rid 11:54 < ChillerDragon> of 11:54 < ChillerDragon> the 11:54 < ChillerDragon> macros 11:54 < bridge> I love the macro too. So elegant 11:54 < bridge> get rid of the macros 11:54 < bridge> use rust 11:54 < ChillerDragon> auh9wdh8oawd 11:54 < bridge> use proc macros 11:54 < bridge> Chat commands shouldn't really be registered for all mods as macros on the server side, if you want to support modding. 11:54 < bridge> This seems like a useless macro to me: 11:54 < bridge> ```cpp 11:54 < bridge> #define CHAT_COMMAND(name, params, flags, callback, userdata, help) m_pConsole->Register(name, params, flags, callback, userdata, help); 11:54 < bridge> ``` 11:54 < bridge> those are cleaner 11:54 < bridge> actually in rust 11:54 < bridge> This code should be in the individual mod gamecontrollers 11:54 < bridge> we could have made a macro with a custom DSL for declaring commands 11:55 < bridge> we could also do the localization with macros 11:55 < ChillerDragon> @robyt3 it can be in gamecontrollers already 11:56 < ChillerDragon> https://github.com/ZillyInsta/ddnet-insta/blob/17974abe3fe1922c7d4ad8655b77ea4619774fd2/src/game/server/gamemodes/base_instagib.cpp#L17-L19 11:56 < ChillerDragon> userdata and callback can be something other than cgamecontext 11:56 < bridge> AFAICT the only reason for the chat command macros to exist is because they are hard-coded for the client as well (#7665), which I agree should probably not be the case anymore (in some time when most mods had time to update to using chat command messages) 11:56 < bridge> https://github.com/ddnet/ddnet/issues/7665 11:57 < bridge> Now just unexpand the macro and the inclusion and it looks good, I don't see a reason for this indirection 11:57 < ChillerDragon> and the next reason will be to generate this with macros https://github.com/ddnet/ddnet/blob/4af28fd2d87e8e1c5629874b2a0ee16d0860a18b/src/game/server/gamecontext.h#L369-L482 11:57 < bridge> Now just expand the macro and the inclusion and it looks good, I don't see a reason for this indirection 11:57 < ChillerDragon> wat does that mean robsti 11:58 < ChillerDragon> which indirection 11:58 < bridge> It means removing the macro and the file 11:58 < ChillerDragon> o 11:58 < bridge> And putting the actual C++ directly into the file 11:58 < ChillerDragon> hm 11:58 < ChillerDragon> bbut 11:58 < bridge> Because it only makes it more complicated to go to other files again 11:58 < ChillerDragon> imagine having to define functions in a header file 11:58 < ChillerDragon> so annoying 11:58 < ChillerDragon> when it can be macro generaterd 11:58 < bridge> That's why command callbacks should be `std::functions` so you can pass lambda expressions when registering the command 11:59 < ChillerDragon> oh 11:59 < bridge> This additional indirection of command handler functions is even more annoying 12:00 < ChillerDragon> ok you totally knocked me out now xd 12:00 < ChillerDragon> yea sounds good but i suddenly lost motivation 12:00 < bridge> Can multiple joins/leaves happen between 2 consecutive snapshots? 12:00 < bridge> ChillerDragon: It's a huge change and I don't want you or me to do it right now, but that's the end result I would like to see 12:01 < ChillerDragon> yea but then 12:01 < ChillerDragon> what am i doing here 12:01 < ChillerDragon> :D 12:01 < ChillerDragon> i just close the pr and call it a day 12:01 < ChillerDragon> sad that i didnt get to generate headers 12:01 < bridge> In general I'd prefer less usage of the preprocessor instead of more 12:02 < bridge> Hard-coded server console commands should also be removed from the client eventually 12:02 < ChillerDragon> yes 12:02 < ChillerDragon> eventually 12:06 < bridge> chiller why did u ask btw 12:06 < ChillerDragon> i realized at 4am that i do not know where you live 12:07 < ChillerDragon> which i really should know 12:07 < ChillerDragon> so i waited until the morning to ask 12:07 < bridge> are you a beautiful, intelligent, althetic woman? 12:07 < ChillerDragon> no 12:07 < bridge> ah too bad 12:07 < ChillerDragon> xd 12:08 < bridge> xd 12:08 < ChillerDragon> i need to know where people live that i interact with in teeworlds 12:08 < ChillerDragon> in case i am near by 12:08 < ChillerDragon> to hookup 12:08 < ChillerDragon> my address being public helped me meet zwelf for example 12:09 < bridge> yeah 12:09 < bridge> i remember your photo in a photo of a magnet 12:09 < ChillerDragon> xd 12:10 < bridge> barcelona 12:10 < ChillerDragon> ik 12:10 < ChillerDragon> ur 12:10 < ChillerDragon> and i know lerato is homeless 12:10 < bridge> lol 12:10 < ChillerDragon> deen i forgot tbh xd 12:10 < bridge> let's all go to barcelona 12:10 < bridge> at least there is good weather 12:10 < ChillerDragon> heinrich i already saw 12:10 < bridge> rip 12:10 < bridge> leak 12:11 < bridge> was ccc around this dates 12:11 < bridge> i wish they did smth similar here 12:12 < ChillerDragon> ryo go organize 12:12 < bridge> https://twitter.com/spectatorindex/status/1736330277428113765 12:12 < bridge> https://vxtwitter.com/spectatorindex/status/1736330277428113765 12:12 < bridge> rip 12:13 < ChillerDragon> ohno politics 12:13 < bridge> chiller 12:13 < ChillerDragon> jopsi 12:13 < bridge> can you do a video like this again? 12:13 < bridge> https://www.youtube.com/watch?v=wKV18A1DluU 12:13 < ChillerDragon> it was always planned as 2 episode thing 12:13 < ChillerDragon> but i got a lot of requests i might do it 12:14 < bridge> but with a world tour again 12:14 < bridge> https://www.youtube.com/watch?v=C8YQP-YH-0c 12:14 < bridge> 12:14 < bridge> ah yeah this was the best 12:14 < bridge> 0.7 12:14 < ChillerDragon> xd 12:14 < ChillerDragon> jopsti 0.7 enjoyer 12:15 < bridge> dead version 12:15 < bridge> it's just so troll to play teeworlds somewhere in the world in the public 12:15 < bridge> make a ddnet vid 12:15 < bridge> such a influencer moment 12:15 < bridge> imagine 12:15 < bridge> seeing a guy 12:15 < bridge> with his laptop on the ground 12:15 < bridge> middle of a park 12:15 < bridge> with tw 12:16 < bridge> saying 0.7 released! 12:16 < bridge> x 12:16 < bridge> d 12:16 < ChillerDragon> xd 12:16 < bridge> im sad resamvi doesnt do vids 12:16 < bridge> best youtuber 12:16 < bridge> https://www.youtube.com/watch?v=FQIOXVUcNew 12:18 < bridge> chiller do u want to meet ryo? 12:18 < bridge> he is a blond latino 12:18 < ChillerDragon> yes 12:18 < bridge> lol 12:18 < bridge> not latino 12:18 < ChillerDragon> next time im in barcelona 12:18 < ChillerDragon> ima ping the shits out of ryo 12:18 < bridge> nice 12:18 < bridge> xd 12:18 < ChillerDragon> my next planned meet is some 12yo kid from block 12:18 < ChillerDragon> thats gonna be cring 12:19 < bridge> lol 12:19 < bridge> wtf 12:19 < bridge> pedo 12:19 < ChillerDragon> it indeed is weird 12:19 < bridge> why u meeting him 12:19 < ChillerDragon> we play a lot together and im in his home town 12:19 < ChillerDragon> might as well say hi 12:20 < bridge> and he's literally 12? 12:20 < ChillerDragon> he might be 18 idk xd 12:20 < bridge> uhh 12:20 < bridge> xDD 12:20 < bridge> maybe he is 40 12:20 < bridge> 12 is only learath 12:20 < bridge> chiller pls 12:20 < ChillerDragon> wot 12:20 < ChillerDragon> @Axi 12:20 < ChillerDragon> did the ping work? 12:20 < bridge> yes 12:21 < bridge> yea 12:21 < bridge> > he/him/bulgarian 12:21 < bridge> > im a divorced 52 years old male and i have no life and friends 12:21 < bridge> hi axi 12:21 < ChillerDragon> @Axi how old r u 12:21 < bridge> hey 12:21 < bridge> XD 12:21 < bridge> im fine 12:21 < bridge> and you chiller? 12:21 < bridge> XDDDDDDDDDDDDDD 12:21 < bridge> he'll troll u to death 12:21 < ChillerDragon> who who 12:21 < ChillerDragon> bulgi biggest trol 12:21 < ChillerDragon> @Axi how old 12:21 < bridge> 17 12:21 < bridge> xd 12:21 < ChillerDragon> yea still weird af 12:22 < bridge> yeah 12:22 < bridge> don't get raped by chiller 12:22 < bridge> how old r u chiller 12:22 < bridge> im 23 12:22 < bridge> chiller is 25 12:22 < ChillerDragon> age reveal 12:22 < bridge> soon 30 :sadboi: 12:22 < bridge> i know everything about chiller 12:22 < ChillerDragon> ok afk 12:25 < bridge> i keep forgetting you still so young 12:25 < bridge> why am i so old 😭 12:30 < bridge> how are u so old 12:32 < bridge> i dunno when the fuck the time passed so fast 12:32 < bridge> i swear yesterday i was like 20 12:49 < bridge> i should make yt vids but lazy 12:51 < bridge> horse races or what are they about 12:58 < bridge> i did it all, couldnt compile either 12:59 < bridge> brought protocol structure for some reason 13:03 < bridge> Don't if you don't want to become jail 13:05 < bridge> tried one more time - still doesn't work xd 13:05 < bridge> Chiller are you still interested in the console command registration thing? If not I'll make template blackmagic 13:05 < bridge> hello jail I'm Teero 13:06 < bridge> There is no way the preprocessor is allowed to split that into two, are you sure you aren't testing it wrong? 13:08 < bridge> tested, preprocesser thinks that `{"map", /* <- this one */ "nomap"}` has two arguments isntead of one 13:09 < bridge> templates > macros 13:09 < bridge> Skill issue 13:09 < bridge> xd 13:13 < bridge> i have forgotten why did i close #6517 13:13 < bridge> https://github.com/ddnet/ddnet/pull/6517 13:14 < bridge> seems to be messed up tho 13:17 < bridge> ah 13:17 < bridge> real skill issue then 14:04 < bridge> I have up and are totally out. Feel free to do whatever c: 14:05 < bridge> Gave 14:05 < bridge> Fuxk phones 14:39 < bridge> nah its unreal for me to make it work 14:46 < bridge> @tsfreddie im improving my flutter 14:46 < bridge> dart is like modern java 14:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1185941224495001670/image.png?ex=659170d5&is=657efbd5&hm=3d7928886d41a85f9fb8bd792c0236b0fdaf7e086810a9ee583573c96b57603b& 14:47 < bridge> make an AI Chat bot 14:47 < bridge> that can be cool 14:47 < bridge> so i can dump chillers chat history in there and have a mini chillerdragon in my pocket 14:48 < bridge> :O gimme gimme 14:49 < bridge> @tsfreddie do u know any public apis? 14:49 < bridge> or run my own model 14:49 < bridge> sounds expensive 14:49 < bridge> RWKV can probably run on phones 14:49 < bridge> https://www.rwkv.com/ 14:49 < bridge> this? 14:49 < bridge> ye 14:50 < bridge> uh oh 14:50 < bridge> but idk how to use this 14:50 < bridge> idk either lol 14:51 < bridge> i tried compiling rwkv.cpp and it ran fine on cpu only. 14:51 < bridge> maybe something simpler as a first complex flutter app 14:51 < bridge> xd 14:51 < bridge> It’s probably just a couple python calls 14:51 < bridge> actually ill use my own todo app as a list to buy groceries 14:51 < bridge> i always wanted an add free one 14:51 < bridge> so its probably okay to run a 1.4b models on phones with cpu only 14:51 < bridge> Everything AI is made for the lowest common denominator. The new pRoGrAMmeRs 14:52 < bridge> i prefer smth dart natvie 14:52 < bridge> native 14:52 < bridge> i need to see how dart can interface with python 14:52 < bridge> https://dart.dev/ 14:52 < bridge> jtx Board is foss i think? 14:52 < bridge> btw the hot reload is insane 14:53 < bridge> i literally run the app on all time 14:53 < bridge> modern tooling is smth else 14:53 < bridge> Hot reload is such a pleasure to have 14:53 < bridge> also using the app on my phone is even seamless 14:55 < bridge> i mean, rwkv.cpp is native :owo: 14:56 < bridge> rwkv ai00 server also has a vulkan implementation 14:56 < bridge> its pretty cool to not rely on cuda or python 15:07 < bridge> also the refactor abilities are p good 15:07 < bridge> on this editor 15:07 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1185946292627701881/image.png?ex=6591758d&is=657f008d&hm=37c0194befafbe481ae511995acf7052bc5b8d82f635f13368838399af0a646b& 15:11 < bridge> when do we get better antiping xd 15:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1185947297113194558/2023-12-17_15-08-45.mp4?ex=6591767d&is=657f017d&hm=a8f2885170e5868da96d73f1ab62f5fa136c5d1ce44f33f17ea8bfe4ec0fcd1d& 15:12 < bridge> get better internet 15:12 < bridge> :4Head: 15:17 < bridge> <_voxeldoesart> literally every game ever accounts for poor internet except ddnet 15:30 < bridge> <_voxeldoesart> wtf is this emote 15:30 < bridge> 4head 15:31 < bridge> from twitch 15:31 < bridge> with a tradeoff 15:31 < bridge> <_voxeldoesart> i thought it was stepfunn 15:31 < bridge> the tradeoff is to give more control to client 15:31 < bridge> which allows hacks 15:31 < bridge> ddnet is completly server authoritive 15:32 < bridge> and well it requires precise movements 15:32 < bridge> kog+bad internet+loud music 15:32 < bridge> music not loud xddd 15:32 < bridge> <_voxeldoesart> kog players cant live without their loud music 15:34 < bridge> downloading gta6 15:36 < bridge> k 15:36 < bridge> do you really want to replay trailer forever 15:38 < bridge> <_voxeldoesart> gta6 mid whens gd 2.2 gonna finish 15:43 < bridge> @mixi__ they saw your videos :MONKAS: 15:47 < bridge> <_voxeldoesart> i did not 15:47 < bridge> never 15:47 < bridge> its like teeworlds 1.0 15:48 < bridge> <_voxeldoesart> oh yea i forgot teeworlds was forever under 1.0 15:49 < bridge> and will be forever 15:49 < bridge> 👏 15:50 < bridge> <_voxeldoesart> dead franchise 15:51 < bridge> teeworlds versions 15:51 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1185957462944256040/image.png?ex=65917ff5&is=657f0af5&hm=afe13d64c0f8fbf94fba1fd2283dbba5a2af136cc63a4f4ba7cd87a2b8cb50ea& 15:51 < bridge> 😬 15:52 < bridge> <_voxeldoesart> i shouldve joined ddnet 5 years ago max 15:53 < bridge> soon i'll know teeworlds for half of my life 15:53 < bridge> <_voxeldoesart> wow 15:54 < bridge> cringe ur not from 2008 15:54 < bridge> yeah i am pretty late 15:55 < bridge> imagine u found the game after ddnet rls 15:55 < bridge> <_voxeldoesart> i got into it after all the fun stuff happened 15:56 < bridge> i think i almost started around when ddnet was released 😄 15:56 < bridge> but ur new 15:56 < bridge> it cant be 15:57 < bridge> 0.4.3 was next gen 15:57 < bridge> grandma coke 15:57 < bridge> pretty new 15:58 < bridge> <_voxeldoesart> ik but i heard old versions / events were better than this one 15:58 < bridge> yes bcs nowdays nobody care 15:59 < bridge> we had....wait....0 tourneys this year 15:59 < bridge> <_voxeldoesart> dead franchise x2 15:59 < bridge> only one will be a simple hh map that u can play one time 16:00 < bridge> <_voxeldoesart> only reason its still gonna go next year is because heinrich paid like 600+ for the servers LOL 16:00 < bridge> will be better when roles change 16:00 < bridge> 😛 16:00 < bridge> u dont know hahahah 16:00 < bridge> it was like never reached 16:00 < bridge> <_voxeldoesart> damn so it Is dead 16:01 < bridge> deen has a good heart 16:01 < bridge> and know the game is the best 16:01 < bridge> <_voxeldoesart> the best in...? 16:01 < bridge> all categorys 16:01 < bridge> <_voxeldoesart> false 16:02 < bridge> u cant tell me a better game 16:02 < bridge> <_voxeldoesart> i guess games just suck then 16:02 < bridge> <_voxeldoesart> womp womp 16:03 < bridge> no p2w, only own skillz 16:03 < bridge> idk its the best game 😄 16:03 < bridge> but kids these days want to be the best after 3 hours 16:04 < bridge> <_voxeldoesart> skillz and The Internet Speed of Jesus Christ 16:04 < bridge> and good mouse 16:04 < bridge> <_voxeldoesart> but i can imagine how easy ddnet is when you guys release the same gameplay 7 times 16:05 < bridge> <_voxeldoesart> in a month 16:05 < bridge> wat? 16:05 < bridge> and 3080 16:05 < bridge> now u confused me 16:05 < bridge> no, most optimized for me GPU 16:05 < bridge> 😏 16:05 < bridge> xd 16:05 < bridge> <_voxeldoesart> current maps are a bore 16:05 < bridge> <_voxeldoesart> its all just hh 16:06 < bridge> play gores 16:06 < bridge> then u have smth to do for the next 3 years 16:06 < bridge> <_voxeldoesart> thats not any better 16:06 < bridge> it can't be boring if u are not good enough to solo finish 16:06 < bridge> 😬 16:07 < bridge> <_voxeldoesart> guess i joined ddnet too late then 16:07 < bridge> <_voxeldoesart> oh well 16:07 < bridge> chill dude 16:07 < bridge> just start game 16:07 < bridge> play 16:07 < bridge> die bcs u took it too serious 16:07 < bridge> <_voxeldoesart> get bored 16:07 < bridge> <_voxeldoesart> quit 16:15 < bridge> u cant bcs u are not playing 16:17 < bridge> u dont even know the basics 16:19 < bridge> <_voxeldoesart> but do i want to 16:20 < bridge> https://tenor.com/view/staring-black-man-staring-black-men-staring-black-men-men-staring-gif-25096788 16:31 < bridge> <_voxeldoesart> ? 17:06 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1185976263949688956/todo-flutter-ryo.apk?ex=65919177&is=657f1c77&hm=990b6cda327cb6db6c07812b0aa272a139b79eac013ea2c75db648bb7aee44af& 17:06 < bridge> anyone wanna try my todo app 17:06 < bridge> :owo: 17:06 < bridge> (i promise no sus code) 17:07 < bridge> Sus 17:08 < bridge> i made a google play acc 17:08 < bridge> i paid 25€ to the corpos 17:08 < bridge> i made a google play console acc 17:14 < bridge> <.ryzen._.sl> Hi, guiys. Can you help me? I need pos of my crosshair 17:15 < bridge> <.ryzen._.sl> it is pChr->m_Input.m_TargetX and m_TargetY or something another? 17:15 < bridge> 🤖 17:15 < bridge> <.ryzen._.sl> Hi, guys. Can you help me? I need pos of my crosshair 17:15 < bridge> :logistic_robot: 17:15 < bridge> :banhammer: 17:15 < bridge> 0.5 is mainstream then xd 17:15 < bridge> <.ryzen._.sl> i need to get is on the server side 17:16 < bridge> <.ryzen._.sl> :poggers2: 17:16 < bridge> it should be the cursor pos yes 17:16 < bridge> <.ryzen._.sl> do i need to * 32? 17:16 < bridge> <.ryzen._.sl> or its correct already? 17:16 < bridge> but u could easily check by printing these variables 17:16 < bridge> mhh dunno rn 17:16 < bridge> <.ryzen._.sl> huh? 17:17 < bridge> You don't need to multiply it. 17:17 < bridge> <.ryzen._.sl> thx 17:17 < bridge> <.ryzen._.sl> its mean 18:38 < bridge> have any of you ever had cracking, popping sounds when try to play audio on discord, zoom in firefox :justatest: 18:38 < bridge> asking for a friend 18:39 < bridge> have any of you ever had cracking, popping sounds when try to play audio on discord, zoom in firefox :justatest: (also it can crash a page) 18:56 < bridge> sounds weird 18:57 < bridge> maybe the sound cracking is a side-effect to a driver problem? 18:57 < bridge> but spotify and youtube works fine 18:57 < bridge> :\ 18:57 < bridge> but spotify and youtube work fine 18:58 < bridge> what os? 18:58 < bridge> gentoo :justatest: 18:58 < bridge> xD?! 18:59 < bridge> :justatest: 18:59 < bridge> ill try to install chrome 18:59 < bridge> did you convert him to gentoo ala ryo style or is your friend you? 19:00 < bridge> 2nd one is correct 19:00 < bridge> and sooner or later ill install linux on my friend's pc 19:00 < bridge> :gigachad: 19:01 < bridge> can you backtrace it in any way? 19:04 < bridge> like are there logs or smt? 19:05 < bridge> there should be 19:05 < bridge> and i installed chrome :owo: 19:05 < bridge> time to remember password for discord :pepeW: 19:06 < bridge> 😬 19:06 < bridge> ez 5th try, holy hel 19:07 < bridge> ez5thtry,holyh31 nice pwd 19:07 < bridge> nothing on chrome 19:07 < bridge> always knew firefox sucks 19:07 < bridge> im chrome andy now 19:16 < bridge> hi 19:17 < bridge> where is server log file ? 19:20 < bridge> wow , here is not much going on without me 🙂 19:24 < bridge> the quitting. please wait is so annoying on windows "idk about linux tho" it take sometimes a minute to quit the game 19:37 < bridge> <_voxeldoesart> yeah why does it do that 19:48 < bridge> The client needs to wait for all background jobs to complete before it can quit or it may crash when quitting 19:51 < bridge> do you suggest i don't alt+f4 my way out ? 19:52 < bridge> is it the same on linux ? 19:53 < bridge> Probably doesn't cause problems right now, but I wouldn't recommend it. You could also Alt+Tab out already. 19:53 < bridge> Should be, it's the serverlist refresh jobs taking the longest 20:10 < bridge> I can confirm the "bug" is on linux too 21:02 < bridge> it can't force jobs to end? 21:08 < bridge> Doesn't work very well with the current curl interface we are using, would be improved by #5842 21:08 < bridge> https://github.com/ddnet/ddnet/pull/5842 21:44 < bridge> :pepeW: 21:44 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186046396567146556/image.png?ex=6591d2c8&is=657f5dc8&hm=5f0520be02d09bb4c52249c0187c31ddb84984d2527957bdcdcd7f906a23ddbb& 21:47 < bridge> <-StormAh~> about render text 21:47 < bridge> <-StormAh~> can i make somehow to rainbow only the text i need 21:48 < bridge> <-StormAh~> cause it looks like 21:48 < bridge> <-StormAh~> https://cdn.discordapp.com/attachments/293493549758939136/1186047184379056238/image.png?ex=6591d384&is=657f5e84&hm=84ac079980decf69a0ba6041e343a36229cca50984abf4fa9922a55d93671f25& 21:48 < bridge> <-StormAh~> eww 21:48 < bridge> <-StormAh~> can i make somehow to rainbow only the text i want to be rainbowed 21:48 < bridge> The text color is a global variable, you need to reset to the default text color after doing your colored text 21:50 < bridge> :pepeW: just client.cpp things 21:50 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186046396567146556/image.png?ex=6591d2c8&is=657f5dc8&hm=5f0520be02d09bb4c52249c0187c31ddb84984d2527957bdcdcd7f906a23ddbb& 21:53 < bridge> <-StormAh~> works, thanks 21:59 < bridge> <_voxeldoesart> i remember running into that problem when redoing the editor ui 22:13 < bridge> <-StormAh~> 1 more question 22:14 < bridge> <-StormAh~> how can i put multiple names in `strcmp`? 22:14 < bridge> <-StormAh~> https://cdn.discordapp.com/attachments/293493549758939136/1186053783529201704/image.png?ex=6591d9a9&is=657f64a9&hm=897b7a20391edb205463e9d30ec46b9510c82560c191cc3b39ef70599e16c461& 22:14 < bridge> What do you want it to do? Check if the name matches either or matches both? 22:15 < bridge> <-StormAh~> put multiple names like -StormAx || melom etc 22:15 < bridge> <-StormAh~> so i dont have to make 100500 new lines 22:15 < bridge> <-StormAh~> so i don`t have to make 100500 new lines 22:15 < bridge> <-StormAh~> so i don't have to make 100500 new lines 22:16 < bridge> Move the logical or outside the function call: `str_comp(..., ...) == 0 || str_comp(..., ...) == 0` 22:17 < bridge> im getting special notice in your client ? :monkaStop: 22:17 < bridge> <-StormAh~> ofc ;D 22:18 < bridge> <-StormAh~> ugmmm 22:18 < bridge> <-StormAh~> like this? 22:18 < bridge> <-StormAh~> https://cdn.discordapp.com/attachments/293493549758939136/1186054865185685514/image.png?ex=6591daab&is=657f65ab&hm=b758f26ee9b7078d1f12410e1a3cdb2bacf08fe2f0f6143e3c6b5c4c1bc408a9& 22:18 < bridge> thats one way to do it, yes 22:18 < bridge> <-StormAh~> ok cool 22:19 < bridge> <-StormAh~> :D 22:19 < bridge> <-StormAh~> thanks 22:23 < bridge> Out of curiosity, are those jobs network oriented? I did not seem to encounter that screen when having a pretty good internet 22:35 < bridge> Yeah, it's the jobs to determine the best master server. If you have a good connection to all master servers then it should be done quickly 22:35 < bridge> If you don't quit right after refreshing the server list (or after starting the client) then it should also quit pretty fast 22:41 < bridge> Oh that's very good to know. I'll keep in mind to not refresh before leaving, something that I do quite a lot xD. 22:41 < bridge> Thanks! 23:08 < bridge> Can we cache that result across reboots? 23:14 < bridge> Possibly, but I'm almost done reworking #7376. Now that jobs can be cancelled, the client quits almost immediately. 23:14 < bridge> https://github.com/ddnet/ddnet/pull/7376 23:14 < bridge> You can create `ddnet-serverlist-urls.cfg` in the same directory as `settings_ddnet.cfg` and put a url there. `https://master1.ddnet.org/ddnet/15/servers.json` for example and it should be cached. 23:17 < bridge> I don't think that prevents the requests to determine the best master though 23:19 < bridge> It seems to, the game quits pretty much instantly now. 23:21 < bridge> At least for quitting after initial start it doesn't seem to make a difference, i.e. with command line `ddnet quit` 23:24 < bridge> It does for me? 23:24 < bridge> ``` 23:24 < bridge> With ddnet-serverlist-urls.cfg 23:24 < bridge> DDNet quit 0.81s user 0.64s system 88% cpu 1.641 total 23:24 < bridge> 23:24 < bridge> Without 23:24 < bridge> DDNet quit 0.92s user 0.68s system 31% cpu 5.011 total 23:24 < bridge> ``` 23:25 < bridge> Maybe it simply doesn't try other master servers 23:25 < bridge> Jobs should simply get a bool "canceable" and skip execution if true and in destructor 23:26 < bridge> Why does it matter that the http request is not finished? 23:28 < bridge> Or can one not cancel curl requests? 23:30 < bridge> Yes, but we are not doing that at the correct time right now, we are only cancelling jobs in destructors when it's too late. I'll probably update 7376 tomorrow, adding `IJob::Cancel`. 23:31 < bridge> So our problem is that we don't handle any curl error is curl was stopped and what ever blocking call returned an error? Or is that simply not possible? 23:31 < bridge> So our problem is that we don't handle any curl error if curl was stopped and what ever blocking call returned an error? Or is that simply not possible? 23:32 < bridge> The code is already there to properly abort the curl calls, but we only abort the HTTP requests when they are already done effectively 23:32 < bridge> Is there no global instance or something for curl, that we have to stop? 23:33 < bridge> Or can stop* 23:34 < bridge> That's probably what curl-multi is for, it will make quitting even faster I assume 23:34 < bridge> We neglect to call `curl_global_cleanup` 23:34 < bridge> Mh OK. Didn't know curl is such low level api 23:35 < bridge> Curl has a progressfunction callback that can tell curl to abort, but we don't tell curl to abort soon enough at the moment 23:37 < bridge> I find it really overkill how hard it is to use, considering we do like 2 http requests lmao 23:38 < bridge> theoretically we could just quit the process while the http requests are still running 23:38 < bridge> but we don't have the signaling that the http requests are unimportant 23:38 < bridge> and since we introduced important jobs, such as editor saving, we have to wait for some jobs, at least 23:40 < bridge> Well abort sounds like something a async code could support. So i guess that would be one good way. 23:40 < bridge> we're using the sync interface of curl 23:40 < bridge> curl-multi would be the async interface 23:40 < bridge> we're using the sync interface of curl (in a thread) 23:40 < bridge> Yeah but apparently we can handle aborts already 23:41 < bridge> As far as i understood rbyte 23:41 < bridge> Here 23:41 < bridge> I'm not sure that actually works if no bytes are currently being received on the http stream 23:41 < bridge> Yeah, that's the issue with the current progress callback, it is only called when bytes are received 23:42 < bridge> Maybe we could use a simpler http lib 23:42 < bridge> There doesn't seem very high interest by any Dev to maintain good code 23:42 < bridge> when "just quitting" works, what's the problem with libcurl? 23:43 < bridge> curl is the de facto standard library for doing http(s) requests, don't htink we should switch to something else 23:44 < bridge> But apparently we cannot just abort requests 23:44 < bridge> And we de facto don't have curl multi 23:44 < bridge> we can easily abort requests 23:44 < bridge> (at the time where we want it) 23:44 < bridge> by just not waiting for the curl threads to complete 23:44 < bridge> Ok then apparently we can now 23:45 < bridge> Seems to work well enough with what I have right now, but curl-multi would be evem better 23:45 < bridge> Seems to work well enough with what I have right now, but curl-multi would be even better 23:45 < bridge> You mean a quick exit? 23:45 < bridge> no 23:45 < bridge> just no thread_join on the thread doing the http request 23:46 < bridge> That sounds like a hack to me. Leave it to the OS. Im lazy 23:46 < bridge> In theory it could wait for it 23:46 < bridge> the OS is much better at cleanup anyway 23:46 < bridge> How would you model "important" jobs? `bool IsImportant()` with default `false` or `bool IsCancellable()` with default `true`? 23:47 < bridge> `bool ShouldWaitBeforeQuitting()`? maybe even defaulting to `true` to opt out of it? 23:47 < bridge> Slightly annoying because the process will linger around for a moment 23:47 < bridge> That's same thinking as global variables. 23:47 < bridge> 23:47 < bridge> It's not modular, it's not reusable. I dislike it 23:47 < bridge> which process will linger around? 23:47 < bridge> it's also faster ^^ 23:48 < bridge> Or does the process die immediately if only curl threads remain? 23:48 < bridge> I can live with slower exit, if that means cleaner code 23:48 < bridge> The Vulkan spec even forbids it 23:52 < bridge> it will exit immediately 23:52 < bridge> since leaving main e.g. calls `exit_group` on Linux 23:52 < bridge> which kills all other threads as well 23:53 < bridge> what does the vulkan spec forbid?