06:53 < bridge> How can I open a tas file? 07:02 < bridge> [pxcollagecollective](https://cdn.discordapp.com/emojis/849746785290158140.webp?size=48&name=pxcollagecollective) 07:06 < bridge> send it to me 07:06 < bridge> I open it for you :) 08:36 < ws-client> aoc is op in utc+8 08:37 < ws-client> https://adventofcode.com/2024/leaderboard/private/view/677828 08:37 < bridge> chillerdragon: good morning 08:38 < ws-client> its almost 4 fred 08:38 < bridge> i just woke up 08:38 < bridge> it’s morning for me 08:38 < bridge> 12:38 08:38 < ws-client> wtf 08:38 < bridge> :brownbear: 08:38 < ws-client> @tsfreddie fix your sleep 08:38 < bridge> :justatest: 08:39 < bridge> hoping he just moved back to canada 08:39 < bridge> :pepeW: making pr for ddnet exhausted me 08:39 < bridge> ✅ 08:39 < bridge> now im hungry 08:40 < bridge> ill get cookin, later guys 08:48 < bridge> pce 09:05 < bridge> ChillerDragon 09:05 < bridge> Where is the Player Search API located in Teedata? 10:25 < ws-client> @woidless https://teedata.net/docs 10:26 < ws-client> https://teedata.net/api/user/read?name=ChillerDragon 10:27 < bridge> @robyt3 im not sure how to make the text the same size 10:27 < bridge> i removed the mapping thingy for the preview and its not the same 10:28 < ws-client> brand new ddnet protocol support just dropped on my website https://twnet.zillyhuhn.com/?v=6&d=00+06+02+42+0d+05+28+43+68+69+6c+6c+65+72+44+72+61+67+6f+6e+00+7c+2a+4b+6f+47+2a+7c+00+80+01+67+72+65+65+6e+73+77+61+72+64+00+00+87+c5+8d+0e+8e+ab+9e+02+40+0c+06+23+63+72+61+73+68+6d+65+70+6c+78+00+3d+e3+94+8d 10:28 < bridge> i want to remove yourself from spectator menu 10:28 < bridge> no :D 10:30 < bridge> it feels confusing when new player accidentally do that and pause/unpause don't give enough visual changes to indicate what is happening. 10:30 < bridge> SpectateCloest already filters out yourself, not sure why it is not enforced everywhere else 10:50 < bridge> Discussion of cheats including bots and TAS is not allowed 10:51 < bridge> You probably need to the `MapScreenToInterface` as ingame 10:51 < bridge> ? 10:51 < bridge> You probably need the same `MapScreenToInterface` as ingame 10:52 < bridge> ``` 10:52 < bridge> // create nameplates at standard zoom 10:52 < bridge> This.Graphics()->GetScreen(&ScreenX0, &ScreenY0, &ScreenX1, &ScreenY1); 10:52 < bridge> This.RenderTools()->MapScreenToInterface(This.m_pClient->m_Camera.m_Center.x, This.m_pClient->m_Camera.m_Center.y); 10:52 < bridge> ``` 10:53 < bridge> hmmm, looks like `CNamePlates::OnRender` just uses the screen size from the previous component 10:53 < bridge> maybe try to print the screen size there and also use it for the preview? I guess that would break the positioning though :/ 10:56 < bridge> Yeah it's the commit i posted, i guess we could restore old behavior by making sure NaNs are not created in a different way. 10:56 < bridge> 10:56 < bridge> But it's kinda annoying to test it for a huge range of skins by just changing the code randomly, so either the dev has to understand it or we need some test setup 😄 10:57 < bridge> nice 10:59 < bridge> lol, looks interesting 11:05 < bridge> Welcome back baby ❤️ 11:06 < bridge> Yeah I am directly super sick, almost didn't sleep today. 11:06 < bridge> 11:06 < bridge> Perfect come back 11:06 < bridge> :monkaStop: 11:08 < bridge> at least we are among adults here now 11:10 < bridge> :pepeW: poor juppy, what happened 11:11 < bridge> I dunno, I can't control when I get sick xd 11:12 < bridge> > what is the 3 people icon? 11:12 < bridge> That is simply an "explore communities" 11:12 < bridge> I think kaffine once showed how he imagined communities, and I think an overview could be quite ok, similar to discord discovery thing 11:13 < bridge> The settings are on the left mostly, bcs the navigation for the settings are on the left now too 11:26 < bridge> are you sure it only happens for specific skins? 11:27 < bridge> not sure, no. do you assume it's all skins? 11:30 < bridge> i think it does even for darker ones 11:30 < bridge> its just less noticable 11:30 < bridge> probably all skins where the calculation created NaNs or smth like that 11:36 < bridge> skin code cursed for real 11:36 < bridge> I honestly also don't understand the idea behind that code 11:37 < bridge> it's also only applied to the body, which is weird too xd 11:37 < bridge> do we really need it to be that weird? 11:38 < bridge> i thought its maybe something for teamcolors but nah 11:38 < bridge> it's some form of grayscaling 11:40 < bridge> e.g. the question is: would it be bad to completely remove that code 11:40 < bridge> sodium nitride 11:40 < bridge> and only use the gray scaled version 11:42 < bridge> how is the bicycle game doin 11:42 < bridge> :cammo: 11:43 < bridge> can't tune a control that i like 11:47 < bridge> well there are skins like whis where it would be even better probably 11:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312731918294581268/screenshot_2024-12-01_11-46-39.png?ex=674d905e&is=674c3ede&hm=43c2c559bc32681da0a69d748df05ff9dab5490aa4107645f337b871aa0e0f25& 11:48 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312731918696976404/screenshot_2024-12-01_11-46-42.png?ex=674d905e&is=674c3ede&hm=12302b384233d8ef3533706c2d04418fa73109cb547a61e306cca6130475582c& 11:48 < bridge> could achieve more vibrant custom colors 12:03 < bridge> I almost did first part of today's AOC in my language but I cant call `qsort`, it segfaults :feelsbadman: 12:07 < bridge> :( 12:07 < bridge> WAIT I ALMOST FORGOT AOC 12:07 < bridge> AAAAAAAA 12:08 < bridge> Where have you been? 12:10 < bridge> Just afk few days 12:10 < bridge> And what about you? 12:11 < bridge> @jupeyy_keks do you know if anyone has decided to implement account into ddnet yet? 12:11 < bridge> can i just add the auth part in client without touching server first. 👀 12:11 < bridge> @soulyvevo not perfect yet, but I'd like to have a test setup like this 12:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312737930661593160/image.png?ex=674d95f8&is=674c4478&hm=f999bc96e564b7881ece7a8f52fb106b6f1a304c78db2c2d4083603fd3723f99& 12:12 < bridge> this is art #showroom 12:12 < bridge> The account system itself is kinda finished: 12:12 < bridge> https://github.com/ddnet/ddnet-accounts 12:12 < bridge> 12:12 < bridge> We need secure connection and we still need the client side impl in cpp version 12:13 < bridge> You can actually already test it in dd-pg 12:13 < bridge> let me yoink that and post it in the town hall thingie 12:13 < bridge> jupstar 12:13 < bridge> hi 12:13 < bridge> :greenthing: so can i implement it cpp in ddnet 12:13 < bridge> SAME 12:13 < bridge> I need to come up with a good gimmick to use this year 12:14 < bridge> It's actually not even news 😄 12:14 < bridge> i think i can even do the first question in nixlang 12:14 < bridge> Hi eve, i totally missed you 12:14 < bridge> I could try for artistic Haskell solutions but I feel like I could pick something more original 12:15 < bridge> Try to learn one of the APL-like languages maybe? 12:15 < bridge> I was here. Real afk in the real world? Or just inactive in \#developer 12:15 < bridge> Haskell might as well be an average commonly used language when compared to those 12:16 < bridge> Did you do something exciting? 12:16 < bridge> I have no real life 12:16 < bridge> So how do you afk then 12:16 < bridge> I spent few hours per day getting stuff in dd-pg done, and the rest I was doing random things 12:16 < bridge> afk from discord xd 12:17 < bridge> Oh nice the ddpg grind 12:17 < bridge> Good progress? 12:17 < bridge> Let's say it like this: 12:17 < bridge> I am surprised how fast a month passes 12:17 < bridge> Would have liked to have more progress tbh 12:18 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312739510072774686/image.png?ex=674d9770&is=674c45f0&hm=9bac1ad85c84ae1987f9690a8fd3afd2ac7aca0ec8cac35447f26a6ca18da567& 12:18 < bridge> Few hours ddpg and random things sounds like you have lots of free time 12:19 < bridge> Well sadly I cannot go to the beach every day like you :c 12:19 < bridge> Speaking of skin colouring, there could be value to having an option to not grayscale skins but hue shift them instead 12:19 < bridge> Beach was really nice today! 12:20 < bridge> This is the current default, now I build one with greyscale only 12:21 < bridge> there are many cases where that would look better, since a bit of colour variation would look more natural than the monochromatic result you get with grayscaling and multiplying 12:22 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312740673522499595/image.png?ex=674d9886&is=674c4706&hm=108a37628534fdaccf94b2150e2857b8f9a07e2b4fa6a214cc66bea14be20623& 12:22 < bridge> sadly i forgot to sort the skins 12:23 < bridge> but still looks pretty different 12:23 < bridge> oh wait 12:23 < bridge> they are sorted 12:23 < bridge> nice 12:23 < bridge> sort by average luminosity for a fun gradient 12:23 < bridge> ```ocaml 12:23 < bridge> let input = open_in "inputs/day1_p1.txt" in 12:23 < bridge> try 12:23 < bridge> let lines = In_channel.input_lines input in 12:23 < bridge> let parse_line x = 12:23 < bridge> List.map int_of_string 12:23 < bridge> @@ List.filter (fun x -> x <> "") 12:23 < bridge> @@ String.split_on_char ' ' @@ String.trim x 12:23 < bridge> in 12:23 < bridge> let values = List.map parse_line lines in 12:24 < bridge> let lhs, rhs = 12:24 < bridge> List.split 12:24 < bridge> @@ List.filter_map 12:24 < bridge> (fun value -> 12:24 < bridge> match value with [x; y] -> Option.Some (x, y) | _ -> Option.None ) 12:24 < bridge> values 12:24 < bridge> in 12:24 < bridge> let lhs = List.fast_sort Int.compare lhs in 12:24 < bridge> let rhs = List.fast_sort Int.compare rhs in 12:24 < bridge> let result = 12:24 < bridge> List.map (fun (x, y) -> Int.abs (y - x)) @@ List.combine lhs rhs 12:24 < bridge> in 12:24 < bridge> let result = List.fold_left ( + ) 0 result in 12:24 < bridge> let () = print_int result in 12:24 < bridge> let () = print_newline () in 12:24 < bridge> close_in input 12:24 < bridge> with e -> close_in_noerr input ; raise e 12:24 < bridge> ``` 12:24 < bridge> part 1 12:24 < bridge> learning ocaml which is also kinda my first functional lang so im going slow af 12:24 < bridge> @soulyvevo so i guess the idea behind the code is that the body isn't so dark. 12:24 < bridge> 12:24 < bridge> Bcs as you can see greyscale only is quite dark xd 12:25 < bridge> greyscale and then a normalization based on the brightest pixel would give you the best customization 12:25 < bridge> i guess the code kinda does that, i just don't understand it xd 12:25 < bridge> but it finds sequences where the values are > 128 12:25 < bridge> of 255 12:25 < bridge> i'm cooking something in nixlang rn, it's not as easy as i thought it would be, who would've guessed :kek: 12:26 < bridge> so it tries to find light colors ig 12:26 < bridge> it kinda looks like a list of pokemon lmao 12:27 < bridge> :monkaStop: 12:27 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312741871956660244/image.png?ex=674d99a3&is=674c4823&hm=fb1bac5ce9829b84141174368d7cbb3980eeb7d27377449fbf6c22510535c06c& 12:27 < bridge> @ryozuki: what was the ddnet aoc invite code again? Is melon in there? 12:27 < bridge> special group ??? no i'm not! 12:28 < bridge> Others can join it using the code 677828-82ec4df2. Up to 200 users can join, including yourself. 12:28 < bridge> https://adventofcode.com/2024/leaderboard/private/view/677828 12:29 < bridge> @blaiszephyr i guess its cuz i dont know functional programming good yet, but it feels like my productivity is 1% xd 12:29 < bridge> does that result in some skins having sharp pixels? 12:29 < bridge> me coding in nix is having 3 wiki tabs open rn, i feel you @ryozuki :kek: 12:29 < ws-client> who is dragere 12:29 < bridge> like in that aoe skin when you enable colors 12:29 < bridge> lol i had 15 tabs open with ocaml docs 12:29 < bridge> :kekw: 12:29 < bridge> one thing i already dislike is it has bad tooling ngl 12:29 < bridge> im just so used to god like tooling of rust 12:30 < bridge> u can make a bad lang but if u have good tooling its good 12:30 < bridge> imho xd 12:31 < bridge> @milkeeycat hear that? add good tooling or your lang is shit! /jk 12:31 < bridge> I will :santatrollet: 12:32 < bridge> for example "dune fmt" wont work unless you dune build first, and it wont work if u havent made a .ocamlformat file first, and the dune init proj X doesnt make a .ocamlformat file 12:32 < bridge> its all bad decisions 12:32 < bridge> bad ux 12:32 < bridge> oh and the lsp doesnt work unless you dune build first on new files 12:33 < bridge> :kek: oh god 12:33 < bridge> and ofc dune config files are S expressions 12:33 < bridge> why not toml 12:33 < bridge> "builtins.genList" expected a string... wait what 12:33 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312743308656644106/image.png?ex=674d9afa&is=674c497a&hm=8597e1e762afa047264273962436b66812027af6964ab5db9403ca483212610d& 12:33 < bridge> ``` 12:33 < bridge> (lang dune 3.16) 12:33 < bridge> 12:33 < bridge> (name aoc2024) 12:33 < bridge> 12:33 < bridge> (generate_opam_files true) 12:33 < bridge> 12:33 < bridge> (source 12:33 < bridge> (github edg-l/aoc2024-ocaml)) 12:33 < bridge> 12:33 < bridge> (authors "Edgar Luque") 12:33 < bridge> 12:33 < bridge> (maintainers "Edgar Luque") 12:33 < bridge> 12:33 < bridge> (license LICENSE) 12:33 < bridge> 12:34 < bridge> (documentation https://url/to/documentation) 12:34 < bridge> 12:34 < bridge> (package 12:34 < bridge> (name aoc2024) 12:34 < bridge> (synopsis "A short synopsis") 12:34 < bridge> (description "A longer description") 12:34 < bridge> (depends ocaml dune) 12:34 < bridge> (tags 12:34 < bridge> (topics "to describe" your project))) 12:34 < bridge> 12:34 < bridge> ; See the complete stanza docs at https://dune.readthedocs.io/en/stable/reference/dune-project/index.html 12:34 < bridge> ``` 12:34 < bridge> xD 12:34 < bridge> EW 12:34 < bridge> also deps kind of work like python 12:34 < bridge> so u have to make local envs 12:37 < bridge> i dunno. 12:37 < bridge> 12:37 < bridge> But to restore old behavior i think we have to do 2 things. 12:37 < bridge> 12:37 < bridge> NaN gets 0 12:37 < bridge> Inf gets 255 12:37 < bridge> 12:37 < bridge> I think the code is broken bcs we have the Inf part wrong 12:37 < bridge> Just cursed af that code 12:50 < bridge> @ryozuki is a number of a million a little to much as an answer? :kek: 12:52 < bridge> I'd go something simple along the lines of 12:52 < bridge> ``` 12:52 < bridge> skin_lumas = float[len(skin_pixels)] 12:52 < bridge> for idx, pixel in skin_pixels { 12:52 < bridge> // magic numbers from Wikipedia 12:52 < bridge> skin_lumas[idx] = pixel.r * 0.2126 + pixel.g * 0.7152 + pixel.b * 0.0722 12:52 < bridge> } 12:52 < bridge> 12:52 < bridge> brightest = 0.0f 12:53 < bridge> for _, luma in skin_lumas { 12:53 < bridge> if luma > brightest { 12:53 < bridge> brightest = luma 12:53 < bridge> } 12:53 < bridge> } 12:53 < bridge> brightest /= 255 12:53 < bridge> 12:53 < bridge> bw_skin_pixels = Pixel[len(skin_pixels)] 12:53 < bridge> for idx, pixel in bw_skin_pixels { 12:53 < bridge> value = int(skin_lumas[idx] / brightest) 12:53 < bridge> pixel.r = value 12:53 < bridge> pixel.g = value 12:53 < bridge> pixel.b = value 12:53 < bridge> } 12:53 < bridge> ``` 12:53 < bridge> `/ brightest` 12:53 < bridge> 12:53 < bridge> What is brightest is 0? 12:54 < bridge> Ugh 12:54 < bridge> I guess there is the possibility of a completely black skin 12:55 < bridge> I'd go something simple along the lines of 12:55 < bridge> ``` 12:55 < bridge> skin_lumas = float[len(skin_pixels)] 12:55 < bridge> for idx, pixel in skin_pixels { 12:55 < bridge> // magic numbers from Wikipedia 12:55 < bridge> skin_lumas[idx] = pixel.r * 0.2126 + pixel.g * 0.7152 + pixel.b * 0.0722 12:55 < bridge> } 12:55 < bridge> 12:55 < bridge> brightest = 0.0f 12:55 < bridge> for _, luma in skin_lumas { 12:55 < bridge> if luma > brightest { 12:55 < bridge> brightest = luma 12:55 < bridge> } 12:55 < bridge> } 12:55 < bridge> 12:55 < bridge> brightest /= 255 12:55 < bridge> if brightest == 0 { 12:55 < bridge> brightest = 1 12:55 < bridge> } 12:55 < bridge> 12:55 < bridge> bw_skin_pixels = Pixel[len(skin_pixels)] 12:55 < bridge> for idx, pixel in bw_skin_pixels { 12:55 < bridge> value = int(skin_lumas[idx] / brightest) 12:55 < bridge> pixel.r = value 12:55 < bridge> pixel.g = value 12:55 < bridge> pixel.b = value 12:55 < bridge> } 12:55 < bridge> ``` 12:55 < bridge> ok now it won't break 12:56 < bridge> ```ocaml 12:56 < bridge> let input = open_in "inputs/day1.txt" in 12:56 < bridge> try 12:56 < bridge> let lines = In_channel.input_lines input in 12:56 < bridge> let parse_line x = 12:56 < bridge> List.map int_of_string 12:56 < bridge> @@ List.filter (fun x -> x <> "") 12:56 < bridge> @@ String.split_on_char ' ' @@ String.trim x 12:56 < bridge> in 12:56 < bridge> let values = List.map parse_line lines in 12:56 < bridge> let lhs, rhs = 12:56 < bridge> List.split 12:56 < bridge> @@ List.filter_map 12:56 < bridge> (fun value -> 12:56 < bridge> match value with [x; y] -> Option.Some (x, y) | _ -> Option.None ) 12:56 < bridge> values 12:56 < bridge> in 12:56 < bridge> let countn x = 12:56 < bridge> List.fold_left (fun acc a -> if a = x then acc + 1 else acc) 0 12:56 < bridge> in 12:56 < bridge> let result = List.map (fun x -> x * countn x rhs) lhs in 12:56 < bridge> let result = List.fold_left ( + ) 0 result in 12:56 < bridge> let () = print_int result in 12:56 < bridge> let () = print_newline () in 12:56 < bridge> close_in input 12:56 < bridge> with e -> close_in_noerr input ; raise e 12:56 < bridge> 12:56 < bridge> ``` 12:56 < bridge> part 2 12:57 < bridge> lmao those let in statements 12:57 < bridge> they are somewhat familiar 12:57 < bridge> ```nix 12:57 < bridge> { 12:57 < bridge> pkgs ? import { }, 12:57 < bridge> }: 12:57 < bridge> let 12:57 < bridge> parseNumberPair = 12:57 < bridge> line: 12:57 < bridge> let 12:57 < bridge> parts = builtins.filter (s: s != "") (builtins.split "[ \t]+" line); 12:57 < bridge> 12:57 < bridge> nums = 12:57 < bridge> if builtins.length parts == 2 then 12:57 < bridge> let 12:57 < bridge> first = builtins.parseInt (builtins.elemAt parts 0); 12:57 < bridge> second = builtins.parseInt (builtins.elemAt parts 1); 12:57 < bridge> in 12:57 < bridge> if builtins.isInt first && builtins.isInt second then 12:57 < bridge> [ 12:57 < bridge> first 12:58 < bridge> second 12:58 < bridge> ] 12:58 < bridge> else 12:58 < bridge> null 12:58 < bridge> else 12:58 < bridge> null; 12:58 < bridge> in 12:58 < bridge> nums; 12:58 < bridge> 12:58 < bridge> readNumberPairs = 12:58 < bridge> filePath: 12:58 < bridge> let 12:58 < bridge> let is used for all in ocaml 12:58 < bridge> for functions and vars 12:58 < bridge> look at my beautiful nix code which doesnt work 12:58 < bridge> ```ocaml 12:58 < bridge> let countn x = 12:58 < bridge> List.fold_left (fun acc a -> if a = x then acc + 1 else acc) 0 12:58 < bridge> ``` 12:58 < bridge> I'd go something simple along the lines of 12:58 < bridge> ```go 12:58 < bridge> skin_lumas = float[len(skin_pixels)] 12:58 < bridge> for idx, pixel in skin_pixels { 12:58 < bridge> // magic numbers from Wikipedia 12:58 < bridge> skin_lumas[idx] = pixel.r * 0.2126 + pixel.g * 0.7152 + pixel.b * 0.0722 12:58 < bridge> } 12:58 < bridge> 12:58 < bridge> brightest = 0.0f 12:58 < bridge> for _, luma in skin_lumas { 12:58 < bridge> if luma > brightest { 12:59 < bridge> brightest = luma 12:59 < bridge> } 12:59 < bridge> } 12:59 < bridge> 12:59 < bridge> brightest /= 255 12:59 < bridge> this is a function with a parameter x 12:59 < bridge> it returns another function though 12:59 < bridge> that accepts a parameter that is a list 12:59 < bridge> xd 12:59 < bridge> functional ftw 12:59 < bridge> :kek: 12:59 < bridge> let mul x y = x * y 12:59 < bridge> u can make 12:59 < bridge> let mul2 = mul 2 12:59 < bridge> and call mul2 12:59 < bridge> currying i think 12:59 < bridge> idk 13:00 < bridge> wtf did nixlang copy ocaml 13:01 < bridge> i like more ocaml syntax tho 13:01 < bridge> this should produce b&w images where the brightest pixel is (close to) pure white, should make custom colours really pop 13:01 < bridge> though now I'm realizing that this is *not* taking gamma into account 13:01 < bridge> 13:01 < bridge> Why must colour be so difficult? 13:02 < bridge> The magic constants from Wikipedia can be replaced with a different set too, I'm not sure what numbers are considered the most correct 13:05 < bridge> https://en.wikipedia.org/wiki/Grayscale#Colorimetric_(perceptual_luminance-preserving)_conversion_to_grayscale 13:05 < bridge> 13:11 < bridge> i just hope that math wont produce any sharp looking pixels 13:14 < bridge> All I'm doing is uniformly scaling up the brightness of the image, so no sharp pixels that weren't there in the first place should appear 13:14 < bridge> Of course increasing the max brightness will increase the contrast a bit, so small mistakes in skins might become more noticeable 13:15 < bridge> but it ignores the black pixels no? 13:15 < bridge> Well 0 * anything is still 0, yeah, but small values close to zero will also get scaled up 13:16 < bridge> the `if brightest == 0` part is only in case *the entire image* is pure black 13:17 < bridge> in that case the image will be kept pure black, and the check is simply to avoid a divide by zero (which Jupstar pointed out) 13:21 < bridge> for better results convert to linear light first 13:21 < bridge> see https://entropymine.com/imageworsener//grayscale/ 13:22 < bridge> I mentioned that too :) 13:22 < bridge> ah I missed that 13:25 < bridge> I love graphics but I don't write enough code... so I know a fair bit but I can't really bang it out in code form super quickly 13:26 < bridge> for sRGB the best would be 0.2126 R + 0.7152 G + 0.0722 B (even if not blending in linear light) 13:26 < bridge> since sRGB uses BT.709 primaries which have these brightness values 13:26 < bridge> I guess this makes slightly less sense in gamma light but it's still the most canonical values to use 13:27 < bridge> oh hey I picked right :) 13:28 < bridge> the 0.299 / 0.5987 / 0.114 values are for BT.601 13:28 < bridge> That 0.07 for blue always feels so crazy to me, like, intuitively it feels it should be brighter 13:28 < bridge> (I'm not trying to correct you here I'm just taking any opportunity I can get to nerd out about video) 13:29 < bridge> 🧡 13:35 < bridge> I am currently hosting my own gitlab in for private projects with friends, does anybody have experience in setting up windowns gitlab runner? Would a windows docker image be sufficient? 13:35 < bridge> I am currently hosting my own gitlab for private projects with friends, does anybody have experience in setting up windowns gitlab runner? Would a windows docker image be sufficient? 13:36 < bridge> Problem is, that this is the windows server image, but I might need at least some headless graphics support 13:41 < bridge> I guess I have to go for it for now, otherwise I'd need to host a vm 😦 13:46 < bridge> @soulyvevo Honestly I am starting to believe the older clients are buggy, not the new ones. 13:46 < bridge> 13:46 < bridge> I tried to reproduce the same loading like 15.1.3 and still get the different color. 13:46 < bridge> Maybe they accidentally used the real skin over the greyscaled one or smth like that? 13:47 < bridge> 13:47 < bridge> Sadly I cannot compile these old versions, else I could quickly do a git bisect 13:47 < bridge> Well dunno what is wrong tbh 13:47 < bridge> But it makes no sense to me 13:48 < bridge> or the color values were wrong back then 13:48 < bridge> What clients did u test? 13:49 < bridge> vanilla, recent version 13:49 < bridge> and some 15.x not sure which one exactly 13:50 < bridge> i think 15.1.3 but lemmie doublecheck 13:51 < bridge> renderdoc sadly also doesnt work 😄 13:52 < bridge> i cant even download older versions cuz my net is messed up today 13:52 < bridge> says it will download in 9 hours 💀 13:53 < bridge> ok it works now to build, just had to remove some editor code that was broken 13:58 < bridge> @soulyvevo one question 13:58 < bridge> Did you use the 256x128 skin or a high res skin? 13:58 < bridge> i tried both 13:58 < bridge> even lower resolutions 13:58 < bridge> bcs these versions only support 256x128 13:58 < bridge> like 64x32 or something 13:58 < bridge> https://github.com/ddnet/ddnet/blob/84be9b865584fda681dbb57c9f1c73185d8d29f7/src/game/client/components/skins.cpp#L73 13:59 < bridge> was it the version where highier res skins resulted in some weird square shape on the tee? 13:59 < bridge> i remember that was the case in some version 13:59 < bridge> maybe i used different one for testing then 14:00 < bridge> @soulyvevo when i change it to 256x128 it looks like in the new clients 14:00 < bridge> so this isn't a bug in new clients 14:00 < bridge> it's just that the old one cannot process high res textures correctlyx 14:00 < bridge> it's just that the old one cannot process high res textures correctly 14:03 < bridge> in case anyone is interested: Nope, you can not do that. You either need to setup a VM or cross compile with mingw and use wine, I hate windows so much 14:06 < bridge> @soulyvevo do you want to keep the issue as discussion? 14:06 < bridge> Else I leave it closed, since changing skin behavior is smth that will trigger some ppl anyway 14:08 < bridge> i think leaving it open just in case would be a good idea 14:09 < bridge> Ok but I'll change the tags, bcs imo it's not a bug compared to old versions 14:10 < bridge> anyone else has issues with downloading anything from https://ddnet.org/downloads/ ? 14:10 < bridge> Works for me 14:10 < bridge> i thought its something with my connection but downloading builds from github artifacts works fine 14:11 < bridge> but when i try to download anything from the site it estimates the download time will take some sick numbers like 9 hours or a day 14:11 < bridge> probs cloudflare being slow for you 14:11 < bridge> I get full speed 14:14 < bridge> i guess i will let you know later what version exactly i tested it on 14:15 < bridge> it's fine 14:15 < bridge> i could reprod the color when switching to 256x128 14:15 < bridge> so it kinda must be resolution dependent 14:41 < bridge> I have already received my first earnings from ddnet 15:15 < bridge> Good news, it crashes only if I have code in compare function, bad news I have to write code in compare function to make it work 😬 15:16 < bridge> chillerdragon: wanna read some assembly? :DD 16:05 < ws-client> sure teach me some assembly @milkeeycat 16:05 < ws-client> I stalked the rank 1 of aoc right now on github found this little gem on there https://place.zillyhuhn.com/ 16:07 < bridge> chillerdragon: find the bug 16:07 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312797194755113011/message.txt?ex=674dcd29&is=674c7ba9&hm=f68b0121ba68cb2eba3bd9b05c60ae5b2284604244e2137d1e3bb3a744928268& 16:11 < ws-client> i cant see attachments 16:12 < bridge> his assembly so long it was sent to the message.txt realms 16:16 < ws-client> irc does not like long assembly better use a paste service like https://zillyhuhn.com/cstd-web/index.php 16:17 < bridge> https://paste.zillyhuhn.com/ei 16:18 < ws-client> where comments 16:18 < ws-client> i dont get shit 16:18 < bridge> me neither :p 16:18 < bridge> BUT 16:19 < bridge> if you replace compare function to 16:19 < bridge> ``` 16:19 < bridge> compare: 16:19 < bridge> push rbp 16:19 < bridge> mov rbp, rsp 16:19 < bridge> mov QWORD PTR [rbp-24], rdi 16:19 < bridge> mov QWORD PTR [rbp-32], rsi 16:19 < bridge> mov rax, QWORD PTR [rbp-24] 16:19 < bridge> mov eax, DWORD PTR [rax] 16:19 < bridge> mov DWORD PTR [rbp-4], eax 16:19 < bridge> mov rax, QWORD PTR [rbp-32] 16:19 < bridge> mov eax, DWORD PTR [rax] 16:19 < bridge> mov DWORD PTR [rbp-8], eax 16:19 < bridge> mov eax, DWORD PTR [rbp-4] 16:19 < bridge> sub eax, DWORD PTR [rbp-8] 16:19 < bridge> pop rbp 16:19 < bridge> ret 16:19 < bridge> ``` 16:19 < bridge> it will work 16:19 < bridge> i don't understand why 16:41 < bridge> using `r14`, `r15` registers breaks everything, cool 16:54 < bridge> epic libtw2 and ddnet map moment 16:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312809123552694392/screenshot_2024-12-01_17-53-47.png?ex=674dd845&is=674c86c5&hm=cc38c88d83642ec1b0dca22bbdf106d9922c51525066e3bb695b248c6c469de7& 16:59 < ws-client> nice @kollpotato 21:12 < bridge> definitely missed wasting more time on super inefficient scripts :> 21:12 < bridge> ```bash 21:12 < bridge> #!/bin/bash 21:12 < bridge> #Advent of Code - Day 01 21:12 < bridge> mapfile -t a < <(sort -k1 -n "$1" | cut -d' ' -f1) 21:12 < bridge> mapfile -t b < <(sort -k2 -n "$1" | cut -d' ' -f4) 21:12 < bridge> for i in "${!a[@]}"; do x=$((${a[$i]}-${b[$i]})); t1=$((${t1:-0}+${x#-})); done 21:12 < bridge> while read -r i; do 21:12 < bridge> x=$(cut -d' ' -f4 "$1" | sort | uniq -c | sed 's/^[ \t]*//' | grep " $i" | cut -d' ' -f1) 21:12 < bridge> t2=$((${t2:-0}+(i * ${x:-0}))) 21:12 < bridge> done < <(cut -d' ' -f1 "$1") 21:12 < bridge> printf -- "p1: %s\\np2: %s\\n" "$t1" "$t2" 21:12 < bridge> ``` 21:24 < bridge> bro is scripting 21:30 < bridge> ✝️ 21:30 < bridge> :pepecry: damn 21:33 < bridge> i bought some bluetooth iem hooks and they don't fit 21:33 < bridge> :feelsbadman: 21:33 < bridge> i could mutilate them to make them fit but then that makes them unreturnable 22:28 < bridge> All my IEMs have detachable mmcx wires and all my cables have hooks that are made of wire so you can bend them to your ear 22:42 < bridge> i dont think the bluetooth to iem things are great 22:42 < bridge> you get better qol with dedicated bluetooth buds 22:43 < bridge> PLEASE STOP KIDS FROM POSTING THEIR CLIPS ON LINEAR 22:43 < bridge> :pepeW: 22:43 < bridge> what u want me to do 22:43 < bridge> yeah fr louis wtf 22:43 < bridge> DELET IT 22:43 < bridge> No mor liner❌ 22:44 < bridge> can you keep that to #off-topic tho - check your channels! 22:57 < bridge> I tried to cross compile from ubunto to windows using mingw, it compiles, I get an exe with dlls and when I start it on my windows machine, it just states "Die App kann auf dem PC nicht ausgeführt werden - Wensen sie sich an den Softwareherausgeber" (This app can not be run on this computer, please contact the softwaredeveloper). Did anybody ever come across this? I already tried multiple things and don't know what the issue is 22:58 < bridge> did you correctly invoke the mingw64 toolchain with cmake? i remember it working perfectly fine for me.. hmm 22:58 < bridge> 22:58 < bridge> can you launch the .exe using wine on ubuntu? maybe it's generally borked 22:58 < bridge> @blaiszephyr go sleep 22:58 < bridge> Try building file on windows 22:59 < bridge> nice 22:59 < bridge> i was just able to mutilate them 22:59 < bridge> works fine 22:59 < bridge> I can send you the toolchain I used: 22:59 < bridge> ``` 22:59 < bridge> # windows-toolchain.cmake 22:59 < bridge> 22:59 < bridge> set(CMAKE_SYSTEM_NAME Windows) # Target system 22:59 < bridge> #set(CMAKE_SYSTEM_PROCESSOR AMD64) # Target processor architecture (x86_64 for 64-bit) 22:59 < bridge> 22:59 < bridge> # Specify the compiler paths 22:59 < bridge> set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) 22:59 < bridge> set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) 22:59 < bridge> set(CMAKE_LINKER x86_64-w64-mingw32-ld) 22:59 < bridge> 22:59 < bridge> # Add extra flags 22:59 < bridge> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -shared") 22:59 < bridge> set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -shared") 22:59 < bridge> 22:59 < bridge> # I am missing my dlls 23:00 < bridge> set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) 23:00 < bridge> set(CMAKE_SHARED_LIBRARY_PREFIX "") # Windows doesn't use 'lib' prefix for DLLs 23:00 < bridge> set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") 23:00 < bridge> 23:00 < bridge> # Optional: Define the Windows library path 23:00 < bridge> set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) 23:00 < bridge> 23:00 < bridge> # Optional: Adjust search paths for headers and libraries 23:00 < bridge> set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 23:00 < bridge> set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 23:00 < bridge> set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 23:00 < bridge> ``` 23:00 < bridge> Building on windows with MSVC works btw 23:00 < bridge> is there a difference on which distro you compile? 23:00 < bridge> why did you create your own? 23:00 < bridge> ddnet provides one 23:00 < bridge> /cmake/toolchains/mingw64.toolchain 23:00 < bridge> i'm going to try on arch tomorrow 23:00 < bridge> but now i sleep 23:00 < bridge> This is not ddnet related, but I don't know where to ask ;_; 23:00 < bridge> oOOOH 23:00 < bridge> hmm... not sure how to debug a different application really :/ 23:05 < bridge> @mpft how do you think heinrich will react to this :nouis: 23:05 < bridge> given the last time it was tried to touch practice behaviour when hitting a kill tile was a very fun discussion 23:06 < bridge> given the last time it was tried to touch practice behaviour when hitting a kill tile led to a very fun discussion 23:09 < bridge> > We had a pull request about that before. I'm against this. Instead: 23:09 < bridge> > 23:09 < bridge> > Don't respawn the tee in practice mode, allow them to press /r to respawn at the last position. 23:09 < bridge> 23:09 < bridge> but i guess this is what heinrich initially wanted.. hmm 23:15 < bridge> I don't know, I give up 23:16 < bridge> no idea 23:16 < bridge> i dont see the point of that at all 23:16 < bridge> strange feature 23:16 < bridge> is this supposed to be like an adverse consequence of hitting the kill tile lol 23:16 < bridge> it's practice mode 23:48 < bridge> I'm trying out awk this year for advent of code, I gladly take feedback :) 23:48 < bridge> ||``` 23:48 < bridge> abc 23:48 < bridge> ```|| 23:50 < bridge> I'm trying out awk this year for advent of code, I gladly take feedback :) 23:50 < bridge> 1: 23:50 < bridge> ||``` 23:50 < bridge> #! /usr/bin/awk -f 23:50 < bridge> 23:50 < bridge> function diff(a, b) { 23:50 < bridge> if (a > b) { 23:50 < bridge> return a - b 23:50 < bridge> } else { 23:50 < bridge> return b - a 23:50 < bridge> } 23:50 < bridge> } 23:50 < bridge> 23:50 < bridge> BEGIN { 23:50 < bridge> } { 23:50 < bridge> a[FNR] = $1 23:50 < bridge> b[FNR] = $2 23:50 < bridge> } 23:50 < bridge> 23:50 < bridge> END { 23:51 < bridge> asort(a) 23:51 < bridge> asort(b) 23:51 < bridge> for (line in a) 23:51 < bridge> sum += diff(a[line], b[line]) 23:51 < bridge> print sum 23:51 < bridge> } 23:51 < bridge> ```|| 23:51 < bridge> I'm trying out awk this year for advent of code, I gladly take feedback :) 23:51 < bridge> 1: 23:51 < bridge> ||``` 23:51 < bridge> #! /usr/bin/awk -f 23:51 < bridge> 23:51 < bridge> function diff(a, b) { 23:51 < bridge> if (a > b) { 23:51 < bridge> return a - b 23:51 < bridge> } else { 23:51 < bridge> return b - a 23:51 < bridge> } 23:51 < bridge> } 23:51 < bridge> 23:51 < bridge> BEGIN { 23:51 < bridge> } { 23:51 < bridge> a[FNR] = $1 23:51 < bridge> b[FNR] = $2 23:51 < bridge> } 23:51 < bridge> 23:51 < bridge> END { 23:51 < bridge> asort(a) 23:51 < bridge> asort(b) 23:52 < bridge> for (line in a) 23:52 < bridge> sum += diff(a[line], b[line]) 23:52 < bridge> I'm trying out awk this year for advent of code, I gladly take feedback :) 23:52 < bridge> 1: 23:52 < bridge> ||``` 23:52 < bridge> #! /usr/bin/awk -f 23:52 < bridge> 23:52 < bridge> is there a ddnet leaderboard for aoc? 23:52 < bridge> yes 23:52 < bridge> how do I get the link 23:52 < bridge> hm, its probably buried in this chat somewhere 23:53 < bridge> yeah chiller sent it to me today 23:53 < bridge> https://adventofcode.com/2024/leaderboard/private/view/677828 23:53 < bridge> @louis.place 23:53 < bridge> ah nvm 23:53 < bridge> . 23:53 < bridge> melon beat me to it 😔 23:53 < bridge> ah okay i'm already in it 23:54 < bridge> we're going strong on this one! (i forgot the second part and just did it like 10 minutes ago 23:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1312914714191200297/image.png?ex=674e3a9c&is=674ce91c&hm=c00a1bed2deafc617cd807fe5fede0a82511b046dcfc22dcde78f7591f928e97&