02:17 <+bridge_> damn ChillerDragon: apparently i did same thing recently with comments about grammar https://github.com/kaitlynia/ddnet/tree/lynn/gender-neutral 02:17 <+bridge_> not recently wtf 4 years ago 02:17 <+bridge_> nearly 10k commits ago xD 02:20 <+bridge_> huh this is apparently the commit that gave me "developer" role before XD 02:20 <+bridge_> 02:20 <+bridge_> ez 08:16 <+bridge_> @12944qwerty you (accidentally?) removed the feature from unbuffered rendering again 08:20 <+bridge_> is anyone around to talk through some algorithm design stuff with me 08:20 <+bridge_> or possibly tolerate me using this channel to like, get random ideas 08:21 <+bridge_> basically: a matchmaking algorithm considering low player counts + low game durations seems hard to get right 08:46 <+bridge_> this is basically impossible with low player nums, or you end up matching the same ppl over and over again. 08:46 <+bridge_> 08:46 <+bridge_> There are some great videos about developing matchmaking or so called "elo" systems 08:47 <+bridge_> These are also the things you need to balance: with a higher waiting time you might get better matches, because you have more time to match more equal ppl, but wait for too long and players won't wait for you to finally match 08:56 <+bridge_> the problem is mostly that games are short. if i design a connected graph based on edges that represent elo variance, i can always know the best match for each player, but there's a lot of problems with just expecting them to all form pairs bottom-up 08:56 <+bridge_> 08:56 <+bridge_> - odd number of players in the queue. does the top-rated player sit out? 08:56 <+bridge_> - your best match is currently in a match. do you wait? for how long? an alternative player's game wraps up, which is a worse match but quicker. what if we already told the player to wait for player A, should it instead tell them to play with player B? 08:56 <+bridge_> - your best match disconnects, but your previous match is now in a match. also, because they disconnected, it's odd again. 08:57 <+bridge_> a greedy approach works okay for this (like the latter in point 2) but for a service that depends on teeworlds messages sent over a client connection, this is very busy and requires a lot of message sends, which is not ideal. 08:58 <+bridge_> i dont expect many people to be waiting in queue. probably they decide to play "off the books" with the same partner while it's sorting out the best match and this could really jostle the queue time further in a large server 09:00 <+bridge_> imposing time limits on both the threshold for matching and how long you have to get into the match is of course necessary, but the tendency to prefer an immediate match makes the likelihood of finding any good value for these pretty low 09:09 <+bridge_> Just thought of something sorta clever. When a match ends for players A and B, and one or both players have a better match currently online, it doesn't have to match them immediately if their match(es) are not immediately available (maybe some players C and D already started their own match while A and B were playing), but it can let them know that a new pair has been found. Up until a pair is freed, other better matches may become available (new pl 09:10 <+bridge_> In this system I don't have the ability to "pull people out" of a match or "stop an unranked game" because someone matched. so I think this is the best way under these circumstances 09:19 <+bridge_> I know from other games, that they scale the "looseness" of a match by time, meaning the longer you wait the worse your match is allowed to be. You can't expect the perfect match, even if it is already in a match, to requeue 09:22 <+ChillerDragon> the ddnet storage api does not allow me to get the full file path right? or am i blind? 09:23 <+ChillerDragon> i tried listing files with `Storage()->ListDirectory()` and then pass them to `luaL_dofile 09:23 <+ChillerDragon> paste aa 09:23 <+ChillerDragon> but lua dofile needs the path :thinking: 09:23 <+bridge_> you should be able to get the absolute path from the relative one - always 09:24 <+bridge_> okay lua question, I am out, last lua time was 13 years ago 😆 09:25 <+ChillerDragon> no not a lua question :D 09:25 <+ChillerDragon> its just that the ListDirectory callback gives me a filename and luaL_dofile needs a path to that file 09:26 <+ChillerDragon> ListDirectory will give me just "plugin.lua" no matter if it found it in $CURRENTDIR or $USERDIR 09:26 <+ChillerDragon> i guess i would have to check the storage type but i feel like im missing something here 09:26 <+bridge_> you could try to check both paths in absolute terms for this file 09:27 <+bridge_> thwre is a function for that 09:27 <+ChillerDragon> @Assa there are so many 09:27 <+ChillerDragon> @teero777 yay this is what i was hoping 09:27 <+bridge_> hmm 09:27 <+ChillerDragon> `GetCompletePath 09:28 <+ChillerDragon> i miss chat.zillyhuhn.com where i could paste -.- 09:28 <+bridge_> idk what it is tho i haven't read ddnet src in months 09:28 <+ChillerDragon> how did i ever feel comfortable in weechat 09:28 <+ChillerDragon> nah looks really good thanks teero 09:29 <+bridge_> i keep typing sex on phone instead of src. need a diff keyboard layout or smth 09:29 <+bridge_> fat fingers 09:30 <+bridge_> there were some weird things with it though, there are also multiple versions as i remember 09:32 <+ChillerDragon> okay thats troll 09:32 <+ChillerDragon> `GetCompletePath()` gave me "plugin.lua" gg 09:32 <+bridge_> XD 09:32 <+bridge_> okay hold on i start pc 09:33 <+ChillerDragon> aha 09:34 <+ChillerDragon> okay i get it 09:34 <+ChillerDragon> because the "plugin.lua" was next to the binary so $CURRENTDIR 09:34 <+ChillerDragon> i created one in ~/.teeworlds and now it shows the longer path nice 09:34 <+ChillerDragon> i think i can work with that because the lua file loader also has the same working directory 09:36 <+ChillerDragon> good tip thanks a lot teero :heartw: 09:37 <+bridge_> assume very low player pools, like maybe 5 or 6 max 09:37 <+bridge_> i could allow some looseness based on the pool size, but currently this isnt a consideration i have to worry about 09:37 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1476498379025420350/image.png?ex=69a157c5&is=69a00645&hm=b2dc3910b6ec4ef922d5f940b5b22e7bf1fef0a4e46a562c5986c733230282c3& 09:37 <+bridge_> i did smth like this 09:37 <+bridge_> ```cpp 09:37 <+bridge_> void CGKitchen::ReloadSnackList() 09:37 <+bridge_> { 09:37 <+bridge_> for(const auto &c : m_vSnackList) 09:37 <+bridge_> delete[] c; 09:37 <+bridge_> m_vSnackList.clear(); 09:37 <+bridge_> 09:37 <+bridge_> char aUserDir[IO_MAX_PATH_LENGTH]; 09:37 <+bridge_> GC()->Storage()->GetCompletePath(IStorage::TYPE_SAVE, "not_hax/snacks", aUserDir, IO_MAX_PATH_LENGTH); 09:37 <+bridge_> GC()->Storage()->ListDirectoryInfo(IStorage::TYPE_ALL, aUserDir, SnackListFetchCallback, this); 09:37 <+bridge_> std::sort(m_vSnackList.begin(), m_vSnackList.end(), 09:37 <+bridge_> [](const char *a, const char *b) { 09:38 <+bridge_> return std::strcmp(a, b) < 0; 09:38 <+bridge_> }); 09:38 <+bridge_> } 09:38 <+bridge_> ``` 09:38 <+bridge_> ```cpp 09:38 <+bridge_> int CGKitchen::SnackListFetchCallback(const CFsFileInfo *pInfo, int IsDir, int StorageType, void *pUser) 09:38 <+bridge_> { 09:38 <+bridge_> if(IsDir) 09:38 <+bridge_> return 0; 09:38 <+bridge_> if(!str_endswith(pInfo->m_pName, ms_aaFormatExtensions[((CGKitchen *)pUser)->m_InputFormat])) 09:38 <+bridge_> return 0; 09:38 <+bridge_> const int Size = str_length(pInfo->m_pName) + 1; 09:38 <+bridge_> char *pName = new char[Size]; 09:38 <+bridge_> str_copy(pName, pInfo->m_pName, Size); 09:38 <+bridge_> ((CGKitchen *)pUser)->m_vSnackList.emplace_back(pName); 09:38 <+bridge_> return 0; 09:38 <+bridge_> } 09:38 <+bridge_> ``` 09:38 <+bridge_> basically 1 ddrace server where the number of players doesnt change much. so occasionally someone will join or leave, and rebalancing of the pairs needs to happen. it can request for pairs to stop when their game ends, then announce pairs as they're able 09:43 <+bridge_> okay troll 09:43 <+bridge_> I thought GetCompletePath would resolve my filename and the arg name pDir is flexible and i can pass in my file too 09:43 <+bridge_> but it just gave me a path that looked good but doesnt actually exist 09:44 <+bridge_> LLM ah engine hallucinating paths gg xd 09:44 <+bridge_> so i gotta get the base path with it and then append my filename :C 09:44 <+bridge_> and in 2 weeks when robsi refactors the entire abi i have to rewrite it all 09:45 <+bridge_> maybe i should have just asked an LLM how to list files in a directory in C++ and paste it in there ;D 09:52 <+bridge_> chillerdragon: we can about talking moderator on ur server or just helper rcon i can prove what i'm good man and helping players 10:02 <+bridge_> <0xfaulty> answered 10:06 <+bridge_> :thonk: 10:47 <+bridge_> when mobile ddnet will support gl es 1.0? 11:11 <+bridge_> what? 11:11 <+bridge_> opengl es 1.0???????????????????? 11:43 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1476530029600047124/Screenshot_20260226-114237.png?ex=69a1753f&is=69a023bf&hm=9b467a6afebc80bd90d6efd598ac904e9fe2fa42ded661ef2f831ee5133a00e5& 11:43 <+bridge_> :thonk: 11:44 <+bridge_> try use it it auto move to 3.0 11:45 <+bridge_> i wont say if it work 11:53 <+bridge_> yes it autoswaps to GLES 3.0.0, but I think this is a feature 11:54 <+bridge_> When someone implements it, assuming it's even possible. GL/GLES are different so the existing OpenGL 1 implementation does not work for GLES 1. 11:55 <+bridge_> i have tablet that support 2.0 and when i run ddnet its give error with 3.0 :\ 11:55 <+bridge_> and setting it to vulkan? What is the error you're getting? 11:56 <+bridge_> vulkan not supported 11:56 <+bridge_> Probably doesn't support Vulkan if it doesn't even have GLES 3 11:56 <+bridge_> If vulkan is not supported, how ~~ancient~~ old is your tablet? :justatest: 11:56 <+bridge_> yep sm-t116 11:57 <+bridge_> hmm 2015, so 11 years old 11:58 <+bridge_> 👍 + custom rom to 7.1.2 11:58 <+bridge_> I wonder if you can upgrade it enough to support it, but I think you're out of luck 12:09 <+bridge_> i cant upgrade more, no i can install debian on it 13:30 <+bridge_> oh a hacker man for reals 14:05 <+bridge_> @ryozuki did you ping me today? 14:05 <+bridge_> hmm maybe i forgot 14:05 <+bridge_> here or offtopic 14:06 <+bridge_> https://discord.com/channels/252358080522747904/252358080522747904/1476258992115286241 14:06 <+bridge_> here 14:06 <+bridge_> xD 14:06 <+bridge_> Somewhere, I have a ping from you in my notification history leading nowhere 14:06 <+bridge_> yesterday 14:06 <+bridge_> Ah, maybe that got redelivered for some reason 14:06 <+bridge_> I've been getting some weird push notifications from discord :/ 14:06 <+bridge_> did u see the funny news 14:06 <+bridge_> discord accusing the id company of spionage by us 14:07 <+bridge_> Nope, do you have a link? 14:07 <+bridge_> https://www.yahoo.com/news/articles/discord-cuts-ties-peter-thiel-080200136.html?guccounter=1 14:07 <+bridge_> ah not this 14:07 <+bridge_> wait 14:07 <+bridge_> https://www.them.us/story/discord-has-stopped-using-peter-thiel-backed-software-tied-to-us-surveillance 14:08 <+bridge_> ah its same 14:08 <+bridge_> worded differently lol 14:08 <+bridge_> Discord Has Stopped Using Peter Thiel-Backed Software Tied to U.S. Surveillance 14:08 <+bridge_> User photos were being compared to government watchlist photos, according to an independent researcher. 14:15 <+bridge_> Lol, thankfully I never had to verify my id with discord 14:39 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1476574434763608228/image.png?ex=69a19e9a&is=69a04d1a&hm=9b765dcf1287651e5117af06648041f8f7c8a38097847e134a1cd3c48637a79e& 14:39 <+bridge_> they make it so easy now 14:40 <+bridge_> you should open a bugreport, it's clearly missing the "suck my dick" option 14:58 <+bridge_> <12944qwerty> Wdym 15:09 <+bridge_> will ddnet discord be migrated 15:10 <+bridge_> back to irc 15:53 <+bridge> I want to know how to change the score under one name to another. 15:53 <+bridge> 🙁 16:16 <+bridge> . 16:17 <+bridge> I'm sorry, I seem to have sent it to the wrong channel. 16:51 <+bridge> today just randomly a guy spawned at my door and told me "your landlord decided you get optic fibre cable internet, which contract do you want?" :kek: 16:52 <+bridge> I will get 10 times as much in the future for the same price, fucking telecom copper cable bullshit 17:25 <+bridge> <12944qwerty> Bumpity I'm confused assa xd 17:33 <+bridge> Where the ogl1 code in your PR? 17:33 <+bridge> <12944qwerty> The what 17:34 <+bridge> <12944qwerty> ogl1? 17:34 <+bridge> The RenderTilesetWithoutBuffer code is gone 17:34 <+bridge> you need **both** 17:35 <+bridge> open gl 1.0.0 17:35 <+bridge> <12944qwerty> Wha 17:35 <+bridge> <12944qwerty> I don't think i removed that one 17:35 <+bridge> <12944qwerty> Huh 17:35 <+bridge> :pepeW: 17:35 <+bridge> <12944qwerty> Yeah it's still there 17:37 <+bridge> <12944qwerty> Y'all squash to merge right, this commit history is so bad xd 17:37 <+bridge> this commit removed it: https://github.com/ddnet/ddnet/commit/8388e5125032e8c647538dfdc65ed3f8b8224ac2 17:38 <+bridge> RenderTuneMap is now unchanged but it's needed my friend :justatest: 17:41 <+bridge> <12944qwerty> I'm so confused lol 17:42 <+bridge> okay do me a favor, put your graphics backend to opengl 1.0.0 and take a look how the tune zone is rendered 🙂 17:42 <+bridge> on your PR of course 17:42 <+bridge> <12944qwerty> Will do tonight 17:42 <+bridge> <12944qwerty> I'm at work rn lol 17:43 <+bridge> <12944qwerty> Looking at this on my phone 17:43 <+bridge> you need to implement both, the buffered and unbuffered case, previously you only had the unbuffered case, now you only have the buffered case 17:43 <+bridge> <12944qwerty> Oh 17:43 <+bridge> <12944qwerty> Oh 17:45 <+bridge> I am your perfect reviewer, because I planned this exact PR already in my head :kek: 17:45 <+bridge> <12944qwerty> My graphics backends are broken lol 17:45 <+bridge> <12944qwerty> Ogl keeps crashing 17:45 <+bridge> <12944qwerty> And vulkan wont even work 17:47 <+bridge> how do you even compile the game 17:47 <+bridge> or play it xD 17:47 <+bridge> <12944qwerty> Vulkan shaders are broken for some reason, it compiles, but won't load with vulkan 17:48 <+bridge> <12944qwerty> I have the Vulkan flag on 17:48 <+bridge> <12944qwerty> Ogl loads but crashes with sigsegv randonly 17:48 <+bridge> <12944qwerty> Ogl loads but crashes with sigsegv randomly 17:48 <+bridge> <12944qwerty> I installed vulkan sdk and all that but still 17:53 <+bridge> <12944qwerty> The release binaries also crash similar to dev compile with ogl, but works perfectly with vulkan. 17:56 <+bridge> <12944qwerty> I've mentioned it here a few times xd 17:57 <+bridge> are you on windows? 17:59 <+bridge> <12944qwerty> Linux 19:13 <+bridge> `voice: Failed to open capture device: Audio subsystem is not initialized` 19:16 <+bridge> @1voix1 could you add an option to select the audio backend?