00:42 < bridge> thanks furo 00:43 < bridge> i may be the most blind person to ever have working eyes 00:44 < bridge> :nouis: 00:44 < bridge> did you know thatyou can press play in the main menu to choose servers instead of typing them in f1 to connect to them 00:46 < bridge> never knew 01:03 < bridge> @mpft: you also don’t have to reconnect when you touch freeze you can bind self kill in the settings 01:03 < bridge> ahhh, that makes so much sense 01:03 < bridge> how tf did i play the game all this time 01:04 < bridge> this info would have been nice to have a few yrs ago 01:04 < bridge> Back then it was bind only not even in settings real gangster developer type shit 01:04 < bridge> wowo 01:04 < bridge> I think these days it might even be bound by default 01:05 < bridge> im joking 01:05 < bridge> shift + is a good bind for it 01:05 < bridge> shift + r* 01:05 < bridge> Is that yours? 01:05 < bridge> yea 01:05 < bridge> Leak 01:05 < bridge> has the added benefit of emoting every time i die 01:06 < bridge> it’s bound to the music notes emote not emote wheel 01:06 < bridge> that thing is too slow for my emotions 01:06 < bridge> Next time you have a new question I will tell you to reload the client using shift + r 01:06 < bridge> ctrl r resets my binds 01:06 < bridge> closest thing 01:07 < bridge> i am finding super non specific info on who i have to put on my passport in the parents fields 01:07 < bridge> I recently managed to troll a old ctf pro by making him type „quit lags“ in f1 01:07 < bridge> nice 01:08 < bridge> Wait no 01:08 < bridge> It was „quit teamchat“ 01:08 < bridge> But whatever 01:08 < bridge> dude i just found out that if u type “kill” in f1 it prints “gullible” 01:09 < bridge> ??? 01:09 < bridge> Ah 01:09 < bridge> Omg you almost got me 01:09 < bridge> Telling an admin to do „kill all“ in rcon is also good one 01:10 < bridge> real 01:11 < bridge> I only have one emote bound to a key, and that's :heartw: to H, but I think I might want to add some more 01:11 < bridge> my 1-0 are emotes 01:11 < bridge> because I do not have the skill for fast emote wheel 01:12 < bridge> i can just put my finger on 6 and it’ll spam “WTF” 01:12 < bridge> it'd be so much better if it reset your emote wheel cursor to the middle each time, so it was like a proper radial menu 01:12 < bridge> only on ddnet tho 01:12 < bridge> kog hates fun 01:12 < bridge> i stopped using it long ago enough that I thought it did work this way 01:37 < bridge> the order changes when you change a map and it is not deterministic, whose ip belongs to what nicknme. 01:38 < bridge> *change map with more than 1 players on the server. 01:52 < bridge> the more players you have on a server while changing the map, the easier it is to reproduce the logs being not in the expected order. 03:07 < bridge> is there any reason practice mode is disabled?? 03:18 < bridge> maybe the server your on hasn't restarted yet 03:18 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351741645615534121/image.png?ex=67db7b02&is=67da2982&hm=8605e9e450de3a4bb0707c96bf35bb1630925c524200405fefc5dab624ffe558& 03:18 < bridge> sks 03:19 < bridge> maybe the server your on hasnt restarted yet @hokepoke 03:19 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351741732424777778/image.png?ex=67db7b17&is=67da2997&hm=766bb71bf451abc4c69f7e2e57f820d60d838cc17bd3b766686a72db9c381c66& 03:19 < bridge> hmm i cant send images 03:19 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351741773197606953/image.png?ex=67db7b20&is=67da29a0&hm=686275bea691b1533ebc7fb0cd4b37bc93ea3adeede9794470081b4419c7fb82& 03:19 < bridge> yes i can... its just really delayed 03:22 < bridge> hasnt restarted since when? I havent been able to use practice mode on any usa server for over a week 03:49 < bridge> well theres been an unpatched exploit for... well ever. practice got disabled after it was discovered and undisabled since it recently got patched 04:32 < bridge> ah ok ty 05:46 < bridge> i put my finger on kp4 and i spam every emote so i dont have to worry about what happens 07:35 < bridge> Morning `void*` enjoyers and others 07:58 < bridge> why 08:01 < bridge> https://www.reddit.com/r/Gentoo/comments/1jdkikd/an_example_case_of_compiler_optimizations/ 08:01 < bridge> morning gentoo users and others 08:01 < bridge> Without the reset you need to memorize the cursor position from last use, else you can't use the wheel without looking at it 08:49 < bridge> gm c enjoyers and others 08:57 < bridge> What do you think of the idea to color switch doors (and their switches) individually instead of coloring all doors by a single (custom) color? Meaning that a switch and it's door have the same color ofc 09:01 < bridge> This would also give the mappers the option to select a door color for their map 🤔 09:04 < bridge> c99* 09:04 < bridge> Gumo! 09:26 < bridge> Common Gentoo W 💪 09:48 < bridge> 26% honestly not that much, the initial flags were probably pretty good then. 09:55 < bridge> H8r 10:02 < bridge> I think that's about what you would expect if you use all the "unsafe" flags for any given software 10:03 < bridge> this guy gets 10x performance 10:03 < bridge> https://gist.github.com/jwbee/7e8b27e298de8bbbf8abfa4c232db097 10:04 < bridge> perspective matters, making a graphics card 5% smaller, nearly nobody cares, making it 5% more efficient and you impact the world 10:05 < bridge> this guy gets 90% more performance 10:05 < bridge> https://gist.github.com/jwbee/7e8b27e298de8bbbf8abfa4c232db097 10:06 < bridge> 26% on a task that may run a year and you stop spending thousands, if not millions, from a business perspective 10:06 < bridge> I think the fact it's only 26% shows that the developers clearly thought about compiler optimization in their default built setup. 10:07 < bridge> you get more out of ddnet with similar efforts 10:07 < bridge> I think the fact it's only 26% shows that the developers clearly thought about compiler optimization in their default build setup. 10:08 < bridge> I'll remind you, that ddnet needs to run on multiple machines across multiple OS. Of course if you optimize it for your system you might get more performance out of it 10:08 < bridge> in my book 26% is a lot 10:09 < bridge> yes, that's exactly why there are improvements to be made in the first place. 10:09 < bridge> like isn't that the whole point of gentoo? 10:10 < bridge> you build it for your system so you don't need to care about cross compatibility 10:10 < bridge> gentoo point is being highly flexible 10:10 < bridge> enable disable what u want etc 10:10 < bridge> im amazed u think 26% is not a lot 10:11 < bridge> xd 10:11 < bridge> xd 10:11 < bridge> a lot by what standard 10:11 < bridge> by optimizing standards 10:11 < bridge> most ppl are grateful to get 4% improvement 10:11 < bridge> I think most shipped software has that margin 10:11 < bridge> obvious scam xd 10:11 < bridge> for example rust improves perf by 1% they call it a win 10:11 < bridge> thats how hard it is 10:11 < bridge> I would like 26% more in my bank account, but it might not make a lot of difference for others 10:11 < bridge> also this is a encoder software 10:11 < bridge> any perf win there is massive 10:11 < bridge> it's not a scam? 10:12 < bridge> You don't get that increase just by using slightly more aggressive compiler flags 10:12 < bridge> lets make the ddnet sercer decentralized, so EVERY computer is a server! 10:12 < bridge> ubuntu chooses a poor allocator, they switched it for a better one 10:13 < bridge> that's the entire post 10:13 < bridge> yeah then this single app profits from it 10:13 < bridge> ok? 10:13 < bridge> that's what we're talking about xd 10:14 < bridge> The headline is clearly clickbait 10:14 < bridge> how 10:14 < bridge> Bro.. "Make Ubuntu packages 90% faster by rebuilding them" 10:15 < bridge> he made a package 90% faster 10:15 < bridge> "You can take the same source code package that Ubuntu uses to build jq, compile it again, and realize 90% better performance." 10:15 < bridge> Could aswell say make jq 90% faster 10:15 < bridge> recursively rebuild it so it keeps getting 90% faster 10:16 < bridge> the title is not important to me xd 10:16 < bridge> Without the clickbait title, I'd have not clicked it 10:17 < bridge> it's just an example that usually there is performance to gain by building the software for your specific architecture and with less portable features. I think 26% or more is an expected amount to gain for this on average 10:17 < bridge> > I think 26% or more is an expected amount to gain for this on average 10:17 < bridge> Honestly I even doubt that. 10:17 < bridge> Except you really design a compiler explicitly for your arch 10:17 < bridge> it's probs around 5% 10:18 < bridge> they use Ofast, that's not really acceptable in most apps 10:18 < bridge> On phoronix you can find lots of benchmarks with lto, mnative etc. 10:18 < bridge> Often they were even slower 10:18 < bridge> True 10:18 < bridge> Ofast is smth that gives a small benefit 10:18 < bridge> On phoronix you can find lots of benchmarks with lto, march=native etc. 10:18 < bridge> your visit to the page will not be forgotten 10:19 < bridge> :lol: oh no 10:19 < bridge> they also did profile guided optimization which is arch specific 10:19 < bridge> PGO is really good for making binaries smaller. I've tried it in few apps, but never really saw perf increases 10:19 < bridge> it was most of their gain 10:19 < bridge> in the chart 10:20 < bridge> yo is there a way to enable -ffast-math for only specific parts of code? 10:20 < bridge> helo tater btw 10:20 < bridge> hi 10:20 < bridge> You can try #pragma directives 10:21 < bridge> if you look at the chart you can see most of the things that improve perf are arch specific or unsafe 10:21 < bridge> avx512 10:22 < bridge> Yeah I defs accept it for an encoder, which is a highly specialized software 10:23 < bridge> But I doubt you see 26% on a wider range of apps 10:23 < bridge> I like to be proven wrong, but then I'd also like to have benchmarks for many apps 10:25 < bridge> I mean most developers don't throw the kitchen sink at their build process to make it as fast as possible. like what even is this thing https://polly.llvm.org/ 10:26 < bridge> https://www.phoronix.com/review/gcc11-pgo-5950x/4 10:26 < bridge> 10:26 < bridge> Here PGO is around 12%. Already pretty good 10:26 < bridge> Try it on TClient xd, I should be CPU bottlenecked on my system 10:26 < bridge> Would be a funny experiment 10:26 < bridge> I said already ddnet gets more than 26% 10:27 < bridge> Where is your binary? 10:27 < bridge> I don't ship it xd 10:27 < bridge> Non-believers ITT trying to discredit Gentoo users 10:28 < bridge> in my case I only care about the physics tho, for making TAS 10:28 < bridge> If you can build a linux build, pls share it with me, bcs my system defs got slower over the years. 10:28 < bridge> 10:28 < bridge> I had like 10k+ FPS, now i have like 8k FPS XD. so 20%+ would be nice 10:28 < bridge> regular player fps is probably bottlenecked by tee rendering or something, idk how much that improves 10:30 < bridge> Did someone say NixOS????? 10:30 < bridge> anyway it's pretty clear that performance isn't a huge priority for ddnet, if you look at a profile you can see that xd 10:30 < bridge> probably some easy gains to be made 10:31 < bridge> From physics POV maybe. 10:31 < bridge> 10:31 < bridge> But I don't see lot of places where ddnet wastes lot of perf. 10:31 < bridge> 10:31 < bridge> Only the snapshots are really slow afaik 10:31 < bridge> On windows the kernel call to recv is slow 10:31 < bridge> And ddnet generally does not scale well with more entities 10:32 < bridge> for me frametime seems to linearly correlate to the number of players on the server/ on my screen very directly 10:34 < bridge> True, but if you know about improvements without breaking the game you could defs implement them and pr it. 10:34 < bridge> 10:34 < bridge> Well ofc depends on how readable it stays 10:35 < bridge> yeah but that's the point 10:35 < bridge> the current ddnet has no reason to trade readability for performance, because it's good enough rn 10:35 < bridge> We did clean up the profile a lot, if you do see any low hanging fruit feel free to make a PR/Issue 10:36 < bridge> It used to be much worse especially with syscalls 10:36 < bridge> I think the non O(n²) physics would be really cool for 128p 10:36 < bridge> Who is brave enough to try it 10:36 < bridge> 😬 10:36 < bridge> doing it is the easy part 10:36 < bridge> testing it is the hard part 10:37 < bridge> This and the linear searches through the snaps are probably the only expensive things on the hot path 10:37 < bridge> (Only expensive things that are known about but not fixed*l 10:37 < bridge> (Only expensive things that are known about but not fixed*) 10:37 < bridge> Do we already have a plan when to enable 128p? 10:37 < bridge> Next version? 10:38 < bridge> Do we even have proper server support? I thought the first PR only made it natively work on the client 10:38 < bridge> I am defs interested in show_all performance xD 10:38 < bridge> Btw why 128 and not 256 or unlimited? 10:38 < bridge> Yeah I think that was the most important step? 😄 10:38 < bridge> Bcs our physics are slow 10:39 < bridge> It does not scale linearly 10:39 < bridge> Also our networking isn't built to handle that 10:39 < bridge> The snaps will just get far too large 10:39 < bridge> if you want to fix the physics you should create physics testing 10:39 < bridge> as it is a PR that fixes the physics would never be accepted 10:39 < bridge> Which is what Zwelf is doing 10:39 < bridge> is there a repo for that? 10:40 < bridge> So 128 is the goal but not the limit? 10:40 < bridge> https://gitlab.com/ddnet-rs/twgame 10:40 < bridge> It's the _next_ limit 10:40 < bridge> I doubt it will increase any time soon 10:40 < bridge> does it integrate into the cpp ddnet? 10:40 < bridge> it's not clear to me how that works 10:41 < bridge> afaik no. I think he planed to create an own server 10:41 < bridge> Tbf I don't reaaally think 128p is a great idea except for maybe multeasymap and linear servers 10:41 < bridge> I dunno why it's useful at all xD 10:41 < bridge> 10:41 < bridge> More afk ppl on one server 10:41 < bridge> Not yet. He is planning to extract the physics out to make that possible though. For now it uses teehistorian positions as a source of truth 10:42 < bridge> Tho playing with 500 tees on ctf1 is always fun 10:42 < bridge> ngl 10:42 < bridge> is the physics really the only issue? 10:42 < bridge> (To ensure twgame mimics ddnet physics exactly) 10:42 < bridge> for supporting 500 tees? 10:43 < bridge> I don't think the rendering or server can keep up 10:43 < bridge> idk 10:43 < bridge> in ddnet-rs it was, but ofc I never tested with 500 separat connections 10:43 < bridge> On my PC it broke at around 2000 tees 10:43 < bridge> Rendering should be fine iirc. Snaps might require a way to chunk 10:43 < bridge> you can get rid of O(n^2) tee physics pretty easily ngl 10:44 < bridge> it's not a big diff 10:44 < bridge> I mean you can always at least draft it 10:44 < bridge> If you don't want to have reviews 10:44 < bridge> Just to show off 10:44 < bridge> well you've done that already 10:44 < bridge> But not in cpp 10:44 < bridge> yeah but that's just an implementation detail 10:45 < bridge> if the process was in place to test such a change I could do it in a few days 10:45 < bridge> true 10:50 < bridge> the change I'm more interesting in doing a draft/show off project for is reworking the input network handling and switch the compression alg to ztd 10:50 < bridge> the change I'm more interesting in doing a draft/show off project for is reworking the input network handling and switch the compression alg to zstd 10:51 < bridge> The input chain we once talked about is smth I still find interesting 10:52 < bridge> I think with zstd such high effort might be negligible idk 10:52 < bridge> New pc arrived, sry @teero777 10:52 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351855958569259048/IMG_20250319_105229.jpg?ex=67dbe578&is=67da93f8&hm=629e5a37d2f7e60370c811ed788e2028b10782ad477f7a11b5c6576d258f9e66& 10:54 < bridge> PC parts? 10:56 < bridge> Yeah 9950x3d xd but teero still in school so no livestream 10:56 < bridge> :o 10:56 < bridge> those compile times will be good 10:59 < bridge> @jupeyy_keks what's current CPU? 11:01 < bridge> AHAHAH 11:01 < bridge> RAAAAAAA 11:01 < bridge> im in physics class rn 11:01 < bridge> man 11:05 < bridge> :Aware: :Aware: nooo pls wait 5 hours pls pls pls 11:05 < bridge> :justatest: 11:16 < bridge> please 11:32 < bridge> Have you even benched this? Traffic is already fairly low for a teeworlds server, idk if messing around with compression is even worth your time 11:32 < bridge> it's not that low? 11:32 < bridge> by online gaming standards 11:32 < bridge> it's average-highish 11:33 < bridge> esp for upload 11:33 < bridge> It's so low that not once have we ever had traffic issues on any of our servers until we got to china where bandwidth is extremely limited 11:34 < bridge> this conflicts with feedback I've recieved from other admins 11:34 < bridge> Maybe you can achieve a 40% reduction it could enable china to have 64p servers again 11:34 < bridge> Maybe if you can achieve a 40% reduction it could enable china to have 64p servers again 11:34 < bridge> 11:34 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351866465870938205/image.png?ex=67dbef41&is=67da9dc1&hm=7a78491ab857b264e28fdc41fb5c869b7748784962abdde3236d5469bf9d549d& 11:34 < bridge> I think 3x is possible 11:35 < bridge> at most 11:35 < bridge> 2x easily 11:35 < bridge> If you want showall enabled for all players that's another thing 11:35 < bridge> no I just want a checkbox 11:35 < bridge> but heinrichs says that's too much bandwidth 11:36 < bridge> you say we have plenty 11:36 < bridge> I am confused 11:36 < bridge> You are a smart person, it shouldn't be too hard to connect the dots. Because most people do not use /showall, we have plenty of bandwidth at all locations except china 11:37 < bridge> I promise I'm not pretending, I actually don't understand 11:38 < bridge> are you saying our bandwidth is low only because no one uses /showall? 11:38 < bridge> Anyway, if you do achieve a significant amount of extra compression and there isn't much performance penalty, it would definitely be merged. I'm just concerned you are wasting your time 11:39 < bridge> lower bandwidth usage for client upload improves reliability by quite a lot afaik 11:39 < bridge> Yes, as far as I remember bandwidth only ever becomes an issue when we have multiple full servers with everyone using showall 11:41 < bridge> In almost a decade, I have only ever seen bandwidth issues on a handful of locations, China and Iran 11:41 < bridge> I guess China would appreciate it, they were disappointed that we can't host full size servers there 11:44 < bridge> anyway the reason I want to add zstd is not just for showall. Like we talked about earlier input reliability can be improved, and also there's justification for the server sending the stream of buffered inputs of other players back down to all clients. Which if you finish adding sound prediction would let players "run ahead" of the server's gametime to get high prediction margin benefits without suffering from latency 11:44 < bridge> overall it's probably too experimental for ddnet, hence the example project 11:47 < bridge> Could be cool 12:47 < bridge> but its easy, you will not be able to spam emotes anymore if it would reset your cursor every time 12:53 < bridge> Maybe I'm just skill issued 12:54 < bridge> Cursor getting reset after a couple seconds would be best of both worlds imo 12:56 < bridge> no 12:56 < bridge> not for me at least 12:56 < bridge> i used that emotewheel for decade now there's no real reason to reset it xd 12:56 < bridge> 3950x 12:57 < bridge> could be an option but i don't think it will get into ddnet, maybe in tater client 12:57 < bridge> man stream it so meloni would record it and show to teero later frfr 12:58 < bridge> It clearly takes at least 1k hours of experience to properly learn the emote wheel 12:58 < bridge> took 100 hours to fellow tiktok kids 13:04 < bridge> I'm not home :VAngy: 13:41 < bridge> I've long finished xd 13:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351898495107465246/image.png?ex=67dc0d16&is=67dabb96&hm=102e5cacb71d89708a2bbe300974886e8bfe5da979b1dd48465027cc39c83f71& 13:42 < bridge> ddnet compiles in: 13:42 < bridge> `ninja 220,29s user 8,62s system 1767% cpu 12,954 total` 13:50 < bridge> Maybe have a dead zone which select the last used emote 13:52 < bridge> Seems like it would be quite intuitive too 14:07 < bridge> ez 14:07 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351905035780362240/image.png?ex=67dc132d&is=67dac1ad&hm=f644e83bdeb804633e1c253bb48409d584393a5c0baf3ad57f251cafcac96f47& 14:08 < bridge> But in ddnet i only get 10k fps 🫠 14:08 < bridge> 14:08 < bridge> why is it so slow there 14:09 < bridge> with `SDL_VIDEODRIVER=wayland ./DDNet` I get around 15k. 14:09 < bridge> 14:09 < bridge> Still 5k fps less 14:09 < bridge> RIP 14:11 < bridge> oh ok the gpu is bottlenecking, fullhd i also get 20k, ez 14:11 < bridge> Literally unplayable 14:11 < bridge> I always go for 1 microsecond frametime 14:11 < bridge> I go with gsync 14:12 < bridge> True, need faster GPU now 14:12 < bridge> I was going to suggest a deadzone but that would make it impossible to cancel your decision to emote 14:12 < bridge> unless you have a deadzone in the middle of the cancel zone 14:13 < bridge> Good point 14:13 < bridge> I didn't think of that 14:14 < bridge> though a deadzone in the middle of the cancel zone wouldn't be so bad, since if you're canceling your emote you're probably moving the mouse for a bit first 14:14 < bridge> since canceling usually takes a bit of thought 14:16 < bridge> I am not sure if that's good design 14:17 < bridge> @jupeyy_keks I'm coming gonet 14:17 < bridge> Maybe it's not hard to spam emotes with the cursor reset anyways 14:17 < bridge> @jupeyy_keks I'm coming home 14:17 < bridge> Wait for me 14:17 < bridge> 20min 14:17 < bridge> Wait with what xD 14:17 < bridge> multiple times per second would be pretty hard 14:17 < bridge> I build it 3h ago 14:17 < bridge> Are you done already? 14:18 < bridge> usually when you spam an emote it's as fast as you can tap the button 14:18 < bridge> @totar today is wednesday. Do you have time? 14:18 < bridge> So maybe a dead zone but not in the emote menu but outside of it if you know what i mean 14:19 < bridge> ddnet is so based for reducing the emote cooldown to 0 14:19 < bridge> So only when you start playing it resests 14:19 < bridge> So only when you start playing it resets 14:19 < bridge> that makes sense, but also feels like oddly complex behavior for an emote menu 14:20 < bridge> then again, you don't need to explain it to the user if it's intuitive 14:24 < bridge> I have similar issued with the dummy 14:24 < bridge> I have similar issues with the dummy 14:25 < bridge> Because it also has it's own curser position 14:25 < bridge> yeah could be nice to have an option to copy cursor position over when you swap 14:26 < bridge> it's not too bad though, you usually learn to memorize the cursor position of both tees 14:26 < bridge> Yeah 14:28 < bridge> with capped fps the graph looks really insane. 14:28 < bridge> 14:28 < bridge> there is almost never a stutter in it now. that's defs better than before with my old cpu. 14:28 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351910156744523786/image.png?ex=67dc17f2&is=67dac672&hm=419155620fc553a9a71603fd083e275123245e847bc57ad9100e9044a5112f64& 14:31 < bridge> I limit it to 1000fps 14:31 < bridge> show your graph :deen_star: 14:31 < bridge> 1 milliseconds latency seems good enough 14:31 < bridge> ctrl + shift + d 14:31 < bridge> ctrl + shift + g 14:34 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351911630744719442/image.png?ex=67dc1952&is=67dac7d2&hm=9039f333feb4590fcb72c474da7e6d86ef2a7d149fa08a6fc73834649062e2b0& 14:34 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351911730250383441/image.png?ex=67dc1969&is=67dac7e9&hm=c9eb77cdd9afe6c29793bfec1874b5caf2de8b21a005d79f1ccb148eae87c965& 14:34 < bridge> that's interesting 14:35 < bridge> how it this graph rendered? 14:35 < bridge> seems weird 14:35 < bridge> 0.1% lows according to mangohud 14:35 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351912038481264731/image.png?ex=67dc19b3&is=67dac833&hm=9ec84e64ee2b6878d2d3f0f13c10f3b575b93e3eacd160ada9b433b04d9592c5& 14:36 < bridge> i dunno, it's just rendered xD 14:36 < bridge> what is the time interval in between those little spikes? 14:37 < bridge> wtf is this 14:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351912418242203699/image.png?ex=67dc1a0d&is=67dac88d&hm=64af858bd3eb1167c51149e0d8b424692e09ba970e256e6214fdd369d57515ec& 14:38 < bridge> XD 14:38 < bridge> looks kinda like the GPU is changing the clock 14:38 < bridge> but really dunno 14:38 < bridge> it's so perfect 14:39 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351913001443262464/image.png?ex=67dc1a98&is=67dac918&hm=93cbf03a94d3a5e875f278cc1c088576efe6d329b92994399b5cf6f5b18ee746& 14:39 < bridge> the slider in graphics seems to be better 14:39 < bridge> You are on linux right? 14:39 < bridge> yes 14:39 < bridge> the graph is too good for windows xD 14:40 < bridge> what's the difference between the general slider and the graphics slider? 14:40 < bridge> general affects input & gfx 14:40 < bridge> 14:40 < bridge> gfx only affects rendering 14:41 < bridge> so which should i use lol 14:41 < bridge> i use gfx 14:41 < bridge> 14:41 < bridge> the cl one is just buggy 14:41 < bridge> it's confusing that there are two 14:42 < bridge> Yeah it is 14:42 < bridge> rendering and updating the state of the engine are very distinct tasks though 14:42 < bridge> it's not smort to only update when you render 14:42 < bridge> it can become really problematic if you drop a few frames 14:42 < bridge> I dunno why the input feels so bad with `cl_refresh_rate` 14:42 < bridge> 14:42 < bridge> On ddnet-rs this is absolutely not the case, I can easily play with `cl_refresh_rate 50` there 14:42 < bridge> on normal ddnet this is unplayable 14:43 < bridge> fun 14:43 < bridge> The engine is certainly showing its age 14:43 < bridge> in both good ways and bad 14:45 < bridge> probably a small difference in the order things are done, giving you like an extra frame of latency? 14:45 < bridge> Or SDL doing weird things xD 14:46 < bridge> Who has the DDNet 19.1 network protocol? 14:46 < bridge> execution wise 14:46 < bridge> `gfx_refresh_rate 0;cl_refresh_rate 50;gfx_asyncrender_old 0` 14:46 < bridge> 14:46 < bridge> should be same as ddnet-rs. 14:46 < bridge> 14:46 < bridge> it renders every frame, it has a gfx thread, so not blocking the main thread for input etc. 14:49 < bridge> Are you looking for 19.1 specific features, or are you just looking for information on the DDNet protocol? 14:50 < bridge> I want to repeat the exact connection to the server, sending the right packets 14:51 < bridge> in that case, just look it up, I'm pretty sure there's a link on the wiki 14:51 < bridge> the APU of Ryzen 9950X3D 14:51 < bridge> 14:51 < bridge> not the best, but around level of a laptop igpu 14:51 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351915968019959849/image.png?ex=67dc1d5c&is=67dacbdc&hm=c539501ba9f645ada32751a4728d2c2b3f186e794058a823c9d6a53e3bebf3d1& 14:51 < bridge> Do we have like a comprehensive documentation of the protocol anywhere? 14:51 < bridge> in that case, just look it up, I'm pretty sure there's a link on the wiki (I read up on some protocol features just yesterday) 14:52 < bridge> why do they even add a integrated gpu xD 14:52 < bridge> 14:52 < bridge> I'd rather pay 100 bucks less than having this useless feature 14:53 < bridge> For a gaming CPU yeah that's kinda weird 14:53 < bridge> Maybe it doesn't cost them very much and they need it in there for other lower tier offerings? 14:53 < bridge> maybe it's good to have if your gpu dies 14:53 < bridge> You could also be cool and use it for power saving or something idk 14:54 < bridge> dual gpu on desktop go brr 14:54 < bridge> Or for gpu pass through i guess 14:55 < bridge> oh that too 14:55 < bridge> I mean it's enough for teeworlds and probs pretty efficient xD 14:56 < bridge> And maybe 1440p is not the resolution it works well.. and also i didnt plug my monitor into the motherboard 14:56 < bridge> so maybe it's still bit better 15:05 < bridge> mine is a sine wave 15:05 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351919397144629339/image.png?ex=67dc208d&is=67dacf0d&hm=cd69829ab161fe0a9d4877bc0637d77afc5cf4b0aa1efe67b3c16cde55f64a0c& 15:09 < bridge> Is there any easy issue to start contributing? 15:10 < bridge> Come up with your own :D :D 15:10 < bridge> make an issue and then fix it -> success 15:11 < bridge> its just like math 15:15 < bridge> there are some issues with good-first-issue tag you can try them 15:15 < bridge> or you make one :kek: 15:16 < bridge> There is one issue with that tag 15:16 < bridge> I guess 15:16 < bridge> But it's a single line change lol 15:16 < bridge> So there is no compiler warning 15:16 < bridge> still enough for purple name 15:17 < bridge> better than readme typo fix 15:17 < bridge> I guess libtw2 and chillers docs at least combined are pretty comprehensive 15:18 < bridge> heinrich suggest the solution already 15:18 < bridge> Why didn't he just fix it 15:19 < bridge> watafak xDDDDDD 15:20 < bridge> now that is weird, that's a fairly good sine curve too 15:24 < bridge> can i embed src files from github in the readme.md? 15:32 < ws-client3> @teero777 yes 15:32 < ws-client3> https://github.com/ChillerDragon/github-meta/blob/master/README.md 15:33 < bridge> oh cool thx 15:33 < ws-client3> but it has to be same repo 15:33 < bridge> yea 15:33 < bridge> ok 16:23 < bridge> @milkeeycat i nearly got dependencies working 16:23 < bridge> im adding git support 16:24 < bridge> and i've been writing powershell :pepeW: 16:24 < bridge> that shit's ass 16:24 < bridge> ```toml 16:24 < bridge> [package] 16:24 < bridge> name = "project" 16:24 < bridge> version = "0.1.0" 16:24 < bridge> license = "MIT" 16:24 < bridge> 16:24 < bridge> [profile.release] 16:24 < bridge> release = true 16:24 < bridge> opt_level = 3 16:24 < bridge> debug_info = false 16:25 < bridge> 16:25 < bridge> [profile.dev] 16:25 < bridge> release = false 16:25 < bridge> opt_level = 0 16:25 < bridge> debug_info = true 16:25 < bridge> 16:25 < bridge> [dependencies] 16:25 < bridge> std = { path = "../../std", version = "0.1.0" } 16:25 < bridge> 16:25 < bridge> ``` 16:25 < bridge> idk makes no sense 16:58 < bridge> why lmfao 17:06 < bridge> Because I had to write a program which interacts with windows servers 17:27 < bridge> i can write powershell 17:39 < bridge> yeah but why 20:00 < bridge> ```cpp 20:00 < bridge> // specialized lineseg-rect intersection 20:00 < bridge> // https://gist.github.com/ChickenProp/3194723 20:00 < bridge> if(ScreenPos.x < -HalfWidth || ScreenPos.x > HalfWidth || ScreenPos.y < -HalfHeight || ScreenPos.y > HalfHeight) 20:00 < bridge> { 20:00 < bridge> float aDeltas[] = {ScreenPos.x, ScreenPos.y}; 20:00 < bridge> float aBounds[] = {HalfWidth, HalfHeight}; 20:00 < bridge> float ClampFactor = INFINITY; 20:00 < bridge> 20:00 < bridge> static_assert(std::size(aDeltas) == std::size(aBounds), "delta and bounds arrays must have the same size"); 20:00 < bridge> for(std::size_t i = 0; i < std::size(aDeltas); i++) 20:00 < bridge> { 20:00 < bridge> float t = absolute(aBounds[i] / aDeltas[i]); 20:00 < bridge> if(ClampFactor > t) 20:00 < bridge> ClampFactor = t; 20:00 < bridge> } 20:00 < bridge> 20:00 < bridge> Clamped = true; 20:00 < bridge> TargetPos = ScreenPos * ClampFactor + m_pClient->m_Camera.m_Center; 20:00 < bridge> } 20:00 < bridge> ``` 20:00 < bridge> wheres tsfreddy 20:00 < bridge> @tsfreddie ghasp slightly different name 20:01 < bridge> what does the above code do, it looks to me, to be making sure the cursor is on screen 20:04 < bridge> :angeryturtle: 20:04 < bridge> :angeryturtle: 20:05 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351994880993398834/Screenshot_20250319-200434.png?ex=67dc66da&is=67db155a&hm=b740084026ac4d9b7b3ddd43c022f128c2cdcc26f145649e1c66715e42b19a3a& 20:05 < bridge> ```cpp 20:05 < bridge> // scale to keep cursor on screen 20:06 < bridge> ClampFactor = min( 20:06 < bridge> 1.0f, 20:06 < bridge> absolute(ScreenPos.x / HalfWidth), 20:06 < bridge> absolute(ScreenPos.y / HalfHeight), 20:06 < bridge> ); 20:06 < bridge> Clamped = Scale != 1.0f; 20:06 < bridge> ScreenPos *= ClampFactor 20:06 < bridge> TargetPos = ScreenPos + m_pClient->m_Camera.m_Center 20:06 < bridge> ``` 20:06 < bridge> this seems alot cleaner to me 20:06 < bridge> ```cpp 20:06 < bridge> // scale to keep cursor on screen 20:06 < bridge> ClampFactor = min( 20:06 < bridge> 1.0f, 20:06 < bridge> absolute(HalfWidth / ScreenPos.x), 20:06 < bridge> absolute(HalfHeight / ScreenPos.y), 20:06 < bridge> ); 20:06 < bridge> Clamped = Scale != 1.0f; 20:06 < bridge> ScreenPos /= ClampFactor 20:06 < bridge> TargetPos = ScreenPos + m_pClient->m_Camera.m_Center 20:06 < bridge> ``` 20:06 < bridge> this seems alot cleaner to me 20:10 < bridge> you could also make it so the cursor cant actually go off screen 20:12 < bridge> Clip the cursor to screen's edge. 20:12 < bridge> I think simple clamping loses the angle 20:13 < bridge> the alternative i gave keeps the angle (also uses a scale factor) 20:13 < bridge> Sure 20:14 < bridge> I think I just grabbed a full rect line intersect and algebrad constants out 20:14 < bridge> I'm not really good at math 20:14 < bridge> i clicked the link and got really confused by why we would need that before realising that you had simplified it down to something much simpler 20:14 < bridge> So maybe do that. Be sure to test dyncam and smooth dyncam 20:15 < bridge> I spent so much time during the months I was active to fix everything dyncam related 20:16 < bridge> So please test dyncam and smoothdyncam after changing cursors 20:16 < bridge> sure thing 20:19 < bridge> ```cpp 20:19 < bridge> RenderTools()->MapScreenToWorld(Center.x, Center.y, 100.0f, 100.0f, 100.0f, 0, 0, Graphics()->ScreenAspect(), Zoom, aPoints); 20:19 < bridge> Graphics()->MapScreen(aPoints[0], aPoints[1], aPoints[2], aPoints[3]); 20:19 < bridge> ``` 20:19 < bridge> these 2 things both write to aPoints, i think only the first one is intended 20:21 < bridge> https://www.youtube.com/watch?v=91UY_4RN4yc 20:21 < bridge> "new" discord sdk 20:22 < bridge> and its just old sdk but with more bloat 20:22 < bridge> what should i add 20:22 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1351999218084089999/image-46.png?ex=67dc6ae4&is=67db1964&hm=90fa15c9dcdcff6a6c10839b36b6cf48ec2aa2c9bfb044fb0a7f4d176dac18df& 20:23 < bridge> The first one doesn't map anything to the graphics 20:23 < bridge> The first line doesn't map anything to the graphics 20:24 < bridge> ah i see 20:24 < bridge> I'm in bed. Maybe just PR anything you want to change and tag me 20:24 < bridge> I'll check when I got time 20:24 < bridge> yeah, thats probably a good idea 20:25 < bridge> because if you ask me here my ADHD brain will actually on GitHub on my phone to check codes :justatest: 20:26 < bridge> Even if it is 3:26am 20:26 < bridge> because if you ask me here my ADHD brain will actually open GitHub on my phone to check codes :justatest: 20:26 < bridge> !! 20:26 < bridge> yeah goto sleep silly billy 20:41 < bridge> >supercharge 20:42 < bridge> supercharge is my least favorite word because its like, the most corporate sounding thing in existence 20:58 < bridge> super charge : brawl stars term 21:32 < bridge> what's wrong with editing game.png? 21:33 < bridge> effort 21:33 < bridge> If you switch between skins you'd have to edit all of them :( 21:36 < bridge> i dont want to hate but at this rate we're going to have 40 pages of ddnet settings by the end of 2026 21:36 < bridge> sounds pretty cool to me 21:38 < bridge> also it just looks worse scaled 21:38 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352018349860716654/424679098-12f4c87a-8a3e-4dfe-b22c-3a90f283e23f.png?ex=67dc7cb5&is=67db2b35&hm=8326ba6616560208fba6022942eebd4039faf761c57e561d3dce9403296fc4ad& 21:38 < bridge> you'd get a better image if you edit the original game.png svg 21:40 < bridge> not really, theres a good reason some maintainers are skeptical about adding new config variables etc. 21:43 < bridge> literally whats the point of this 21:44 < bridge> we gotta get heinrich back 21:45 < bridge> Heinrich is semi active on GitHub 21:45 < bridge> But yeah while even I tried to get a command in the game - we shouldn't overdo it 21:45 < bridge> Such customization has a place in custom clients 21:45 < bridge> hierarchical configs let's go 21:45 < bridge> namespaces within namespaces 21:46 < bridge> he left discord ? I didn't even know 21:46 < bridge> I still think /killable would've been a genius invention :cammo: 21:46 < bridge> add a config variable for every imaginable thing 21:46 < bridge> Nah just not active anymore 21:46 < bridge> Probably a break of sorts 21:47 < bridge> the shit image quality is my screen shot tool :P 21:47 < bridge> as risu said im a lazy bastard 21:48 < bridge> where did i say that 21:48 < bridge> lazy bastards use default settings 21:48 < bridge> heinrich is still in the discord 21:48 < bridge> semi-lazy only for some things bastard 21:48 < bridge> semi-lazy-only-for-some-things bastard 21:49 < bridge> you didn't, but it was implied he wasn't there anymore, I just wanted some more info 21:50 < bridge> i mean he doesnt even touch discord anymore 21:50 < bridge> but hes still like, IN here 21:51 < bridge> But I feel like lazy bastards won't have a 40 max mouse dist 21:52 < bridge> me, i do 21:52 < bridge> its how i play, i cant change it now x-x 21:55 < bridge> hm yeah 21:55 < bridge> im still pretty sure that downscaling a gameskin svg then re-rendering is usually better than scaling down in the client 21:56 < bridge> it looks perfect to me 21:56 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352022852920152094/image.png?ex=67dc80e7&is=67db2f67&hm=6229464ff1ad7af56af8720bf6d3454ed3b46895a8941ee11dcad6459d3fd2f7& 21:56 < bridge> ^ prey compresion doesnt butcher this 21:56 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352022896133799966/image.png?ex=67dc80f1&is=67db2f71&hm=b7c83ac9e2bf3ebc233f57d6e438ab44b76628e56081352cd743a84d5365ae9b& 21:56 < bridge> (cant paste images darn) 21:57 < bridge> it does 21:57 < bridge> just take my word for it, or try it youreslf :P 21:58 < bridge> also you can do this now which is hilarious 21:58 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352023342680506468/image.png?ex=67dc815c&is=67db2fdc&hm=0cab97ea5a879ce998a0af750453f61a9d4c213455bedac4c89cab2db73dc992& 22:02 < bridge> don't see why would anyone make their cursor bigger 22:02 < bridge> and if you want smaller then custom assets exist? 22:38 < bridge> Issue deleter Wednesday 22:42 < bridge> bun bun is trapped in spikes 22:42 < bridge> !!! 22:42 < bridge> yay! 22:46 < bridge> Why is the zoom unused now? 22:46 < bridge> unused? 22:47 < bridge> did bon bon make a mistake 22:47 < bridge> ah, it's used differently now 22:47 < bridge> but is passing `m_Camera.m_Zoom` to `RenderQuadContainerAsSprite` not necessary anymore? 22:48 < bridge> and to `MapScreenToWorld` 22:48 < bridge> `RenderTools()->MapScreenToWorld(CenterX, CenterY, 100.0f, 100.0f, 100.0f, 0, 0, Graphics()->ScreenAspect(), Zoom, aPoints);` 22:48 < bridge> 22:48 < bridge> is the same as 22:48 < bridge> 22:48 < bridge> `RenderTools()->MapScreenToInterface(m_pClient->m_Camera.m_Center.x, m_pClient->m_Camera.m_Center.y);` 22:48 < bridge> 22:48 < bridge> but you dont get aPoints and you can set zoom 22:49 < bridge> previously they were supplying zoom so the returned points would be scaled by zoom, so you had to make the cursor the right size by also scaling the cursor 22:49 < bridge> now both use MapScreenToInterface as before but its replaced with its implementation so you get aPoints 22:50 < bridge> uhhh 22:50 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352036414023401483/image.png?ex=67dc8d88&is=67db3c08&hm=77dd336af35c8277ea7a8e3359aa24495597bd4764d13d71ecb4f1e86b37cfab& 22:50 < bridge> Probably should have pinned the dependency so it doesn't break when the map tools do 22:51 < bridge> pinned the dependency? 22:51 < bridge> misleading name 22:51 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352036800457212046/image.png?ex=67dc8de4&is=67db3c64&hm=97fa08369402852786fb47a8e39c5d41c56ffa4154865a3f63368eea48058e05& 22:51 < bridge> It currently always uses the latest master commit so if `twmap-tools` changes then could break our CI like here 22:52 < bridge> I guess a check was added now for old speedup tiles 22:52 < bridge> i see 22:52 < bridge> Should add another exclusion for that error in `style.yml` I guess, we don't want to change the map 23:13 < bridge> @totar can i see the null movement bind? 23:14 < bridge> It doesn't work. I was lying 23:14 < bridge> liar liar pants on fire 23:14 < bridge> bruhj 23:14 < bridge> yea it wouldnt be possible because this game doesnt have -left 23:14 < bridge> negative left 23:14 < bridge> thats just right 23:15 < bridge> no 23:15 < bridge> it puts +left to 0 23:15 < bridge> which means its not 23:15 < bridge> stop writing 23:15 < bridge> what 23:16 < bridge> so since it isnt possible with binds 23:16 < bridge> and only possible with the keyboard 23:17 < bridge> will the pr be open again? 23:17 < bridge> no 23:17 < bridge> is it considered cheating? 23:17 < bridge> yes 23:17 < bridge> even on ddrace? 23:18 < bridge> yes 23:18 < bridge> especially on ddrace 23:18 < bridge> so people with the keyboard should turn it off? 23:18 < bridge> yea 23:18 < bridge> yes 23:19 < bridge> can i ask why its considered cheating? 23:19 < bridge> it doesnt really give much of an advantage from what i heard 23:19 < bridge> Did you read https://github.com/ddnet/ddnet/pull/9821#pullrequestreview-2687733822 ? 23:19 < bridge> detecting it over a timespan is trivial so you risk your ranks getting deleted by using it. 23:19 < bridge> i read through most of the comments not all 23:21 < bridge> detecting it over a timespan is trivial so you risk your ranks getting deleted and getting punished by using it. 23:21 < bridge> > After using this for a while, I've found that it is very useful for dummy since you can release a held direction by pressing the other (meaning you dont have to tap the direction to release it). Otherwise it feels no different 23:21 < bridge> this isnt very much of an advantage 23:22 < bridge> since dummy_reset exists 23:23 < bridge> It is considered a hardware cheat. We are not going to change things because big companies think they can just add whatever features they want. 23:23 < bridge> is there gonna be a detection added to stop people from using it? 23:23 < bridge> probably 23:23 < bridge> > It is forbidden to manipulate the game input in any way that the official DDNet client does not support. This includes any method of input manipulation such as using custom clients, 3rd party tools or hardware automation (this is not an exhaustive list). 23:23 < bridge> > 23:23 < bridge> > This has always been the official statement AFAIK. 23:23 < bridge> **any way** 23:24 < bridge> No discussion needed ig 23:24 < bridge> the russians with their dummy client thats prohibited right? 23:24 < bridge> Not even hardware, it's just firmware! 23:25 < bridge> a hardware cheat would be more impressive 23:26 < bridge> though I guess it'd be really easy to do electronically, so not really 23:26 < bridge> a *mechanical* hardware cheat would be impressive 23:27 < bridge> yes, but training a pigeon to play for you would also be cheating :kek: 23:36 < ws-client> yo solly how do i turn off nameplate transparency? 23:37 < ws-client> @robyt3 training a pigeon is cheating wtf? isnt that more a matter of finishing in someone elses name than cheating 23:38 < bridge> your honor that pigeon finished for me 23:38 < bridge> are custom input devices cheating? 23:38 < ws-client> if i ask a pro player to finish in my name its the same as asking a pro pigeon to finish in my name 23:38 < bridge> wouldnt someone playing on your pc cheating? 23:38 < bridge> depends 23:38 < ws-client> i think there is a different term for that 23:38 < bridge> what are you doing with that custom input device 23:38 < bridge> moving the tee 23:39 < bridge> and how are you moving the tee 23:39 < ws-client> @Solly (bun bun) did this ping? 23:39 < bridge> with my nose 23:39 < bridge> it did chiller dragon 23:39 < bridge> probably 23:39 < bridge> [Angry_Ping](https://cdn.discordapp.com/emojis/568342551262658560.gif?size=48&animated=true&name=Angry_Ping) 23:39 < bridge> he cant see that emoji 23:40 < ws-client> @Solly (bun bun) so how to turn off nameplate transparency 23:40 < bridge> its fake nitro anyway so its a url 23:40 < bridge> wdym transparency? 23:40 < bridge> like when your specing another team? 23:40 < ws-client> https://zillyhuhn.com/cs/.1742424044.png 23:40 < ws-client> ye 23:41 < bridge> amn noob, yes 23:41 < ws-client> i feel like the colors used to be stronger 23:41 < bridge> 👀 23:41 < bridge> those are fully opaque, but the default text color outline is transparent 23:41 < bridge> i didnt change what the colors were 23:41 < bridge> (i hope) 23:42 < bridge> they are lighter than any part of the tees 23:42 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352049639548915824/image.png?ex=67dc99d9&is=67db4859&hm=14303b75499bf209c4ba5d8877c024b0789af132d8ac196bb57a8b314814195c& 23:42 < ws-client> i turned off the team colors the white is better to read for me 23:43 < ws-client> but i feel even the white names in dm and block got a bit lighter 23:43 < ws-client> maybe i am tripping 23:43 < bridge> white cant really get lighter, maybe the text outline used to be fully opaque 23:43 < ws-client> i just recently moved away from the hardcodet color but in chillerbot-ux 23:44 < ws-client> https://zillyhuhn.com/cs/.1742424243.png 23:44 < ws-client> the name on the right i can barley see 23:44 < ws-client> this used to be easier to read iirc 23:45 < bridge> ```cpp 23:45 < bridge> TextRender()->TextColor(Rgb); 23:45 < bridge> TextRender()->TextOutlineColor(ColorRGBA(0.0f, 0.0f, 0.0f, 0.5f)); 23:45 < bridge> TextRender()->Text(TeeRenderPos.x - TextRender()->TextWidth(FontSize, g_Config.m_PlayerName) / 2.0f, YOffset, FontSize, g_Config.m_PlayerName); 23:45 < bridge> ``` 23:45 < bridge> i thought the default was 0.75 23:45 < bridge> its not, its 0.3 23:46 < bridge> that would probably be why 23:46 < bridge> that can be reverted 23:46 < bridge> If the custom input device works exactly like existing devices we support then I'd say it's not cheating. Basically, I'd say inputs are supposed to be performed by the human player and the hardware should *directly* forward those inputs to the game. Pressing/touching keys/buttons should correspond directly to key events and moving a mouse/trackball/joystick/finger on a touch screen etc. should directly correspond to movement of the cursor. 23:47 < bridge> thought about custom devices for handicapped people. like pedals, moving joysticks with the chin, etc. 23:48 < bridge> what should a static member value iden look like 23:49 < bridge> `m_s_`? or `s_m_`? 23:49 < ws-client> https://zillyhuhn.com/cs/.1742424553.png 23:49 < ws-client> this is some older version 23:49 < bridge> As long as they work like regular input devices without additional processing of the inputs it should be the same as building a custom keyboard or joystick in general 23:49 < ws-client> seems like it lost a bit of the black border 23:49 < ws-client> makes it harder to read 23:50 < bridge> `ms_Foo` 23:50 < bridge> it did 23:51 < ws-client> bug? 23:52 < bridge> well... a unintended change 23:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1352052520159281162/image.png?ex=67dc9c88&is=67db4b08&hm=59baa8f6d557fe4f804ec3be63a116d94b05329700b0e39dd82f279690537ac5& 23:54 < bridge> recompiling ddnet for a single line change 23:57 < ws-client> epic fast fix 23:57 < bridge> it doesnt effect me and it definatley a regression for you if you find it harder to see stuff (i never noticed since i am in perma entities)