00:00 < bridge> The idea was a simple floating window to perform any (custom) action on either a selection of tees (sort of a selection tool) or a spectated tee. (Since left click now automatically snaps to a tee in spectator, I'd think that's the best place for such a tool) 00:00 < bridge> 00:00 < bridge> Custom for the purpose that it's not something only usable for ddnet (/jail for city servers for example) 00:01 < bridge> I got patio'ed :saddo: 00:02 < bridge> Just be happy Zwelf didn't get Welf'ed this time! 00:03 < bridge> looking back at this, tbh i would have tries to make the popup background a different color. idk why but the grey feels a bit ugly on relooking 😭 00:03 < bridge> Damn! Sorry @patiga I was under high pressure like a diamond. I hope you can forgive me for that mistake 00:04 < bridge> I pardon your lightning-quick action! 00:05 < bridge> Z + patio :owo: 00:05 < bridge> Did you try to pass the correct map? 00:06 < bridge> they figured it out. --help needed to be passed to the correct subcommand 00:06 < bridge> (to figure out that you can use --demo (probably with --world?)) 00:06 < bridge> https://youtu.be/a01QQZyl-_I?si=QLDCoA_YYNbD4JKt 09:26 < bridge> @learath2 is there any way to store `S` by value? Without using `any` xd 09:26 < bridge> ```go 09:26 < bridge> type Map[S sync.Locker, K comparable, V any] struct { 09:26 < bridge> locker S 09:26 < bridge> data map[K]V 09:26 < bridge> } 09:26 < bridge> 09:26 < bridge> type MutexMap[K comparable, V any] = Map[*sync.Mutex, K, V] 09:26 < bridge> 09:27 < bridge> func NewMutexMap[K comparable, V any]() MutexMap[K, V] { 09:27 < bridge> return MutexMap[K, V]{ 09:27 < bridge> locker: new(sync.Mutex), 09:27 < bridge> data: make(map[K]V), 09:27 < bridge> } 09:27 < bridge> } 09:27 < bridge> ``` 09:35 < bridge> Why not public good video @teero777 09:43 < bridge> xddd 09:43 < bridge> gm 09:45 < bridge> Oh right 09:45 < bridge> Yea I did not sleep yet but officially I am in morning timezone too now! 10:08 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351119976777519194/image.png?ex=67d93809&is=67d7e689&hm=6c8be4e685f3eb4a75c965cf20045fbddcefedb266779802263608244e10fbf0& 10:08 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351120102237540362/image.png?ex=67d93826&is=67d7e6a6&hm=349120db14af7f4ab202de1b1da798e81fbfba0cb790e3947ab22bb507f872a4& 10:10 < bridge> i could make those quad containers so they dont ahve to be recalculated every time 10:10 < bridge> its probably not worth it tho x-x 10:10 < bridge> or containers of arbritrary 2d geometry idk what theyre called 10:11 < bridge> 😭 10:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351120787196743741/image.png?ex=67d938ca&is=67d7e74a&hm=c37b6c1a8216a40c4ffb8aecb0b03c2aebc9ba217a4a7eb8cb9feebe3687ff8d& 10:39 < bridge> @robyt3 10:39 < bridge> ```cpp 10:39 < bridge> if(pCursor->m_LineWidth <= 0) 10:39 < bridge> TextContainer.m_RenderFlags = m_RenderFlags | ETextRenderFlags::TEXT_RENDER_FLAG_NO_FIRST_CHARACTER_X_BEARING | ETextRenderFlags::TEXT_RENDER_FLAG_NO_LAST_CHARACTER_ADVANCE; 10:39 < bridge> else 10:39 < bridge> TextContainer.m_RenderFlags = m_RenderFlags; 10:39 < bridge> ``` 10:39 < bridge> in `text.cpp`, suggests that the random text flags in nameplates are automatically applied when needed 10:39 < bridge> he wants green team 10:39 < bridge> obviously 10:39 < bridge> we should stop using magic numbesr everywhere for team colors 10:39 < bridge> lmao 10:39 < bridge> then they can actually be changed to green if you wanted to 10:40 < bridge> for some reason the nameplates arent respecting no pixel alignemnet text flag which is why i was trying to find where they could be reset 10:41 < bridge> no longer respecting* 10:41 < bridge> hate cmake recompiling everything when the edit times change 10:41 < bridge> even tho the files are the exact same 10:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351128314630377532/image.png?ex=67d93fcc&is=67d7ee4c&hm=24e1f49c7d271a60dee7f6edee0082f058e26c026c7750abefe183ade1b67b5a& 10:41 < bridge> hey Developers®️ from the DDraceNetwork©️ Community™️ (Official™️) 10:41 < bridge> 👋 10:41 < bridge> okay jokes aside I have a little question 10:42 < bridge> How do coloring works on the game? 10:42 < bridge> like 10:42 < bridge> for example on the skins 10:42 < bridge> on the tilesets, etc 10:42 < bridge> https://nohello.net/en/ !!! 10:42 < bridge> hey guys 10:42 < bridge> Hellou :3 10:42 < bridge> it was for the funsies,, 10:42 < bridge> each pixel is multiplied by the color, on the skins its magic 10:43 < bridge> each pixel is multiplied by the color, on the skins its magic but mostly just multiply the pixel by the color 10:43 < bridge> I see 10:43 < bridge> afaik (leareath2 typing) 10:44 < bridge> thats why you cant get very vibrant colors on skins 10:44 < bridge> nor black 10:44 < bridge> makes senae 10:44 < bridge> makes sense 10:44 < bridge> thats why you cant get very vibrant colors on skins (cuz multiplied = less) 10:44 < bridge> but the skins are also grey scaled 10:44 < bridge> thanks! 10:44 < bridge> nor black (magic sauce) 10:44 < bridge> and the body is randomly adjusted too 10:44 < bridge> with random i mean, i dont understand anything 10:44 < bridge> oh yeah i forgot about that lmao 10:45 < bridge> i only remebered the magic find some sort of avg of the pixels 10:45 < bridge> to adjust 10:45 < bridge> Mh, this one is rough. The issue is that the receiver for Lock and Unlock are pointers for `sync.Mutex`. Does this really need to be generic? If so there is a way to constrain a generic on properties of *T instead of T 10:48 < bridge> It is a little ugly 10:48 < bridge> ```golang 10:48 < bridge> type LockerPtr[L any] interface { 10:48 < bridge> *L 10:48 < bridge> sync.Locker 10:48 < bridge> } 10:48 < bridge> 10:48 < bridge> type Map[S LockerPtr, K comparable, V any]..... 10:48 < bridge> ``` 10:49 < bridge> But I think that should work 11:00 < bridge> ```cpp 11:00 < bridge> // Check if the nameplate is actually on screen 11:00 < bridge> vec2 NamePlateSize = m_pNamePlates[pPlayerInfo->m_ClientId].Size(*GameClient(), &Data); 11:00 < bridge> ScreenX0 -= NamePlateSize.x / 2.0f; 11:00 < bridge> // ScreenX1 += NamePlateSize.x / 2.0f; 11:00 < bridge> ScreenY0 -= 0; 11:00 < bridge> ScreenY1 += NamePlateSize.y; 11:00 < bridge> if(!(in_range(Position.x, ScreenX0, ScreenX1) && in_range(Position.y, ScreenY0, ScreenY1))) 11:00 < bridge> return; 11:00 < bridge> ``` 11:00 < bridge> if i comment this out, it starts respecting the flag again 11:00 < bridge> i have no clue why 11:00 < bridge> oh wiat the textcontainer holds the flags 11:00 < bridge> not some random static 11:00 < bridge> adoi 11:15 < bridge> Ujumm 11:15 < bridge> Bad boi 11:15 < bridge> no u 11:16 < bridge> 🐣 11:16 < bridge> :) 11:24 < bridge> This is not the case xd 11:24 < bridge> The thing is that that ddnet uses hsl for skin coloring but the the ranges are 0..1 0..1 0.5..1 11:25 < bridge> thats part of the magic source 11:32 < bridge> what does `*L` mean? 11:35 < bridge> Eeeeh, it defines an interface that represents all types that are a pointer to some type 11:35 < bridge> The sync.Locker then further constrains the interface to types that are pointers and satisfy sync.Locker 11:36 < bridge> oooookey . _. 11:37 < bridge> Ah, but you want to use the L, I forgot that, sorry just woke up. Then you need to define the interface inline making it even uglier 11:42 < bridge> ```golang 11:42 < bridge> type Map[L any, K comparable, V any, LP interface { 11:42 < bridge> *L 11:42 < bridge> sync.Locker 11:42 < bridge> }] struct { 11:42 < bridge> lock L 11:42 < bridge> data map[K]V 11:42 < bridge> } 11:42 < bridge> ``` 11:42 < bridge> 11:42 < bridge> Something like this 11:48 < bridge> it is quite nasty 11:48 < bridge> adds an extra type parameter that you have to add in 11:49 < bridge> you should ask in the go discord, they are friendly @milkeeycat 12:05 < bridge> I asked what go-routines are and they called me stupid for not knowing. 11/10 would ask again 12:15 < bridge> Should've googles 12:22 < bridge> It is derived from C afterall, the toxicity is expected 12:24 < bridge> I did but they confused me a bit 12:24 < bridge> 12:24 < bridge> Go-routines are concurrently running tasks, but not parallel to each other 12:24 < bridge> 12:24 < bridge> So go routines aren't threads but they work similarly while also not and... 12:24 < bridge> 12:24 < bridge> They are cheap to create and use.. and yeah 12:24 < bridge> That's all I know about go-routines 12:24 < bridge> 12:24 < bridge> Oh and that creating one is cool 12:24 < bridge> 12:24 < bridge> callFunc() 12:24 < bridge> go callFunc() !!!! 12:32 < bridge> Goroutines are simple greenthreads. Same thing tokio does, same thing something like `folly::fibers` does. 12:32 < bridge> 12:32 < bridge> They can get scheduled however, maybe on a different thread, maybe not 12:37 < bridge> i broke heinreich ai 12:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351157512052674560/image.png?ex=67d95afe&is=67d8097e&hm=4e6f66133105e6ee8ce2c05857012f6bc80f8c97783afc161e721bac7b9705a4& 12:37 < bridge> i prompt injected heinreich ai 12:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351157512052674560/image.png?ex=67d95afe&is=67d8097e&hm=4e6f66133105e6ee8ce2c05857012f6bc80f8c97783afc161e721bac7b9705a4& 13:36 < bridge> @blaiszephyr How to disable rcon green color in TAB 13:37 < furo> @filoqcus https://github.com/ddnet/ddnet/pull/9692 13:38 < bridge> rcon_login name password; hide_auth_status 1; 13:38 < bridge> It will show you the green color, it won't show it to others tho 13:38 < bridge> You can also still see other people authed when you're authed 13:39 < bridge> Tysm @blaiszephyr and furo 13:39 < bridge> :brownbear: 14:00 < bridge> `rcon hide_auth_status 1` if it's a bind 14:05 < bridge> @milkeeycat compiler dev blog post of the day https://blog.polybdenum.com/2025/02/14/designing-type-inference-for-high-quality-type-errors.html 14:05 < bridge> i made this error 14:05 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351179650289635400/image.png?ex=67d96f9c&is=67d81e1c&hm=e396d0000fc3f72b2a5d1dcb6d1bb66d62706de1db6863776db0440628c46a23& 14:06 < bridge> imagine having pretty compilation errors 14:07 < bridge> making languages always reminds me of this 14:07 < bridge> > 14:07 < bridge> > 14:07 < bridge> > The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.... Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the co 14:07 < bridge> > 14:07 < bridge> > —Fred Brooks, The Mythical Man-Month 14:43 < bridge> https://en.wikipedia.org/wiki/Vibe_coding 14:47 < bridge> 🗣️ 🔥 14:52 < bridge> more like skill issue coding 15:53 < bridge> :nouis: 15:54 < bridge> hate it when i open twitter and its all ai generated slop games 15:55 < bridge> ive played better browser games on flash 20 years ago idk why some bad airplane simulator is so hot rn 16:05 < bridge> literally me 16:10 < bridge> there is a difference between using ai to generate most of your code, but you peice it together and make it run and make ai generate your code, and fix it, and make it run, slowly and painfully 16:10 < bridge> i do like the name vibe coding, its like a euthanism for the bad that is coding whilst dependent on ai 16:10 < bridge> there is a hard limit on doing the second in terms of size and complexity and its not very high 16:10 < bridge> euphemism is the word you're looking for 16:10 < bridge> euthanasia is very different 16:11 < bridge> did i say euthanism 16:11 < bridge> lmao 16:11 < bridge> thats a typo i swear 16:11 < bridge> there is a difference between using ai to generate most of your code, but you peice it together and make it run and make ai generate your code, and fix it, and make it run, slowly and painfully 16:11 < bridge> i do like the name vibe coding, its like a ~~euthanism~~ euphenism for the bad that is coding whilst dependent on ai 16:11 < bridge> spelling is hard 16:19 < bridge> some ai shills could use some euthanasia though 16:19 < bridge> vibe coding is fine, youre just harming yourself or being lazy (dpeending how deep in it you are) 16:19 < bridge> using ai to make slop 16:20 < bridge> i would treat them the same as scammers 16:21 < bridge> i would be very happy to tel them to stop and have them stop, but unfortunatley i am not dissalusioned enough to think that would work 16:21 < bridge> and i would rather stick them in a concrete box 16:23 < bridge> <.c.f.m.> i know an ai slop game when i see one 16:33 < bridge> i never used ai to code 16:34 < bridge> but i saw this term on twitter 16:35 < bridge> There is one singular exception I make to using ai in coding and that's to do heavy lifting like going from a shitty unorganized doc about a rest api object to a typed struct 16:46 < bridge> it's good for generating test data 16:46 < bridge> and to find deprecated/random documentation for obscure things 16:47 < bridge> or to hallucinate it :blueless: 16:47 < bridge> although usually stack overflow is slightly better for #2 16:48 < bridge> yeah, anyone too dependent on it will have rough tones 16:48 < bridge> yeah, anyone too dependent on it will have rough times 16:48 < bridge> The best documentation for obscure behavior is source code 16:48 < bridge> Hyrum's law 👍 16:48 < bridge> id rather not read the millions of whatever that makes up some web browser source code 😁 16:49 < bridge> Web was a mistake... 17:00 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351223563402874920/Z.png?ex=67d99882&is=67d84702&hm=7dd793515662521fe433491ccba7abe921ff701aadc4d4aa0aa18e89d6bf0471& 17:03 < bridge> so real 17:17 < bridge> Who is in charge of the ddnet bot? It needs an update, it's behind master 17:20 < bridge> discord bot is murpi's domain, just wait for him to react on the ping made in the mapping channel 17:21 < bridge> also @patiga the deprecated tile check is also ready for the bot 19:09 < bridge> "be liberal in what you accept from others" was a mistake 19:09 < bridge> Now we have to have parsers behave properly for thousands upon thousands of deviations from the html/css/js spec 19:10 < bridge> Now we have to have parsers/lexers/renderers behave properly for thousands upon thousands of deviations from the html/css/js spec 19:10 < bridge> Hell yes. The beatings will continue until morale improves. 19:12 < bridge> I do sometimes wonder what a browser coded from scratch without any regard for old horseshit would look like, would it devolve into millions of loc aswell? 19:18 < bridge> sounds like a fun side project :santatrollet: 19:22 < bridge> What is old horse shit and what isn’t 19:42 < bridge> anything that deviates from the html spec, the xml spec, the js spec should immediately halt all attempts at rendering and just display "website broken, contact site administrator" 19:43 < bridge> no inserting missing tags trying to fix the website, no pushing promises to completion even if not properly driven to completion 19:43 < bridge> no emulation of old table behaviours 19:57 < bridge> SO TRUE 21:35 < bridge> ```cpp 21:35 < bridge> void CGameContext::ConDumpLog(IConsole::IResult *pResult, void *pUserData) 21:35 < bridge> { 21:36 < bridge> CGameContext *pSelf = (CGameContext *)pUserData; 21:36 < bridge> int LimitSecs = MAX_LOG_SECONDS; 21:36 < bridge> if(pResult->NumArguments() > 0) 21:36 < bridge> LimitSecs = pResult->GetInteger(0); 21:36 < bridge> 21:36 < bridge> if(LimitSecs < 0) 21:36 < bridge> return; 21:36 < bridge> 21:36 < bridge> ``` 21:36 < bridge> 21:36 < bridge> why here it checks for minimum value but not for max(in that case MAX_LOG\_SECONDS)? Is it intentional? I've noticed that when I use this command I have a chance to timeout from server 21:36 < bridge> and LimitSecs was being set to 10k 21:36 < bridge> :3 21:43 < bridge> Actually I'm still having timeout issues when I use this command even without using this argument 22:04 < bridge> maybe related with https://github.com/ddnet/ddnet/issues/3691 22:04 < bridge> but I'm not sure what's causing this problem