00:45 < bridge_> YEAS 01:09 < bridge_> @patiga I tried to use shader storage buffers now for tile rendering (https://github.com/ddnet/ddnet-rs/pull/113). 01:09 < bridge_> Now ddnet-rs is actually competitive against twgpu with VRAM usage, and it doesn't seem to suffer performance wise. 01:09 < bridge_> 01:09 < bridge_> E.g. on arctic festival it beats twgpu now. 01:09 < bridge_> 01:09 < bridge_> Considering it also allocates more textures (for tees etc.) it probably beats it by an even bigger margin. 01:09 < bridge_> (Also added ddnet as comparision) 01:09 < bridge_> 01:10 < bridge_> I don't want to lie, I am bit surprised normal ddnet is so low, I'd have thought the difference is more around 4x, since I now only save the data of one vertex instead of 4x, but don't want to investigate rn, maybe tomorrow 😄 01:10 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365827247419686982/image.png?ex=680eb93f&is=680d67bf&hm=619a1f35ecb7fb5124d3777ae26a4d819d5afa473b4ae8883ff5a003a08473e3& 01:10 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365827247663222835/image.png?ex=680eb93f&is=680d67bf&hm=e9cc96aa258f88e55c666d8a418fa392341df60b3f1c8a27d38699e18fb25af9& 01:10 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1365827247864418324/image.png?ex=680eb93f&is=680d67bf&hm=e70ac05138500af9a56d60f20538c1bf228f85466d4612971a36c664eb36bd8d& 02:28 < bridge_> great job! I thought I was using textures and not storage buffers (also for envelope values) for some wgpu platform compatibility. however I can't find where they wouldn't be supported (on phone rn tho), maybe webgl? 07:43 < bridge_> morning 07:49 < bridge_> good morning 😄 08:02 < bridge_> Yes you do, i recommended storage buffers to you once because of the texture size limits. Sadly they are opengl 4.3, so maybe unsupported by webgl indeed 08:12 < bridge_> But one disadvantage is that there is no u8 and u16. So you would need to manually unpack the data if you don't want to waste space 12:28 < bridge_> good morning 🥴 🍻 12:33 < bridge_> is there a way to add friendly_clan? to highlight it with different color in tab 12:33 < bridge_> I think tater client can do it 12:34 < bridge_> why ddnet isnt adding cool features but other clients do? 12:34 < bridge_> like, show only empty servers is very easy to make, we need it 12:35 < bridge_> friendly clans? wars/dodge lists as a friend list? 12:35 < bridge_> Have you ever opened a game and have 3000 filters on the filter page? 12:35 < bridge_> No? Because it was not ddnet 12:35 < bridge_> mad 12:35 < bridge_> just add 1 box of "only empty servers" bro 12:36 < bridge_> sort by plaeyrs 12:36 < bridge_> meh need to scroll 12:36 < bridge_> You can change the sort in both directions 12:36 < bridge_> how? 12:37 < bridge_> Just click the column header again 12:37 < bridge_> i can only make it show with players sorted by ping 12:37 < bridge_> Just click players so often until 0/63 is on top xD 12:37 < bridge_> they are not sorted by ping 12:38 < bridge_> You can filter regions 12:38 < bridge_> XD 12:38 < bridge_> why need that everytime i search empty ones 12:38 < bridge_> clan wars when 12:38 < bridge_> i play all servers with any ping 12:38 < bridge_> matchmaking in ddnet when 12:48 < bridge_> when we get 300 active devs and 5+ million concurrent players 12:52 < bridge_> Does an UI like this look okay? Or would you make it smaller? 12:52 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366003998859202600/screenshot_2025-04-27_12-51-46.png?ex=680f5ddc&is=680e0c5c&hm=2ccea1a55580e4e7c99b342de9bfd06274d08541a402584a542c266bce58a000& 12:52 < bridge_> Backend: :happy: UI: :tear: 12:53 < bridge_> idk I'd move it together, at least vertically 13:00 < bridge_> I think like this it looks fine :owo: UI with UI taste 13:00 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366006025668526163/screenshot_2025-04-27_12-59-52.png?ex=680f5fbf&is=680e0e3f&hm=97ee8c5445fcffcc3c5f958fce76ba391e22521bffaf22ccc1631351abb9e0f2& 13:03 < bridge_> I meant a similar size as this popup 13:03 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366006814893932585/image.png?ex=680f607b&is=680e0efb&hm=96a1e906b048bfe4183ffb517b4a3bb6b1dc13d1346bf291ee4c0843f58d1f9a& 13:03 < bridge_> Also buttons should be positioned consistently like this 13:43 < bridge_> I mean I have it consistently placed left and right with Go and Cancel 13:43 < bridge_> I think this looks good now :3 13:43 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366016945576742983/screenshot_2025-04-27_13-42-56.png?ex=680f69eb&is=680e186b&hm=bb79e0c84b7375b90927dfcb15b5330df3f929b29b2fe63c15f7815b32803e0a& 13:43 < bridge_> when buttons same as the one roby sent 13:44 < bridge_> consistency is key in a good UI 13:44 < bridge_> when guide to UI? 13:44 < bridge_> like I am fighting against it 13:44 < bridge_> just check how the other popup places the buttonis 13:45 < bridge_> I did, but I don't get it, because the default View object it gets doesn't have screen size already 🫠 13:45 < bridge_> xD - let me see if i can explain it in like ~20 mins 13:45 < bridge_> warframing rn 13:45 < bridge_> <-StormAx> :Farmm: 13:46 < bridge_> additionally, popups are not always centered 13:53 < bridge_> they aren't ? 13:53 < bridge_> for example error popups are at the mouse position 13:57 < bridge_> ah you mean the DialogError thingies - true. 13:58 < bridge_> 13:58 < bridge_> 13:58 < bridge_> If you want to help me 😦 13:58 < bridge_> maybe the way I already create this popup is ... scuffed xD 13:58 < bridge_> maybe the way I create this popup is already ... scuffed xD 14:14 < bridge_> hackiest solution i could do in like 5 minutes 14:14 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366024746466148352/image.png?ex=680f712f&is=680e1faf&hm=01d8072b81f73222dc305ee0cbcf04c6eac3fd4887e2b15b974f51c66262b901& 14:15 < bridge_> looks almost the same xD 14:15 < bridge_> but yeah i dont really know why you didnt just use PopUp and increase its .h and .w to fit 14:18 < bridge_> That's not necessarily good UX though, as least for large popups like this. Probably also done for convenience in some places 14:18 < bridge_> That's not necessarily good UX though, at least for large popups like this. Probably also done for convenience in some places 14:19 < bridge_> this one is centered, don't worry 14:20 < bridge_> ```diff 14:20 < bridge_> diff --git a/src/game/client/components/mapimages.cpp b/src/game/client/components/mapimages.cpp 14:20 < bridge_> index 824747fb1..a68ccadf1 100644 14:20 < bridge_> --- a/src/game/client/components/mapimages.cpp 14:20 < bridge_> +++ b/src/game/client/components/mapimages.cpp 14:20 < bridge_> @@ -210,7 +210,7 @@ static bool IsValidTile(int LayerType, bool EntitiesAreMasked, EMapImageModType 14:20 < bridge_> 14:20 < bridge_> if(EntitiesModType == MAP_IMAGE_MOD_TYPE_DDNET || EntitiesModType == MAP_IMAGE_MOD_TYPE_DDRACE) 14:20 < bridge_> { 14:20 < bridge_> - if(EntitiesModType == MAP_IMAGE_MOD_TYPE_DDNET || TileIndex != TILE_SPEED_BOOST_OLD) 14:20 < bridge_> + if(EntitiesModType == MAP_IMAGE_MOD_TYPE_DDNET) 14:20 < bridge_> { 14:20 < bridge_> if(LayerType == MAP_IMAGE_ENTITY_LAYER_TYPE_ALL_EXCEPT_SWITCH && 14:20 < bridge_> !IsValidGameTile(TileIndex) && 14:20 < bridge_> diff --git a/src/game/editor/popups.cpp b/src/game/editor/popups.cpp 14:20 < bridge_> index 2e1b4f8da..e3c092746 100644 14:20 < bridge_> --- a/src/game/editor/popups.cpp 14:20 < bridge_> +++ b/src/game/editor/popups.cpp 14:20 < bridge_> @@ -3196,10 +3196,12 @@ CUi::EPopupMenuFunctionResult CEditor::PopupQuadart(void *pContext, CUIRect View 14:21 < bridge_> static int s_aIds[NUM_PROPS] = {0}; 14:21 < bridge_> int NewVal = 0; 14:21 < bridge_> 14:21 < bridge_> + View.Margin(10.0f, &View); 14:21 < bridge_> // Title 14:21 < bridge_> CUIRect Label; 14:21 < bridge_> - View.HSplitTop(30.0f, &Label, &View); 14:21 < bridge_> + View.HSplitTop(20.0f, &Label, &View); 14:21 < bridge_> pEditor->Ui()->DoLabel(&Label, "Configure Quadart", 20.0f, TEXTALIGN_MC); 14:21 < bridge_> + View.HSplitTop(10.0f, &Label, &View); 14:21 < bridge_> 14:21 < bridge_> // Properties 14:21 < bridge_> oh oops how did the entitiesmodtype thingie land in there 14:21 < bridge_> 14:22 < bridge_> (all i really did was increase width and height, split the rect for the buttons individually and add space for the titlebar 14:22 < bridge_> (all i really did was increase width and height, split the rect for the buttons individually and add space for the titlebar) 14:22 < bridge_> great, I learned nothing, just different alignment 🙈 14:24 < bridge_> you added a margin on top, for the title, of 10 px, then split top on 10 px, then did a 20 px title? 14:29 < bridge_> 10.f margin 14:29 < bridge_> 20.f for the title 14:29 < bridge_> did another split of 10.f (spacing) ((should've used margin for that)) 14:33 < bridge_> oh I got it wrong, yeah you're right 14:33 < bridge_> The `MapScreen` and `Draw`s don't make sense: https://github.com/ddnet/ddnet/pull/10112/files#diff-f40cb026bdafe21894eff5bdd10246cfbccc53528d3899eef15f768d955e4012R265 14:33 < bridge_> The popup menu functions will create and draw the popup menu background for you, you don't do UI from a callback function. You should only have to specify the position and size of the popup when opening it. 14:33 < bridge_> The `MapScreen` and `Draw`s don't make sense: https://github.com/ddnet/ddnet/pull/10112/files#diff-f40cb026bdafe21894eff5bdd10246cfbccc53528d3899eef15f768d955e4012R265 14:33 < bridge_> The popup menu functions will create and draw the popup menu background for you, you can't do UI from a callback function. You should only have to specify the position and size of the popup when opening it. 15:10 < bridge_> How should I do that properly? 15:12 < bridge_> oh you just mean to remove the Mapscreen and draws 15:13 < bridge_> `Ui()->DoPopupMenu(..., Ui()->Screen()->w / 2.0f - PopupWidth / 2.0f, Ui()->Screen()->h / 2.0f - PopupHeight / 2.0f, PopupWidth, PopupHeight, this, ...);` 15:14 < bridge_> Thanks, I found it 15:14 < bridge_> ``` 15:14 < bridge_> constexpr float PopupWidth = 400.0f; 15:14 < bridge_> constexpr float PopupHeight = 110.0f; 15:14 < bridge_> Ui()->DoPopupMenu(&s_PopupNewFolderId, Width / 2.0f - PopupWidth / 2.0f, Height / 2.0f - PopupHeight / 2.0f, PopupWidth, PopupHeight, this, PopupNewFolder); 15:14 < bridge_> ``` 15:22 < bridge_> The Popup height itself is too small, but I'll adjust 15:23 < bridge_> scoreboard is already cuirect @robyt3 15:24 < bridge_> Thank you @blaiszephyr and @robyt3 , now looks very clean from the code side and ingame 15:24 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366042358231203992/screenshot_2025-04-27_15-24-00.png?ex=680f8196&is=680e3016&hm=27f1dae8f70cb1429f589f06eda384a76d9de9e3f3c1f9b52769b2a9bf9557f7& 15:26 < bridge_> i just increased View.w and View.h for that xD 15:53 < ChillerDragon> does someone want to give a tutorial on how to iterate utf8 strings? 15:54 < ChillerDragon> lets say i want to count the amount of poop emojis in a chat message 15:55 < bridge_> (you dont need to be utf8 savy for that) 15:55 < bridge_> (you can just look for 💩 ) 15:55 < bridge_> (you can just look for the bytes 💩 ) 15:55 < ChillerDragon> right 15:56 < ChillerDragon> the utf8 iteration seems to be happening in str_utf8_tolower but i struggle to wrap my head around https://github.com/ddnet/ddnet/blob/d3ec3e0ac0adc9dafbd0da07737664d1e28e0c00/src/base/system.cpp#L3789-L3805 15:57 < bridge_> `str_utf8_decode(&input)` iterates the input by the number of bytes and returns an int (4 bytes, max utf-8 length) 15:57 < bridge_> then `while(*input)` checks for null 15:58 < ChillerDragon> thanks sollygpt 15:59 < bridge_> ur welcome coldgpt 15:59 < ChillerDragon> how can i print every code point then 15:59 < bridge_> i was just writing that 15:59 < bridge_> but i assumed u would.. 15:59 < bridge_> ```cpp 15:59 < bridge_> while(*input) 15:59 < bridge_> { 15:59 < bridge_> const int code = str_utf8_decode(&input); 15:59 < bridge_> printf("%d\n", code); 15:59 < bridge_> } 15:59 < bridge_> ``` 15:59 < ChillerDragon> ye but thats a number 16:00 < ChillerDragon> can i print it as const char* str? 16:00 < bridge_> i guess u can do jank unsafe stuff 16:00 < bridge_> wait no chars[] arent padded ever its safe 16:00 < bridge_> or well defined behaviour 16:00 < ChillerDragon> encode maybe 16:01 < bridge_> ```cpp 16:01 < bridge_> int code; 16:01 < bridge_> char str[5] = {}; 16:01 < bridge_> mem_cpy(str, &code, 4) 16:01 < bridge_> printf("%s\n", str); 16:01 < bridge_> ``` 16:01 < bridge_> or str_cpy will null terminate it for you 16:01 < bridge_> i was thinking casting to char[4] 16:02 < bridge_> but that is unneeded 16:03 < bridge_> \`\`test\`\` 16:03 < bridge_> or str_cpy will null terminate it for you 16:03 < bridge_> ```cpp 16:03 < bridge_> int code; 16:03 < bridge_> char str[5]; 16:03 < bridge_> str_copy(str, static_cast(&code), 4); 16:03 < bridge_> printf("%s\n", str); 16:03 < bridge_> ``` 16:04 < bridge_> ```C 16:04 < bridge_> int Code = str_utf8_decode(&pUtf8Input); 16:04 < bridge_> printf("Code=%d\n", Code); 16:04 < bridge_> char aChar[8]; 16:04 < bridge_> const int CharSize = str_utf8_encode(aChar, Code); 16:04 < bridge_> aChar[CharSize] = '\0'; 16:04 < bridge_> printf("char='%s'\n", aChar); 16:04 < bridge_> ``` 16:04 < bridge_> ?? this loop looks very wrong to me 16:04 < bridge_> its the same as the one in tolower 16:04 < bridge_> this is what i needed and it works wonderfully, thanks solly 16:04 < bridge_> minus the `str_utf8_tolower_codepoint` 16:04 < bridge_> wrapped in a `while(*pUtf8Input) {}` 16:05 < bridge_> str_utf8_encode does some black magic 16:05 < bridge_> i thought codepoints were the same as the bytes 16:09 < bridge_> Well, it's UTF-8 encoded 16:09 < bridge_> Codepoint (int) --> 1-4 bytes of UTF-8 16:42 < bridge_> @sollybunny https://github.com/ddnet/ddnet/compare/ba7ec9020d334d6e00cb7871fd869c4dcc87834c..d09d5621be91c8225c8aa44a69d57c7a84b75205 replaced some "String" with "`Str`ing" 16:42 < bridge_> fuck 16:42 < bridge_> UNLIMITED PIXELARTS - anyone want a pixelart as quad? :3 16:42 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366062068658077807/screenshot_2025-04-27_16-42-17.png?ex=680f93f1&is=680e4271&hm=56cdfbb343b659d7ed55fad72b01e597634c2502985177e2ee5fb205962f8ed0& 16:43 < bridge_> can you make my skin a pixelart? @.freezy_ knows what to do with it 16:43 < bridge_> can you make my skin a pixelart? @.freezy_ knows what to do with it :mlem: 16:43 < bridge_> if you send me a rendered version as png, yes 16:44 < bridge_> ``` 16:44 < bridge_> string `Str`ing 16:44 < bridge_> ``` 16:44 < bridge_> ):< 16:44 < bridge_> we don't yet have the `Add rendered Tee` tool, I could write it :justatest: 16:44 < bridge_> https://github.com/edg-l/teerender :cat_cracked_hehe: 16:44 < bridge_> What I mean is creating the Tee-PNG and then loading it into the editor as pixelart as tool 16:45 < bridge_> :justatest: 16:45 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366062664702230660/image.png?ex=680f947f&is=680e42ff&hm=5b0a17f7796c84fc3de4c6966b07b1843f714d2df70864d9085a35caf99c701f& 16:45 < bridge_> when view demos whilst in game 16:45 < bridge_> >< 16:45 < bridge_> is that what you've been looking at for 2 hours XD 16:45 < bridge_> ye 16:46 < bridge_> watafak, ddnet will get livestreaming support? xd 16:46 < bridge_> With larger delay it could probably work with a HTTP stream 😄 16:47 < bridge_> Demo SyncPlay 16:47 < bridge_> add prediction to demos B) 16:47 < bridge_> But you need to get the entire demo from the beginning initially 16:48 < bridge_> After that incrementally scanning for new keyframes seems cheap, at least on SSD 16:48 < bridge_> @essigautomat xD 16:48 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366063372184846406/result.png?ex=680f9528&is=680e43a8&hm=2730c2e142caaf8ee095994364270c30e9e865fb5c0d5e57fde232604ef86d21& 16:48 < bridge_> cant the server create new "demo start points" every so often 16:49 < bridge_> it's a bit lowres (I can select the pixelsize, so you don't need to scale down) 16:49 < bridge_> thats just what Ryo's skinrenderer gave me :c 16:50 < bridge_> I guess it would somehow work without, but then the file operations get tricky. The demo player currently needs to scan the entire demo for keyframes first so it knows where it can seek in the demo. 16:51 < bridge_> damn what the hell is this game coming to 16:51 < bridge_> - reverse push 16:51 < bridge_> - quad pixels 16:51 < bridge_> - add health 16:51 < bridge_> are keyframes points where all the setup data is there 16:52 < bridge_> we should add a tile that kills you 16:52 < bridge_> Every keyframe contains a full snapshot, other demo chunks only contain deltas 16:52 < bridge_> now make something that converts svgs to quads 16:52 < bridge_> kk 16:53 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366064736936001656/screenshot_2025-04-27_16-53-04.png?ex=680f966d&is=680e44ed&hm=bfce73bccc7f5b393914dc6127d5dca50b9c97959621bbfc929a97e705265bbd& 16:53 < bridge_> Easy, simply add SVG support to the game, I'll do the rest 16:54 < bridge_> i meant that the server stores the file in memory instead of... in file 16:54 < bridge_> such that it can store the header, map and all keyframes (as just rawe data) in a (linked) list 16:54 < bridge_> you can set an amount of time that people can seek back (when starting to stream), and keep as many keyframes as needed for that 16:54 < bridge_> i meant that the server stores the file in memory instead of... in file 16:54 < bridge_> such that it can store the header, map and all keyframes (as just rawe data as if written to filke) in a (linked) list 16:54 < bridge_> you can set an amount of time that people can seek back (when starting to stream), and keep as many keyframes as needed for that 16:54 < bridge_> how would svgs show up on older clients tho 16:55 < bridge_> thats the fun thing 16:55 < bridge_> they dont 16:55 < bridge_> ... yeah xD 16:55 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366065159747141753/screenshot_2025-04-27_16-55-02.png?ex=680f96d2&is=680e4552&hm=c18cc5ff3bbe22959b733b4d07092d1000bc30e9653d17765a137826bcc1dd09& 16:55 < bridge_> no way svg uspport is being added 16:55 < bridge_> unless it severly cucked actually to standard svg 16:57 < bridge_> yeah, as long as you start slice the last 10 seconds or so correctly starting at a keyframe then it should be easy to stream demo file. header and map can be concatenated directly from the file, you don't even need anything in memory I guess 16:57 < bridge_> yeah, as long as you slice the last 10 seconds or so correctly starting at a keyframe then it should be easy to stream demo file. header and map can be concatenated directly from the file, you don't even need anything in memory I guess 16:57 < bridge_> _standard_ :lol: 16:57 < bridge_> 16:57 < bridge_> I feel like every SVG implementation does it's own thing xD 16:57 < bridge_> i gues having it file backed makes no difference 16:58 < bridge_> true tbh xd 16:58 < bridge_> That something that external tools can do (convert SVG to quads), the client won't get SVG rendering 16:59 < bridge_> wee wo wee eoo 17:00 < bridge_> @essigautomat if you need a new project, i'd recommend you split border tiles from normal tiles during buffer creation. 17:00 < bridge_> 17:00 < bridge_> then i'll add a new packed format for tiles (which will not work for borders) to save VRAM 17:00 < bridge_> I am aware, this was a joke ^^ Technically we support every graphics tools imaginable, if it supports PNG exports 17:00 < bridge_> But I am kinda too lazy to split the stuff xd 17:00 < bridge_> :justatest: yeah, that sounds easy to do 17:01 < bridge_> :justatest: yeah, that sounds easy to do /s 17:01 < bridge_> Nice 😉 17:01 < bridge_> I mean it's not like super hard 17:01 < bridge_> Just bit annoying xd 17:01 < bridge_> I put it directly under "implement water" in my todo list 17:01 < bridge_> it's still above the material layer :justatest: 17:02 < bridge_> it's still above the material layer :justatest: which I should honestly just give up 17:02 < bridge_> Create a new game wiht all these features 17:02 < bridge_> I wanna play and see if it's fun 17:02 < bridge_> uhm ... no comment 😉 17:02 < bridge_> uhm ... no comment 😉 (Warning, may contain snails) 17:03 < bridge_> add snail putting like fancy pants gmae 17:03 < bridge_> yooo that would be so cool 17:04 < bridge_> we need that pencil weapon too 17:04 < bridge_> We like snails, but those pesky slugs ... 😠 17:05 < bridge_> new weapon snail cannon, 1 ammo by default by goes up to 10 17:05 < bridge_> 0.75x the size and weight of a tee, interact with it the same, except that you get knocked back (/damaged) depending on speed 17:05 < bridge_> can activate switches :D 17:05 < bridge_> and rolls 17:05 < bridge_> makes you slower 17:06 < bridge_> there should be a way to make tees roll 17:06 < bridge_> new pickup: skateboard 17:06 < bridge_> new pickup: skateboard, allows you to go fast and do cool stunts 17:07 < bridge_> i always wanted tees to be able to roll down the slopes or something like that 17:09 < bridge_> fun fact: in Finnish the word for snail is derived from the word for home, because they carry their homes on their backs 17:09 < bridge_> it's so cartoony and cute 17:09 < bridge_> peak etymology 17:42 < bridge_> i was gonna say the slugs are probably only so mischievous because they’re homeless 17:54 < bridge_> Gm 17:57 < bridge_> das is 0.8 stuff tho D: 17:58 < bridge_> tees on slopes would make me very happy 17:58 < bridge_> @soulyvevo do you know why these little lines appear? 17:58 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366081199738716160/image.png?ex=680fa5c2&is=680e5442&hm=e5fad75389ceb27b6cda0370a42ecabe7bf5a0a3edb1864766886989338eeec4& 17:59 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366081200040575029/default_inverted.png?ex=680fa5c2&is=680e5442&hm=e8e56a9e9e63a98c26b6b82cefa34ed09ff80ebbb18f09dd9124ad8c38088266& 17:59 < bridge_> Deflate that shit 17:59 < bridge_> Go to ddnet exe directory 17:59 < bridge_> Drag and drop the skin onto deflate.exe 17:59 < bridge_> Sorry uh 17:59 < bridge_> Dilate 17:59 < bridge_> Lol 17:59 < bridge_> This is not zip land 17:59 < bridge_> ok I will dilate the shit 18:00 < bridge_> on the folder ddnet or DDNet 18:00 < bridge_> wherever dilate is 18:00 < bridge_> should be right next to it 18:00 < bridge_> im on phone drinking morning brown 18:00 < bridge_> xd 18:01 < bridge_> found it 18:01 < bridge_> Wow the client really checks for the string `password` to know if a server is password protected xD 18:01 < bridge_> 18:01 < bridge_> I did some fancy stuff by first getting server info and looking in the field there. 18:01 < bridge_> 18:01 < bridge_> But GER3 often refuses to answer my requests. 18:01 < bridge_> 18:01 < bridge_> Rip 18:01 < bridge_> Wow the client really checks for the string `password` after the kick to know if a server is password protected xD 18:01 < bridge_> 18:01 < bridge_> I did some fancy stuff by first getting server info and looking in the field there. 18:01 < bridge_> 18:01 < bridge_> But GER3 often refuses to answer my requests. 18:01 < bridge_> 18:01 < bridge_> Rip 18:02 < bridge_> hardest part is opening the exe 18:02 < bridge_> it has no gui 18:02 < bridge_> drag and drop has “magic” 18:02 < bridge_> it calls the executable you drag the image onto with the image path as the first argument 18:03 < bridge_> the tool will run and output silently, either the image will be next to dilate or changed in place in its original directory 18:03 < bridge_> idr 18:05 < bridge_> holy shit 18:05 < bridge_> it works 18:05 < bridge_> @mpft ily 18:05 < bridge_> (friendly way) 18:05 < bridge_> ily too 18:05 < bridge_> I will submit it but it might get declined 18:05 < bridge_> but I think it looks cool with inverted colors 18:34 < bridge_> https://tenor.com/view/ddnet-ddrace-teeworlds-gif-17739715330564018485 18:34 < bridge_> well im happy now that i learned this :D 18:59 < bridge_> deflate:ww: 19:01 < bridge_> ?xd 19:02 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366097158100750476/screenshot_2025-04-27_19-02-09.png?ex=680fb49f&is=680e631f&hm=93952cb80b36a4814181105f7bd857ae4ab2a29dbe5c7b7cc9eaa8d88a3a2e0f& 19:15 < bridge_> <.c.f.m.> so thats why my skins look like absolute ass 19:36 < bridge_> yo dilate that shit! 19:36 < bridge_> me when I'm filling my manure-powered vehicle 19:58 < bridge_> Hello everyone, I'm looking for a German programmer 😄 19:58 < bridge_> goated username osama 20:05 < bridge_> 10€ 20:05 < bridge_> per hour? 20:06 < bridge_> i'd assume it's for the consultation 20:06 < bridge_> if u wanted this guy on an hourly basis 20:06 < bridge_> you would be paying a lot more 20:06 < bridge_> ^ 20:06 < bridge_> 20:06 < bridge_> one does not simply go fishing for programmers. what for even? :p 20:07 < bridge_> Just like, describe the issue maybe? :) 20:07 < bridge_> ^ 20:07 < bridge_> 20:07 < bridge_> one does not simply go fishing for programmers. what for even? :p 20:07 < bridge_> 20:07 < bridge_> for 40€ an hour i'm willing to: 20:07 < bridge_> flex with my neovim setup 20:07 < bridge_> write 200 loc by hand (the other 20K are written by claude) 20:07 < bridge_> write unit tests for every third line of my code 20:08 < bridge_> write handsome commit messages auto generated 20:08 < bridge_> tell all other people i should work with that i use nix btw 20:08 < bridge_> for what? :justatest: 20:08 < bridge_> teeworlds game mode and servers 20:09 < bridge_> melon write me privately again in German or can we write here in German 20:09 < bridge_> no and no 20:09 < bridge_> 20:09 < bridge_> as mentioned, i dont randomly do stuff for free - i do stuff for free if i'm interested in that stuff 20:09 < bridge_> if you want someone to work on a game mode you're really going to have to start paying by the hour 20:10 < bridge_> Sprich 20:10 < bridge_> I'm paying huh xD 20:10 < bridge_> man möge die Futterluke schließen Jupstar, so mag das aussprechen der Germanischen sprache in diesen Räumen untersagt zu bleiben. 20:11 < bridge_> you're like the 20th person who came in here asking for a developer to help create a mod - so my expectations are low ^^ 20:11 < bridge_> 20:12 < bridge_> but no, i have enough to do in 2 communities already 20:12 < bridge_> Dieser Kanal ist jetzt Eigentum der Bundesrepublik Deutschland 20:12 < bridge_> do it now your family will be eaten million times this summer 20:12 < bridge_> xD bro chill out now why are you shitting on me like that 20:12 < bridge_> i am not. 20:14 < bridge_> If you didn't want to, you didn't have to answer. 20:14 < bridge_> considering you probably want a significant amount of work done you should clearly describe the nature of the work, the requirements, and the compensation 20:15 < bridge_> We are actually not, you just don't know what people ask developer what to do, it's like "I have a startup idea" _Comes as the 200th person suggestion something which already exists_ 20:15 < bridge_> We are actually not, you just don't know what people ask developers what to do, it's like "I have a startup idea" _Comes as the 200th person suggestion something which already exists_ 20:15 < bridge_> The way I see it, if your community isn't cool enough to attract contributors naturally, you're shit outta luck when it comes to getting work done for free 20:16 < bridge_> give us some info, and we might be interesting in your mod. Is it teeworlds 5d chess with timetravel? 20:16 < bridge_> no xD 20:16 < bridge_> Ey! 20:16 < bridge_> thats my wording 20:17 < bridge_> just copy f-ddrace 20:17 < bridge_> trust 20:17 < bridge_> Ey! That's my mod WIP 20:17 < bridge_> Lmao 20:17 < bridge_> Ey! That's my mod WIP (okay just joking) 20:17 < bridge_> you are really arrogant people here crazy 20:17 < bridge_> lets do it! 20:17 < bridge_> what? you work on 5d chess? i actually wanted to make that with tee skins 20:18 < bridge_> we're just doing a little trolling. 20:18 < bridge_> 20:18 < bridge_> as mentioned, hit us with more information - asking for a "german developer" is just a bad way to attract interest xD 20:18 < bridge_> Now for a 3rd time: Give some info please, or nobody is willing to help you 20:18 < bridge_> oh god admin is here 20:18 < bridge_> guys hide 20:18 < bridge_> Fr you people are being mad mean 20:18 < bridge_> I specifically asked for a German developer so that I can discuss things with him in German 20:18 < bridge_> If you are not interested, no need to speek 20:19 < bridge_> because I'm writing here with a translator the whole time 20:19 < bridge_> Learn English; it's useful! 20:19 < bridge_> I just forgot to say that I also pay 20:20 < bridge_> "hey guys i'm looking for developers who're interested in helping me create a new modification" 20:20 < bridge_> 20:20 < bridge_> "native german" 20:20 < bridge_> "proficient in DDNet architecture (c++)" 20:20 < bridge_> "my mod consists of 3 twinbops beating each other with tee screams in a satisfying loop with a nouis in the middle you can shoot to gain more twinbops" 20:20 < bridge_> Hellou :3 20:20 < bridge_> god damn it bot 20:20 < bridge_> whore you 20:21 < bridge_> "hey guys i'm looking for developers who're interested in helping me create a new modification" 20:21 < bridge_> 20:21 < bridge_> "native german" 20:21 < bridge_> "proficient in DDNet architecture (c++)" 20:21 < bridge_> "my mod consists of 3 twinbops beating each other with tee screams in a satisfying loop with a nouis in the middle you can shoot to gain more twinbops" 20:21 < bridge_> 20:21 < bridge_> ^ doing this helps you with 3 things: 20:21 < bridge_> 20:21 < bridge_> people will dm you if they're german and interested. 20:21 < bridge_> non-interested people can see what mod you try to create, which may increase visibility and they may come back to you if they find interest some other time 20:21 < bridge_> 3rd party enjoyers can tell you that your mod was already created by someone else and is open source 20:21 < bridge_> @blaiszephyr keks 20:21 < bridge_> 🍪 20:21 < bridge_> @fokkonaut when go climbing 20:21 < bridge_> ask heino 20:21 < bridge_> havent seen him for half a year 20:22 < bridge_> same 20:22 < bridge_> rarely 20:22 < bridge_> only on github 20:22 < bridge_> and in dms 20:24 < bridge_> "hey guys i'm looking for developers who are interested in helping me create a new modification" 20:24 < bridge_> 20:24 < bridge_> "native german" 20:24 < bridge_> "proficient in DDNet architecture (c++)" 20:24 < bridge_> "my mod consists of 3 twinbops beating each other with tee screams in a satisfying loop with a nouis in the middle you can shoot to gain more twinbops" 20:25 < bridge_> 20:25 < bridge_> ^ doing this helps you with 3 things: 20:25 < bridge_> 20:25 < bridge_> people will dm you if they're german and interested. 20:25 < bridge_> non-interested people can see what mod you try to create, which may increase visibility and they may come back to you if they find interest some other time 20:25 < bridge_> 3rd party enjoyers can tell you that your mod was already created by someone else and is open source 20:26 < bridge_> schizo 20:26 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366118231030497422/image.png?ex=680fc83f&is=680e76bf&hm=889e0c6d96b019c3a3406ddfc6d36670c6af1fe307e25f3bcfee0ff7f05df7fe& 20:27 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366118656047710260/image.png?ex=680fc8a4&is=680e7724&hm=b651fbdf5e611a7582810d66e6a709a0f61232279008cb913a4ac650f1232c15& 20:27 < bridge_> as we all know commits is directly coorolated with output 20:28 < bridge_> solly > tater 20:28 < bridge_> ez gg no re stop toxic 10 0 grow up 20:28 < bridge_> ez gg no re stop toxic 10 0 grow up kid 20:28 < bridge_> /lh (dont sue me) 20:28 < bridge_> still 20 below gerdoe 20:28 < bridge_> 20:28 < bridge_> 10 0 DontCry ff 15 20:29 < bridge_> nooooo 20:32 < bridge_> 😭 20:33 < bridge_> What's wrong with correcting yourself? I find it easiest to do it over GH directly 20:34 < bridge_> and it's 400 lines of code, you'll loose the overview (Überblick?) 20:39 < bridge_> I am seriously offended by this 20:39 < bridge_> (╯°□°)╯︵ ┻━┻ 20:40 < bridge_> ask jupstar, he forcepushed ddnet-rs for 2 years and never really kept commit history 20:40 < bridge_> meaning if something didnt work, he had 200K LOC to (maybe) look through 20:40 < bridge_> 2 years, all on "initial commit" 20:41 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366122184669532230/image.png?ex=680fcbee&is=680e7a6e&hm=04e1f1382595cc01a18d1c9f569f70659d01c0ba73760e86a8746bfd9975dc5a& 20:42 < bridge_> :monkaStop: 20:42 < bridge_> :cat_cracked_hehe: 20:42 < bridge_> 195K 20:43 < bridge_> who does git-bisect? me and the boys just printf spam with asan and ubsan 20:43 < bridge_> if your feeling fancy set a conditional breakpoint# 20:43 < bridge_> if your feeling fancy set a conditional breakpoint 20:43 < bridge_> I just start debugging and wait for segfault 20:49 < bridge_> It would be really schizo, if I'd do it with my second official gh account 20:50 < bridge_> I wanted to merge them, but GitHub can't merge different accounts, oh the irony ... 20:55 < bridge_> luckely on rust everything always works 😬 20:55 < bridge_> Everything does exactly what it's programmed to do ... 20:57 < bridge_> my program grew legs and arms, slapped me in the face and ran away. i dont know how hangman ended up this way 20:57 < bridge_> one hell of a bug 20:58 < bridge_> one hell of a ~~bug~~ how i wrote it and totally intended it to be 20:58 < bridge_> does someone know what the criteria is for ddos protected servers to answer to your packets? 20:58 < bridge_> 20:58 < bridge_> I tried reconnect, i tried changing socket, i tried spamming (probs not helpful xdd) 20:58 < bridge_> 20:58 < bridge_> It sometimes magically works, and often not 20:58 < bridge_> I am not saying, that the program does what you **intend** it to do, it just does what it's **written** to do 20:58 < bridge_> i know 20:59 < bridge_> one hell of a ~~bug~~ feature i wrote 21:01 < bridge_> @learath2 behold! criminally bad assembly for a function which takes a struct on the left by value and returns 8th field's value 21:01 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366127063857238097/image.png?ex=680fd079&is=680e7ef9&hm=6cf3e8aef67786e1805b5f1707dc22034e6fdd3d5363faf27277e002de3d4e81& 21:01 < bridge_> I’d guess it expects you to reply with the correct token, then you’ll get a redirect/reconnect packet and that is the indicator that you are whitelisted now 21:02 < bridge_> Watonearth? 21:04 < bridge_> it should do the same as 21:04 < bridge_> ```c 21:04 < bridge_> int func(struct Param param) { 21:04 < bridge_> struct Param p = param; 21:04 < bridge_> return p.eight; 21:04 < bridge_> } 21:04 < bridge_> ``` 21:04 < bridge_> :justatest: 21:04 < bridge_> CHILLER, please impl reconnect token in libtw2 21:05 < bridge_> as far as i can tell it never even reached the point where i got any packet 21:05 < bridge_> dunno if it expects some packet from client 21:06 < bridge_> Is there anything weird with your initial packet? The whitelist is quite aggressive to anything other than legit connect packets. Also if you were spamming stuff you may have triggered a protection 21:07 < bridge_> i dont send the NETMSG_CLIENTVER pkg, that is sent before the INFO pkg. 21:07 < bridge_> 21:07 < bridge_> However, it doesn't even reach the `Connected` state, so dunno if i even have to care. 21:07 < bridge_> 21:07 < bridge_> Anything before connect is inside libtw2 and thus out of my control 21:09 < bridge_> oh and the client does fetch the server list, so i dont think it's that 21:15 < bridge_> It should be way before this. So an issue inside libtw2 I guess 21:15 < bridge_> and heinrich is afk :/ 21:19 < bridge_> libtw2 doesn't really support ddnet/07 token packets, does it? 21:20 < bridge_> it has redirect pkt 21:20 < bridge_> and generally UUID support 21:20 < bridge_> i remember tons of // TODO: token support or something similar 21:21 < bridge_> maybe it was way old code though 21:22 < bridge_> no idea, besides some missing packages and some quirks, libtw works quite fine 21:23 < bridge_> yeah its really useful, added 0.5 support even :nouis: 21:23 < bridge_> time to make ~~prolapse~~ 0.4 support 21:24 < bridge_> time to write ddnet-rs 0.5 proxy 21:29 < bridge_> that would be hella cool 21:29 < bridge_> i remember there being 0.5 servers 21:29 < bridge_> vanilla servers 21:31 < bridge_> and what is better about them than 0.6 xd 21:32 < bridge_> When 0.5 Nodes support? 21:32 < bridge_> I don't know, half of you probably don't know what I am talking about 21:33 < bridge_> You really think half knows? xdd 21:34 < bridge_> optimistically in the dev channel :justatest: 21:36 < bridge_> call half of 20k members and see if any of them know 21:36 < ChillerDragon> i know nodes 21:37 < bridge_> just at everyone 21:38 < bridge_> i cant connect to legacy servers in ddnet-rs 21:41 < bridge_> the ddos protected servers kinda ignore the packages, dunno why yet 21:41 < bridge_> most RUS servers I tested worked 21:42 < bridge_> is this for having 2 clients open? 21:42 < bridge_> but without freeze prediction it's not really playable anyway xD 21:42 < bridge_> oh lol he was serious about this xD 21:42 < bridge_> thats really cool ngl 21:43 < bridge_> if the demo could replay while playing yes 21:43 < bridge_> or watch party 21:43 < bridge_> would be cool too 21:45 < bridge_> I tested with a server demo being recorded but it should work the same 21:46 < bridge_> oke doke 21:46 < bridge_> why cant demo player be run at same time as game? 21:46 < bridge_> is it just cause only 1 gameclient instance 21:47 < bridge_> The actual code to make it work was done in like 15 minutes, but I kept finding more demo-related issues and things to improve :justatest: 21:47 < bridge_> Everything about the demo player is currently just passed into the gameclient like game data 21:47 < bridge_> that reminds me of the talk we had when you did file handling a little better 21:47 < bridge_> 21:47 < bridge_> suddenly 4 PR's with 400 LoC each because you kept on finding stuff xD 21:47 < bridge_> i cant connect to any server, even if it does not say on the server name that it is ddos protected, also for that i must connect from f1, otherwise if i join using the green button, it always sends me to the same vanilla server :T 21:48 < bridge_> so what i said after? 21:48 < bridge_> i cant connect to any server, even if it does not say on the server name that it is ddos protected, also for that i must connect from f1, otherwise if i join using the green button, it always sends me to the same vanilla server (which i guess is the ddnet-rs vanilla one) :T 21:48 < bridge_> yeah, everything gets fed into the gameclient so you can't have a game from a server and from a demo at the same like 21:48 < bridge_> just make another one specifically for demo playing 21:49 < bridge_> memory usage go brr 21:50 < bridge_> yeah, that would be too hacky. ideally it was all separated into different interfaces/systems 21:50 < bridge_> i dont understand 21:50 < bridge_> demos feeding info into the game like a server is how it should be 21:51 < bridge_> Ah yeah it sends you to your LAN server, it's on my todo xD 21:51 < bridge_> 21:51 < bridge_> but i can only tell you that the map download takes a bit, if it fails after 20 seconds it should automatically time out 21:51 < bridge_> Do you see "timed out" or smth 21:51 < bridge_> yep 21:51 < bridge_> Ok weird 21:51 < bridge_> no, it's the demo info being fed into the game"client" 21:51 < bridge_> hmm it works fine for me 21:51 < bridge_> is that not what the server does 21:51 < bridge_> is that not what the server does (feed into the client which feeds into gameclient) 21:51 < bridge_> try to start a server in ddnet client, then start ddnet-rs (dont go in lan tab) and then in f1 `connect_legacy` 21:52 < bridge_> Then you should be able to join your lan server by whatever port it has 21:52 < bridge_> `connect_legacy localhost:8303` 21:52 < bridge_> Ideally you would have completely separate components for: 21:52 < bridge_> - demo player 21:52 < bridge_> - client and networking 21:52 < bridge_> - game 21:52 < bridge_> - rendering 21:52 < bridge_> right i see 21:53 < bridge_> but wont that have a lot of overhead in the layers 21:53 < bridge_> Then you can use demo player without the client and networking being a weird interface 21:53 < bridge_> and a lot of changes 21:53 < bridge_> and **a lot** of changes 21:53 < bridge_> yeah, that's probably why nobody has attempted it 21:55 < bridge_> i wouldnt mind having a jank way of having demos in game 21:55 < bridge_> "Connecting to: 21:55 < bridge_> 127.0.0.1:52188" 21:55 < bridge_> 127.0.0.1:52188 is not a DDraceNetwork or Community server. 21:55 < bridge_> opening a second client is too much 21:55 < bridge_> yeah that the port changes is normal, since it's a proxy, but it should not time out 21:56 < bridge_> if it does, then dunno, you are on macos right= 21:56 < bridge_> yeah im on macOS 21:56 < bridge_> wait can you not just swap out the gameclient instance? and everything should work 21:56 < bridge_> i mean would be weird if macos behaves different for libtw2, but yeah dunno 21:56 < bridge_> wait can you not just swap out the gameclient instance? and everything should work (dont have to init everything else aswell) 21:56 < bridge_> wait can you not just swap out the gameclient instance? and everything should work (dont have to init everything else aswell, unless gameclient does... that) 21:57 < bridge_> wait can you not just swap out the gameclient instance? and everything should work (dont have to init everything else aswell, unless gameclient does... that... it does that crap) 21:58 < bridge_> why it says connecting to 127.0.0.1 instead of localhost 21:59 < bridge_> oh wait it randomly connected 21:59 < bridge_> the legacy proxy always uses 127.0.0.1 21:59 < bridge_> you basically connect to a proxy, that proxy connects to the real ip 21:59 < bridge_> i'll improve the UI so it's clear 21:59 < bridge_> oh ok 22:03 < bridge_> The gameclient holds most resources, so you can't easily copy it. You'd probably also have to duplicate the entire engine because it holds the map for the server/demo. 22:03 < bridge_> ugh 22:21 < bridge_> wasn't there a time where you could rotate quads in the editor by holding shift and moving the green quad? 22:21 < bridge_> no ctrl it was 22:29 < bridge_> You need to press R now I think 22:30 < bridge_> Do you remember the problem with ctrl? 22:30 < bridge_> 22:30 < bridge_> bcs it collides with other hotkeys? 22:30 < bridge_> i tested vanilla editor and it allows rotation with ctrl, but also moving the camera with ctrl+lmb. it disables the camera movement while rotating 22:31 < bridge_> #6844 22:31 < bridge_> https://github.com/ddnet/ddnet/pull/6844 22:32 < bridge_> Wow the editor has so much features that are completly hidden to me xD 22:32 < bridge_> Probably hidden to a lot of players 22:33 < bridge_> Did you know about the envelope position preview that is activated when you enable tile info? 22:33 < bridge_> Yes xD 22:33 < bridge_> A friend discovered it few weeks ago 22:33 < bridge_> I was stunned it was behind the tile number thing 22:35 < bridge_> We should probably put that behind it's own setting TBF 22:35 < bridge_> We should probably put that behind its own setting TBF 22:36 < bridge_> would be nice to have tooltips for everything. i mean to be fair, these tooltips are often out of date or wrong 22:36 < bridge_> 22:36 < bridge_> but maybe still better than nothing 22:36 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366151064725749841/image.png?ex=680fe6d3&is=680e9553&hm=95f158f00a957e3300a92bb23c07a1818caab2299e8dd074a7e9a1f1e7423235& 22:37 < bridge_> yeah, editor needs larger tooltips than one line of text 22:37 < bridge_> Just now I noticed, the delete range is missing xd 22:37 < bridge_> there are some features u cant even teach with tooltips 22:37 < bridge_> When you hold shift without any tile selected 22:37 < bridge_> like transferring a brush from one map to another by loading a new map with an active brush 22:37 < bridge_> Saved brushes should work the same, right? 22:38 < bridge_> the editor just needs tabs 22:38 < bridge_> ye tabs would be great 22:38 < bridge_> We just have no UI for them so you can't tell what the saved brushes are 22:38 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1366151522546618478/image.png?ex=680fe740&is=680e95c0&hm=f5ed1a9c073004f9f1b4e9713fdb17d7e3fc8e539603cd92fdd910188d3c4a39& 22:38 < bridge_> Lol 22:38 < bridge_> I think those hotkeys are wrong way around 22:38 < bridge_> funny how i find all these bugs rn xD 22:39 < bridge_> shouldnt it be ctrl+tab and ctrl+shift+tab 22:39 < bridge_> Multiple tabs in the editor should be relatively easy, just a lot of changes but doesn't seem too difficult 22:39 < bridge_> sadly egui blocks them, otherwise i agree 22:46 < bridge_> ⛩ #Free cheat ⛩ 22:46 < bridge_> The best free cheat server for various games is a large catalog of private 22:46 < bridge_> High-quality cheats created by experienced developers 22:46 < bridge_> Hat will make your game more productive and comfortable. 🍀 22:46 < bridge_> Free private cheats for online games @here @everyone 💖 22:46 < bridge_> https://discord.gg/W4aaRYJ6B4 22:50 < bridge_> holy crap tabs would be amazing