04:06 < ChillerDragon> there is a botter on 45.141.57.22:8309 04:06 < ChillerDragon> @moderators 04:34 < bridge_> let me gues... its you? 08:55 < bridge_> @milkeeycat do u know lc3? little computer 3 is a vm 08:56 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365219915682021377/screen_recording_2025-04-24_at_8.02.38___pm.mp4?ex=680c83a0&is=680b3220&hm=fd5bd44f550a8e20acaec2537a508c3625757574c16289df256329825d50b2e1& 08:56 < bridge_> @milkeeycat a lc3 vm made in my lang and playing 2048 08:56 < bridge_> a coworker made it 08:57 < bridge_> cool :poggers: 08:59 < bridge_> @ryozuki mister llvm pro, why does dis code pass all fields in registers? 08:59 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365220542080356402/image.png?ex=680c8435&is=680b32b5&hm=0fceb29b5ecbb9b9904d896d9a4a7f086e180f4a5c6265587f7fc25a3a40fcdb& 09:00 < bridge_> cuz a struct is just some data in order, registers alwats faster 09:00 < bridge_> its like passing 3 ints 09:00 < bridge_> also ur struct is passed by value 09:00 < bridge_> i know 09:02 < bridge_> if I were writing a compiler and had `extern "C"` thingy, would I have to handle it myself? 09:06 < bridge_> extern c simply means abiding to the C call convention 09:06 < bridge_> if u make ur backend u have to impl the call convention 09:06 < bridge_> llvm calls it Ccc 09:06 < bridge_> there are lots 09:06 < bridge_> according to sys v abi this is wrong 09:06 < bridge_> other 09:07 < bridge_> how so 09:08 < bridge_> > If the size of the aggregate exceeds two eightbytes and the first eightbyte isn’t 09:08 < bridge_> > SSE or any other eightbyte isn’t SSEUP, the whole argument is passed in mem- 09:08 < bridge_> > ory. 09:10 < bridge_> is the sys v abi convention same as c? i dont remember 09:10 < bridge_> also ur reasing the 64bit right 09:11 < bridge_> i go make coffee and open pc 09:11 < bridge_> it should be. @learath2 yes? 09:14 < bridge_> anyway llvm is probs not wrong 09:15 < bridge_> it passes structs differently 09:24 < bridge_> @milkeeycat can u put "ccc" before void 09:25 < bridge_> I did, and nothing changed 09:27 < bridge_> do u have the pdf u are reading 09:27 < bridge_> also put ccc in the call 09:27 < bridge_> but i guess its the default 09:27 < bridge_> so its already the c conv 09:27 < bridge_> i dont see why would it be limited to 2 eightbytes 09:27 < bridge_> when u have 6 registers available 09:28 < bridge_> https://gitlab.com/x86-psABIs/x86-64-ABI/-/jobs/artifacts/master/raw/x86-64-ABI/abi.pdf?job=build 09:29 < bridge_> page 26 point 5 c 09:32 < bridge_> > if the size of the aggregate exceeds two eightbytes and the first eightbyte isn’t 09:32 < bridge_> > SSE or any other eightbyte isn’t SSEUP, the whole argument is passed in mem- 09:32 < bridge_> > ory. 09:32 < bridge_> @milkeeycat did i read it correctly 09:32 < bridge_> i think it doesnt say "if it exceeds two eightbytes DO NOT PASS IT IN MEMORY" 09:32 < bridge_> rather the opposite 09:32 < bridge_> if it exceeds two eightbytes pass it in memory 09:33 < bridge_> xd 09:34 < bridge_> if it's bigger than 16 bytes, pass in memory 09:34 < bridge_> 3 x i64 is bigger than 16 bytes 09:34 < bridge_> yeah 09:34 < bridge_> so its passed in memory 09:34 < bridge_> ? xD 09:34 < bridge_> memory is stack 09:34 < bridge_> oh 09:34 < bridge_> my bad xD 09:35 < bridge_> > MEMORY This class consists of types that will be passed and returned in memory via 09:35 < bridge_> > the stack. 09:35 < bridge_> i hate it doesnt put memory in capitals there 09:37 < bridge_> hmm surely ther struct is classified before the post merger as INTEGER 09:38 < bridge_> @milkeeycat what does a c compilero utput? xd 09:39 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365230670028341291/image.png?ex=680c8da4&is=680b3c24&hm=42e8d1d1029eae449f158b18bfff4297adf2d1397b903e24680e866966eeb595& 09:41 < bridge_> Omg I'm so proud of you. Looking at the spec 09:41 < bridge_> @learath2 pls bless us with ru knowledge 09:41 < bridge_> is it optimized?= 09:42 < bridge_> C does not prescribe a calling convention 09:42 < bridge_> xd 09:43 < bridge_> so its the sys v abi 09:43 < bridge_> i dont get why a struct with >2 eightbytes will always be in memory 09:43 < bridge_> also when selecting a class it also has this before 09:43 < bridge_> > if the size of an object is larger than eight eightbytes, or it contains unaligned fields, 09:43 < bridge_> > it has class MEMORY 09:45 < bridge_> > SSE The class consists of types that fit into a vector register. 09:45 < bridge_> > SSEUP The class consists of types that fit into a vector register and can be passed and 09:45 < bridge_> > returned in the upper bytes of it. 09:45 < bridge_> is a i64 sse? xD 09:45 < bridge_> ah its for floats 09:46 < bridge_> @milkeeycat oh i think i know 09:47 < bridge_> @milkeeycat i think llvm if ur function is not "public" aka externally visible it will use its own call conv? i guess 09:47 < bridge_> try specifying a linkage 09:47 < bridge_> No 09:47 < bridge_> Yes 09:47 < bridge_> @milkeeycat put external 09:47 < bridge_> after define 09:47 < bridge_> What is the issue btw? 09:47 < bridge_> @learath2 09:48 < bridge_> @learath2 and > If the size of the aggregate exceeds two eightbytes and the first eightbyte isn’t 09:48 < bridge_> SSE or any other eightbyte isn’t SSEUP, the whole argument is passed in mem- 09:48 < bridge_> ory. 09:49 < bridge_> That is curious, did you try in C to make sure we aren't misinterpeting the abi spec? 09:51 < bridge_> I think this is just a deficiency of the standard that we just cant update because it'd break everything 09:52 < bridge_> ```asm 09:52 < bridge_> test: # @test 09:52 < bridge_> .cfi_startproc 09:52 < bridge_> # %bb.0: 09:52 < bridge_> mov rcx, rdx 09:52 < bridge_> mov rdx, rsi 09:52 < bridge_> mov rax, rdi 09:52 < bridge_> ret 09:52 < bridge_> .Lfunc_end0: 09:52 < bridge_> .size test, .Lfunc_end0-test 09:52 < bridge_> .cfi_endproc 09:52 < bridge_> # -- End function 09:52 < bridge_> .globl main # -- Begin function main 09:52 < bridge_> .p2align 4 09:52 < bridge_> .type main,@function 09:52 < bridge_> main: # @main 09:53 < bridge_> .cfi_startproc 09:53 < bridge_> ``` 09:53 < bridge_> xd 09:53 < bridge_> ```x86 09:53 < bridge_> test: # @test 09:53 < bridge_> .cfi_startproc 09:53 < bridge_> # %bb.0: 09:53 < bridge_> mov rcx, rdx 09:53 < bridge_> mov rdx, rsi 09:53 < bridge_> mov rax, rdi 09:53 < bridge_> ret 09:53 < bridge_> .Lfunc_end0: 09:53 < bridge_> .size test, .Lfunc_end0-test 09:53 < bridge_> .cfi_endproc 09:53 < bridge_> # -- End function 09:53 < bridge_> .globl main # -- Begin function main 09:53 < bridge_> .p2align 4 09:53 < bridge_> .type main,@function 09:53 < bridge_> main: # @main 09:53 < bridge_> .cfi_startproc 09:53 < bridge_> ``` 09:53 < bridge_> ```x86asm 09:53 < bridge_> test: # @test 09:53 < bridge_> .cfi_startproc 09:53 < bridge_> # %bb.0: 09:53 < bridge_> mov rcx, rdx 09:53 < bridge_> mov rdx, rsi 09:53 < bridge_> this is with external linkage so idk 09:54 < bridge_> it doesnt even push rbp 09:54 < bridge_> oh wait 09:55 < bridge_> adding `target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a:0:64"` doesnt seem to change 09:55 < bridge_> idk xd 09:58 < bridge_> Iirc go internal abi uses all registers available 09:58 < bridge_> Did you try just C? 09:58 < bridge_> . 10:24 < bridge_> @learath2 @ryozuki https://github.com/llvm/llvm-project/issues/84183 10:25 < bridge_> this is not the same 10:25 < bridge_> > While it indeed says that it "matches C calling convention", however, it is important to note that ABI is specified in terms of C language. In particular, LLVM structs have nothing with C structs, etc. The former could be used to implement the latter, but that's it, there is no one-to-one mapping here. E.g. struct { char a; int b; } in general is different from { i8, i32}. 10:28 < bridge_> tldr: a llvm ir struct is not same as a c struct 10:28 < bridge_> i wonder what clang does 10:29 < bridge_> Ah, that makes more sense. So clang does it "manually" for c 10:32 < bridge_> Btw such a weird snipped to try demonstrate this 10:33 < bridge_> ```c 10:33 < bridge_> struct foo { 10:33 < bridge_> long long x; 10:33 < bridge_> long long y; 10:33 < bridge_> long long z; 10:33 < bridge_> }; 10:33 < bridge_> 10:33 < bridge_> int bar(struct foo k) { 10:33 < bridge_> return k.x * k.y + k.z; 10:33 < bridge_> } 10:33 < bridge_> ``` 10:33 < bridge_> Btw such a weird snippet to try demonstrate this 10:44 < bridge_> @learath2 what do you think of this? I would also have another issue directly addressing the map format 😦 10:45 < bridge_> I'm far away from a computer and I'd rather not look at those on a phone, but do we have a good reason for a map format update? 10:46 < bridge_> not yet, but if we do, we would have a todo list of things we then have an opportunity to fix 10:47 < bridge_> It's almost certain, that there will be a point in the future, where the mapformat will be updated 🤷‍♂️ 10:49 < bridge_> I guess some things on this list are just uppening m_Version of a part of the mapformat on some subthing 🤔 10:49 < bridge_> You can have a discussion issue with it, but given we can't stop supporting old maps, it'll come with code bloat that has to be justified 10:50 < bridge_> true, hmm 11:06 < bridge_> we can avoid code bloat by providing a conversion program 11:08 < bridge_> Which would need to be built into the client if we don't want to kill off all old mods 11:08 < bridge_> but imho it can be separated easier codewise 11:08 < bridge_> we only "support" the new format but if we encounter a old one we convert it 11:08 < bridge_> rather than having 2 parsers at same time 11:39 < bridge_> can sb explain this line? `str_format(aImageName, sizeof(aImageName), "%s %" PRIzu, aTileArtFileName, i + 1);` 11:39 < bridge_> I have an issue with PRIzu, what is this for, why is it behind the string? 11:39 < bridge_> it expands to "zu" 11:42 < bridge_> Behind the string bcs it's macro like %f 11:42 < bridge_> It's safer on some systems than zu or something like that 11:42 < bridge_> There was an issue about this recently 11:43 < bridge_> I guess I can remove it, because I really only need the FileName (without the int behind) 11:43 < bridge_> thank you 11:45 < bridge_> okay I can fully remove that anyway 🙈 12:18 < bridge_> chillerdragon when are your consultation hours currently? 12:27 < bridge_> @jupeyy_keks: hit me 12:27 < bridge_> I have a question. When you know that llvm ir struct is not the same as a c struct, would you expect llvm to lower struct passed by value as in spec when you specify C calling convention? 12:29 < bridge_> Ah nice, I just want to ask. Do you have like docs for teeworlds protocol hacks. 12:29 < bridge_> 12:29 < bridge_> Like I was surprised to see that a dead char's tick randomly is 0 instead of the current tick. 12:30 < bridge_> 12:30 < bridge_> So things you don't expect and should know about basically 13:16 < bridge_> I naively would, but it does make sense to me that they don't. I just would expect there to be an easy way to force an llvm struct to be passed as if it's a c struct. 13:24 < bridge_> Will #9565 be merged? 13:24 < bridge_> https://github.com/ddnet/ddnet/pull/9565 13:25 < bridge_> My neanderthal brain doesn't understand why would they not pass it as a c struct when you set C calling convention, but if smart people in llvm did so then there should be a reason for that 13:25 < bridge_> I means if it finishs. 13:26 < bridge_> I means if it finishes. 13:26 < bridge_> I mean that if it finishes. 13:31 < bridge_> If I were to make a guess, the fact that llvm structs are not passed as c structs is their way of allowing this optimization 13:37 < bridge_> As in make llvm optimize AS MUCH as possible by default and have clang make it inefficient as needed 13:38 < bridge_> Why not optimize AS MUCH as possible but only when calling convention is not set explicitly 13:39 < bridge_> Anyways, I'm gonna do it my way and regret later if something won't work xd 13:41 < bridge_> Can sb help me with placing a popup properly? 🙈 talking about the top left one 13:41 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365291654684348557/screenshot_2025-04-25_13-40-58.png?ex=680cc670&is=680b74f0&hm=4a55ecb333d746752a026d6aa816c34ff6f64c5f8f74ebf078c0cd16be5d423c& 13:42 < bridge_> ``` 13:42 < bridge_> CUIRect Button; 13:42 < bridge_> View.HSplitBottom(0.f, &View, &Button); 13:42 < bridge_> 13:42 < bridge_> static int s_Button; 13:42 < bridge_> if(pEditor->DoButton_Editor(&s_Button, "Go", 0, &Button, BUTTONFLAG_LEFT, nullptr)) 13:42 < bridge_> { 13:42 < bridge_> pEditor->AddQuadart(ImagePixelSize, QuadPixelsize, Optimize, Centralize); 13:42 < bridge_> return CUi::POPUP_CLOSE_CURRENT; 13:42 < bridge_> } 13:42 < bridge_> ``` 13:42 < bridge_> I tried a bit around with HSplitBottom, but I have no idea what I am doing, I just want to place the popup in the middle over it and but a go/cancel button under the options 13:44 < bridge_> ``` 13:44 < bridge_> CProperty aProps[] = { 13:44 < bridge_> {"Image pixelsize", ImagePixelSize, PROPTYPE_INT, 1, 1024}, 13:44 < bridge_> {"Quad pixelsize", QuadPixelsize, PROPTYPE_INT, 1, 1024}, 13:44 < bridge_> {"Optimize", Optimize, PROPTYPE_BOOL, false, true}, 13:44 < bridge_> {"Centralize", Centralize, PROPTYPE_BOOL, false, true}, 13:44 < bridge_> {nullptr}, 13:44 < bridge_> }; 13:44 < bridge_> 13:44 < bridge_> static int s_aIds[NUM_PROPS] = {0}; 13:44 < bridge_> int NewVal = 0; 13:44 < bridge_> int Prop = pEditor->DoProperties(&View, aProps, s_aIds, &NewVal); 13:44 < bridge_> ... 13:44 < bridge_> CUIRect Button; 13:44 < bridge_> View.HSplitBottom(0.f, &View, &Button); 13:44 < bridge_> 13:44 < bridge_> static int s_Button; 13:44 < bridge_> if(pEditor->DoButton_Editor(&s_Button, "Go", 0, &Button, BUTTONFLAG_LEFT, nullptr)) 13:44 < bridge_> { 13:44 < bridge_> pEditor->AddQuadart(ImagePixelSize, QuadPixelsize, Optimize, Centralize); 13:44 < bridge_> return CUi::POPUP_CLOSE_CURRENT; 13:44 < bridge_> } 13:44 < bridge_> ``` 13:45 < bridge_> Yeah this is what I would think too. Idk treat llvm structs as c structs when the calling convention is set. 13:45 < bridge_> 13:45 < bridge_> It is perhaps a technical limitation or it's just that the llvm overlords know better than us 13:48 < bridge_> You just specify the x and y position of the top left corner of the popup, most popups are created at the mouse position 13:49 < bridge_> And you need to pick a large enough width and height when creating the popup, it's not dynamic 13:50 < bridge_> oh, it's not, I thought it was doing it based on the number of items I add 🤔 13:51 < bridge_> `DoProperties` uses as much height as it needs for the items, but you need to calculate that number ahead of time 13:55 < bridge_> `pEditor->Ui()->DoPopupMenu(&s_PopupQuadartId, 0, 0, 120, 52, pEditor, PopupQuadart);` 🤦‍♂️ thanks 14:05 < bridge_> Menu isn't working (or properly aligned), but looks good :3 14:05 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365297728984186901/screenshot_2025-04-25_14-05-20.png?ex=680ccc18&is=680b7a98&hm=ee9a48a45541682e0d634d885e0b353023b55f1ff78b445052535b661754db48& 14:19 < bridge_> Anybody an idea why this could not be working? 14:19 < bridge_> ``` 14:19 < bridge_> static int s_Cancel; 14:19 < bridge_> if(pEditor->DoButton_Editor(&s_Cancel, "Cancel", 0, &Left, BUTTONFLAG_MIDDLE, nullptr)) 14:19 < bridge_> { 14:19 < bridge_> dbg_msg("debug", "popup cancelled"); 14:19 < bridge_> return CUi::POPUP_CLOSE_CURRENT; 14:19 < bridge_> } 14:19 < bridge_> ``` 14:19 < bridge_> I see the exact same code at another place where it works, but for some reason I don't get this dbg message and the popup is not closing. 14:19 < bridge_> If I put the dbg_msg outside, I get it 14:24 < bridge_> BUTTONFLAG_MIDDLE? why only middle button 14:25 < bridge_> and maybe it s_Cancel has to be = 0 ? 14:25 < bridge_> and maybe it s_Cancel has to be = 0? 14:25 < bridge_> that was it :pepeW: I wanted to align the button text in the middle ... 14:26 < bridge_> it doesn't, I guess it does some magic with the memory reference in order to create an idea 14:26 < bridge_> it doesn't, I guess it does some magic with the memory reference in order to create an ID 14:28 < bridge_> yea it uses address of the variable as button id 14:28 < bridge_> but thought it has to be initalized bcs of compiler idk 14:49 < bridge_> ``` 14:49 < bridge_> There are also more failed checks in the clang-tidy CI. If possible, please put the changes that fix specific clang-tidy checks in individual commits for easier review. 14:49 < bridge_> ``` 14:49 < bridge_> well shit 15:07 < bridge_> lol 15:07 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365313208465883166/screenshot_2025-04-25_15-06-56.png?ex=680cda83&is=680b8903&hm=cdd34ca56c7d4cbb7a1f1e9dedfbf7d3fb7bd7bed1265b188989590581b3c761& 15:44 < bridge_> I am amazed how robust this is ... for the way it's programmed 15:44 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365322507762139146/screenshot_2025-04-25_15-43-33.png?ex=680ce32c&is=680b91ac&hm=967f3041d16e582d4f0af18aeba21b406a08b95c41dda81bad08f552e80cb200& 15:57 < bridge_> i cant tell whats going on 16:01 < ChillerDragon> !ping 16:01 < chillerbot18> pong 16:01 < chillerbot18> ! is deprecated moved to $ 16:02 < ChillerDragon> ok my raspi works again but now my webchat is dead rip 16:02 < ChillerDragon> jupstar do you know quirks.md? https://github.com/heinrich5991/libtw2/blob/master/doc/quirks.md 16:03 < ChillerDragon> i cant think of anything else other than network.py not telling the full truth at least in 0.7 16:03 < ChillerDragon> what are you working on jupstar? i have the feeling you are building a ddnet-rs to 0.6 bridge 16:06 < bridge_> can i join your union maximalist club if i do? 16:07 < bridge_> I am just integrating the map_create_pixelart tool into editor tools 16:07 < bridge_> dificult part about this is actually the history and image loading 16:07 < bridge_> dificult part about this is actually the history and image loading/unloading 16:34 < ChillerDragon> ofc jupstar 16:34 < ChillerDragon> but fr what are you doing? 16:45 < bridge_> chillerdragon: i enhance the editor experience for melon who gets crashes while having ddnet open simulaniously which are most likely caused by recent amd drivers 16:48 < bridge_> okay listen 16:48 < bridge_> i'm your nr. 1 tester 17:00 < bridge_> Ok, I'll try to finish it today. 17:01 < bridge_> Speedrun 17:27 < bridge_> ```C++ 17:27 < bridge_> do 17:27 < bridge_> { 17:27 < bridge_> RunGithubPipeline(); 17:27 < bridge_> } while(NoErrorsLocally && PipelineFailed()); 17:27 < bridge_> ``` 17:28 < bridge_> ```C++ 17:28 < bridge_> do 17:28 < bridge_> { 17:28 < bridge_> RunGithubPipeline(); 17:28 < bridge_> } while(NoErrorsLocally && PipelineFailed() && CodeChanged()); 17:28 < bridge_> ``` 17:28 < bridge_> ```C++ 17:28 < bridge_> do 17:28 < bridge_> { 17:28 < bridge_> ChangeCode(); 17:29 < bridge_> RunGithubPipeline(); 17:29 < bridge_> } while(NoErrorsLocally && PipelineFailed()); 17:29 < bridge_> ``` 17:29 < bridge_> :owo: 17:38 < bridge_> ❤️ 17:42 < bridge_> @sollybunny thx for the nameplates fix :deen_star: 17:57 < bridge_> ah yay web map rls page got merged :3 17:57 < bridge_> does this mean i can be purple 🥺 17:58 < ChillerDragon> how to open local console while being in game on android? 18:03 < bridge_> With touch controls enabled you should have a button on the main page of the ingame menu 18:04 < bridge_> Without touch controls it's expected you have a keyboard, or disconnect and use the button in the main menu to enable touch controls 18:04 < bridge_> is there not a "console" button on main menu 18:04 < bridge_> Yeah, but "while being in game" 18:04 < ChillerDragon> can android copy from chat? 18:05 < bridge_> You can copy from console, but only if you have a keyboard to press Ctrl+C 18:05 < ChillerDragon> im struggeling to get a russian into rcon who does not speak a single word of english and is on android xd 18:05 < bridge_> the ultimate struggle wtf 18:06 < ChillerDragon> sounds complicated thanks rossbit i think i just give up on it 18:06 < bridge_> rossbit is crazy man where does the S even come from 18:06 < ChillerDragon> xd 18:06 < bridge_> robyrt 18:07 < bridge_> fossbyte 18:07 < bridge_> chiller why u helping a russian on android 18:07 < bridge_> :justatest: 18:12 < bridge_> trying to enter his name to ban 18:13 < bridge_> :kek: 18:16 < ChillerDragon> @ryozuki he keeps getting kick voted because of the touch control flicks 18:16 < ChillerDragon> so i am trying to protect him 19:15 < bridge_> whats that 19:18 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365376394246230106/GpX6J2IbYAUmABI.jpg?ex=680d155b&is=680bc3db&hm=3f2d7ffe55b7d10f9bd9d3ffbada77d01056f7d69d7372bfc905d3279c6b9597& 19:26 < bridge_> Loading pixel art into maps, but as quads™ 19:27 < bridge_> We already had that as stand alone, I added it to toolbar 19:37 < bridge_> pong! 19:47 < bridge_> would be cool 19:51 < bridge_> would love to replace all hearts in maps with freeze 19:51 < bridge_> to free up the harts 20:04 < bridge_> :justatest: 20:13 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365390176041566208/-6080404996907714040_121.jpg?ex=680d2231&is=680bd0b1&hm=0b65c7a3da64404603876985571bee55fd649a3446cfde3ebaa7e9c616167241& 20:13 < bridge_> Funny seeing this random meme with almost everything included in DDNet 20:35 < bridge_> no wae 20:35 < bridge_> jokes on you its written by ai and gives shit advice 20:36 < bridge_> no author 20:36 < bridge_> after actually trying to get chatgpt to explain things for the purpose of others, it is extremley wordy and inaccuarete and just... wrong 20:37 < bridge_> @essigautomat dunno but the red is bit too red IMO. 20:37 < bridge_> 20:37 < bridge_> maybe a bit lighter red could look better? 20:37 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365396389479059496/image.png?ex=680d27fb&is=680bd67b&hm=37abe2357a7012f9ec8eb04f71f026f6db5c3a41874134a2f0e788faba2e668e& 20:38 < bridge_> e.g. the default blue laser is pretty light blue 20:39 < bridge_> shotgun color is also rather light 20:58 < bridge_> Oooh royuzikii thats so nice :happy: 20:59 < bridge_> its fake lol 21:06 < bridge_> no way are we reimplementing teeworlds now :owo: 21:14 < bridge_> Yeah we can change it, but I like the bloody 21:14 < bridge_> Yeah we can change it, but I like the bloody red 21:18 < bridge_> Alien blood 21:23 < bridge_> After the quad-tool I have the water PR on my list :justatest: :pepeW: 21:24 < bridge_> Anyone against just putting it in tune layer? 21:46 < bridge_> do the visual stuff first :D 21:46 < bridge_> theyre mainly big cus they include the maps, no? 21:46 < bridge_> i dont think they do 21:46 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365413763087601815/image.png?ex=680d3829&is=680be6a9&hm=330ccc71eafdbbd8c564e6910d2ec11da527c0cafc5c77a1ee9919623f3c3379& 21:46 < bridge_> they do 21:47 < bridge_> compression would be nice still 21:47 < bridge_> yeah 21:47 < bridge_> have you tested it? 21:47 < bridge_> how ratio do you get 21:47 < bridge_> ill do that now 21:47 < bridge_> what ratio do you get 21:49 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365414363430912100/image.png?ex=680d38b8&is=680be738&hm=1df4638550e15337b8fd127f0a07837c34858938cc94eb97d89b60c13b21cb6e& 21:49 < bridge_> id say pretty good 21:49 < bridge_> (level 5, it was almost instant except for that 100m one) 21:49 < bridge_> how did u compress them? 21:49 < bridge_> `mkdir -p compressed && for file in *.demo; do zstd -5 "$file" -o "compressed/${file}.zst"; done` 21:49 < bridge_> ingame or external? 21:50 < bridge_> ok 21:50 < bridge_> i want it to be done ingame 21:50 < bridge_> i think the first step is just reading .zst files 21:50 < bridge_> the demo header should not be compressed, or independent 21:50 < bridge_> otherwise it probs doesnt really matter 21:50 < bridge_> its not that stateful 21:51 < bridge_> compression that is 21:51 < bridge_> you can read the first bit quite easily 21:51 < bridge_> also makes it easier for outside programs to interact with the files 21:52 < bridge_> not that a .demo file is any more useful than a .demo.zst 21:53 < bridge_> to human eyes 21:53 < bridge_> i think heinrich always envisioned using a container (e.g. tar) to put multiple stuff in it. 21:53 < bridge_> 21:53 < bridge_> I actually like it, then you have the map, the demo stuff, the header etc. and can compress each as you want or unpack or remove e.g. the map from the container. 21:53 < bridge_> 21:53 < bridge_> i think i'll switch to that in ddnet-rs too some time. 21:53 < bridge_> only bit annoying thing is that these containers can easily contain stuff that is not meant to be in there, and checking for what _can_ be inside the container kinda breaks the idea again xD 21:54 < bridge_> e.g. you probs don't want someone to add an exe into it. 21:54 < bridge_> well its harmless to put an exe in it 21:54 < bridge_> unless someone decompresses it and runs it 21:54 < bridge_> it's not compresed, but yes that is the fear 21:54 < bridge_> decontainerizes it* 21:54 < bridge_> if you use a .tar it makes it more attractive to unpack them 21:54 < bridge_> Problem with fancy formats is that it's a lot more work for people who want to watch these demos on older clients 21:55 < bridge_> the one step unzstd myfile is pretty simple 21:55 < bridge_> yeah 21:55 < bridge_> and also external tools which consume and spit demos 21:55 < bridge_> i dont like having the seperate parts of a demo compressed differentley 21:55 < bridge_> (look at me, being the voice of backward compatibility for once) 21:55 < bridge_> its too much complexity for something no one will use 21:57 < bridge_> @chillerdragon 21:57 < bridge_> [`feat: let the server know if it is a android client or not`]() 21:57 < bridge_> why is this tclient specific? 22:00 < bridge_> "add health" is insane 22:00 < bridge_> truly we have a new gen on our hands 22:14 < bridge_> new gen calling others new gen is insane 22:55 < bridge_> where 22:56 < bridge_> oh 22:56 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365431412693405807/image.png?ex=680d4899&is=680bf719&hm=9d52b6fb7a60ed7c2d28ad9cbfba4db349bd10d6f66c485b467d75ea27a2c162& 22:56 < bridge_> why cant i compare these 2 22:57 < bridge_> technically he is lynn and was here some time ago 22:57 < bridge_> he she it they 22:57 < bridge_> pretty sure KZ is much older tho 22:57 < bridge_> why cant i compare these 2 22:58 < bridge_> (cuz theyre different) 22:58 < bridge_> why cant i compare these 2 22:58 < bridge_> (cuz PulseClient-ddnet/DDNetPulse) 23:00 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365432280583114762/image.png?ex=680d4968&is=680bf7e8&hm=cb3c9165277e891441b14db7c671f8ac774451c9cfcee9d648c65356112060b7& 23:00 < bridge_> ):< 23:07 < bridge_> idc anymore to be perfectly honest 23:07 < bridge_> im a dog 23:07 < bridge_> im not THAT new but yeah ofc i am newer than most 23:27 < bridge_> i was like "noi fucking way" 23:27 < bridge_> then it was duplicate 23:27 < bridge_> and i was like "oh okay makes cents" 23:30 < bridge_> chillerdragon you guessed right btw xd