00:29 <+bridge_> ^ can we quick merge this 00:29 <+bridge_> or no way to land in todays nightly? 00:31 <+bridge_> Nightly has already been compiled, you can see the times that the debug symbols are updated: https://ddnet.org/downloads/symbols/ 00:32 <+bridge_> :cammo: 02:43 <+bridge_> hiii 02:43 <+bridge_> I need your help for something 02:43 <+bridge_> using a Classic https://fontawesome.com icon, which one would you use to represent DDNet maps' 02:43 <+bridge_> using a Classic https://fontawesome.com icon, which one would you use to represent DDNet maps? 02:43 <+bridge_> I genuinely can't think of one 02:44 <+bridge_> best I can think of is this 💀 but it doesn't even make much sense 02:44 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465160322225668177/image.png?ex=69781862&is=6976c6e2&hm=e97380e522f8d47eca9d98eebe9d914b8f0aa4c20ef10249aba0841fc9a5d722& 02:44 <+bridge_> maybe this..??? 02:44 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465160464013983754/image.png?ex=69781883&is=6976c703&hm=604b575d3b44f75546cbba1220971c3e45ad6b9b70d4823f3e921894cd79e490& 02:46 <+bridge_> Why not just map 02:46 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465161027959390349/image0.jpg?ex=6978190a&is=6976c78a&hm=795a266de72cf2ba517e527255066b3d6004f740e3438c40958535e76442632e& 02:46 <+bridge_> is there no map icon? 02:47 <+bridge_> does that really fit? 02:47 <+bridge_> yes 02:47 <+bridge_> cause I personally don't really feel like it does 02:47 <+bridge_> well 02:47 <+bridge_> its a map 02:47 <+bridge_> .. 02:48 <+bridge_> No idea what it's used for 02:48 <+bridge_> yea wher are u placing this 02:48 <+bridge_> the Maps menu for ddnet-rs 02:48 <+bridge_> so why woudnt a map fit 02:49 <+bridge_> I feel like an icon that actually represents what the gameplay is might fit b etter 02:49 <+bridge_> I feel like an icon that actually represents what the gameplay is like might fit better 02:49 <+bridge_> there's no literal map in maps 02:49 <+bridge_> what does the maps menu contain 02:49 <+bridge_> What maps menu? Browsing local maps? 02:50 <+bridge_> something like this (VERY old concept I originally made for og ddnet) 02:50 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465162050001965189/Maps_-_Concept_2_WIP2.png?ex=697819fe&is=6976c87e&hm=ea693f8032625032d6810e6bbe2b16475b52428664033434fcccccbce8301256& 02:51 <+bridge_> i feel like the map icon does fit 02:51 <+bridge_> Quick question 02:51 <+bridge_> 02:51 <+bridge_> How does it work if there's no french servers but there's rankings for FRA region? 02:51 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465162228713001203/image.png?ex=69781a28&is=6976c8a8&hm=312e6fd62dac03a833357a1f4d8ac59c39e6f6c48bb42f198aa7b92d45fcc8b3& 02:51 <+bridge_> there was french servers before 02:52 <+bridge_> (This layout is more like how the Discover tab might look like though, the pause maps menu will be way more simpler 02:52 <+bridge_> (This layout is more like how the Discover tab might look like though, the pause maps menu will be way more simpler) 02:52 <+bridge_> I see 02:53 <+bridge_> i guess design the menu with the maps icon and if it looks weird u can switch it 02:53 <+bridge_> YO WAIT 02:53 <+bridge_> gvnpy just suggested this 02:53 <+bridge_> https://cdn.discordapp.com/attachments/1284360899414589491/1465162092578345062/image.png?ex=69781a08&is=6976c888&hm=8200373dc25f09d6fb552c3a075c4bbd5b5f6c17584bbe6613e41138573040b9& 02:53 <+bridge_> this actually looks perfect imo 02:53 <+bridge_> do y'all approve 02:53 <+bridge_> maybe but i need to see the concept first 02:53 <+bridge_> maybe but i need to see the entire menu first 02:54 <+bridge_> alr I will make a quick prototype to show how it would work like and then we vote an icon for the menu 07:41 <+bridge_> I might've just found peak 07:41 <+bridge_> https://github.com/levinion/ura 07:43 <+bridge_> started 6 months ago, 236 commits and last commit 5 days ago 07:43 <+bridge_> ill be watching this for sure 08:46 <+bridge_> maybe a finish flag icon? 🏁 08:47 <+bridge_> am too late to the party ✅ 08:54 <+bridge_> Exactly what I got suggested xDDD 08:54 <+bridge_> "quick" *takes an eternity* 08:54 <+bridge_> (still haven't finished it) 09:49 <+ChillerDragon> I am confused by the log scopes again aaaaa 09:50 <+bridge_> hi drillerchagon 09:51 <+ChillerDragon> In my antibot module I call `log_info("antibot", "secret sauce");` which calls the symbol defined by the server 09:51 <+ChillerDragon> so it uses the actual servers logging system with its log scopes 09:51 <+ChillerDragon> I trigger the log from a rcon command so it should be scoped to the command executor 09:52 <+ChillerDragon> bbbbuut 09:52 <+ChillerDragon> the rcon command launches a worker thread and i have another log_info in the main thread that fetches the result 09:52 <+ChillerDragon> the log scopes do not support that 09:52 <+ChillerDragon> so it prints it in the console 09:52 <+ChillerDragon> so far so basic 09:52 <+ChillerDragon> known ddnet logging flaw 09:52 <+ChillerDragon> and indeed other admins see the log too 09:53 <+ChillerDragon> here is where it gets crazy 09:53 <+ChillerDragon> moderators do not see the log????? 09:53 <+ChillerDragon> what hides the log from moderators??????? 10:02 <+bridge_> yea I'm sorry it's cuz I eat all them logs before the rest of moderators see so they can't 11:52 <+ChillerDragon> okay i gave the moderator rank access to the `antibot` rcon command and if they kick off the worker thread they still dont see the result but admins do 11:52 <+ChillerDragon> i guess thats consistent with the other behavior so thats good yay 11:52 <+ChillerDragon> still odd imo 11:52 <+ChillerDragon> https://github.com/ChillerDragon/antibob/blob/d4c985680a4babf34008d2033d1063ec3b7e85b9/src/antibob/bob/antibob.cpp#L441 11:53 <+ChillerDragon> this is main thread after a sync from worker thread triggered by rcon 11:53 <+ChillerDragon> maybe moderators see less logs in general than admins 11:54 <+ChillerDragon> okay indeed 11:54 <+ChillerDragon> doesnt seem that deep 11:54 <+ChillerDragon> has nothing todo with threads at all 11:55 <+ChillerDragon> i placed a log_info in the OnTick and the admins see it but moderators dont i did not know that seems like basic knowledge 11:56 <+bridge_> hi chiller, possible to make rcon msgtype that's arbitrary script output? something accessible via `rcon dump_script` 11:56 <+bridge_> maybe you can sneak other data thru an existing type but might be better if explicit 11:56 <+bridge_> script would ofc be configurable on the sv via sv_ setting 12:16 <+bridge_> @gorp_tw: I don’t understand what you are talking about at all xd 12:17 <+bridge_> hm ill try to explain better 12:19 <+bridge_> basically either overloading `dump_antibot` so you can ask for more explicit data or do post-processing on the antibot data with a separate command, `dump_antibot_script` 12:19 <+bridge_> im not sure if that would require any new msgtype 12:19 <+bridge_> basically either overloading `dump_antibot` so you can ask for more detailed data or do post-processing on the antibot data with a separate command, `dump_antibot_script` 12:19 <+bridge_> Wat xd 12:20 <+bridge_> You want multiple antibot commands passed to the antibot module? 12:20 <+bridge_> Don’t use dump\_antibot then 12:20 <+bridge_> Use antibot 12:20 <+bridge_> Preferably, it would invoke antibot as normal, then pipe its output to a capable script on the server 12:20 <+bridge_> It takes an r string argument 12:21 <+bridge_> that way you don't break flows of your existing moderators, but if your antibot data is machine-readable, then you can create more tools if needed 12:22 <+bridge_> ah i see, i guess any community could use this then to get different-looking results? 12:23 <+bridge_> Yes 12:23 <+bridge_> But I still don’t understand what you want exactly 12:23 <+bridge_> I know most of the words you use but all together I am not following xd 12:23 <+bridge_> it's hard to say without revealing how ddnet antibot works XD 12:24 <+bridge_> I guess what I want is possible then, assume default stuff from antibot is in a "raw" form but you can get a more English-friendly version with an argument like you said 12:24 <+bridge_> <01000111g> yeah stop discussing that publicly 12:24 <+bridge_> I'm not planning on saying anything specific, don't worry 12:41 <+bridge_> Does anyone know if 0.7 net tokens must be calculated in the vanilla way? 12:41 <+bridge_> they're just random bytes 12:42 <+bridge_> you have to pass them back to the other peer as-is 12:42 <+bridge_> for the tokens you generate, you can use any algorithm, it should just be unpredictable for the other party 12:42 <+bridge_> why do you ask? 🙂 12:43 <+bridge_> I'm working on a C++23 teeworlds server reimplementation which os for my new RPG mods. :3 12:43 <+bridge_> I'm working on a C++23 teeworlds server reimplementation which is for my new RPG mods. :3 12:44 <+bridge_> oh nice 🙂 12:48 <+bridge_> is it available somewhere already? 🙂 12:53 <+bridge_> As of now, I haven't finished it yet, but I have open-sourced the base library of it. 12:54 <+bridge_> See also: https://github.com/Bamcane/libsugarx 13:03 <+bridge_> I lost my DDNet mod rank before the antibot shipped but I have a pretty good idea how it looks like 13:03 <+bridge_> I don’t see how this can’t be discussed without leaks 13:04 <+bridge_> I don’t even understand if you want to work client or server side @gorp_tw 13:04 <+bridge_> Server side 13:04 <+bridge_> I did talk to another mod about it privately, what I want may already be possible 13:05 <+bridge_> i guess it highly depends on how flexible your antibot module is 13:06 <+ChillerDragon> In my antibot module I can run the rcon command `antibot cmdlist` which shows all antibot commands 13:06 <+ChillerDragon> and then i can run `antibot cmd cmd args` 13:06 <+ChillerDragon> like for example `antibot known` lists all known cheaters 13:07 <+ChillerDragon> or `antibot events 6` lists all suspicious events of player with client id 6 13:08 <+bridge_> That is the pure ddnet antibot abi 13:08 <+bridge_> The big problem here is that there is no access control 13:08 <+bridge_> So giving moderators access gives them access to the entire antibot 13:08 <+bridge_> right yeah 13:09 <+ChillerDragon> because access management is only command not argument based 13:09 <+ChillerDragon> that is why ddnet added `vote_no` and `dump_anitbot` in addition to `vote no` and `antibot dump` 13:09 <+ChillerDragon> i added a few of these in ddnet-insta too for antibot but its of course horrible 13:09 <+ChillerDragon> there is a pending issue for that and i am planning to work on it as soon as my rcon prs got merged 13:10 <+ChillerDragon> but still not sure if this is actually what you were asking about xd 13:10 <+ChillerDragon> because you talked about net messages and scripts and so on xd 13:11 <+bridge_> wow yea that makes a lot more sense now 13:12 <+bridge_> the explanation of the params makes sense, i think its fine 13:12 <+bridge_> access levels would make it more... controllable for what i want though 13:17 <+bridge_> Chillerdragon: why do you switch messaging apps every 5 minutes 13:17 <+bridge_> I can add that it would be great if it were possible to automatically synchronize variables from ddnet to antibot (an example of this is + in ddnet-insta) 13:17 <+bridge_> 13:17 <+bridge_> Now SvAllowZoom is changed automatically in ddnet-insta using (Chain)[https://github.com/ddnet-insta/ddnet-insta/blob/c924aabcda285b5e37a898e5b59deaf7fafa12a6/src/game/server/instagib/rcon_configs.cpp#L225] 13:17 <+bridge_> I can add that it would be great if it were possible to automatically synchronize variables from ddnet to antibot (an example of this is + in ddnet-insta) 13:17 <+bridge_> 13:17 <+bridge_> Now SvAllowZoom is changed automatically in ddnet-insta using [Chain](https://github.com/ddnet-insta/ddnet-insta/blob/c924aabcda285b5e37a898e5b59deaf7fafa12a6/src/game/server/instagib/rcon_configs.cpp#L225) 13:17 <+bridge_> I can add that it would be great if it were possible to automatically synchronize variables from ddnet to antibot (an example of this is + in ddnet-insta) 13:17 <+bridge_> 13:17 <+bridge_> Now SvAllowZoom is changed automatically in ddnet-insta using [Chain](https://github.com/ddnet-insta/ddnet-insta/blob/c924aabcda285b5e37a898e5b59deaf7fafa12a6/src/game/server/instagib/rcon_configs.cpp#L225) 13:17 <+bridge_> I can add that it would be great if it were possible to automatically synchronize variables from ddnet to antibot (an example of this is + in ddnet-insta) 13:17 <+bridge_> 13:17 <+bridge_> Now SvAllowZoom is changed automatically in ddnet-insta using [Chain](https://github.com/ddnet-insta/ddnet-insta/blob/c924aabcda285b5e37a898e5b59deaf7fafa12a6/src/game/server/instagib/rcon_configs.cpp#L225) 13:17 <+bridge_> nuh i love that 13:17 <+bridge_> i sometimes go from matrix to discord and back 13:17 <+bridge_> mostly because only matrix on phone 13:17 <+bridge_> maybe he has matrix on phone? 13:17 <+bridge_> ah yeah 13:17 <+bridge_> yeye 13:18 <+bridge_> i dont allow such things on my device that follows me everywhere 13:18 <+bridge_> :justatest: 13:18 <+bridge_> even tho google 13:18 <+bridge_> technically my phone is unlockable now, i should install grapheneos 13:49 <+bridge_> incoming bot spam 14:07 <+bridge_> I don't know if github comments are guessed by AI at this point ... 14:13 <+ChillerDragon> @totar with https://chat.zillyhuhn.com/ being muted i sometimes have to dance with what is most accessible to me at the time 14:13 <+ChillerDragon> my weechat irc instance is not always reachable for me 14:13 <+ChillerDragon> neither is my phone 15:34 <+bridge_> I have a question about sounds. What is meant with a voice and what's a a sample? 15:37 <+bridge_> A sample is the amplitude of the sound wave at an instant 15:40 <+bridge_> why is pausing the same as setting the sample to nullptr and setting the paused at value? 15:41 <+bridge_> Hm, let me see just incase we used those terms differently for whatever reason 15:42 <+bridge_> but clearing the sample sounds sane, because you don't want a constant beeeeeeeeeeeeeeeeeeeeeeeeeeeee sound 15:42 <+bridge_> that explains it very well to me 15:45 <+bridge_> well a constant sound wave would not result in any audio 15:46 <+bridge_> Yeah actually I dont even know what that would do true 15:46 <+bridge_> a sample can also mean a clip of audio 15:47 <+bridge_> yeah 15:47 <+bridge_> it might be that instead 15:47 <+bridge_> What happens if you keep sending the same sample through the reconstruction filter? 😄 15:47 <+bridge_> you put DC through the filter you get DC out the filter 15:48 <+bridge_> assuming a reasonable filter 15:48 <+bridge_> That could be it too, but would be weird of matricks to use sample for it where we are also handling real samples 15:48 <+bridge_> it might also include a low cut filter, in which case you get a signal that decays to 0 15:48 <+bridge_> so complete silence, no voltage out 15:49 <+bridge_> but I don't think the filter is going to do that 15:50 <+bridge_> your speaker is just going to be slightly offset from its neutral position 15:50 <+bridge_> and get a bit warm xd 15:51 <+bridge_> I was thinking maybe it’d clamp at the bottom of the speakers frequency capabilities and you’d get a constant “humm”. But maybe not 15:52 <+bridge_> the bottom of the speaker's frequency capabilities is 0 Hz 15:52 <+bridge_> as in not moving 15:53 <+bridge_> LOL, that is actually true, no idea why I was thinking there’d be a different floor 15:53 <+bridge_> I blame it on the german pneumonia I got 15:54 <+bridge_> ``` 15:55 <+bridge_> void CSound::Update(int SampleId, int ChannelId, bool Loop, bool Play, bool ResetTime, bool Reload) 15:55 <+bridge_> { 15:55 <+bridge_> dbg_assert(SampleId >= 0 && SampleId < NUM_SAMPLES, "SampleId invalid"); 15:55 <+bridge_> const CLockScope LockScope(m_SoundLock); 15:55 <+bridge_> CSample *pSample = &m_aSamples[SampleId]; 15:55 <+bridge_> dbg_assert(pSample->IsLoaded(), "Sample not loaded"); 15:55 <+bridge_> // search for voice 15:55 <+bridge_> auto *pVoice = std::find_if(std::begin(m_aVoices), std::end(m_aVoices), [pSample](const auto &Voice) { return Voice.m_pSample == pSample; }); 15:55 <+bridge_> if(pVoice != nullptr) 15:55 <+bridge_> return; 15:55 <+bridge_> 15:55 <+bridge_> if(Reload) 15:55 <+bridge_> { 15:55 <+bridge_> pVoice->m_Flags |= FLAG_LOOP; 15:55 <+bridge_> pVoice->m_Tick = 0; 15:55 <+bridge_> // TODO reset and start sound again normally 15:55 <+bridge_> return; 15:55 <+bridge_> } 15:55 <+bridge_> 15:55 <+bridge_> // handle loops 15:55 <+bridge_> int Flags = pVoice->m_Flags; 15:55 <+bridge_> if(Loop) 15:55 <+bridge_> Flags |= FLAG_LOOP; 15:55 <+bridge_> pVoice->m_Flags = Flags; 15:55 <+bridge_> 15:55 <+bridge_> // handle play 15:55 <+bridge_> if(!Play && pSample) 15:55 <+bridge_> { 15:55 <+bridge_> pSample->m_PausedAt = pVoice->m_Tick; 15:55 <+bridge_> pSample = nullptr; 15:55 <+bridge_> @sollybunny 15:55 <+bridge_> So it seems CSample is indeed an entire “track”, the samples themselves are in m_pData 15:55 <+bridge_> hello what? 15:56 <+bridge_> Seems you were right about that 😄 15:56 <+bridge_> theres 2 kinda of samples in ddnet i dislike it 15:56 <+bridge_> I don't know anything about sounds, I want to set values like looping, playing, resetting to the beginning or just reloading to defaults 15:56 <+bridge_> The top signal, when passed through the filter, is going to turn into the bottom signal (excuse lousy scribbles xd) 15:56 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465359788400709694/signal_reconstruction.png?ex=6978d226&is=697780a6&hm=bad0db0f08bad14080e5aa3c8bc75f298d3a21d46e778a483fe21f703fdb6367& 15:56 <+bridge_> looping is done by the loop flag, if its not set, the audio stops when its done 15:56 <+bridge_> if it is, when the end is reached instead of stopping it will be set to m_LoopStart which is usally 0 15:57 <+bridge_> I think I got the looping part right 🙂 15:57 <+bridge_> the perfectly sharp corners of the first signal (imagine they're perfectly sharp) are going to cause a bit of ringing after the 20kHz low-pass filter 15:57 <+bridge_> why the ping then? 15:58 <+bridge_> that first skirble is pretty good actually lmao 15:58 <+bridge_> why the ping then? (or was my clarificatrion 'nuf) 15:58 <+bridge_> looping is done by the loop flag, if its not set, the audio stops when its done 15:58 <+bridge_> if it is, when the end is reached instead of stopping .tick will be set to m_LoopStart which is usally 0 15:58 <+bridge_> Gibbs Phenomenon :Celebrate: 15:58 <+bridge_> see code above, my question was about 4 parameters 15:59 <+bridge_> what is this code meant to do 15:59 <+bridge_> ``` 15:59 <+bridge_> void CSound::Update(int SampleId, int ChannelId, bool Loop, bool Play, bool ResetTime, bool Reload) 15:59 <+bridge_> { 15:59 <+bridge_> dbg_assert(SampleId >= 0 && SampleId < NUM_SAMPLES, "SampleId invalid"); 15:59 <+bridge_> const CLockScope LockScope(m_SoundLock); 15:59 <+bridge_> CSample *pSample = &m_aSamples[SampleId]; 15:59 <+bridge_> dbg_assert(pSample->IsLoaded(), "Sample not loaded"); 15:59 <+bridge_> // search for voice 15:59 <+bridge_> auto *pVoice = std::find_if(std::begin(m_aVoices), std::end(m_aVoices), [pSample](const auto &Voice) { return Voice.m_pSample == pSample; }); 15:59 <+bridge_> if(pVoice != nullptr) 15:59 <+bridge_> return; 15:59 <+bridge_> 15:59 <+bridge_> if(Reload) 15:59 <+bridge_> { 15:59 <+bridge_> pVoice->m_Flags |= FLAG_LOOP; 15:59 <+bridge_> pVoice->m_Tick = 0; 16:00 <+bridge_> // TODO reset and start sound again normally 16:00 <+bridge_> return; 16:00 <+bridge_> } 16:00 <+bridge_> 16:00 <+bridge_> // handle loops 16:00 <+bridge_> int Flags = pVoice->m_Flags; 16:00 <+bridge_> if(Loop) 16:00 <+bridge_> Flags |= FLAG_LOOP; 16:00 <+bridge_> else 16:00 <+bridge_> Flags |= ~FLAG_LOOP; 16:00 <+bridge_> pVoice->m_Flags = Flags; 16:00 <+bridge_> 16:00 <+bridge_> // handle play 16:00 <+bridge_> if(!Play && pSample) 16:00 <+bridge_> { 16:00 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465360570319503371/Ringing_artifact_example.png?ex=6978d2e1&is=69778161&hm=fb4907f38118b06556c00330387d1123c5ede9bef600664c60ae99528f365f54& 16:00 <+bridge_> 😍 16:00 <+bridge_> the Reload param seems to make it just reset and force loop (why i have no clue) 16:00 <+bridge_> https://tenor.com/view/frieren-dies-cold-fall-snow-sousou-no-frieren-gif-10470803995544490169 16:00 <+bridge_> regardles it should probably be separated into a diff function 16:00 <+bridge_> but idk what it does 16:00 <+bridge_> I want to update the sound at runtime, pausing it, then playing it, or resetting it (without stop) 16:00 <+bridge_> Have Louis cook this one, he's a sound engineer 16:00 <+bridge_> :WICKED: 16:00 <+bridge_> yeah I'm actually not sure if I should be expecting ringing on both sides of the transition 16:00 <+bridge_> I feel like I've seen some oscilloscope graphs produced by actual physical filters that only have the ringing after the transition, but I might be high 16:01 <+bridge_> `pSample = nullptr;` this is gonna segfault btw 16:01 <+bridge_> maybe it depends on filter who knows 16:01 <+bridge_> Can’t you do that through the voice handle? 16:01 <+bridge_> it doesn't support everything I need 16:01 <+bridge_> I think it does 16:01 <+bridge_> a proper sinc will ring on both sides 16:02 <+bridge_> So are you extending it? 16:02 <+bridge_> well maybe it does 🤔 16:02 <+bridge_> you should use voice i think 16:02 <+bridge_> but I think you can make the filter asymmetric to reduce latency 16:02 <+bridge_> some sounds are controlled by sampleid because they play uniquely 16:02 <+bridge_> idk, I do video not audio, we don't have that problem there 16:02 <+bridge_> (bad design imo) 16:03 <+bridge_> (i think the only one that uses it is the main menu) 16:03 <+bridge_> Doesn’t it fundamentally HAVE to ring on both sides? 16:03 <+bridge_> actually yeah 16:04 <+bridge_> the stop is doing this as well btw 16:04 <+bridge_> yeah a difference that you see in audio is that those waveforms pass through some analog electronics that meaningfully impact the result 16:04 <+bridge_> meanwhile that wave shaping in video is just about how you're driving your LCD pixels 16:04 <+bridge_> To be fair I know nothing about non-linear filters, so maybe non-linear filters have something to offer in this regard 16:05 <+bridge_> yeah a difference that you see in audio is that those waveforms pass through some analog electronics that meaningfully impact the result 16:05 <+bridge_> meanwhile that analog electronic wave shaping in video is just about how you're driving your LCD pixels 16:05 <+bridge_> yeah a difference that you see in audio is that those waveforms pass through some analog electronics that meaningfully impact the result 16:05 <+bridge_> meanwhile that analog electronic wave shaping in video is just about how you're driving your LCD pixels, not the image as a whole 16:06 <+bridge_> @sollybunny can you answer me one last question: How do I reset a sound directly starting from the beginning? 16:06 <+bridge_> the most simple electronic filter is close to the ideal and will probably produce ringing on both sides 16:06 <+bridge_> .m_Tick = 0 16:07 <+bridge_> I doubt they're using anything excessive complex in DACs 16:07 <+bridge_> sorry i cant be more help, i am very clueless about this 16:07 <+bridge_> i have just figured out enough to make the loopstart thing work for the express purpose of sfx (on that note i should do that) 16:07 <+bridge_> I thought you were our sound expert, I guess I need to find out who has any clue about this 16:07 <+bridge_> lmao 16:07 <+bridge_> i am not an expert on anything 16:07 <+bridge_> sometimes i understand stuff 16:07 <+bridge_> No one, people don’t really touch the sound thing 16:08 <+bridge_> It usually just works 16:08 <+bridge_> I may have reworked a volatile variable out once, robyt3 cleaned it up a bit a while ago 16:08 <+bridge_> volatile variabel!? 16:08 <+bridge_> (manual mutex?) 16:09 <+bridge_> I've been named the Japanese expert by Freddie 😩 16:09 <+bridge_> that is not good 16:09 <+bridge_> do we have a JP DDNet community like at all? 16:09 <+bridge_> are you nihongo jouzu 16:09 <+bridge_> not jouzu at all 16:09 <+bridge_> yabai 16:09 <+bridge_> Btw why? At the end of the day it is a signal you are presenting, a switch from 100% red to 0% red in an instant should have the same issue 16:10 <+bridge_> big weird, even 16:10 <+bridge_> what I mean is that asymmetric convolution filters aren't too relevant in video 16:11 <+bridge_> and neither is latency for FIR filters 16:11 <+bridge_> well it might be if you're convolving temporally but that's rare 16:11 <+bridge_> ringing is very very very very very very very very very very much a problem in video 16:12 <+bridge_> Oh, yeah I see. I have never seen an asymmetric convolution filter ever, my signal theory knowledge ends with LTI stuff 16:12 <+bridge_> (which is why I couldn't comment on whether it's common to have asymmetric filters in audio) 16:13 <+bridge_> the math suggests that asymmetric filters should result in phase distortion which sounds big yucky but idk, I haven't read anything about it 16:13 <+bridge_> what I was talking about was ringing in the analog domain, like the reconstruction filter in a DAC 16:13 <+bridge_> video cares about mostly spatial ringing in the digital domain, which is still very relevant by different 16:13 <+bridge_> yeah 16:14 <+bridge_> what I was talking about was temporal ringing in the analog domain, like the reconstruction filter in a DAC 16:14 <+bridge_> video cares about mostly spatial ringing in the digital domain, which is still very relevant by different 16:14 <+bridge_> where you pfp comes from 16:14 <+bridge_> source 16:15 <+bridge_> Is it just not really visible to the eye or something? I imagine there should still be temporal ringing for video signals all the same 16:16 <+bridge_> haikyuu s1e1 around 2:30 16:16 <+bridge_> well arch1t3cht here is talking about video encoding, where the kinds of ringing that appear depend on the type of encoding you're doing 16:16 <+bridge_> or scaling 16:17 <+bridge_> there's also temporal ringing in the analog domain, which can be seen as ghosting or reverse ghosting, but that has to do with how displays drive individual LCD pixels 16:17 <+bridge_> ghosting being a result of pixels transitioning too slow so you see a ghost image 16:18 <+bridge_> reverse ghosting being a result of pixel transitions overshooting their target value due to the display overdriving them too hard 16:19 <+bridge_> that overdrive being there in order to achieve faster transition times 16:19 <+bridge_> I think I managed to figure it out - it just looks so scuffed 16:22 <+bridge_> but you don't get any like visible oscillation with pixels because the drivers that cause such overdrive issues are generally fast enough to update the pixel voltages significantly faster than the actual display refresh rate 16:22 <+bridge_> so nyquist isn't a problem there 16:22 <+bridge_> so nyquist isn't a problem there, no worries about low pass filters for reconstruction 16:27 <+bridge_> This doesn’t sound quite right to me, but it’s also not really my area. You can adjust the output voltage as fast as you want, it should still ring 16:28 <+bridge_> well the crystals themselves aren't exactly oscillators 16:28 <+bridge_> they're quite damped 16:29 <+bridge_> So they act as a sort of low pass filter? 16:29 <+bridge_> I don't actually know the behaviour of liquid crystals, but I imagine they're quite non-linear? 16:30 <+bridge_> learath can u give me a fact about monitors 16:32 <+bridge_> they're bad for your teeth 16:32 <+bridge_> why tho 16:32 <+bridge_> well yeah I suppose 16:33 <+bridge_> I'm not sure at all if it's right but I think of them quite like capacitors 16:34 <+bridge_> if you put a voltage over a capacitor it's not going to ever spike to being over that voltage 16:34 <+bridge_> this depends on your monitor - a LCD for example uses polarized light and the intensity is definately non linear, as the polarization switching alignment 16:34 <+bridge_> this depends on your monitor - a LCD for example uses polarized light and the intensity is definately non linear, as the polarization switches alignment 16:34 <+bridge_> Hm, did you know that CRT monitors created the light by aiming a tiny electron beam onto specific points on the screen which was coated with phospors that shone when hit by electrons? 16:35 <+bridge_> doesn't everyone know that? 16:35 <+bridge_> 2501 my good sir 16:35 <+bridge_> give me a fun fact 16:35 <+bridge_> Young’uns mightnt 16:36 <+bridge_> signal theory is so second-nature to us that it's hard to forget the average person only knows how a CRT works 16:36 <+bridge_> not anymore, they are not used widely anymore, children these days don't even know what a video casette is 16:36 <+bridge_> Fun facts about monitors is a bit hard ngl, they aren’t really fun 16:37 <+bridge_> I did a seminar at school over monitors 😄 there are more cool things about them 16:37 <+bridge_> did you know that as a consequence of how CRTs worked, pixels in early digital video often weren't square? 16:37 <+bridge_> did you know that the plasma in plasma monitors is at room temperature? I think you could have guessed this 16:37 <+bridge_> CRTs use very high voltages internally 16:37 <+bridge_> you have to be careful when opening them up to not electrocute yourself 16:39 <+bridge_> many OLED panels don't use a full RGB subpixel structure 16:39 <+bridge_> there's a G subpixel in each "pixel", but half of them only have R and the other half only have B 16:39 <+bridge_> monitors are fun 16:39 <+bridge_> same goes for camera sensors: they generally have twice as many green detectors as red and blue ones 16:40 <+bridge_> I think this is done because the human eye can see small contrasts in green very good - which makes sense from an envolutionary standpoint 16:40 <+bridge_> I thought this one was so they could fit widescreen film into the same amount of storage. Record with antrhowhatever lens, project with anthrowhatever lens, you get widescreen movie whooo. Also created those extremely iconic “flares” that were wide thin 16:40 <+bridge_> im too young to know 16:41 <+bridge_> anamorphic I think 16:41 <+bridge_> The Bayer pattern 16:41 <+bridge_> i have always dreamed of a crt with a beam for each pixel 16:41 <+bridge_> would be kinda big 16:42 <+bridge_> those exist actually 16:42 <+bridge_> an individual tube for each subpixel 16:42 <+bridge_> used for flat screens 16:42 <+bridge_> don't think they're called CRTs 16:43 <+bridge_> actually they probably don't have electron beams 16:44 <+bridge_> they just excite the phosphors directly 16:44 <+bridge_> LOL that would probably be massive ngl 16:46 <+bridge_> guh I can't find what those things are called 16:46 <+bridge_> I swear they existed for some like weird nice thing 16:47 <+bridge_> nvm found it 16:47 <+bridge_> https://en.wikipedia.org/wiki/Surface-conduction_electron-emitter_display 16:47 <+bridge_> afaik this is related but it's more that with how analog displays worked (with horizontal scanlines which you can pretend display continuous signals) there wasn't really a reason why pixels should be square 16:47 <+bridge_> In particular there was some imprecision in how much each individual CRT display would stretch or squash the image vertically, so you couldn't even get exact square pixels if you tried 16:47 <+bridge_> Early digital video was produced by sampling an analog signal at some set frequency like 13.5 MHz and then the number of samples per line ended up being whatever fell out of that 16:48 <+bridge_> soo, how many Hz is that 16:49 <+bridge_> So you arrive at a storage resolution of 720x486 (for NTSC) but the active area that's supposed to be 4:3 may actually be smaller, like 710.85 x 486 16:49 <+bridge_> The funniest part is how different DVDs all use different standards for their active areas and sample aspect ratios and you have to figure out the aspect ratio for each disc individually 16:50 <+bridge_> I can’t imagine how annoying this must have been to produce compared to LCDs 16:50 <+bridge_> We hoped things might get clearer once the DVD Video patents expired and the spec went public but that fell flat for the stupidest reasons 16:50 <+bridge_> Casual 10k pr 16:50 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1434818067732496465/Screenshot_20251103_021428_Chrome.jpg?ex=697873f4&is=69772274&hm=c6137da9fc4f51fb66b464c277660843781ea9598bb08b88c76646f29164dcf3& 16:50 <+bridge_> https://web.archive.org/web/20140218044518/http://lipas.uwasa.fi/~f76998/video/conversion/ has more details on this 16:51 <+bridge_> there's also https://en.wikipedia.org/wiki/Field-emission_display 16:51 <+bridge_> but they similarly stopped development :( 16:52 <+bridge_> 100k:1 contrast ratio sounds great though 😄 16:54 <+bridge_> I guess we have nice OLEDs nowadays so good image quality is not completely lost to time 16:54 <+bridge_> https://en.wikipedia.org/wiki/D-1_(Sony) 16:55 <+bridge_> The spec was handed over to the National Diet Library in Japan but they didn't get an explicit greenlight to make it publicly available, but now the DVD Forum disbanded so they cannot ever *get* that greenlight 16:56 <+bridge_> Sounds amazing, thanks weird capitalist IP law 16:56 <+bridge_> https://upload.wikimedia.org/wikipedia/commons/9/94/Sony_D1_VTR.jpg 16:56 <+bridge_> this thing looks so sick 16:56 <+bridge_> Sony really used to make some banger looking machinery. You’d think this would take you to the space, not record video 16:57 <+bridge_> I really miss analog interfaces, everything is touchscreens now 🙁 16:57 <+bridge_> well we Literally Went To Space before we built digital video so clearly the latter is the harder one 16:57 <+bridge_> especially because we managed to fuck it up in like 10 different ways 17:21 <+bridge_> human ear is much more sensible than human eye though 17:21 <+bridge_> You can easily tolerate a bad image quality, you won't tolerate a bad sound quality 17:25 <+bridge_> yeah if someone used the wrong memcpy implementation I hear that immediately 17:38 <+bridge_> video encoding oh yeah buddy 17:39 <+bridge_> 19:14 <+ChillerDragon> @totar where is 10k pr? xd 19:15 <+bridge_> #10000 19:15 <+bridge_> https://github.com/ddnet/ddnet/pull/10000 19:15 <+ChillerDragon> i got a 26k pr merged within 1 day by a maintainer who didnt know me xd 19:15 <+ChillerDragon> kinda made me question the safety of the software i was running 19:15 <+bridge_> :justatest: 19:15 <+ChillerDragon> but im probably just biased because merges in ddnet are so fakin painful 19:16 <+bridge_> its sad 19:16 <+bridge_> make them soft 19:16 <+bridge_> like 19:16 <+bridge_> feather 19:16 <+bridge_> or 19:31 <+bridge_> stop making prs :pepeW: 19:32 <+bridge_> real 20:47 <+bridge_> fr 21:11 <+bridge_> who is this fucking genius 21:11 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465439102227845369/image.png?ex=69791c04&is=6977ca84&hm=f29efdbc33e05918b49ed4c090ef8fbbc370aa3f02ad95ed10da912a6467c193& 21:14 <+bridge_> me 21:33 <+bridge_> #11676 @heinrich5991 21:33 <+bridge_> 21:33 <+bridge_> > Yes. Maybe it's possible to order the formula in a way that preserves precision. 21:33 <+bridge_> 21:33 <+bridge_> How can I store a float that requires more bits without using a double? From my understanding this wrap preserves precision without changing the way the rendering works. 21:33 <+bridge_> https://github.com/ddnet/ddnet/pull/11676 21:36 <+bridge_> Using a double would already be clean enough for me, but even cleaner would be to use an `int` and a `float` separately 21:51 <+bridge_> I thought about that too, would the `int` just be `0` for the call from menu then? 21:52 <+bridge_> But wait, I'm not sure how you want to use them together without a double at all 21:53 <+bridge_> In most cases you need to convert to a double at some point, but not in the case `Tick % 3`, that only needs to consider the int 21:53 <+bridge_> What about the rotation and other places where this is used? 21:57 <+bridge_> Would all need to convert to double in the end. But seems not worth it because `TicksBody = std::clamp(Thickness, 1.0f, 5.0f);` would have to split the value again. I think just using double where necessary is fine, it's also what we do in other cases. 21:59 <+bridge_> So just revert the change and use a double? 21:59 <+bridge_> yeah 22:01 <+bridge_> probably also for `TicksBody` etc., but this might only break for long-lived lasers I guess because it does `Client()->GameTick(g_Config.m_ClDummy) - pCurrent->m_StartTick` 22:04 <+bridge_> What about [this](https://github.com/fokkonaut/ddnet/blob/272ca21c2d8289bca269c99bc08453cfdeb023ba/src/game/client/components/items.cpp#L347)? 22:04 <+bridge_> Does it belong in the `RenderLaser` impl? 22:08 <+bridge_> What does this even do? :justatest: I don't know how `m_Subtype` changes. If you'd move to the `RenderLaser` impl you'd have to supply plausible values to render the preview in the menu. 22:14 <+bridge_> @essigautomat ^ 22:38 <+bridge_> I'm surprised chiller has not made this PR yet 22:41 <+bridge_> :nouis: pronoun pr 22:42 <+bridge_> ig its better now 22:44 <+bridge_> it was literally just incorrect english before :nouis: 22:44 <+bridge_> unless only men plan ddnet 22:44 <+bridge_> unless only men play ddnet 22:45 <+bridge_> yea i was always confused by this when reading ddnet code 22:45 <+bridge_> like no one does this in the us xd 22:46 <+bridge_> i think it's common in GER because there is no gender-neutral option really 22:46 <+bridge_> are tees they/them 22:47 <+bridge_> no 22:47 <+bridge_> tees are tees 22:47 <+bridge_> tees have no pronouns 22:47 <+bridge_> what is their gender tho 22:47 <+bridge_> ill take a guess based on names sometimes 22:47 <+bridge_> no gender 22:47 <+bridge_> every animal has a gender 22:47 <+bridge_> it's weird though how many guys are offended i called them she 22:47 <+bridge_> compared to girls being called he 22:48 <+bridge_> aaaa/AAAA 22:48 <+bridge_> because default pronoun is he 22:48 <+bridge_> kimo pronouns 22:48 <+bridge_> because default pronoun is he on the internet 22:48 <+bridge_> and girls are used to being called he 22:48 <+bridge_> while guys arent 22:48 <+bridge_> normal != not weird 22:48 <+bridge_> pronouns are shit 22:48 <+bridge_> agreed 22:49 <+bridge_> confuing propaganda by modern world 22:49 <+bridge_> confusing propaganda by modern world 22:49 <+bridge_> what propaganda 22:49 <+bridge_> pronouns 22:49 <+bridge_> me when I hate refering to people 22:49 <+bridge_> fr xD 22:49 <+bridge_> how to derail developer speedrun 22:49 <+bridge_> well, there is, but for us, everything is just 'The' 22:49 <+bridge_> 22:49 <+bridge_> It's `Der Spieler` which is masculine, but translates to `The player`, but a German reads it like `Him` 22:49 <+bridge_> 22:49 <+bridge_> So yeah, lazy germanified comments 22:49 <+bridge_> yea its fine 22:50 <+bridge_> i know no one is writing those comments thinking "they are all men" 22:50 <+bridge_> maybe they are but ehh 22:50 <+bridge_> u cant infer it thru the language 22:51 <+bridge_> Keeping things gender neutral was actually really really hard for me to adapt to coming from someone who grew up with everything being he, she or it :justatest: 22:51 <+bridge_> 22:51 <+bridge_> Glad I now manage to use they/them correctly to respect mah fellows 22:52 <+bridge_> i hate it too 22:52 <+bridge_> same thing 22:52 <+bridge_> melon u are a girl tho right? 22:52 <+bridge_> melon did not answer me on thin question back then 22:53 <+bridge_> melon did not answer me on this question back then 22:53 <+bridge_> i made a small bit of a conlang where pronouns were all the same but you could change the ending vowel to indicate gender if you wanted 22:54 <+bridge_> default pronoun was -e ending so it was pretty easy to say, and if you talk fast its kinda like mushed together anyway 22:54 <+bridge_> you can even say "I" with gender so you dont have to explain ur pronouns xd 22:54 <+bridge_> first conversation tells you immediately 22:55 <+bridge_> its not something new 22:55 <+bridge_> aren't there languages where every word is gendered in like 5 ways 22:55 <+bridge_> @gorp_tw: how to say „I“ with gender 22:55 <+bridge_> yeah 22:56 <+bridge_> first-person form was like av- 22:56 <+bridge_> what 22:56 <+bridge_> @totar: unlikely I would have sent that pr. They/them freaks me out ngl xd 22:56 <+bridge_> It looks so off to me 22:56 <+bridge_> i think it's "ave" for no gender, "avi" for fem, "avu" for masc 22:56 <+bridge_> id have to look it up again 22:56 <+bridge_> so what gender are tees to you chiller 22:57 <+bridge_> Do ppl use that ave stuff never heard about it? Will anyone understand it? 22:57 <+bridge_> @alw5: they are balls 22:57 <+bridge_> So 22:57 <+bridge_> ah yes the 14th conversation where european ddnet players talk about how singular they is "so weird" 22:57 <+bridge_> Idk 22:57 <+bridge_> tees 22:57 <+bridge_> let me grab popcorn 22:57 <+bridge_> not balls 22:57 <+bridge_> hmm well it's a conlang, so no one would really understand it xd 22:57 <+bridge_> they/them is not even controversial for an ambiguous entity. you already use it that way 22:57 <+bridge_> tees have their own balls 22:58 <+bridge_> I don’t mean in a controversial sense 22:58 <+bridge_> I mean in a it sounds weird sense 22:58 <+bridge_> They is plural to me 22:58 <+bridge_> yeah 22:58 <+bridge_> its weird 22:58 <+bridge_> But what do I know I also don’t know how to use the word „read“ in English 22:58 <+bridge_> yea i would say it is plural and can be confusing to non english speakers 22:59 <+bridge_> 🙃 22:59 <+bridge_> idk why it's confusing when there's languages that dont even differentiate gender/plurality 22:59 <+bridge_> i cannot put "person" and "they" cuz first is non plural 22:59 <+bridge_> it is just a convenience that we have these, they is just singular or plural, the only exception in english 23:00 <+bridge_> it is annoying that there's no singular-only version of "they" 23:00 <+bridge_> well, and sometimes you can use "you" as a group 23:00 <+bridge_> which is kinda silly 23:00 <+bridge_> its because english gender propaganda 23:00 <+bridge_> that is also something i fixed in conlang 23:00 <+bridge_> i also fixed "we" when you are talking to someone, but you dont include them in the grou 23:00 <+bridge_> i also fixed "we" when you are talking to someone, but you dont include them in the group 23:00 <+bridge_> in english, "we" can include the person you're talking to, but not always 23:00 <+bridge_> its not for me, if i do translate it to my native its used as plural too 23:01 <+bridge_> crazy shet 23:01 <+bridge_> optional suffix -n for i**n**clusion, or -s for exclusion 23:01 <+bridge_> also also i dont like that "they" doesnt always mean unspecific, it can be specifically non-binary 23:02 <+bridge_> so i made 2 forms for that 23:02 <+bridge_> :greenthing: 23:02 <+bridge_> gorp stop making your own language 23:02 <+bridge_> if someone says "they" you dont know yet if they are saying it because they dont know gender 23:02 <+bridge_> its fun 23:03 <+bridge_> we are discusing serious questions here 23:03 <+bridge_> no place for fun 23:05 <+bridge_> true i go back to fixing website stuff 23:06 <+bridge_> nooooo 23:06 <+bridge_> we need at least someone talking here 23:07 <+bridge_> but tater and chiller rq 23:07 <+bridge_> noobs 😭 23:09 <+bridge_> chillerdragon: Do you know what the Matrix bridge uses? 23:09 <+bridge_> there's apparently many forks of mattermost, since the project was abandoned 23:10 <+bridge_> seems this one is maintained but i would need to compile: https://github.com/matterbridge-org/matterbridge/blob/master/docs/compiling.md 23:19 <+bridge_> what icon could i use for favorite clan? 23:19 <+bridge_> redshield 23:20 <+bridge_> red shield 23:20 <+bridge_> why shield 23:21 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1465471689684160522/image.png?ex=69793a5d&is=6977e8dd&hm=e11a4b3bef49bfbf26b020660ee07db708f1f9fb35f388b53236972a046d6d10& 23:21 <+bridge_> or maybe this 23:22 <+bridge_> yeah 23:23 <+bridge_> idk its like clan icon:greenthing: 23:25 <+bridge_> Are we getting new font support 23:26 <+bridge_> no, this font is already in the game 🙂