00:04 < bridge> iH lla.. woh era uoy gniod sved؟ 01:01 < bridge> good, you? 01:15 < bridge> <_voxeldoesart> making the hurt sounds right now 01:15 < bridge> <_voxeldoesart> should they have the impact or is it better without it? 01:15 < bridge> <_voxeldoesart> https://cdn.discordapp.com/attachments/293493549758939136/1314022243877257316/ddnet_robot_hurt_sound_comparison.mp3?ex=67524214&is=6750f094&hm=604917c2bbd27d70780a19be308914fa7924cf2d4b0dc911ee5167ac3707b778& 01:15 < bridge> <_voxeldoesart> (ngl i wish there was a dd-pg server) 02:10 < bridge> cant u host it yourself 02:19 < bridge> <_voxeldoesart> i hate managing and moderating discord servers 02:19 < bridge> oh u mean discord server 02:20 < bridge> <_voxeldoesart> yea 03:01 < bridge> That was not your console change. My underscores were cut off before already. 03:02 < bridge> Yea finding authors is hard 03:03 < bridge> Nice to hear it helped 03:05 < bridge> Yea it felt wrong to abandon the strongest pc I ever owned for a year instantly after buying it. I’m back at it end of December 03:05 < bridge> Yes next time you can come and pick it up at my house 03:43 < bridge> Pls 05:50 < bridge> <_voxeldoesart> this is fucking awesome 05:50 < bridge> <_voxeldoesart> i can see myself making a ton of shit for this 05:50 < bridge> <_voxeldoesart> https://cdn.discordapp.com/attachments/293493549758939136/1314091591874510858/2024-12-04_23-48-32.mp4?ex=675282aa&is=6751312a&hm=551ad20cd95a40d819605271f40fc66481733ecc63a7b0d020d6eb4228e13b15& 06:08 < bridge> hacker man 07:46 < bridge> Dammit, I am busy 07:48 < bridge> Ain't got any time to do a side project, let alone DDNet translation update 07:49 < bridge> Ain't got any time to do my side project, let alone update the translation 08:28 < bridge> It's okay egyt no rush :owoWeary: 08:53 < bridge> hory shiet 08:54 < bridge> took me almost 3 hours for *part one* of today's AoC 08:54 < bridge> Why am I torturing myself so? 08:54 < bridge> I guess I know a number of new tricks now 08:54 < bridge> it's only day 5.. 08:55 < bridge> are they that hard already? 08:55 < bridge> Haven't followed I wanna do other stuff instead 08:55 < bridge> Idk I don't really want to spend my time on them but I find it interesting 08:56 < bridge> same 08:57 < bridge> no I'm just doing it with wacky restrictions 08:57 < bridge> oh ok 08:57 < bridge> he's doing only mov 08:57 < bridge> nah 08:57 < bridge> xd 08:58 < bridge> It's fun to click the github profiles of the top ranked people 08:58 < bridge> that meme is actually surprisngly accurate lol 08:59 < bridge> How do you get ranked? 08:59 < bridge> Can you get ranked based on performance? 08:59 < bridge> based on how fast you submit after the question becomes public 08:59 < bridge> /execution time? 08:59 < bridge> 08:59 < bridge> you speedrun the solution 08:59 < bridge> meh then it's not that cool 08:59 < bridge> otherwise you can cheat 09:00 < bridge> this is the only way to avoid cheating 09:00 < bridge> wdym? 09:00 < bridge> all other metrics can be cheated 09:00 < bridge> Like, here's my code for today 09:00 < bridge> You probably won't get much from it at a glance so it's not a big spoiler 09:00 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314139243127509033/SPOILER_5.hs?ex=6752af0b&is=67515d8b&hm=57eedb87105db9987986a554f3eac84a7edd3ca70aff84f7183931b5e2034a73& 09:00 < bridge> execution time? 09:00 < bridge> absolute gobbledygook 09:00 < bridge> you could copy someone else 09:00 < bridge> I literally went `fmap uncurry` 09:00 < bridge> Can't you also copy the first solution that gets submitted? 09:00 < bridge> they are private 09:00 < bridge> I mean you get second place then 09:01 < bridge> So how are you gonna copy them ? 09:01 < bridge> The first place would have to share the code with you 09:01 < bridge> once the fastest solution is known everyone just copies each other 09:01 < bridge> How 09:01 < bridge> How do they copy 09:01 < bridge> wdym how 09:01 < bridge> you join a discord with your 40 developer friends and micro optimize you C solution until it's fast and all of you get 1st place 09:01 < bridge> you join a discord with your 40 developer friends and micro optimize your C solution until it's fast and all of you get 1st place 09:02 < bridge> yea dur 09:02 < bridge> yea sure 09:02 < bridge> or someone posts it online 09:02 < bridge> That would deserve r1 09:02 < bridge> but everyone has the same speed 09:02 < bridge> hmm okay.... 09:02 < bridge> Annoying 09:02 < bridge> Well, there's fastest and there's *fastest* 09:02 < bridge> the real fastest times would be some ring of wizards in their tower, hand rolling assembly based on their best guess of the target system's processor 09:03 < bridge> Would be fun 09:03 < bridge> anyway people started cheating this year already with AI, someone solved the first day in 9 seconds 09:03 < bridge> and of course to rank execution time you'd have to execute everyone's solutions, which would be *expensive* 09:03 < bridge> XD 09:03 < bridge> the later questions are probably too hard 09:03 < bridge> it might already be too hard 09:03 < bridge> for full chatgpt automation 09:03 < bridge> I don't think it's too hard for AI as it is 09:03 < bridge> without help tho? 09:03 < bridge> Don't you have to do that anyway to find out if the solution is correct? x 09:03 < bridge> maybe for full 100% automation but def not too hard for partial automation 09:04 < bridge> to do it in 9 seconds you can't even read the prompt 09:04 < bridge> everything has to be automated 09:04 < bridge> The first one was only few loc 09:04 < bridge> You only send the solution calculated by your program 09:04 < bridge> The complete question was at the bottom 09:04 < bridge> ? 09:04 < bridge> Reading it takes like 5 seconds. Doing the task maybe 30-60s 09:05 < bridge> I only looked at day 1 tho 09:05 < bridge> ai can read in 0 seconds and do the task in 4 seconds, then you spam the submit button for 5 seconds xd 09:05 < bridge> xddd 09:05 < bridge> Well I guess so 09:05 < bridge> It has to be automated as a browser plugin I guess? 09:05 < bridge> anyway I don't really care about how they measure who is winning 09:05 < bridge> and I guess the crazy people also have automation for retrieving the input and submitting the output 09:06 < bridge> just copy the html 09:06 < bridge> well 09:06 < bridge> yeah I guess it's hard 09:06 < bridge> 9 seconds is pretty impressive 09:07 < bridge> the input is just plain text retrieved from a separate endpoint, so that's easy, it's just the auth tokens that you need to deal with 09:11 < bridge> the top leaderboard positions are always one of these people: 09:11 < bridge> - I have 3 degrees at prestigious university 09:11 < bridge> - Software engineer at FAANG company 09:11 < bridge> - My passion is doing AoC, and sometimes other programming 09:11 < bridge> - open source person with a ton of random projects 09:11 < bridge> - empty profile 09:12 < bridge> also ai developer 09:14 < bridge> ai developer 09:14 < bridge> pick up a keyboard bro... 09:16 < bridge> I mean people who do machine learning code 09:16 < bridge> like actually making the ai 09:16 < bridge> ohh 09:16 < bridge> "ai researcher" 09:16 < bridge> i thought some nub just using ai for everything 09:16 < bridge> idk 09:16 < bridge> those probably also exist 09:16 < bridge> yea 09:16 < bridge> cringe ngl 09:25 < bridge> I was thinking about basically the same thing as an llm but instead of predicting the next word it will predict the next input of a player 09:25 < bridge> based on demos I guess 09:25 < bridge> I think it might result in a relatively okayish AI 09:25 < bridge> yeah but the inputs don't allow you to see the map 09:26 < bridge> Additional info works 09:26 < bridge> hmm 09:26 < bridge> idk of a transformer is the best for that 09:26 < bridge> idk if a transformer is the best for that 09:27 < bridge> It might just work but I am not quite sure 09:27 < bridge> teeworlds is not really a language, knowing the previous inputs doesn't affect what your future inputs will be. Only your current position, velocity and other gamestate matters. 09:28 < bridge> it's not like english where taking 2 paths to reach the word "Hello" is completely different. If you reach the same gamestate with 2 ways in teeworlds they are equivilent. 09:30 < bridge> Hi! I have a request to add a check mark on the finished maps in KoG, when I suggested it in the channel of KoG itself, I was told that this was a client-side change, and they are not doing this, I would really like to see this convenient feature in the game, thx 09:30 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314146817767641109/image.png?ex=6752b619&is=67516499&hm=eaed2ebd0b035b4796d13036547cad961507f30755f83f7086dd0dd676c3b8d9& 09:31 < bridge> I hope now I've written where I need to 09:32 < bridge> KoG doesn't have any api available to retrieve your finishes so it's not possible until they add one 09:32 < bridge> currently that status is pulled from ddnet.tw afaik. Kog would need to set up an API point so that the client can get the finishes from it. Of course adding custom endpoints in the client would need to come first 09:32 < bridge> currently that status is pulled from ddnet.org afaik. Kog would need to set up an API point so that the client can get the finishes from it. Of course adding custom endpoints in the client would need to come first 09:33 < bridge> Thanks for the information, I'll pass it on 09:38 < bridge> oh I am SO glad the ordering info in the input is complete 09:38 < bridge> so you can just pass it to `sortBy` 09:39 < bridge> @inv41idu53rn4m3 I wanna check out your gh profile 09:39 < bridge> Who are u 09:39 < bridge> my gh is empty and depressing 09:40 < bridge> I need portfolio-worthy stuff 09:40 < bridge> :( 09:41 < bridge> I just put all my garbage there 09:41 < bridge> This is a travesty 09:41 < bridge> `main` is a single line 279 characters long 09:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314149647404765204/SPOILER_5x.hs?ex=6752b8bb&is=6751673b&hm=ff6874199d0cd745ca93dbc95ae48cf58d9c061fde5ae0ea2bea44cc07d3a21c& 09:41 < bridge> I like how you put the spoiler, incase someone might learn the solution from this code 09:42 < bridge> Yeah idk why I'm doing that atp 09:42 < bridge> lol 09:42 < bridge> it's funny 09:42 < bridge> I'm in actual pain and my brain is constantly telling me that there MUST be a cleaner way to do this 09:42 < bridge> Just in case someone accidentally downloads it and spoils the Haskell code lmao 09:42 < bridge> I bet there is not a single person currently doing ddnet dev that does Haskell actively 09:42 < bridge> I think it was take me >72 hours to understand this 09:43 < bridge> but then again while Haskell is made by functional programming nuts it's not made by people quite *that* nuts 09:43 < bridge> I think it would take me >72 hours to understand this 09:43 < bridge> I think it would take me >72 hours to understand this 09:43 < bridge> holy shit it's almost 4 hours since I started 09:44 < bridge> Figuring out `compose2` and `compose3` helped tremendously 09:45 < bridge> I unironically typed out the words `fmap curry $ traverse $ fmap uncurry $ uncurry` 09:46 < bridge> This would be SO MUCH EASIER to write in a stack based language 09:48 < bridge> Correction: https://discord.com/channels/252358080522747904/293493549758939136/1292538896932143235 09:49 < bridge> ok that seems like a bad solution 09:50 < bridge> we should just have a standard schema for the finishes and let the endpoint be defined with the community info 09:50 < bridge> DDNet doesnt want to expose the clients to untrusted servers 09:50 < bridge> It would be only for communities 09:50 < bridge> https://discord.com/channels/252358080522747904/293493549758939136/1270680599694147585 09:50 < bridge> But we are untrusted 09:50 < bridge> The communities are not part of DDNet 09:51 < bridge> then let the ddnet server act as a proxy for the kog endpoint, it will just pass the json through the ddnet. That way no IPs are leaked 09:52 < bridge> Something like that was also planned 09:52 < bridge> seems much better than PUT solution 09:52 < bridge> PUT solution is unworkable 09:53 < bridge> It will generate some traffic, yes 09:54 < bridge> idk the main issue is data consistency, if anything needs to change for some reason it gets hard 09:54 < bridge> What do you mean? 09:55 < bridge> how can kog track the state of the data that ddnet keeps on the finishes? 09:55 < bridge> We cant 09:55 < bridge> right 09:55 < bridge> They store a tuple with community, name, finish 09:56 < bridge> There were some endpoints to either bulk delete or delete everything within 09:56 < bridge> Something like that 09:56 < bridge> I think you should just make the endpoint and convince them to add support on their backend later 09:57 < bridge> You know, now that I think of it, a programming language without variables wouldn't be *that* bad 09:57 < bridge> Like, if you actually intended for the programmer to write in this style and made the tools for it I could see it being reasonably productive 09:57 < bridge> ??? But how to store temporary data? 09:58 < bridge> Check the AoC solutions I've posted in this channel, none of them contain any named variables 09:58 < bridge> but variables are used internally by the language 09:59 < bridge> you cannot code without registers 09:59 < bridge> True that, but variables help you to maintain your references 😄 09:59 < bridge> yes yes, I just mean that the language itself would enforce a point-free style 10:00 < bridge> We have an API endpoint for that already 10:00 < bridge> is it the same as the ddnet one or some custom format? 10:01 < bridge> I don't expect them to care enough to reparse your data 10:01 < bridge> Its just an array of maps you've finished 😄 10:01 < bridge> So you could add it to the info endpoint maps 10:01 < bridge> https://info.ddnet.org/info?name=Avolicious 10:02 < bridge> You see, I like composing functions very much 10:02 < bridge> yeah that seems reasonable 10:02 < bridge> Thanks! 10:02 < bridge> :3 10:09 < bridge> I wonder how much of this I'll have to do before I get to spend more time solving the problem than I do arranging my unnamed variables 10:10 < bridge> so much effort goes simply into keeping track of when I want to pass the function itself instead of the output of that function 10:12 < bridge> `flip13 = flip . (fmap flip) . flip` exists simply to swap the 1st and 3rd arguments of a function 10:12 < bridge> i like, i like 10:12 < bridge> 10:12 < bridge> how the fk did you kill your dummy like that tho xD 10:12 < bridge> I wouldn't know how to do that xDD 10:17 < bridge> The only problem I see would be map name conflicts 😄 10:17 < bridge> There are a few maps hosted on DDNet and KoG, they are the same 10:17 < bridge> so if they finish it on ddnet, they have the finish on kog too 10:17 < bridge> it should be a separate array right? 10:17 < bridge> Right now it isnt 10:17 < bridge> And the client is only aware of one array 10:18 < bridge> hmm 11:17 < bridge> pls 11:32 < bridge> just fyi asking for something with "pls" doesn't sound very respectful or like you're taking your request seriously 11:33 < bridge> Chiller is usually at beach around that time 11:46 < bridge> go prompt gpt or smth 11:57 < bridge> Oof I am too predictable 12:00 < bridge> echo say hi >> server.fifo 12:00 < bridge> @woidless here u go 12:06 < bridge> But I will specify the time when this will happen, I also want automation 12:06 < bridge> It gives out incorrectly 12:07 < bridge> chillerdragon: how do i get your lifestyle 12:07 < bridge> smh can't even proompt properly 12:07 < bridge> Then learn to code or prompt it more specifically 12:08 < bridge> You *can* talk to it in Russian too if that helps 12:08 < bridge> It will take me at least half a year to learn C++ 12:08 < bridge> This is a bash script what you want to do 12:08 < bridge> Or a python script 12:08 < bridge> I'm doing it anyway. 12:08 < bridge> ??? 12:08 < bridge> Python 12:08 < bridge> Sorry 12:09 < bridge> you can learn basic python in a day 12:10 < bridge> You don't need a degree for writing a simple script 12:10 < bridge> ```py 12:10 < bridge> #!/bin/env python3 12:10 < bridge> 12:10 < bridge> from random import random 12:10 < bridge> from time import sleep 12:10 < bridge> 12:10 < bridge> MSGCOUNTDOWN = "%ss untill randomize" 12:10 < bridge> MSGRANDOMIZE = "tunes randomized" 12:10 < bridge> DELTA = 5 # seconds between each random 12:10 < bridge> FIFOPATH = "./fifo.fifo" 12:10 < bridge> TUNES = { 12:10 < bridge> ("ground_control_speed", 4.00, 14.00), # Maximum running speed on the ground. (Higher values make the character move faster). 12:10 < bridge> ("ground_control_accel", 0.50, 4.00), # Acceleration on the ground. (Higher values make the character speed up faster). 12:10 < bridge> ("ground_friction", 0.30, 1.00), # Ground friction. (Higher values make the character stop faster). 12:10 < bridge> ("ground_jump_impulse", 8.00, 18.00), # Jump force from the ground. (Higher values make the character jump higher). 12:10 < bridge> ("air_jump_impulse", 6.00, 16.00), # Jump force in the air. (Applies to double jumps; higher values allow higher jumps). 12:10 < bridge> ("air_control_speed", 2.00, 9.00), # Maximum speed when moving in the air. (Higher values allow faster air movement). 12:11 < bridge> ("air_control_accel", 0.50, 3.00), # Acceleration in the air. (Higher values allow quicker changes in air movement). 12:11 < bridge> ("air_friction", 0.70, 1.10), # Air friction. (Higher values reduce the character's air speed more quickly). 12:11 < bridge> ("gravity", 0.30, 0.80), # Gravity strength. (Lower values make the character float longer; higher values make them fall faster). 12:11 < bridge> } 12:11 < bridge> 12:11 < bridge> def write(s): 12:11 < bridge> with open(FIFOPATH, "w") as fifo: 12:11 < bridge> fifo.write(s) 12:11 < bridge> print(s) 12:11 < bridge> 12:11 < bridge> sleep(1) 12:11 < bridge> 12:11 < bridge> while True: 12:11 < bridge> out = "broadcast %s\n" % MSGRANDOMIZE 12:11 < bridge> No. I won't. 12:12 < bridge> Yes 12:12 < bridge> Okay 12:12 < bridge> If you don't learn to do it yourself you are going to be dependent on other people for eternity 12:13 < bridge> Now I only need this script, and then I think I can implement what I want through the neural network 12:15 < bridge> ..neural network? 12:15 < bridge> 12:15 < bridge> You're currently struggling writing a while loop / using the time library in the time of AI 12:16 < bridge> 12:16 < bridge> Why are you overcomplicating this stuff so much while struggling with the basics. 12:16 < bridge> 12:16 < bridge> ```python 12:16 < bridge> while True: 12:16 < bridge> 12:16 < bridge> Function template 1 12:16 < bridge> Function template 2 12:16 < bridge> Function template 3 12:16 < bridge> sleep(time) 12:16 < bridge> ``` 12:16 < bridge> ..neural network? 12:16 < bridge> 12:16 < bridge> You're currently struggling writing a while loop / using the time library in the time of AI 12:16 < bridge> 12:16 < bridge> Why are you overcomplicating this stuff so much 12:16 < bridge> 12:16 < bridge> ```python 12:16 < bridge> while True: 12:16 < bridge> 12:16 < bridge> Function template 1 12:16 < bridge> Function template 2 12:16 < bridge> Function template 3 12:16 < bridge> sleep(time) 12:16 < bridge> ``` 12:17 < bridge> ```#!/bin/env python3 12:17 < bridge> 12:17 < bridge> from time import sleep 12:17 < bridge> 12:17 < bridge> MSGRANDOMIZE = "Подпишись на наш Telegram @goodservers! На 500 подписчиков будет крупный розыгрыш TAS. Также у нас дешевый TAS и слоунет!" 12:17 < bridge> DELTA = 3600 # интервал между сообщениями в секундах 12:17 < bridge> FIFOPATH = "./fifo.fifo" 12:17 < bridge> 12:17 < bridge> def write(s): 12:17 < bridge> with open(FIFOPATH, "w") as fifo: 12:17 < bridge> fifo.write(s) 12:17 < bridge> print(s) 12:17 < bridge> 12:17 < bridge> sleep(1) 12:17 < bridge> 12:17 < bridge> while True: 12:17 < bridge> write(f"broadcast {MSGRANDOMIZE}") 12:17 < bridge> sleep(DELTA) ``` 12:17 < bridge> Work? 12:18 < bridge> ```#!/bin/env python3 12:18 < bridge> 12:18 < bridge> from time import sleep 12:18 < bridge> 12:18 < bridge> MSGRANDOMIZE = "Подпишись на наш Telegram @goodservers! На 500 подписчиков будет крупный розыгрыш на слоунет. Также у нас дешевыйслоунет и слоунет!" 12:18 < bridge> DELTA = 3600 # интервал между сообщениями в секундах 12:18 < bridge> FIFOPATH = "./fifo.fifo" 12:18 < bridge> 12:18 < bridge> def write(s): 12:18 < bridge> with open(FIFOPATH, "w") as fifo: 12:18 < bridge> fifo.write(s) 12:18 < bridge> print(s) 12:18 < bridge> 12:18 < bridge> sleep(1) 12:18 < bridge> 12:18 < bridge> while True: 12:18 < bridge> write(f"broadcast {MSGRANDOMIZE}") 12:18 < bridge> sleep(DELTA) ``` 12:18 < bridge> ```#!/bin/env python3 12:18 < bridge> 12:18 < bridge> from time import sleep 12:18 < bridge> 12:18 < bridge> MSGRANDOMIZE = "Подпишись на наш Telegram @serv! На 500 подписчиков будет крупный розыгрыш на слоунет. Также у нас дешевыйслоунет и слоунет!" 12:18 < bridge> DELTA = 3600 # интервал между сообщениями в секундах 12:18 < bridge> FIFOPATH = "./fifo.fifo" 12:18 < bridge> 12:18 < bridge> def write(s): 12:18 < bridge> with open(FIFOPATH, "w") as fifo: 12:18 < bridge> fifo.write(s) 12:18 < bridge> print(s) 12:18 < bridge> 12:19 < bridge> sleep(1) 12:19 < bridge> 12:19 < bridge> while True: 12:19 < bridge> write(f"broadcast {MSGRANDOMIZE}") 12:19 < bridge> sleep(DELTA) ``` 12:19 < bridge> How am I supposed to know the script YOU want to use works, it looks okay ish 12:19 < bridge> That's for you to figure out! 12:19 < bridge> If I want to know whether a program I wrote works I don't go ask someone else, I just run it and see! 12:19 < bridge> Okay, just tell me what to register on the server 12:19 < bridge> sv_input_fifo? 12:21 < bridge> oh no, I have transparent cursor and top left icons 12:21 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314189990988746752/image.png?ex=6752de4e&is=67518cce&hm=34edbeee6e009a530c9735673d93bf930ad4b59028ae77eb782ecfb3ffe16337& 12:21 < bridge> Wait Evelyn you're in windows or Linux ? 12:22 < bridge> Linux Ubuntu 12:22 < bridge> I use host 12:23 < bridge> ah good, create a fifo file and specify it with sv_input_fifo 12:23 < bridge> You then use that fifo file in here as well, same file same path 12:24 < bridge> Fifo is basically client and server communicating with each other, one sends to fifo, the other reads 12:24 < bridge> Fifo is basically client and server communicating with each other either with a file (.fifo) or a named pipe on windows, one sends to fifo, the other reads 12:25 < bridge> ? 12:26 < bridge> What to enter into the RCON 12:26 < bridge> you said it yourself already 12:27 < bridge> I registered sv_input_fifo, ran the script on the host in the build directory of the server , but the script just doesn't give out anything , there is no error and no action 12:29 < bridge> why does it always only happen to u xd 12:30 < ws-client> @tsfreddie my lifestyle is being broke, working little and spending little. Being able to allocate on hour of free time daily to go to the beach should fit in every healthy lifestyle (at least in europe :p) 12:30 < bridge> Ah ok mf, come back to Germany and say that again :peperage: 12:31 < bridge> What to do 12:31 < bridge> It should at least be printing something to the shell where you ran it 12:32 < bridge> If the issue is that nothing seems to be showing up on the server then you probably haven't made the fifo file right 12:32 < bridge> No action 12:32 < bridge> Can I do something to narrow the code where the bug can be? 12:32 < bridge> you mean that beach where the sand is concrete of the skycrapers? 12:33 < bridge> I assume you have to create the fifo file by hand then, `mknod p` 12:33 < bridge> if you can reproduce it, start renderdoc and take a snapshot 12:33 < bridge> then you can see if it's really part of the rendercall 12:33 < bridge> Well 12:33 < bridge> fifo.I created the fifo using mkfifo fifo.fifo 12:34 < bridge> I tried joining different servers, changing different settings and nothing changed xd 12:34 < bridge> huh, didn't even know `mkfifo` existed 12:34 < bridge> yeah but still renderdoc will tell us the truth 12:34 < bridge> it's a doc after all 12:35 < bridge> python3: can't open file '/root/DDNetPP/build/broadcast': [Errno 2] No such file or directory 12:35 < bridge> root@GoodServers:~/DDNetPP/build# python3 broadcast.py 12:35 < bridge> Traceback (most recent call last): 12:35 < bridge> File "/root/DDNetPP/build/broadcast.py", line 17, in 12:35 < bridge> write(f"broadcast {MSGRANDOMIZE}") 12:35 < bridge> File "/root/DDNetPP/build/broadcast.py", line 10, in write 12:35 < bridge> with open(FIFOPATH, "w") as fifo: 12:35 < bridge> KeyboardInterrupt 12:35 < bridge> doctor render 12:35 < ws-client> well yea the beach part is depending on being close to a beach fair. But dude bali is so cheap its crazy. 12:35 < bridge> so cheap that you could invite us 12:35 < bridge> for a year 12:36 < ws-client> uhm ._. 12:36 < ws-client> you can crash my place for sure 12:36 < bridge> where to click :justatest: 12:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314193801560195112/image.png?ex=6752e1da&is=6751905a&hm=af0a451c93be3bc867de85983ea9604720976f1e11fc7a4f4b28bc9f2168d5fd& 12:37 < bridge> select ddnet in exec path 12:37 < ws-client> jupstar imagine being room mates 12:37 < bridge> This seems like FIFOPATH is set to "broadcast"? 12:37 < bridge> then fire that mf up 12:37 < bridge> and then press f12 when u see the cursed cursor 12:37 < bridge> and then u can fancy stuff 12:37 < bridge> Ye 12:38 < bridge> we'd discuss the whole day how awesome 0.7 is 12:38 < bridge> i can't imagine better 12:38 < bridge> sadly I can't reproduce it, it just happens "sometimes" :\ 12:38 < ws-client> sounds good 12:38 < bridge> tja 12:38 < bridge> then you play with renderdoc from now on 12:39 < ws-client> im sure you are good at cooking healthy stuff jupstar 12:39 < bridge> yup 12:39 < bridge> chiller: i am ok, but defs not good 12:39 < bridge> i eat like 500-600g vegs every day, but often frozen one 12:39 < bridge> bcs i am too lazy to cut it myself xd 12:40 < ws-client> nice 12:40 < bridge> How do you even get "No such file or directory" when opening a file in write mode? It should just create a file if one doesn't exist! 12:40 < ws-client> unless it is in a folder that does not exist 12:41 < bridge> I just didn't enter the file permission then 12:41 < ws-client> he is writing to the file "broadcast .." should probably be fifo.write not just write 12:41 < bridge> broadcast≠broadcast.py 12:41 < bridge> Oh, are you running the script as a user that doesn't have access to `/root`? I mean that would make sense... 12:42 < ws-client> he runs everything as root 12:42 < ws-client> change line 17 from `` write(f"broadcast {MSGRANDOMIZE}")`` to ``fifo.write(f"broadcast {MSGRANDOMIZE}")`` 12:42 < bridge> окей 12:42 < bridge> `write` is a function defined in the script, not a built-in 12:42 < ws-client> a 12:43 < ws-client> ok yea never mind then i did not read the full code 12:43 < bridge> I am being way too helpful right now 12:44 < bridge> i change 12:44 < bridge> Start script? 12:45 < bridge> File "/root/DDNetPP/build/broadcast.py", line 17, in 12:45 < bridge> fifo.write(f"broadcast {MSGRANDOMIZE}") 12:45 < bridge> NameError: name 'fifo' is not defined 12:45 < bridge> root@GoodServers:~/DDNetPP/build# 12:55 < bridge> Unworkable why? It should work just fine 13:01 < bridge> too bad we need to pay to go to the beach 13:02 < bridge> Us polling communities exposes everyone that is online at a given time to communities 13:04 < bridge> Yeah the change broke it, ChillerDragon just made a mistake 13:30 < bridge> But even with the usual change, it doesn't work for me 14:03 < bridge> But they are exposed anyways no? 14:03 < bridge> If they are on any server, the master catches their name & you can find them 14:04 < bridge> You get some extra info, like when they turned on their client in general, and you get to know they are on the client even if they play on unregistered servers 14:04 < bridge> Does it matter, idk 14:04 < bridge> How do we get this information if you pull the info from us? 😄 14:05 < bridge> You just add the playername to the request & we give you the maps in return 14:05 < bridge> Player opens client 14:05 < bridge> We send a request to you 14:05 < bridge> You know player online now 14:05 < bridge> But what should I do with this information? 14:05 < bridge> Idk, I'm just telling you what extra information you get 14:06 < bridge> We have 13k players. I dont care if someone just opens a client xd 14:06 < bridge> I guess you can go rob them because you know they are now immersed in the game 14:06 < bridge> 🤣 14:06 < bridge> Ask @heinrich5991 he is more creative with these sorts of things 14:07 < bridge> I would also accept something like: "No we dont want to add this feature for 3rd party providers" 14:07 < bridge> Then atleast its a clear path & statement 14:07 < bridge> To be honest nothing is really "unclear". Idk why this conversation got dug back up 14:07 < bridge> I dont know either 14:07 < bridge> I just got pinged 14:08 < bridge> We want this feature for 3rd party providers. We determined the put endpoint was a decent way to implement it without exposing anything extra. Nothing changed there, I just had a sudden burst of real life stuff to do that didn't allow me to complete that 14:09 < bridge> I would personally prefer if there is a put/patch/delete endpoint for community servers 😄 14:11 < bridge> You mean the ips? That would be nice, but updates are infrequent enough that I never really thought it would be enough added value for it to be worth someones time 14:11 < bridge> For the community server ips, yeah 14:12 < bridge> So its more event based & you just keep a state for a community 14:14 < bridge> This is so pretty to me, makes me want to learn Idris 14:14 < bridge> ```idris 14:14 < bridge> app : Vect n a -> Vect m a -> Vect (n + m) a 14:14 < bridge> app Nil ys = ys 14:14 < bridge> app (x :: xs) ys = x :: app xs ys 14:14 < bridge> ``` 14:14 < bridge> but hot damn my brain is so fried from writing cursed Haskell that it feels like it's *refusing* to think about types more complicated than `int` 14:30 < bridge> Syug woh ot eb a ved؟ tahw i deen ot nrael؟ tahw si eht tsrif pets ot pets؟ 🤔 14:35 < bridge> yeehaw 14:42 < bridge> learn cpp in first 14:44 < bridge> learn c first 14:45 < bridge> I woudln't consider this really necessary, what's your reasoning? (I learned C first) 14:46 < bridge> Because IMO the basics of C++ are the same for C (e.g. pointer arithmetic, C-style-casting, structs, formatting ...) 14:46 < bridge> except maybe for free and alloc 14:47 < bridge> except maybe for free and (m)alloc 14:47 < bridge> learn x86 Assembly first 14:49 < bridge> learn how to make ur own processor first 14:49 < bridge> learn physics first 14:53 < bridge> I already learnd c++ and python basics.. so what is the best step now? 14:53 < bridge> Also what IMO means 14:53 < bridge> "in my opinion" 14:54 < bridge> "in your opinion" 14:55 < bridge> in his opinion 14:55 < bridge> ... @essigautomat ❓⁉️❔ 14:58 < bridge> I guess he has the `const char*` already down 14:58 < bridge> in our opinion 14:59 < bridge> many things tend to get easier in c++ such as handling lists, hashmaps or the whole stream arithmetic 14:59 < bridge> also error handly with trycatch 14:59 < bridge> also c++ has object oriented structures. 14:59 < bridge> https://tenor.com/view/meme-our-now-gif-21036569 14:59 < bridge> many things tend to get easier in c++ such as handling lists, hashmaps or the whole stream arithmetic 14:59 < bridge> also error handling with trycatch 14:59 < bridge> also c++ has object oriented structures. 14:59 < bridge> OO is a curse 14:59 < bridge> actually its better to hop c to cpp because if you start learning cpp just like this you will end up writing c code in cpp 15:00 < bridge> i like how you handle that kind of stuff in C it is just really funny to me 15:00 < bridge> and if you know c already you will try to use an actual cpp benefits instead 15:00 < bridge> i like it 15:00 < bridge> in c you will literally remake OO :P 15:01 < bridge> actually me 15:01 < bridge> do you know a solution for doing what #embed does in C99?.... i would love to hear it 15:01 < bridge> is there embed in c99? 15:01 < bridge> no 15:01 < bridge> thats the problem xd 15:01 < bridge> ah 15:01 < bridge> use codegen 15:01 < bridge> and why u stick to c99 15:02 < bridge> ur not old fart 15:02 < bridge> challenge 15:02 < bridge> have already made renderer and now using gtk for ui 15:02 < bridge> write in pure asm xd 15:02 < bridge> have already made renderer with opengl and now using gtk for ui 15:02 < bridge> I stick to C++17, because I don't need a challenge, I want to get stuff done 15:02 < bridge> im getting stuff done 15:02 < bridge> thats a stupid argument xd 15:03 < bridge> but no inheritance 15:03 < bridge> no virtual functions 15:03 < bridge> data and code beautifully separate, like they were meant to be 15:03 < bridge> depends if you need more or less stuff done in a unit of time. My time is limited, I don't want to overthink every single detail 15:03 < bridge> nah, you can reimplement inheritance, composition, virtual tables 15:03 < bridge> I can but I won't 15:03 < bridge> hmm depends. 15:03 < bridge> if you don't make anything bigger than a simple cli thing you will end up with this 15:04 < bridge> yes, I am missing the time aspect, or do you think you'll be faster with c99? 15:04 < bridge> faster in programming, not in terms of program runtime 15:04 < bridge> depends on the problem 15:04 < bridge> Every sufficiently complex software will eventually implement a slow buggy lisp 15:05 < bridge> bros lowkey machine code programmer 15:05 < bridge> https://en.wikipedia.org/wiki/Greenspun's_tenth_rule 15:05 < bridge> my paraphrasing doesn't sound nearly as good as the original 15:06 < bridge> why the fuck wikipedia asks me to donate 15:06 < bridge> they even have commercial branch company why the fuck they are begging to donate 15:09 < bridge> because there is no money in actually good software or online services 15:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314232803575070871/image.png?ex=6753062d&is=6751b4ad&hm=1b73b136230c7ac9ebff9a0a87df4b28d1a047e694197172a3bc15eb2f9216a4& 15:18 < bridge> wikipedias donation campaign is somewhat shady, they don't need your money to keep the website alive, they are redirecting the money to sub-projects 16:20 < bridge> Even if, considering how huge and important Wikipedia is, it's not really lot of money actually. 16:20 < bridge> 16:20 < bridge> But every project of decent size attracts ppl that can't have enough money xd 16:29 < bridge> @jupeyy_keks I got the bug with attached renderdoc :DD 16:30 < bridge> epyc 16:30 < bridge> press f12 16:31 < bridge> wat now 16:31 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314252843422843001/image.png?ex=675318d7&is=6751c757&hm=55ca2d4b7a70e47daa59f797d61f8fcdee79e6b638fe5e889f03772a80e659a7& 16:31 < bridge> on the left press color pass 16:31 < bridge> open it 16:31 < bridge> then find where the cursor is drawn 16:32 < bridge> on "Texture Viewer" you can see how the frame builds up 16:34 < bridge> ok, found 16:35 < bridge> great, next is to go into the pipeline state 16:35 < bridge> first click on "Vertex Mesh" or smth like that 16:35 < bridge> that should show all vertices 16:35 < bridge> Mesh View it is 16:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314254076007026789/image.png?ex=675319fd&is=6751c87d&hm=4ddd81da4350ce5ef7d072eb0573a738d6e9d65ac8fd2e6afd7be54957f33167& 16:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314254085230297158/image.png?ex=675319ff&is=6751c87f&hm=2d4230f6ed924674ae9bbd7b5da7f5ce877d391c52835468f3e05c1da24a3b8d& 16:36 < bridge> these are the interesting fields 16:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314254424423661589/image.png?ex=67531a50&is=6751c8d0&hm=63611614766056f52d0314087c34b2bbe1e3201b67f6d5482871bbc8c24bf52e& 16:37 < bridge> ok 16:38 < bridge> so they actually are transparent for you 16:38 < bridge> lol 16:38 < bridge> which ddnet version are you on? 16:38 < bridge> git revision hash: 2fad40204c14560b 16:40 < bridge> how the hell can that even happen lol 16:40 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314255114453778536/image.png?ex=67531af4&is=6751c974&hm=67eee4757c6457bb894f259aa6e631e226c3b3f8e5f190fbd4c5b1d2ac02b9d7& 16:40 < bridge> something has to literally rewrite the buffer object 16:40 < bridge> but not only that 16:40 < bridge> it must perfectly only overwrite the alpha values 16:41 < bridge> xd 16:41 < bridge> @jupeyy_keks Are numbers in skin names fine or should I disallow that too 16:41 < bridge> idc, ig it can't hurt if the skin name does not start with a digit 16:41 < bridge> but generally numbers can be typed by the international community ig 16:43 < bridge> What about whitespaces? 16:43 < bridge> @jupeyy_keks is there anything else I can do? 16:43 < bridge> People seem to use underscores instead of whitespaces right now 16:43 < bridge> i think we already have so many skins with them that it is kinda too late 😄 16:43 < bridge> i think they often just look what the person above did xD 16:45 < bridge> mhh dunno, i am honestly shocked xd 16:46 < bridge> I'd just use a regex to check the name, `^[a-zA-Z0-9\s_-]+$` 16:46 < bridge> @milkeeycat it happens while the client is open right? 16:46 < bridge> 16:46 < bridge> like it's not directly when you have the client open 16:46 < bridge> That'd allow latin letters, numbers, whitespaces, _ and - 16:47 < bridge> It happens sometimes when I open the client but not during when it's open 16:47 < bridge> ok, i'm fine with that, we have very few skins with a dot, but i've nothing against not doing it 16:48 < bridge> It happens sometimes when I open the client but not during the time when it's open 16:48 < bridge> ah so it's not a _runtime_ bug 16:48 < bridge> but a setup bug 16:48 < bridge> ye 16:48 < bridge> ok that helps a lot already 16:49 < bridge> @robyt3 if you have an idea why _sometimes_ the color is not reset during client setup, you can go ahead and tell me xD 16:49 < bridge> 16:49 < bridge> The _sometimes_ is what makes me a bit nervous. Just resetting the color probably fixes it 16:50 < bridge> But do we even have conditional code in the setup? 16:50 < bridge> Maybe `RenderLoading` ? 16:51 < bridge> <_voxeldoesart> hidden kill tiles 16:53 < bridge> Do we also save the current color during initialization of quad containers? I've also looked at this function and thought it should be impossible for the color to be anything else white. 16:54 < bridge> Do we also save the current color during initialization of quad containers? I've also looked at this function and thought it should be impossible for the color to be anything except white. 16:54 < bridge> Looks like the color could be 0.5 alpha after `RenderLoading` if we don't reset it before initializing the quad container 16:57 < bridge> `\s` would also match other space characters, I guess we only want ` ` and not tabs/newline/zero-width spaces etc. 17:04 < bridge> You don't have to. The OO lobby has poisoned your mind. Polymorphism isn't the only way to write code 17:30 < bridge> Today I'm integrating with an API that has a string field, that can only be `"true"` or `"false"` 17:34 < bridge> is it inside a json, or literally a parameter that takes "true" as string? 17:38 < bridge> It's a json payload, that has bools elsewhere and the parameter is called "reverseFlag". Absolutely zero reason that couldn't be a bool aswell 😄 17:39 < bridge> Another funny thing is that items in the item array have a float price field, the overall payload has a string total price field 17:40 < bridge> Then I've seen worse. 17:40 < bridge> Some delphi app that returns the boolean as string as "Wahr" which is german for true xDDDD 17:40 < bridge> float for monetary should be a crime 17:41 < bridge> float for money should be a crime 17:41 < bridge> LOL that's great i8n 17:41 < bridge> Well it's accurate enough for pretty much any amount of money, when does a float32 even lose 2 digit precision? 17:42 < bridge> f64 already looses it with 0.6 17:42 < bridge> 17:42 < bridge> But only if you absolutely don't round 17:42 < bridge> :RR: :UU: :SS: :TT: 17:43 < bridge> :RR: :UU: :SS: :TT: :brownbear: 17:43 < bridge> (fwiw internally I use fixed point numbers for money everywhere) 17:43 < bridge> Sadly rust doesn't implement fixed points properly either 17:43 < bridge> There is a colleague I have that keeps making a PR trying to convert my nice fixed point numbers into doubles though 17:43 < bridge> Seems like most ppl except us simply don't care 17:43 < bridge> u simply shouldnt use floats, store it as cents with integers 17:43 < bridge> f64 is accurate enough for most xd 17:44 < bridge> that sadly doesn't work either 17:44 < bridge> many apps want decimal cents 17:44 < bridge> :VV: :UU: :LL: :KK: :AA: :NN: 17:44 < bridge> epyc 17:44 < bridge> ??? 17:44 < bridge> convinced me 17:44 < bridge> its how the industry standard works 17:45 < bridge> depending on the money type its different quantity of cents 17:45 < bridge> You can cheat, internally do everything in cents, externally just put a fake dot 17:45 < bridge> u just need to save if its jpy or € 17:45 < bridge> when displaying u just display it as float 17:46 < bridge> losless arithmetic 17:46 < bridge> Working at this job has made me notice how godawful people are at designing APIs, it's almost like most of the time there is no design at all 17:46 < bridge> i am not rich enough that f64 is inaccurate enough 😏 17:47 < bridge> this makes me think being a "software architect" isnt as hard as it might be given the level on the field 17:47 < bridge> Bigger companies like Stripe/Paypal are great, they have very well documented very flexible apis, but these small vendors create the most attrocious horseshit I've ever seen 17:47 < bridge> tbf, it is hard. 17:47 < bridge> 17:47 < bridge> Either an API is super fast and sucks to use. Or it's super easy and doesn't scale xd 17:47 < bridge> stripe looks rly good 17:47 < bridge> but lately high fees for small players 17:47 < bridge> So they end up using the worst from both worlds 17:47 < bridge> Super hard to use, and still shit 17:48 < bridge> just use mongodb for web scale 17:48 < bridge> This integration I'm working on is worst of both worlds. It's slow, sucks to use and doesn't scale 17:48 < bridge> They really managed to capture something special here 17:48 < bridge> have u considered piping it to dev null 17:48 < bridge> It would be very fast 17:49 < bridge> Just breaks a couple ACID promises 17:49 < bridge> I guess it's still atomic, you never observe the change so you can't observe half changes 17:50 < bridge> It's also still consistent, nothing is always consistent with nothing, and the database state never changes so it can't become inconsistent 17:50 < bridge> Actually /dev/null might be a better db than mongo 17:51 < bridge> :WW: 17:51 < bridge> It just needs to work a little on the Durability 17:51 < bridge> whoever added the words emotes is a genius 18:11 < bridge> <0xdeen> This reminds me, today I noticed that in Rust `lto = false` does not disable LTO, you have to do `lto = "off"` instead: https://doc.rust-lang.org/cargo/reference/profiles.html 18:11 < bridge> <0xdeen> > false: Performs “thin local LTO” which performs “thin” LTO on the local crate only across its codegen units. No LTO is performed if codegen units is 1 or opt-level is 0. 18:33 < bridge> https://doc.rust-lang.org/std/?search=Result%3CT%2CE%3E%20-%3E%20Option%3CT%3E 18:33 < bridge> @heinrich5991 @jupeyy_keks did u know this trick? 18:33 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314283485065773127/image.png?ex=67533561&is=6751e3e1&hm=d67bb25b0a747186d17b294732c5188fedd369891812f3081a917b5d7add965e& 18:33 < bridge> shows results for converting from a type to another in docs 18:34 < bridge> Lol interesting 18:34 < bridge> but you have to know the name of the generic attribute xd 18:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314284303231746048/image.png?ex=67533624&is=6751e4a4&hm=c9e5724c95bcf2154d3bff3456e616ab760c14884c3188790c3b591a7594b471& 18:36 < bridge> not at all 18:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314284367954186240/image.png?ex=67533633&is=6751e4b3&hm=91c4265ccce58471f2e1b2792b6042ef438452bbc97821afc4c80921895c501b& 18:36 < bridge> xd 18:38 < bridge> for me it at least rejects wrong ones 18:38 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314284898969714768/image.png?ex=675336b2&is=6751e532&hm=3ef6c483c9bed2c3424cb24a817bdbc4007d039c9e267ed0af5959c4bbdc82e2& 18:39 < bridge> for some entries 18:39 < bridge> replaced T with B 19:19 < bridge> @jupeyy_keks thx for fixing the bug :heartw: 19:44 < bridge> does anyone know how to capture wine output? It starts to get ... weird: 19:44 < bridge> `wine cmd /c start ${BUILD_DIR}/tests.exe ^> output.txt` 19:45 < bridge> this doesn't work btw, but this works on windows (ofc without wine) 19:47 < bridge> nevermind this doesn't work because of the directory, lol fck mcrsft 19:48 < bridge> do you want to capture outpute inside wine or simply the linux terminal output? 19:48 < bridge> I figured it out, it's `build\\tests.exe` instead of `build/tests.exe` fck me I guess 19:49 < bridge> do you want to capture output inside wine or simply the linux terminal output? 19:49 < bridge> annoyingly the output doesn't get captured by wine at all, I want to capture the output of the windows binary 20:08 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1314307352261820466/image.png?ex=67534b9b&is=6751fa1b&hm=58246f34e8998a523bbc444ab6671bf047f0338e2dc697f917988596cf9cdbf7& 20:08 < bridge> :feelsbadman: 20:08 < bridge> time to fill up a pr 20:11 < bridge> ddnet (or teeworlds for that matter) is quantizing the positions and velocities, I always wondered why? What's the benefit of doing this, is this for lower bandwidth? 20:24 < bridge> You'd have to ask matricks, I'm guessing it's a combination of many things, it's better for determinism, it's better for network efficiency 20:25 < bridge> I think the only reason it's not straight up fixed point is because he didn't want to have a max map size 20:37 < bridge> @mtrcks if you ever end up checking discord again :this: 🙃 20:39 < bridge> <_voxeldoesart> oh yea i forgot matricks was here 20:41 < bridge> I also hate floats with a passion, so I would have probably gone entirely with fixed point numbers only converting to float at the very very end because gpus can't do fixed point 20:42 < bridge> With fixed point everywhere we'd have even better determinism, stuff like moving parts around the map would work perfectly 20:53 < bridge> GPUs can do fixed point, just not in a single operation but two 20:55 < bridge> They can do operations but you still need to get to a float to display stuff, no? The coordinate system doesn't understand fixed point 20:57 < bridge> what coordinate system ? 20:57 < bridge> most libs to draw things in 3D uses floating points, so i'd guess the underlying hardware is probably using floating point as well 20:59 < bridge> opengl and vulkan have support for fixed points ranging from 0-1.. so basically no integer part. 20:59 < bridge> 20:59 < bridge> ddnet even uses that. If however this means the GPU makes use of it, is another topic xd 21:02 < bridge> in embedded cpu, i often see hardware support for 1.7 fixed point format 21:02 < bridge> don't know why specifically this format though 21:03 < bridge> time to remember the terms I used back when I was actively translating 21:05 < bridge> hm, aren't all coordinates expected to be in normalized floating point? Is there support for integer texel coordinates e.g.? 21:05 < bridge> i don't really know what's inside gpu 21:05 < bridge> weirdly enough, it's not taught in any hardware design class i knowof 21:05 < bridge> weirdly enough, it's not taught in any hardware design class i know of 21:06 < bridge> it's probably all proprietary anyway 🙃 21:06 < bridge> well, we now have open hardware for cpu, soon gpus will follow as well 21:07 < bridge> im sure i've seen opengpu somewhere already 21:07 < bridge> but it's more gpus used for computing rather than for drawing i think 21:07 < bridge> do you mean theoretically or practically? 21:07 < bridge> 21:07 < bridge> you can fetch texels above 1.0, it depends on your texture wrap what the result is then. repeating texture or clamp to edge etc. 21:07 < bridge> Is there any capability in vk or gl to address a specific pixel on a texture e.g.? 21:07 < bridge> u can fetch a texel 21:08 < bridge> I mean 1.0 is a float, and I know going above it wraps. I'm curious if there is support for proper integer coordinates, or say a fixed point coordinate 21:09 < bridge> By it's exact integer coordinates without ever having to convert to float? 21:09 < bridge> yes 21:09 < bridge> Oh, that's cool, I did not know this 21:09 < bridge> https://registry.khronos.org/OpenGL-Refpages/gl4/html/texelFetch.xhtml 21:10 < bridge> https://www.wired.com/story/rayv-lite-laser-chip-hacking-tool/ interesting 21:12 < bridge> the biggest problem of fixed points is simply the value range. 21:12 < bridge> 21:12 < bridge> if you are not currently working with [0-1] numbers only, then you directly need a 64bit fixed point to have a decent value range 21:13 < bridge> 16.16 would be well enough for ddnet 21:13 < bridge> Yeah, range is the well known issue. I thought hardware support on gpus were also an issue but I guess not 21:13 < bridge> largest maps are not 64K blocks large, so it would work quite well 21:13 < bridge> and do you also perform your math operations on the size? 21:13 < bridge> You probably don't need 16 bits after the dot even, so you can maybe have larger maps too 21:14 < bridge> «Close»? Where this one appears? 21:14 < bridge> i dont think we can handle more than u16xu16 maps _ever_ xd 21:14 < bridge> i even made it a hard limit 21:15 < bridge> wdym ? 21:15 < bridge> so technically a 16.16 fixed point integer would be sufficient for teeworlds in your opinion? 21:15 < bridge> It has enough range and has 0% error across the range 21:16 < bridge> hard to say, i'd need to see how common math functions would be implemented, like tan, sqrt etc. 21:16 < bridge> like always stay 16.16 21:16 < bridge> never use higher resolution 21:17 < bridge> I didn't mean performance wise. This is another big issue with fixed point math, they just don't have the great hardware support floats get 21:17 < bridge> i also don't mean performance wise 21:17 < bridge> Well if you don't care about performance you can get as accurate as you want with your tan sqrt etc 21:17 < bridge> multiplication would need 64b (32.32) integer then rescaling to 16.16 21:17 < bridge> let's reformulate. 21:17 < bridge> if zwelf would try out fixed points and all his tests would still work. why not xd 21:17 < bridge> sqrt on int is pretty easy 21:18 < bridge> Both can be implemented as a power series expansion 21:18 < bridge> for trigonometric, either table based or cordic could work 21:18 < bridge> ah @learath2 btw 16 is not enough, bcs we can go -200 into the map 21:18 < bridge> forgot about that 21:18 < bridge> so for coordinates it's not enough 21:18 < bridge> also note that these functions are not that performant on float either 21:18 < bridge> only for rendering xdd 21:18 < bridge> wym -200 into the map? 21:19 < bridge> 16.16 is signed 21:19 < bridge> like outside the map 21:19 < bridge> yes but then i16 is really small 21:19 < bridge> still leaves you 32K block maps 21:19 < bridge> except we only want 32k max size 21:19 < bridge> but that already halves it 21:20 < bridge> i mean 32.32 would be that bad tbh, not like 99% of all modern cpus that could start ddnet have 64bit instruction set anyway. but yeah would still cost bit perf probs 21:20 < bridge> i mean 32.32 would be that bad tbh, not like 99% of all modern cpus that could start ddnet don't have 64bit instruction set anyway. but yeah would still cost bit perf probs 21:20 < bridge> This is impossible I guess. Maps rely on floating point inaccuracy now. Drop parts break at different distances to the origin 21:21 < bridge> yeah ofc without the edge cases 21:22 < bridge> if we end up re-releasing 5 maps 21:22 < bridge> that doesn't sound too bad lmao 21:22 < bridge> I would most definitely experiment with it, but I don't think performance requirements can be satisfied easily without some hw support 21:22 < bridge> i mean modern cpus have insane integer performance 21:24 < bridge> my personal serious concern with fixed points is really language support 21:24 < bridge> int performances is alwyas better than float performances because there are more int functional units than floats ones 21:24 < bridge> basic cpp class should do it 21:24 < bridge> i use `fixed` crate a bit in rust for some binary layouts. and working with it is really not nice xD 21:24 < bridge> with inlining operators, it would be quite efficient 21:25 < bridge> Maybe that's what I should try as my teeworlds project. Just rewrite the whole thing in fixed point integers 21:25 < bridge> rewrite the entire thing in Go 21:25 < bridge> not that easy, u also need sqrt, tan, sin etc. 21:25 < bridge> without that it's not usable 21:26 < bridge> @jupeyy_keks so wait, can I really just upload fixed point ints into the gpu as coordinates? 21:26 < bridge> as said only normalized ones 21:26 < bridge> so [0-1] range 21:27 < bridge> These are mostly solved problems, idk if the performance is up to par nowadays, but it's all either tables or series or iterative numeric methods 21:27 < bridge> maybe rust lacks behind in that matter 21:27 < bridge> i don't know any fixed point lib that fells like a drop in replacement 21:28 < bridge> well, just implement the functions as well, i don't see any issue with that, except maybe performance 21:32 < bridge> i don't know any fixed point lib that feels like a drop in replacement 21:47 < bridge> Here you are 21:48 < bridge> Here you are 21:48 < bridge> Waiting for the F-Droid build xD 21:51 < bridge> good luck waiting, bcs f-droid really is annoying xD 21:51 < bridge> it takes like one week before your build is done 21:53 < bridge> fdroid also has pretty strict requirements on the build tools. dunno how exactly that process works xd