00:00 < bridge_> insane tech, only cost is that it lags the server xd 00:00 < bridge_> quick skip every map with ninja and shotgun 00:00 < bridge_> yea 00:00 < bridge_> quick, skip every map with ninja and shotgun 00:00 < bridge_> sadly its kinda useless on most maps lol? xd 00:00 < bridge_> yeah 00:01 < bridge_> so its not really a gamebreaking bug xd 00:01 < bridge_> it just lags a bit 00:01 < bridge_> L physics implementation 00:02 < bridge_> wanna see it in action? :justatest: 00:02 < bridge_> wdym? 00:02 < bridge_> 45.141.57.22:8340 00:02 < bridge_> i mean its just a bug xd 00:02 < bridge_> is there a real skip 00:02 < bridge_> what is there to show 00:02 < bridge_> how bad it is 00:03 < bridge_> @teero777 how would you fix this? applying ramp before ninja is a big physics change right? 00:03 < bridge_> yes it is. 00:04 < bridge_> actually 00:04 < bridge_> just clamp the velX to max speed after ninja move 00:04 < bridge_> lol 00:04 < bridge_> hmm 00:04 < bridge_> but doesn't ninja go above max speed sometimes 00:04 < bridge_> uh idk 00:05 < bridge_> maybe not 00:05 < bridge_> only if you get the velocity in the same tick you use ninja? 00:05 < bridge_> wdym "after" don't you do it before? 00:05 < bridge_> otherwise it still does huge movebox 00:07 < bridge_> @teero777 but ramp only caps X speed, why doesn't doing shotgun bug normally not cause this lag if it was because of movebox? 00:08 < bridge_> not sure what actually causes the lag here 00:08 < bridge_> @teero777 but ramp only caps X speed, why does doing shotgun bug normally not cause this lag if it was because of movebox? 00:10 < bridge_> is the map geometry logic not priori? it would not lag if it was 00:10 < bridge_> it'd have to be 00:10 < bridge_> what 00:11 < bridge_> priori vs posteriori in the context of collision detection defines when collisions are detected 00:11 < bridge_> movebox handles the geometry logic 00:14 < bridge_> @teero777 the issue says it happens on sunny side up, so it can't be related to ramp 00:14 < bridge_> huh? 00:14 < bridge_> or X vel 00:14 < bridge_> ? 00:15 < bridge_> well it must be something related to the velocity xd 00:15 < bridge_> but only with ninja 00:15 < bridge_> but I don't see anything other than movebox that changes in cost based on distance 00:15 < bridge_> but I don't see anything other than movebox in ninja code that changes in cost based on distance 00:16 < bridge_> static const mvec2 StackedLaserShotgunBugSpeed = CTVEC2(-2147483648.0f, -2147483648.0f); 00:16 < bridge_> that is our velocity. then we ninja 00:16 < bridge_> yes 00:16 < bridge_> but there's only 1 loop over distance which is movebox afaik 00:16 < bridge_> Ahh 00:17 < bridge_> i think i might know xDD 00:17 < bridge_> unless there's something like making ninja effects 00:17 < bridge_> hmm maybe not 00:17 < bridge_> well we move 1.41x more distance than normal sg bug 00:17 < bridge_> not on sunnyside up 00:17 < bridge_> wdym? 00:17 < bridge_> not on sunny side up 00:17 < bridge_> it doesnt matter 00:17 < bridge_> there's walls 00:17 < bridge_> ok? 00:17 < bridge_> so you hit them in movebox 00:18 < bridge_> and velocity is the same again 00:18 < bridge_> ok? it will still loop until it fully stops 00:18 < bridge_> yeah 00:18 < bridge_> but you don't need X vel, so it's just 1.0x sg bug speed 00:18 < bridge_> hmm 00:18 < bridge_> yea 00:19 < bridge_> the only other logic there is is the player to player collision 00:20 < bridge_> but that logic is free 00:20 < bridge_> does making a sound at sg speed distance outside of the map cause lag? xd 00:20 < bridge_> nah 00:20 < bridge_> cause the tee dies there too 00:21 < bridge_> lemme check if it also lags with my physics 00:21 < bridge_> that eliminates a lot 00:21 < bridge_> your physics don't even work outside the map 00:22 < bridge_> it it's not nearly the same 00:22 < bridge_> it would just crash 00:22 < bridge_> or movebox don't try to go there 00:22 < bridge_> or movebox wont try to go there 00:23 < bridge_> I g2g, this would be easy to find with debugger when I get home if you haven't figured it out by then. 00:25 < bridge_> yea its easy 00:42 < bridge_> @totar xd in my physics it checks if the position you are trying to go to is oob first and just kills you without doing movebox xD 00:42 < bridge_> i guess my physics won't have sg bug? 00:42 < bridge_> its a bug anyway 03:51 < bridge_> most ppl gate such bug fixes at compile time 03:51 < bridge_> if they care about preserving it 03:51 < bridge_> your physics will not be 1:1 without sg bug though 03:52 < bridge_> I think maps that exploit bugs are not allowed on ddnet so if that's the boundary you're probably ok 04:19 < bridge_> I'm already not caring about compatibility 04:21 < bridge_> there's your answer 04:26 < bridge_> did you? 04:26 < bridge_> no 04:27 < bridge_> did you do anything else? 04:27 < bridge_> wdym 04:27 < bridge_> idk, breathing, eating, driving etc. 04:27 < bridge_> I did all those things 04:27 < bridge_> woah nice, how was it? 04:28 < bridge_> do you have any grapes rn? 05:53 < bridge_> just did, it is movebox 05:54 < bridge_> we were right lol 05:54 < bridge_> woah 05:54 < bridge_> but it's not the ninja movebox 05:54 < bridge_> huh? 05:56 < bridge_> lol 05:56 < bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1427505280429723670/image.png?ex=68ef1b64&is=68edc9e4&hm=8fbf2f41cf9476333abe1a57ba3c2d6dc235057bba23564452df29e543ed462e& 05:56 < bridge_> small loop 05:56 < bridge_> light work 05:57 < bridge_> "1 billion MoveBox loops challenge" 05:57 < bridge_> 06:01 < bridge_> 500 cigarettes 06:07 < bridge_> ok this is rather complicated bug actually 07:03 < bridge_> this is so crazy 08:01 < bridge_> I only get more confused the more I look at this 08:02 < bridge_> I think I understand it now but my previous idea was not the whole picture so I have to rewrite the explanation 08:16 < bridge_> this is also a prediction desync lol 08:47 < bridge_> I was just wrong 08:51 < bridge_> ok I can explain it now 08:54 < bridge_> Why not just clamp the player velocity into a "sane" limit ? For example 100 tiles per second equals 2 tiles per tick, that equals about 64 game world units... 08:54 < bridge_> it does do that 08:54 < bridge_> I'll post explanation when I'm done typing 09:52 < bridge_> must be a long ass explanation 10:05 < bridge_> ## Bug reproduciton steps: 10:05 < bridge_> 10:05 < bridge_> -The shotgun tee must have a lower client id than the ninja tee 10:05 < bridge_> -the ninja tee and shotgun tee must be stacked 10:05 < bridge_> -the ninja tee must look down 10:05 < bridge_> -they both fire on the same tick 10:05 < bridge_> 10:05 < bridge_> ## Background information: 10:05 < bridge_> 10:05 < bridge_> ``length(vec2)`` can be negative if you assign it to an int: 10:05 < bridge_> 10:05 < bridge_> ``CCharacter::PreTick()`` is called in 2 different ways 10:05 < bridge_> If NoWeakHookAndBounce, then it will get called for each entity in ``CGameWorld::Tick()`` before it calls ``Tick()`` and ``TickDeferred()`` for each entity 10:05 < bridge_> But this is off by default, so we don't call ``PreTick()`` from ``CGameWorld::Tick()`` 10:05 < bridge_> 10:06 < bridge_> Instead it gets called from this code: 10:06 < bridge_> ```cpp 10:06 < bridge_> void CCharacter::Tick() 10:06 < bridge_> { 10:06 < bridge_> if(m_pGameWorld->m_WorldConfig.m_NoWeakHookAndBounce) 10:06 < bridge_> { 10:06 < bridge_> m_Core.TickDeferred(); 10:06 < bridge_> } 10:06 < bridge_> else 10:06 < bridge_> { 10:06 < bridge_> PreTick(); 10:06 < bridge_> } 10:06 < bridge_> /* ... */ 10:06 < bridge_> } 10:06 < bridge_> ``` 10:06 < bridge_> This is important because ``PreTick()`` is different depending on if we are using NoWeakHookAndBounce or not 10:06 < bridge_> ## The bug 10:06 < bridge_> 10:06 < bridge_> The shotgun tee has a lower client id, so it will process FireWeapon() via DirectInput first 10:06 < bridge_> 10:06 < bridge_> ```cpp 10:06 < bridge_> CServer::Run() 10:06 < bridge_> 10:06 < bridge_> for(each client) 10:06 < bridge_> After the Gameworld ticks all entities, it will do TickDeferred 10:06 < bridge_> 10:06 < bridge_> ```cpp 10:06 < bridge_> NinjaTee.TickDeferred() 10:06 < bridge_> { 10:06 < bridge_> m_Core.Move() 10:07 < bridge> -The shotgun tee must have a lower client id than the ninja tee 10:07 < bridge> -the ninja tee and shotgun tee must be stacked 10:07 < bridge> -the ninja tee must look down 10:07 < bridge> -they both fire on the same tick 10:07 < bridge> 10:08 < bridge> ## Background information: 10:08 < bridge> 10:08 < bridge> if the value of ``length(vec2)`` overflows when you cast it to int it will be negative : 10:08 < bridge> 10:08 < bridge> ``CCharacter::PreTick()`` is called in 2 different ways 10:08 < bridge> If NoWeakHookAndBounce, then it will get called for each entity in ``CGameWorld::Tick()`` before it calls ``Tick()`` and ``TickDeferred()`` for each entity 10:08 < bridge> But this is off by default, so we don't call ``PreTick()`` from ``CGameWorld::Tick()`` 10:08 < bridge> 10:08 < bridge> Instead it gets called from this code: 10:08 < bridge> ```cpp 10:08 < bridge> void CCharacter::Tick() 10:08 < bridge> { 10:08 < bridge> if(m_pGameWorld->m_WorldConfig.m_NoWeakHookAndBounce) 10:08 < bridge> { 10:08 < bridge> m_Core.TickDeferred(); 10:08 < bridge> } 10:08 < bridge> else 10:08 < bridge> { 10:08 < bridge> PreTick(); 10:08 < bridge> } 10:08 < bridge> /* ... */ 10:08 < bridge> } 10:08 < bridge> ``` 10:08 < bridge> This is important because ``PreTick()`` is different depending on if we are using NoWeakHookAndBounce or not 10:08 < bridge> no 10:08 < bridge> I wrote it all by hand 10:08 < bridge> GPT5 couldn't even understand the bug when I gave it all the files 10:09 < bridge> looking back I see informal punctuation but otherwise you could've fooled me 10:09 < bridge> we can't have headers anymore 10:13 < bridge> Minimal fix: 10:13 < bridge> ```cpp 10:13 < bridge> case WEAPON_NINJA: 10:13 < bridge> { 10:13 < bridge> // reset Hit objects 10:13 < bridge> m_NumObjectsHit = 0; 10:13 < bridge> 10:13 < bridge> m_Core.m_Ninja.m_ActivationDir = Direction; 10:13 < bridge> m_Core.m_Ninja.m_CurrentMoveTime = g_pData->m_Weapons.m_Ninja.m_Movetime * Server()->TickSpeed() / 1000; 10:13 < bridge> 10:13 < bridge> +++ if (length(m_Core.m_Vel) > 6000.0f) 10:13 < bridge> +++ m_Core.m_Vel = normalize(m_Core.m_Vel) * 6000.0f; 10:13 < bridge> 10:13 < bridge> m_Core.m_Ninja.m_OldVelAmount = length(m_Core.m_Vel); 10:13 < bridge> 10:13 < bridge> GameServer()->CreateSound(m_Pos, SOUND_NINJA_FIRE, TeamMask()); // NOLINT(clang-analyzer-unix.Malloc) 10:13 < bridge> } 10:13 < bridge> ``` 10:23 < bridge> is AI the end of Markdown? 10:23 < bridge> is it killing markdown? 10:26 < bridge> ?xd 10:26 < bridge> Isnt ai the no.1 customer of markdown 10:31 < bridge> Very useful explained... I would lower the general speed limit to 1000.f (that equals 31 tiles per tick more or less) that is still and impressive not playable speed 10:32 < bridge> Very useful explained... I would lower the general speed limit everywhere to 1000.f (that equals 31 tiles per tick more or less) that is still and impressive not playable speed 10:33 < bridge> Very useful explained... I would lower the general speed limit everywhere to 1000.f (that equals 31 tiles per tick more or less) that is still an impressive not playable speed... So less headache for the cpu 10:38 < bridge> Holy spam 10:40 < bridge> > if the value of length(vec2) overflows when you cast it to int it will be negative : https://godbolt.org/z/e6hq9KGh9 10:40 < bridge> 10:40 < bridge> oh no, nobody could have ever seen coming that 😮 I am so suprised that this can overflow 10:40 < bridge> > if the value of length(vec2) overflows when you cast it to int it will be negative : 10:40 < bridge> 10:40 < bridge> oh no, nobody could have ever seen coming that 😮 I am so suprised that this can overflow 10:40 < bridge> (fck off discord i am citing) 10:42 < bridge> it only barely overflows, and it's the reason that you need to look down to reproduce the bug, so I thought it was important to note 10:43 < bridge> Eventually, times ago I saw on YouTube "one line coder" designing a collisions algorithm that iterates each step where it intersects the tiles grid, instead of every single game world unit 10:43 < bridge> teero has it in his code 10:43 < bridge> yes, would be neat if teeworlds would have used that 16 years ago 10:43 < bridge> there's a nice comment 10:44 < bridge> also there was a name for this algorithm, was it bresenham? 10:44 < bridge> ```cpp 10:44 < bridge> // TODO: rewrite this smarter! 10:44 < bridge> int CCollision::IntersectLine(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision) const 10:44 < bridge> ``` 10:44 < bridge> DDA 10:44 < bridge> Eventually, times ago I saw on YouTube "one lone coder" designing a collisions algorithm that iterates each step where it intersects the tiles grid, instead of every single game world unit 10:44 < bridge> wait 10:45 < bridge> nvm it is DDA 10:45 < bridge> Bresenham doesn't hit every cell 10:47 < bridge> yeah it's DDA, if I'd create a game I'd use Xiaolin Wu's and make the sensistiive checks with the sourroundings with it 10:48 < bridge> you'd even know how _hard_ a tile would be hit or how much 10:50 < bridge> Who plays his modification? Or how to try it? 10:50 < bridge> https://github.com/Teero888/ddnet_physics_c 10:50 < bridge> it's just a library, not a mod 10:52 < bridge> Hey, don't read it! 10:52 < bridge> 😳 10:52 < bridge> you gon make teeto look like :angy: 10:55 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427580640878137344/RDT_20251014_0324151290754756230135584.jpg?ex=68ef6193&is=68ee1013&hm=920ac53ce28499af2b3aa9175d10df0ec7016229bd4aeb1657d7b45f46d2b22c& 10:57 < bridge> @totar good thing I don't have to reproduce that square root you evil mf 10:57 < bridge> why am I evil 10:58 < bridge> I would have yet another sqrt in my code if I was ddnet compatible xd 10:58 < bridge> oh lol 10:58 < bridge> you could just do squared distance 10:58 < bridge> yea. But floating point accuracy at high values like 6000*6000 is shit you know xd 10:58 < bridge> squared length 10:59 < bridge> ig 10:59 < bridge> Well it's not the same xd 10:59 < bridge> it doesn't actually matter because the direction is set to your mouse 11:00 < bridge> ig this can be simpler 11:01 < bridge> idk we will see if reviewer cares or not 11:01 < bridge> @totar I would love to show you a photo of the grill function I'm using rn to cook the baguette because we were talking about it recently but I would leak myself in the reflection 11:01 < bridge> lol 11:02 < bridge> Yea can't you just fmaxf(ninja speed, 6000) when you multiply the direction change? 11:02 < bridge> Lazy typing on phone 11:02 < bridge> You know what I mean 11:02 < bridge> Ah no you can't 11:02 < bridge> mb 11:02 < ws-client1> **** wait wot when did you release this https://github.com/Teero888/ddnet_physics_c @Teero ? 11:02 < bridge> Few weeks ago 11:02 < ws-client1> **** omg 11:02 < bridge> But don't read or use 11:02 < bridge> It's wip 11:03 < ws-client1> **** i will write new production server with it 11:03 < bridge> fminf 11:03 < bridge> you can ig, the API won't change much anymore 11:03 < ws-client1> **** pog 11:03 < ws-client1> **** but catto lib doesnt even have snaps yet ._. 11:03 < bridge> lol 11:03 < bridge> when snaps teero 11:04 < ws-client1> **** its net not physics 11:04 < bridge> @totar we need some docs for the global state of the tee accelerator. Ah maybe not. It's only relevant for multi threading 11:04 < bridge> Do you know where, in the source code, it checks if a tee is too much inside a solid tile? 11:04 < bridge> I am playing around modding physics, and when this anomaly happens the tee dies 11:04 < bridge> "don't multithread this code" 11:04 < bridge> gg 11:04 < bridge> xdd 11:05 < bridge> yea chiller don't multi thread that code until I write docd 11:05 < bridge> yea chiller don't multi thread that code until I write docs 11:05 < bridge> docs 11:05 < bridge> the docs in the docs directory are outdated 11:07 < ws-client1> **** ye dw i wont do it any time soon 11:07 < ws-client1> **** i try to implement snaps in pyson since a few days and i am hard stuck 11:08 < ws-client1> **** not sure when the net lib will get snaps 11:08 < ws-client1> **** but then i would actually like to build a server written in C 11:09 < bridge> epuc 11:09 < bridge> epic 11:10 < bridge> make better protocol while you are at it 11:17 < bridge> <0xdeen> Thank you @heinrich5991 ! ^ 11:26 < bridge> ## The bug 11:26 < bridge> 11:26 < bridge> The shotgun tee has a lower client id, so it will process FireWeapon() via DirectInput first 11:26 < bridge> 11:26 < bridge> ```cpp 11:26 < bridge> CServer::Run() 11:26 < bridge> 11:26 < bridge> for(each client) 11:26 < bridge> { 11:26 < bridge> 11:26 < bridge> // Shotgun Tee 11:26 < bridge> CGameContext::OnClientPredictedEarlyInput() 11:26 < bridge> CPlayer::OnPredictedEarlyInput() 11:26 < bridge> CCharacter::OnDirectInput() 11:26 < bridge> CCharacter::FireWeapon() 11:26 < bridge> case WEAPON_SHOTGUN: 11:26 < bridge> new CLaser(...) 11:26 < bridge> // Inside the CLaser constructor (Important!) 11:26 < bridge> CLaser::DoBounce() 11:26 < bridge> CLaser::HitCharacter() 11:27 < bridge> // The Ninja Tee gets shotgun bug velocity 11:27 < bridge> NinjaTee->SetRawVelocity(vec2(-2147483648.0f, -2147483648.0f)); 11:27 < bridge> // Ninja tee m_Core.m_Vel becomes vec2(-2147483648.0f, -2147483648.0f) 11:27 < bridge> 11:27 < bridge> // Ninja Tee 11:27 < bridge> CGameContext::OnClientPredictedEarlyInput() 11:27 < bridge> CPlayer::OnPredictedEarlyInput() 11:27 < bridge> CCharacter::OnDirectInput() 11:27 < bridge> CCharacter::FireWeapon() 11:27 < bridge> case WEAPON_NINJA: 11:27 < bridge> { 11:28 < bridge> pog 11:28 < bridge> ## The bug 11:28 < bridge> 11:28 < bridge> The shotgun tee has a lower client id, so it will process FireWeapon() via DirectInput first 11:28 < bridge> 11:28 < bridge> ```cpp 11:28 < bridge> CServer::Run() 11:28 < bridge> 11:28 < bridge> for(each client) 11:28 < bridge> { 11:28 < bridge> 11:28 < bridge> // Shotgun Tee 11:28 < bridge> CGameContext::OnClientPredictedEarlyInput() 11:28 < bridge> CPlayer::OnPredictedEarlyInput() 11:28 < bridge> CCharacter::OnDirectInput() 11:28 < bridge> CCharacter::FireWeapon() 11:29 < bridge> case WEAPON_SHOTGUN: 11:29 < bridge> new CLaser(...) 11:29 < bridge> // Inside the CLaser constructor (Important!) 11:29 < bridge> CLaser::DoBounce() 11:29 < bridge> CLaser::HitCharacter() 11:29 < bridge> // The Ninja Tee gets shotgun bug velocity 11:29 < bridge> NinjaTee->SetRawVelocity(vec2(-2147483648.0f, -2147483648.0f)); 11:29 < bridge> // Ninja tee m_Core.m_Vel becomes vec2(-2147483648.0f, -2147483648.0f) 11:29 < bridge> 11:29 < bridge> // Ninja Tee 11:29 < bridge> CGameContext::OnClientPredictedEarlyInput() 11:29 < bridge> CPlayer::OnPredictedEarlyInput() 11:29 < bridge> CCharacter::OnDirectInput() 11:29 < bridge> CCharacter::FireWeapon() 11:29 < bridge> case WEAPON_NINJA: 11:29 < bridge> { 12:24 < bridge> Classics hein RICH donation 12:25 < bridge> No it will be compatible ofc 12:25 < bridge> No chiller 12:25 < bridge> We both know rich ppl don't do that 12:25 < bridge> Let's take you as an example 12:25 < bridge> Donate? 12:25 < bridge> I am not rich 12:25 < bridge> Also I did donate 12:27 < bridge> Ok, then I am just very very ppor 12:27 < bridge> Ok, then I am just very very poor 12:27 < bridge> .\_. 12:27 < bridge> I am Munich middle class 12:28 < bridge> 110% of my income goes straight to rent 12:28 < bridge> Ok ok 12:28 < bridge> but you own the flat 12:28 < bridge> lol 12:29 < bridge> If you own a flat in Munich you are rich I guess 12:29 < bridge> ig xd 12:32 < bridge> chiller when do we play if city against each other 12:32 < bridge> if city irl 12:37 < ws-client1> **** if city irl 12:37 < ws-client1> **** wtf 12:37 < ws-client1> **** i donated 0.039 BTC to ddnet btw 12:42 < bridge> After the Gameworld ticks all entities, it will do TickDeferred 12:42 < bridge> 12:42 < bridge> ```cpp 12:42 < bridge> NinjaTee.TickDeferred() 12:42 < bridge> { 12:42 < bridge> m_Core.Move() 12:42 < bridge> { 12:42 < bridge> float RampValue = VelocityRamp(/* ... */); 12:42 < bridge> 12:42 < bridge> // Here we ramp the velocity 12:42 < bridge> m_Vel.x = m_Vel.x * RampValue; 12:42 < bridge> 12:42 < bridge> // Our velocity is zero because of HandleNinja() so basically nothing happens here 12:42 < bridge> // It will stay this way for 10 ticks 12:42 < bridge> m_pCollision->MoveBox(&NewPos, &m_Vel, /* ... */); 12:42 < bridge> 12:42 < bridge> // Then we un-ramp the velocity 12:42 < bridge> m_Vel.x = m_Vel.x * (1.0f / RampValue); 12:42 < bridge> 12:42 < bridge> } 12:42 < bridge> } 12:42 < bridge> ``` 12:42 < bridge> 12:42 < bridge> **10 Ticks Later** 12:42 < bridge> 12:42 < bridge> ```cpp 12:42 < bridge> NinjaTee.Tick() 12:42 < bridge> { 12:43 < bridge> CCharacter::PreTick() 12:43 < bridge> m_Core.Tick(true, true) 12:43 < bridge> CCharacterCore::TickDeferred() 12:43 < bridge> sick 12:45 < bridge> like 4k € 12:46 < bridge> today 12:48 < bridge> Deen hopefully put everything on eth 12:48 < bridge> https://tenor.com/view/up-arrow-uponly-up-only-pump-it-gif-3952233956060582693 12:48 < bridge> I thought btc is doing better than eth 12:50 < bridge> (I just want eth to do better, pls) 12:50 < bridge> no bias I'm sure 12:50 < bridge> nono ofc not:pepe_stonks_down: 12:52 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427609996052398220/Screenshot_20251014-125200.png?ex=68ef7cea&is=68ee2b6a&hm=e5a7d4b0d1820bd1cccb353d24a28d7922c26232b798269ed02b046e783c93c8& 12:52 < bridge> :crycat: 12:52 < bridge> Ok enough offtopic 12:55 < bridge> you have notifications for price movements? :justatest: 12:55 < bridge> it's smarter to be a friend of trump at this point 13:17 < bridge> Yay found the bug! I pushed the same object twice into a dictionary and did not realize I would edit both if I edit one of them 13:17 < bridge> Ppl say pointers are hard. But I find high level languages sometimes harder if they use pointers under the hood and it is easy to not realize what is actually going on 13:18 < bridge> @blaiszephyr: deen instantly cashed out and got so annoyed by the process that he also removed the btc donation option xd 13:40 < bridge> eth is performing pretty badly. 13:40 < bridge> it's strongly correlated to btc 13:41 < bridge> and market movements in general. 13:42 < bridge> Thank you mr Trump 13:42 < bridge> This fr 13:42 < bridge> yes 13:43 < bridge> First you semi publicly shame my inability to ascend to a proper being and now you're calling me Trump 13:43 < bridge> 13:43 < bridge> I call bias 14:17 < bridge> :justatest: 14:19 < bridge> look ot for fridays, trump announces X, market closes on weekends and change wildly, he profits, doom monday 14:19 < bridge> look out for fridays, trump announces X, market closes on weekends and change wildly, he profits, doom monday 14:19 < bridge> btc is a store of value like gold, eth is more smarter, i believe it can be the future of banking 14:20 < bridge> btw eth reached a all time high not long ago 14:21 < bridge> that statement is saying pretty much nothing. 14:21 < bridge> yeah just saying a bit of info 14:22 < bridge> well, also saying that eth has value in its utility, while btc has value in its scarcity like gold 14:22 < bridge> was referring to all time high 14:22 < bridge> the other part is valid. 14:23 < bridge> well, why is performing badly if it reached a all time high not long ago 14:23 < bridge> xD 14:23 < bridge> or a valid point of view 14:23 < bridge> the all time high was like 50€ above the previous one? 14:23 < bridge> taking into account how long ago the prevoius ath was 14:24 < bridge> and taking inflation into account 14:24 < bridge> yeah, but its a different model iirc, in eth u create and burn ether, in btc it really is a fixed amount 14:25 < bridge> > No, the supply of Ethereum (ETH) is not limited in the way Bitcoin's is; it does not have a fixed maximum supply. However, the rate of new ETH creation has significantly decreased since the switch to Proof-of-Stake, and with the fee-burning mechanism introduced by EIP-1559, the total supply can fluctuate and even become deflationary during periods of high network activity. 14:25 < ws-client1> **** i love the supply limit of BTC 14:25 < bridge> I'm coming from an investment point of view where everything is measuered in FIAT money and not in the crypto asset itself. 14:26 < ws-client1> **** even without inflation the amount of BTC that keeps getting lost by ppl already is constantly driving up the price 14:26 < bridge> xD 14:26 < bridge> what are u trying to say here 14:26 < bridge> btw holding fiat money is probs the worse, it nly devalues 14:26 < bridge> u should hold stocks or other things 14:26 < ws-client1> **** hodl the euro 14:26 < ws-client1> **** diamond hands on cash 14:26 < bridge> hold my hands 14:27 < bridge> i would specially avoid dollar kek 14:27 < bridge> the model does not matter when talking about FIAT inflation. 14:27 < bridge> trump running the printer 14:27 < bridge> it matters, it drives the price kinda by inflation/deflation and the amount of available tokens 14:27 < ws-client1> **** tbh so far my cash has outperformed my stock portfolio <:justatest:572499997178986510> 14:27 < bridge> wtf 14:27 < bridge> you talk about asset inflation 14:27 < bridge> what d ou invst in 14:27 < bridge> cant type 14:28 < ws-client1> **** some intel short options 14:28 < bridge> xd 14:28 < bridge> options is risky 14:28 < ws-client1> **** oil 14:28 < bridge> chiller is vibe investor 14:28 < ws-client1> **** pharma 14:28 < ws-client1> **** fr 14:28 < bridge> didnt intel announce partner with nvidia 14:28 < bridge> @learath2 click merge button here https://github.com/ddnet/ddnet/pull/11040 14:28 < bridge> I'm talking about whether eth even outperformed FIAT inflation, which I doubt. 14:28 < bridge> ai warning 14:28 < bridge> > es, ETH has outperformed fiat inflation over longer timeframes, particularly when considering the returns on investment from its early days to recent performance. However, this is subject to high volatility, and its effectiveness as an inflation hedge is not consistent, especially in the short term, as its returns are often driven by market-specific factors rather than inflation directly. 14:29 < bridge> since tue last all time high 14:29 < bridge> Did you pay the merge toll? 14:29 < bridge> the 14:29 < bridge> that will be 0.1 btc 14:29 < bridge> shitcoins 14:29 < bridge> btw do u have road tolls 14:29 < bridge> in germany 14:29 < bridge> we have them still here 14:29 < bridge> no 14:29 < bridge> sadly 14:29 < bridge> for bigger cars we do 14:30 < bridge> like trucks 14:30 < bridge> and for old cars that polute more? 14:30 < ws-client1> **** <:hisnail:768893210726367232> 14:30 < bridge> in barcelona old cars that polute cant enter 14:30 < bridge> u get fined 14:30 < bridge> depending on how old they are :kek: 14:30 < bridge> here's 10x:deen_star: for you 14:30 < bridge> I am far too liquid rn, but haven't really decided what to do, so I'm hodling euro 14:30 < ws-client1> **** woah catto is inflating star value 14:30 < ws-client1> **** ono 14:30 < bridge> i currently also only rly have fiat and no stocks, cuz i needed the money 14:31 < bridge> don't inflate the deen(ied) star value! 14:31 < bridge> but hopefully ill save money now that i moved and relax 14:32 < bridge> in the travel to my work by car, one wrong turn and the toll is 10 euro 14:32 < bridge> d 14:32 < bridge> xd 14:33 < bridge> the fuck 14:33 < bridge> yeah 14:33 < bridge> but ill get some resident permit where i can use the road twice a day for free 14:33 < bridge> to go and return from work 14:33 < bridge> i dont own a car luckily 14:33 < bridge> I hope i never need one 14:33 < bridge> i now need it, its 1h by car to work office 14:33 < bridge> Move to the land of the free 14:34 < bridge> Ouch, you need a new job 14:34 < bridge> nah its only twice a week 14:34 < bridge> In the land of the free, I'd have a slave transporting me around 14:34 < bridge> and i rly dread interveiwing 14:34 < bridge> i hate it 14:34 < bridge> i know im worth but it makes u. feel worthless 14:34 < bridge> ?? xD 14:34 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427635789629493310/image.png?ex=68ef94f0&is=68ee4370&hm=f350ae022ff8e67be790590f308b66d81ecb81f8d3f5be35d75ea65c307841f2& 14:34 < bridge> xd 14:35 < bridge> got a pretty modern diesel recently. went to the netherlands and back, took only half of my gas tank for lile 500+km 14:35 < bridge> I have been told by friends it gets better the more you do it 14:35 < bridge> like 14:35 < bridge> how much L per 100km 14:35 < bridge> with mine i can achieve 4.9l/100km if its not city 14:35 < bridge> somethere between 4.5 and 5.5L 14:35 < bridge> but its gasoline 14:36 < bridge> iirc if u drive at 80 and not 120 u save gas 14:36 < bridge> but slow 14:36 < bridge> also i guess in germany ucan go at 300 14:36 < bridge> xd 14:37 < bridge> yeah, the netherlands were slow af. it was like 100km/h 14:37 < bridge> in spain limit is 120 14:37 < bridge> but I was like, my remaining range increased :kek: 14:37 < bridge> NO, that's literally the only fun of owning a car. Going highway speeds 14:37 < bridge> i usually go at 130 14:37 < bridge> xd 14:37 < bridge> bless the radar apps 14:37 < bridge> In turkey they bumped it to 140 on newer highways. It depends on the road geometry 14:38 < bridge> which makes sense 14:38 < bridge> I will probably never drive in the EU unless I move back to Italy. The drivers licenses are so damn expensive here 14:39 < bridge> Only Italy lets me convert my turkish license 14:39 < bridge> i doubt. they will change limit in spain, roads are rly nice and new but same shit 14:39 < bridge> if u get eu license u can drive in all eu 14:39 < bridge> convert to italian one, then convert the italian one to german one 14:39 < bridge> u dont need to convert 14:39 < bridge> i can drive in germany with my license 14:40 < bridge> thats the point of eu 14:40 < bridge> xd 14:40 < bridge> kinda xd 14:40 < bridge> how much is gasoline there 14:40 < bridge> unleaded 95 14:40 < bridge> still convert to german one. for the prestige 14:40 < bridge> here i can get at 1.3 euro 14:40 < bridge> pretty cheap 14:41 < bridge> diesel is 1.54€ 14:42 < bridge> gas 1.70€ 14:42 < bridge> damn 14:42 < bridge> expensive 14:42 < bridge> diesel here is like 1 14:42 < bridge> iirc 14:43 < bridge> we getting taxed on everything 14:49 < bridge> do you know what is on my mind today? 14:49 < bridge> 14:49 < bridge> i wonder if we have statistically more even or odd ppl living in this world 14:49 < bridge> Or if it's perfectly balanced out 14:59 < bridge> I need to somehow live in italy for 45 days at least 15:12 < bridge> Hello everyone, 15:12 < bridge> 15:12 < bridge> I'm reasearching the custom development and hosting. I'm planning on opening block server in the future, with approximately 30-40 players. 15:12 < bridge> 15:12 < bridge> Could you please tell me the following: 15:12 < bridge> 1. What specs for the server should I look for? I need to estimate how much the runtime will cost. 15:12 < bridge> 2. Block servers are known for the toxic community and there is a chance of a DDOS attack happening, is there any kind of advice/software to protect and deflect those attacks? Any specific hosting requirements? 15:12 < bridge> 3. How hard is to modify and develop something custom on the server side? Are there any guides from where to start, any documentation? Sorry for such opinionated question, I've got a bit of C++11 knowledge but I won't consider myself pro by any means. 15:13 < bridge> forgot to add: 15:13 < bridge> 4. Anticheat. How do modern server counter the problem with bots and hacked clients? 15:14 < bridge> For hosting, the cost depends mostly on how much resistance to attacks you need. Actually hosting the game takes like no computing power. 15:16 < bridge> DDNet servers basically don't. You can implement your own anti-bot but that's going to have to be pretty much all custom 15:17 < bridge> I remember the wiki having links to some documentation sources but since the wiki got wiped I don't know if it's still there 15:17 < bridge> Don't they store successful runs in teehistorian format to post-factum analisys? I heard of some cheaters getting banned like N9mkoik and maybe some other TASers 15:18 < bridge> Yeah teehistorian stores everything, I'm just saying that all bot detection is manual 15:27 < bridge> <[D] bencie> we have a antibot idk if we share it with other servers tho 15:27 < bridge> What does it even do? 15:28 < bridge> <[D] bencie> im not allowed to share that 15:28 < bridge> Makes sense 15:28 < bridge> It feels as if it's doing very little 15:29 < bridge> <[D] bencie> kinda its stil pretty usefull tho 15:29 < bridge> Would be fun to have stats on how many botters it has handled 15:31 < bridge> <[D] bencie> idk if im allowed to say specifiecs but its more then any single mod 15:31 < bridge> <[D] bencie> 15:31 < bridge> <[D] bencie> from what i see now 15:33 < bridge> I've seen header files for antibot, isn't it possible to just provide server hosters a compiled binary antibot library? 15:36 < bridge> no(t) really without making it as painful as humanly possible to RE 15:37 < bridge> and even then there is no way a provider will hand out his AB 15:37 < bridge> you could ask chillerdragon who may help you out - but thats about it :p 15:37 < bridge> About my second question: 15:37 < bridge> 15:37 < bridge> I'm not really experienced in any kind of real-time game development/netcode, just thoughts in the air. Have anyone made something like edge servers? 15:37 < bridge> 15:37 < bridge> So we'd have an account system, for example, and those edge servers will perform something like traffic scrubbing, authentication (creation of UDP sessions for people with an account), rate limiting and proxying to the game server. Idk how much latency would it add honestly, but there is this one block server that gets hameered down from time to time really hard 15:38 < bridge> About my second question: 15:38 < bridge> 15:38 < bridge> I'm not really experienced in any kind of real-time game development/netcode, just thoughts in the air. Have anyone made something like edge servers? 15:38 < bridge> 15:38 < bridge> So we'd have an account system, for example, and those edge servers will perform something like traffic scrubbing, authentication (creation of UDP sessions for people with an account), rate limiting and proxying to the game server. Idk how much latency would it add honestly, but there is this one block server that gets hameered down from time to time really hard but other times it works just fine handling 30 tees on a 8 USD VPS 15:39 < bridge> single-thread perfromance and network stabilityare the most important things to look out for IG. 15:39 < bridge> 15:39 < bridge> i'd say a single server (network) of 30-40 players should be handled by 4-6GB Ram and a decent quad-core CPU 15:40 < ws-client1> **** @python311 there is no proxy support yet. And nobody is working on it since 3 years see https://github.com/ddnet/ddnet/pull/4791 15:40 < ws-client1> **** the server not needing any ressources anymore is sadly no longer true with ddnet. It needs more and more ram. 15:40 < ws-client1> **** I am not going to share my antibot module sorry. 15:41 < bridge> DDos protection is a more or less difficult topic, espacially if you're not proficient in networking. DDNet is being helped out by Davide: https://lowhosting.org 15:41 < ws-client1> **** But for editing the gamemode you can also just use publicly available block servers such as F-DDrace and DDNet++ 15:41 < bridge> DDos protection is a more or less difficult topic, espacially if you're not proficient in networking. DDNet is being helped out by Davide: https://lowhosting.org, but regular DDos protection costs.. a LOT 15:41 < ws-client1> **** for ddos protection the state of the art is davide as bencie already said 15:41 < bridge> hi chiller, pls use discord - its me, melon 15:41 < ws-client1> **** you are called bencie 15:42 < bridge> hi chiller, pls use discord - its me, melon 15:42 < bridge> 15:42 < bridge> i'm blue bencie! 15:42 < ws-client1> **** yes 15:42 < ws-client1> **** so i call you bencie 15:42 < bridge> Oh wow apparently I've just been spreading misinformation on the internet 15:42 < bridge> he is not melon but seemingly an imposter. 15:42 < bridge> 👀 15:43 < ws-client1> **** ddnet servers still runs smoother than minecraft 15:43 < ws-client1> **** but compared to teeworlds it uses a lot more ram 15:43 < bridge> but he's blue, dabedee dabedai 15:43 < ws-client1> **** i my self am currently quite tight on ram 15:45 < bridge> Thanks for you answers guys 15:45 < bridge> The bar is in hell 15:45 < bridge> why does it use much ram lol? 15:46 < ws-client1> **** c++ everywhere 15:46 < ws-client1> **** teeworlds was more careful with allocations 15:46 < bridge> really? 15:47 < bridge> makes sense xd 15:47 < bridge> teeworlds era was earlier 15:48 < bridge> I guess developing a game that you wrote the engine for is a little easier to manage in terms of resource handling 15:48 < ws-client1> **** also i doubt in ddnet anyone even cares 15:48 < ws-client1> **** its `std::vector` everywhere because ram is free in 2025 15:49 < ws-client1> **** wait till i drop server support in this project https://github.com/ChillerDragon/teeworlds-asmr 15:49 < ws-client1> **** it will use like no ram at all 15:49 < bridge> a pc with less than 4gb of ram os effectively a microcontroller 15:50 < bridge> is 15:50 < bridge> xD 15:50 < ws-client1> **** who needs ram if you have cpu registers 15:50 < bridge> true, but if we talk VPS you can get pretty far with 4gb if you properly manage the used distro 15:50 < ws-client1> **** for a single tw server yes 4gb should work 15:50 < bridge> probably need to uninstall ddnet 15:50 < bridge> heard it uses a lot of ram 👀 15:51 < bridge> how much does a ddnet server use? 50mb? 15:51 < bridge> gentoo + openrc - i call you could reach 50mb idle 15:51 < bridge> or you trim the kernel down to a minimum, 20mb 15:51 < bridge> no way xd 15:51 < bridge> 50mb idle rip 15:52 < bridge> openrc, musl, no logging 15:52 < bridge> xd 15:52 < bridge> maybe 15:52 < bridge> uh iirc tw uses a lot of static buffers, in some cases it may over allocate 15:52 < bridge> but ddnet is a more complex game 15:52 < bridge> way more 15:52 < bridge> also are u comparing 16 player ddnet vs 16 player tw or 64 15:52 < bridge> cuz tw only handles 16 15:53 < bridge> well, tw currently handles 0 players :kek: 15:53 < bridge> ram si cheap to 15:53 < bridge> heyheyhey, i saw a 0.7 enjoyer on ddnet like 3 months ago okay 15:53 < bridge> game aint dead yet! 15:54 < bridge> he did ask how to connect a dummy and quit shortly after tho so 15:54 < bridge> he did ask how to connect a dummy and quit shortly after tho so eh.. 15:54 < bridge> rip? 15:54 < bridge> @ryozuki what would you do first if you had no computational limits? 15:54 < bridge> he did ask how to connect a dummy and quit shortly after tho so eh.. (well, he asked how to play with himself and people said dummy) 15:54 < bridge> as in ddnet or? xD 15:54 < bridge> in general 15:54 < bridge> 0.7 is great but unfinished 😭 15:54 < bridge> first, mine btc to get money for life to work on my side projects without worries 15:55 < bridge> then maybe break some busy beaver records 15:55 < bridge> hmm i guess ai is also compute intensive 15:55 < bridge> https://en.wikipedia.org/wiki/Busy_beaver 15:56 < bridge> oh 15:56 < bridge> Imagine you could just brute force every problem xdd 15:56 < bridge> i would also love compiling rust in 1ms 15:56 < bridge> xddd 15:56 < bridge> and firefox 15:56 < bridge> it would be the perfect gentoo pc 15:56 < bridge> imagine you could create matter from nothing. 15:57 < bridge> u could use galactic algorithms in such pc 15:57 < bridge> and it would be more efficient 15:57 < bridge> https://en.wikipedia.org/wiki/Galactic_algorithm 15:57 < bridge> yes 15:57 < bridge> An example of a galactic algorithm is the fastest known way to multiply two numbers,[4] which is based on a 1729-dimensional Fourier transform.[5] It needs O ( n log ⁡ n ) {\displaystyle O(n\log n)} bit operations, but as the constants hidden by the big O notation are large, it is never used in practice. However, it also shows why galactic algorithms may still be useful. The authors state: "we are hopeful that with further refinements, the algorith 15:58 < bridge> well u could also break all encryption 15:58 < bridge> the world would turn in fire 15:58 < bridge> u wont need to mine btc 15:58 < bridge> yes 15:58 < bridge> because u can break it 15:59 < bridge> I would check if I had free will 15:59 < bridge> i like this read https://quarter--mile.com/Human 16:00 < bridge> and this https://users.ece.cmu.edu/~gamvrosi/thelastq.html 16:00 < bridge> @teero777 make a ai and ask "how can entropy be reversed?" 16:00 < bridge> `How can the net amount of entropy of the universe be massively decreased? ` 16:01 < bridge> isn't that proven to be impossible? xd 16:01 < bridge> did u read the last question by isaac asimov 16:01 < bridge> its short 16:01 < bridge> . 16:10 < bridge> Rookie numbers I have like 10 0.7 players daily on fng and had a full 12 player ctf lobby with only 0.7 players recently 16:16 < bridge> A measurement of an Oct. 6 DDoS believed to have been launched through multiple botnets operated by the owners of the Aisuru botnet. Image: DDoS Analyzer Community on Telegram. 16:16 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427661229031292968/29-69t.png?ex=68efaca1&is=68ee5b21&hm=c15b2ec0a670cea79c8deb9fb97d93c462f4b19a0ae78bcacc4d49019690a8d8& 16:16 < bridge> https://krebsonsecurity.com/2025/10/ddos-botnet-aisuru-blankets-us-isps-in-record-ddos/ 16:16 < bridge> rookie numbers 16:16 < bridge> we used to this in ddnet 16:31 < bridge> 29.69Tbps oO 16:47 < bridge> Jupstar has informed me that teeworlds was also in fact shit and we should all use ddnet-rs frfr 16:48 < bridge> fr 16:51 < bridge> such a rage bait again 16:52 < bridge> i don' think ddnet-rs is careful with allocations either :justatest: 16:52 < bridge> static sized arrays also cost ram inside a heap object 16:52 < bridge> Damn weebs using lame-ass names even when break-the-lawing 16:52 < bridge> I have never once done a ragebait ever. I wouldn't even know what a rage is 16:53 < bridge> im back from my dentist appointment 16:53 < bridge> he told me i'm going to be crippled for life 16:53 < bridge> as long as you use wtf you allocate there is absolutely nothing wrong with using std::vector over static sized stuff 16:53 < bridge> rip 16:53 < bridge> yeah 16:53 < bridge> ofc it's stupid if you pre alloc 4gb of ram, just to power some GC 16:53 < bridge> static for known bounds 16:53 < bridge> vec for dynamic 16:53 < bridge> rust for sane software 16:54 < bridge> c++ for crazed 16:54 < bridge> and yeah re-doing can ofc be performance problem 16:54 < bridge> but we only talk about ram usage rn 16:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427670882943369379/togif-9.png?ex=68efb59f&is=68ee641f&hm=e2f716144e656c4ee1d519a0ff2a868894765523ae71f5d432a4a36e9a079589& 16:54 < bridge> he's trying to rage bait my beloved 16:54 < bridge> https://tenor.com/view/rip-bozo-gif-22294771 16:54 < bridge> GC mentioned 16:55 < bridge> https://tenor.com/view/spongebob-good-boy-rex-worm-felton-thingggg-gif-13170442711656564108 16:55 < bridge> what kind of cripple? 16:56 < bridge> most rust coders probs dont use unsafe, esp if they dont do low level stuff 16:56 < bridge> i used loads tho for my kernel 16:56 < bridge> rust cant know the physical addr the acpi gives me for the lapic and that i translated to virtual with my own mapper exists xd 16:57 < bridge> crippled, and dentist, u mean ur missing tooth? 16:59 < bridge> nah, more like hes gonna stab me in some dark alley if i don't start brushing my teeth after every meal 16:59 < bridge> chillerdragon: how much money do you give me, if i write you a teeworlds vanilla server, in safe rust that uses less RAM and runs faster than the cpp one? 16:59 < bridge> Both at the same time 16:59 < bridge> @jupeyy_keks does chiller own the code then? 17:00 < bridge> he can do what he wants with it 17:00 < bridge> 3€ 17:00 < bridge> i didn't ask you pooro 17:00 < bridge> 2.98€ 17:01 < bridge> 2.97€ 17:01 < bridge> 2.96€ 17:01 < bridge> 2.95€ 17:01 < bridge> 2.94€ 17:01 < bridge> 2.93€ 17:01 < bridge> 2.92€ 17:01 < bridge> 2.91€ 17:01 < bridge> 2.9€ 17:01 < bridge> 2.89€ 17:01 < bridge> 2.88€ 17:01 < bridge> 2.87€ 17:01 < bridge> 2.86€ 17:01 < bridge> 2.85€ 17:01 < bridge> 2.84€ 17:01 < bridge> 2.83€ 17:01 < bridge> did you invest your cash into etfs or what is happening 17:01 < bridge> 2.82€ 17:01 < bridge> 2.80€ 17:01 < bridge> -11.72€ 17:01 < bridge> -17.52€ 17:02 < bridge> -52.11€ 17:02 < bridge> it went down 17:02 < bridge> you should have taken the 3€ offer 17:03 < bridge> you gambled too much jupsti 17:03 < bridge> I can give you one MELANIA for it 17:03 < bridge> Or half a TRUMP 17:03 < bridge> :cat_hmm: learath said trump twice 17:03 < bridge> teero is paying in high risk investments 17:03 < bridge> one more and he'll summon something 17:04 < bridge> -33.21€ 17:04 < bridge> -31.1€ 17:05 < bridge> 591.12€ 17:05 < bridge> fast, take it 17:05 < bridge> -12.2€ 17:05 < bridge> price went up 17:05 < bridge> damn 17:05 < bridge> yeah no 17:05 < bridge> i don't take money from teero 17:06 < bridge> then take his debt 17:06 < bridge> it's the DDCoin stock, i don't have any other payment option 17:06 < bridge> :kek: 17:06 < bridge> We should do a ddcoin rugpull but fund ddnet for years with the rugpull proceeds 17:06 < bridge> sounds solid 17:07 < bridge> 0.68€ 17:10 < bridge> :justatest: 17:10 < bridge> :nouis: as icon 17:13 < bridge> @teero777 when will we create an alternative steam ui that starts in <200ms 17:13 < bridge> I hate this trash so much xD 17:18 < bridge> Hello other human beeings with free will 17:18 < bridge> You still believe? 17:18 < bridge> copium 17:20 < bridge> hello 17:21 < bridge> i will create an alternative universe where waking up takes < 5mins 17:22 < bridge> @jupeyy_keks: didn’t you already do that? 17:23 < bridge> If I want a Teeworlds vanilla server I can also use a Teeworlds vanilla server :D the performance is good 17:23 < bridge> faster maybe, but no it uses more ram, i dunno if the vanilla code itself too, but it at leasts hosts a http server for resources 17:23 < bridge> that alone probs wastes like 1MiB or smth xd 17:24 < bridge> Yea no thanks 17:24 < bridge> I don’t think I have use for it 17:24 < bridge> jajaja 17:24 < bridge> then why rage bait 17:24 < bridge> and activate the c boomers 17:25 < bridge> Oh uhm C is nice 17:26 < bridge> Today first time ever 17:26 < bridge> I saw Teero disliking c in front of me 17:26 < bridge> I would like to have a ddnet server written in C 17:26 < bridge> Hope in humanity was restored for a moment 17:26 < bridge> That is fast and light weight to run and compile 17:26 < bridge> Where I can also edit the code to bloat in features 17:27 < bridge> the compiler, not the language!!! 17:27 < bridge> Yayaya 17:27 < bridge> It's broken by design right 17:27 < bridge> and compiler has to fix 17:27 < bridge> no??? XDDD 17:28 < bridge> maybe its even my skill issue and there is a special flag to not allow implicit pointer type conversion. or at least warn me about them xdd 17:29 < bridge> In any case the language does not enforce it by default 17:29 < bridge> by design 17:29 < bridge> i guess so 17:29 < bridge> it's the programmers fault though 17:29 < bridge> Yes 17:30 < bridge> Why do humans even use tools 17:30 < bridge> We can also survive without them 17:30 < bridge> laziness? 17:30 < bridge> I dunno, but one thing is clear.. We got better by improving our tools 17:31 < bridge> Not getting better with the tools we already had 17:31 < bridge> Ofc to a certain point too 17:31 < bridge> But this point was reached long after cpp released 17:31 < bridge> yea but you can't really say this about programming xd 17:31 < bridge> I'd say you can 17:32 < bridge> rewriting my physics in python would be stupid no? even though it is technically a more powerful tool. 17:32 < bridge> No 17:32 < bridge> it's not the right tool for the job 17:32 < bridge> python is proven to be one of the slowest scripting languages with annoying syntax 17:32 < bridge> https://tenor.com/view/pipotam-baby-hippo-hippo-wash-shower-gif-3406421565683572068 17:33 < bridge> This is not comparable 17:33 < bridge> bash is even worse and we use it every day xD 17:33 < bridge> Also python is not nice to design bigger code bases 17:33 < bridge> Bash is very straight forward, but I agree it's also not nice to code complex stuff in it 17:33 < bridge> it's also slower than python xd 17:34 < bridge> I only trust benchmarks 17:34 < bridge> pydon is really ass 17:35 < bridge> lua might be comparably slow 17:36 < bridge> another ass lang 😬 17:36 < bridge> yeah no, if python wins, then by cheating and calling some kind of c lib 17:36 < bridge> im not joking xD 17:39 < bridge> good 17:39 < bridge> let's make custom linux distro. 17:39 < bridge> 17:39 < bridge> no script langs allowed 17:39 < bridge> no text configs 17:39 < bridge> only binary 17:39 < bridge> xd 17:39 < bridge> just fuck everyone up 17:40 < bridge> the steam alt client can wait 17:51 < bridge> wouldn't actually be that bad lol. just abstract the compiling 17:51 < bridge> I don't know if you have a free will, but I certainly have one 17:51 < bridge> how can I join 🙁 17:51 < bridge> Klar 17:52 < bridge> I think therefore I random :p 17:52 < bridge> send money to this address to join 17:52 < bridge> Could a free will just die, in an instant.. bcs it decides to? 17:52 < bridge> I mean otherwise it's not really free or is it? 17:53 < bridge> We can't even define what a free will is 17:53 < bridge> like 17:53 < bridge> ```c 17:53 < bridge> #!/usr/bin/clang -O3 17:53 < bridge> #include 17:53 < bridge> int main(void) { 17:53 < bridge> printf("Hello script\n"); 17:53 < bridge> return 0; 17:53 < bridge> } 17:53 < bridge> ``` 17:53 < bridge> @jupeyy_keks 17:53 < bridge> and the shell caches the builds 17:53 < bridge> if it only boils down to randomness, then, with the current state of knowledge, we have one 17:53 < bridge> idk why this is not a thing 17:53 < bridge> i wonder too 17:54 < bridge> hart to estimate how much we waste with string parsing all the day 17:54 < bridge> but probs quite a lot 17:54 < bridge> there's another trick you can do 17:54 < bridge> ``` 17:54 < bridge> #if 0 17:54 < bridge> cc file.c 17:54 < bridge> exit 0 17:54 < bridge> #endif 17:54 < bridge> ``` 17:54 < bridge> then you can do `sh file.c` and it will run the commands there 17:54 < bridge> So actually instead of clang you'd use a program that uses a compiler and manages a cache 17:55 < bridge> the shell is the program that manages the compiler and cache xd 17:56 < ws-client1> **** lmao c scripts 17:59 < bridge> Why the shell? We have standards for shells and this wouldn't follow them, plus shebangs are kind of handled by the kernel 17:59 < bridge> man its pseudo code 17:59 < bridge> also if you are doing this you are not using a normal shell xd 17:59 < ChillerDragon> bruv why are there more people on my secret test server that has a password than on my public servers 17:59 < bridge> I'm just saying you could write a separate application and then you could literally just use shebangs 18:00 < ChillerDragon> do ppl really try pw servers until they crack the pass? 18:00 < bridge> yes they do 18:01 < bridge> also your server is in risk of getting ddos just by having a password on it 18:01 < ChillerDragon> lel 18:01 < bridge> lol that's nice 18:01 < ChillerDragon> i mean the password is 123 18:01 < bridge> ill keep it for internal use xd 18:01 < ChillerDragon> but how did they guess it 18:01 < bridge> google top 10 worst passwords 18:02 < bridge> another issue with this is that you need to deal with dependencies 18:02 < bridge> when writing shell scripts you have access to every executable on the system as if they're functions from a library or something 18:02 < bridge> bro got the top1 password set 18:02 < bridge> what did you expect xd 18:02 < ChillerDragon> dictonary attack on tw servers? 18:02 < ChillerDragon> i expected ppl not to try @zhn 18:02 < bridge> thats amn 1000% 18:02 < ChillerDragon> no its russian kids 18:02 < bridge> brute forced ur servers 18:02 < bridge> bro here is a safer password: `ThisPasswordIsLiterallySafer!` 18:02 < ChillerDragon> but its not the first time 18:02 < bridge> yeah amn's army 18:02 < bridge> using executables from C code would be a huge pain since you'd have to do string processing at every step 18:03 < ChillerDragon> @Assa cant remember that 18:03 < bridge> `CantRememberThat!` 18:03 < ChillerDragon> also i dont mind the intruders i just find it facinating 18:03 < bridge> my latest ad hoc password for ctf server was fuckoffkid 18:04 < ChillerDragon> i just have a pass on the server because it has no content yet 18:04 < bridge> you can take it xd 18:04 < bridge> make bait servers and add a jumpscare or something when joining 18:04 < ChillerDragon> @zhn wit is gonna see this! 18:04 < bridge> xddd 18:04 < bridge> `SomethingABitMoreMemorable!` (I literally use this password for one service) 18:04 < bridge> (I trust you guys won't dox me and steal my phone to break the 2FA) 18:04 < ChillerDragon> ez leak 18:04 < bridge> master password for my phone is masterpassword 18:05 < ChillerDragon> i remember the good times when we all planned where to store cattos passwords xd 18:05 < bridge> just use a pw manager 18:05 < bridge> tw manager 18:05 < bridge> nice xD 18:05 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427688816063418388/image.png?ex=68efc652&is=68ee74d2&hm=457a70eee1f32701594b4151509b0095d927446216228e801cc4f6c0bbac273f& 18:05 < bridge> so cursed 18:05 < ChillerDragon> @Assa yes but where to store the pw manager data 18:05 < bridge> ```c 18:05 < bridge> #if 0 18:05 < bridge> cc lol.c -o lol 18:05 < bridge> ./lol 18:05 < bridge> exit 0 18:06 < bridge> #endif 18:06 < bridge> 18:06 < bridge> #include 18:06 < bridge> int main(void) { 18:06 < bridge> printf("hello script\n"); 18:06 < bridge> return 0; 18:06 < bridge> } 18:06 < bridge> ``` 18:06 < bridge> can't really use them when using machines that aren't mine 18:06 < bridge> in my cloud 18:06 < ChillerDragon> teero this only works if the filename is lol.c? 18:06 < ChillerDragon> go make it flexible 18:06 < ChillerDragon> bash knows its own filename 18:07 < bridge> I only showed it as briefly as I could obviously you can make it more complicated if you want 18:07 < ChillerDragon> also hide it in the #include xd 18:08 < bridge> Just replace lol.c with $0? 18:08 < ChillerDragon> ye 18:08 < ChillerDragon> spoiler 18:08 < ChillerDragon> and write binary into /tmp i guess to avoid pollution 18:09 < ChillerDragon> also cache based on last edit date 18:09 < bridge> maybe exit with the same exit code as `./lol` 18:09 < ChillerDragon> oh nice yes 18:09 < bridge> maybe set -e makes sense, idk 18:10 < ChillerDragon> and then release as open source project 18:10 < bridge> you guys are horrible people xD 18:11 < belkka> It's a good habit to always use "$0" (with quotes) instead of $0, to prevent bash word splitting if the value contains spaces 18:11 < bridge> Get 2000 stars on GitHub, lose your mind as there's tons of feature requests and massive feature creep over the next few months, abandon the project 18:12 < bridge> :greenthing: 18:13 < bridge> You know, maybe the external application is a better idea than prepending an ever growing shell script to your C program 18:13 < bridge> always these random ppl that write exactly 1 msg 18:16 < bridge> how would we make this work on windows though xd 18:17 < bridge> windows land is hard 18:19 < bridge> Here @essigautomat now you are free from that PR 18:19 < bridge> Hope that helps you to find your free will 18:20 < bridge> 🙏 18:20 < bridge> I love you ❤️ 18:20 < bridge> I am going to refactor this code this week, switching from ints to floating point values (as you suggested) 18:21 < bridge> Cool 18:21 < bridge> with _this code_ I mean all of quad clipping 18:21 < bridge> Also for the shaders? 18:21 < bridge> :justatest: 18:21 < bridge> Also for the shaders 18:21 < bridge> maybe if you guide me 18:21 < bridge> okay: 18:21 < bridge> ```c 18:21 < bridge> #if 0 18:21 < bridge> cc "$0" -o "${0%.c}" 18:21 < bridge> ./"${0%.c}" "$@" 18:21 < bridge> rm ./"${0%.c}" 18:21 < bridge> exit 0 18:21 < bridge> #endif 18:21 < bridge> ``` 18:21 < bridge> ready for production xd 18:21 < bridge> sick 18:22 < bridge> when will 19.5 release? 18:22 < bridge> yesterday 18:22 < bridge> Or even today 18:22 < bridge> oh yeah :deen_star: I still need to do the benchmarking update 18:23 < bridge> okay im making a repo xD 18:24 < bridge> very funny xd 18:25 < bridge> maybe `exit $?` instead 18:25 < bridge> good idea 18:25 < bridge> wait no that's the exit code of rm 18:26 < bridge> ``` 18:26 < bridge> #if 0 18:26 < bridge> cc "$0" -o "${0%.c}" 18:26 < bridge> ./"${0%.c}" "$@" 18:26 < bridge> exit_code=$? 18:26 < bridge> rm ./"${0%.c}" 18:26 < bridge> exit $exit_code 18:26 < bridge> #endif 18:26 < bridge> ``` 18:26 < bridge> like this maybe 18:26 < bridge> ```c 18:26 < bridge> #if 0 18:26 < bridge> cc "$0" -o "${0%.c}" 18:26 < bridge> ./"${0%.c}" "$@" 18:26 < bridge> exit_code=$? 18:26 < bridge> rm ./"${0%.c}" 18:26 < bridge> exit $exit_code 18:26 < bridge> #endif 18:26 < bridge> ``` 18:27 < bridge> like this maybe 18:27 < bridge> running and removing doesn't make sense if compilation fails... 18:27 < bridge> but at this rate it's going to get annoyingly long annoyingly quickly 18:28 < bridge> its gonna be in a header so its fine i think 18:29 < bridge> no we can just || exit 18:29 < bridge> smort 18:30 < bridge> ahhh 18:30 < bridge> we cant have it in a header 18:30 < bridge> uhh 18:30 < bridge> preprocessor obviously won't work that way+ 18:31 < bridge> preprocessor obviously isn't here 18:40 < bridge> you guys think this a good repo name (self executing c) 18:40 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427697620658290879/image.png?ex=68efce86&is=68ee7d06&hm=aad5fc239f9fdd5fef19d3d945cc25fed971773dec15c2cff0fa066e035c33d6& 18:40 < bridge> you guys think this a good repo name? (self executing c) 18:40 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427697620658290879/image.png?ex=68efce86&is=68ee7d06&hm=aad5fc239f9fdd5fef19d3d945cc25fed971773dec15c2cff0fa066e035c33d6& 18:42 < bridge> @inv41idu53rn4m3 yes we could, I unfortunatly don't have much time today and I am time limited by 10 minutes in the showroom 🙈 18:43 < bridge> Yeah you're good :) :) 18:43 < bridge> Just thinking that when fps is already that high the most important part becomes possible drops 18:43 < bridge> unfortunatly measuring the max frametimes seems **very** unreliable 18:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427698401109217311/ddnet-19.5-minframetimes.png?ex=68efcf40&is=68ee7dc0&hm=fbbb30b58e2e4e1344a3d8d3fd8ffb2bbf6fec21e8b06c07ad7acf50b9ed77ca& 18:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427698401511997510/ddnet-19.5-maxframetimes.png?ex=68efcf40&is=68ee7dc0&hm=e12c404e29122379ad1f4fbe5f617adcc8f5ecf361c32fcb97d6bf30a484c855& 18:43 < bridge> though averages make sense for power consumption 18:44 < bridge> but this is not like the top 1%, just the _worst value_ 18:44 < bridge> but this is not like the top 1%, just the _worst and best value_ 18:44 < bridge> Sexy name teero 19:01 < bridge> https://github.com/Teero888/cscript 19:01 < bridge> okay chillerdragon you can star now please. 19:37 < bridge> SO TRUUUUUEEEEEEEEE 19:54 < bridge> is it spam if it's arguably the most relevant possible thing for this channel 19:56 < bridge> 2 Days in the back is an event map? 19:57 < bridge> yes 19:57 < bridge> was the most popular brutal map 19:57 < bridge> modified from back in the days 2, switching unhookables with hookables 19:57 < bridge> wonder how that will turn out 20:03 < bridge> Wooo 20:11 < bridge> you know it's a good change when the commit message has emojis in it 20:15 < bridge> ai ruined emojis 20:18 < bridge> you have to use custom emojis now 20:19 < bridge> also ascii emojis are still good 20:19 < bridge> \o/ 20:22 < bridge> yeah 20:22 < bridge> utf8 better (●'◡'●) 20:24 < bridge> (✿´‿`) 20:25 < bridge> ez 20:25 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427724010023817368/image.png?ex=68efe719&is=68ee9599&hm=0b6f34fe3136fda6f2c6b6800ab1c6503fff13b2051cc9afc17184a7dc37cf69& 20:42 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427728316852469790/iknowwhowrotethisbuticantproveityet-v0-ne5eu2yhtyuf1.png?ex=68efeb1c&is=68ee999c&hm=2f39634491dc1cea58bf88047c0faea9c757f7d1c8f9e6ec69209d7cfd1f9286& 20:51 < bridge> 2025? 20:51 < bridge> chat gps released in 2022 👴 20:51 < bridge> chat gpt released in 2022 👴 21:21 < bridge> Still runs a lot of production code and is scalable + uses fast libraries for math and science. Just not applicable for performance oriented code, like video game programming as on cannot utilize CPU effectively. They're removing GIL so in the nearest future true parallelism becomes achievable (it is even now just run the interpreter with disabled GIL). 21:23 < bridge> your opinion is denied 21:23 < bridge> Still runs a lot of production code and is scalable + uses fast libraries for math and science. Just not applicable for performance oriented code on a single machine, like video game programming as on cannot utilize CPU effectively. They're removing GIL so in the nearest future true parallelism becomes achievable (it is even now just run the interpreter with disabled GIL). 21:27 < bridge> ding dong your opinion is wrong 21:27 < bridge> You expressed your opinion, I expressed facts 21:28 < bridge> they're removing GIL finally? 21:28 < bridge> is that switching off of cpython or did they do some huge refactor 21:29 < bridge> the annoying syntax sounds like skill issue, syntax is easier than rusts 21:30 < bridge> how much of the code used for your performance is compiled & run via uWSGI btw 21:30 < bridge> because that's very different 21:30 < bridge> your opinion got rejected 21:30 < bridge> I just reject your rejection 21:30 < bridge> cannot parse, wrong indention 21:31 < bridge> then get a proper IDE and linter 21:31 < bridge> how are your lisp skills? 21:31 < bridge> or are you doing rust in a vim? 21:31 < bridge> good tools * bad lang = bad lang 21:31 < bridge> what about good lang * bad tools = bad lang? 21:31 < bridge> because ur describing c/cpp 21:31 < bridge> 1000 * 0 = 0 21:32 < bridge> because that's describing c/cpp 21:32 < bridge> cpp is a decent lang with decent tools 21:32 < bridge> cpp has some really good tools 21:32 < bridge> maybe if you are comfortable with it 21:32 < bridge> cpp suffers from what everything suffers. backward compat 21:32 < bridge> cpp newbs having to learn cmake and the fundamentals of distributing libraries to even get started 21:33 < bridge> doesn't sound like good tooling 21:33 < bridge> I'd put cmake on the lower end of cpp tooling tbh :justatest: 21:33 < bridge> profiling, debugging and something like valgrind works really well 21:33 < bridge> it leaves a lot to be desired but i don't think anyone else comes close as far as feature parity is concerned 21:34 < bridge> java has maven for example, which is easier than cmake, but you will run into other similar issues 21:34 < bridge> we are talking about good langs rn 21:34 < bridge> :troll: 21:34 < bridge> we are talking about good tooling rn 21:36 < bridge> at work I currently do a lot of PHP, so complain less please about everything else. 21:37 < bridge> the only decent IDE i know is behind a paywall 21:38 < bridge> php sounds ok from what i have heard 21:38 < bridge> fast 21:38 < bridge> standard 21:38 < bridge> but the book of truth does not lie. 21:38 < bridge> cpp like c can compete with the champion 21:38 < bridge> https://programming-language-benchmarks.vercel.app/cpp-vs-rust 21:38 < bridge> the holy scriptures 21:39 < bridge> 🙏 21:40 < bridge> Go tooling is up there with the other S rank languages 👀 21:45 < bridge> yea @jupeyy_keks can you do this in rust? 21:46 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427744502537392359/image.png?ex=68effa2f&is=68eea8af&hm=d7ad49ada46bb683c25207d7a56ac47b283ed685e8a57ee8a027ca15334cbe74& 21:47 < bridge> am i missing something 21:49 < bridge> rust has proc macros bro 21:49 < bridge> in rust you can start ddnet during compile time 21:49 < bridge> bruh you need a main function xd 21:50 < bridge> ```cpp 21:50 < bridge> #if 0 21:50 < bridge> cc "$0" -o "${0%.c}" || exit 21:50 < bridge> ./"${0%.c}" "$@" 21:50 < bridge> exit_code=$? 21:50 < bridge> rm ./"${0%.c}" 21:50 < bridge> exit $exit_code 21:50 < bridge> #endif 21:50 < bridge> 21:50 < bridge> #include 21:50 < bridge> int main(void) { 21:50 < bridge> printf("Hello from cscript!\n"); 21:50 < bridge> return 0; 21:50 < bridge> } 21:50 < bridge> ``` 21:50 < bridge> then it's not production ready 21:50 < bridge> go mentioned 21:50 < bridge> ?? 21:50 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427745462332555274/image.png?ex=68effb14&is=68eea994&hm=6e66fb8da30791283e760f9361fbc5abbfb5b156ab5dfff6241cd6d296e7ae7b& 21:50 < bridge> the snippet 21:51 < bridge> whatever is below it is your code 21:51 < bridge> xd 21:51 < bridge> ya 21:51 < bridge> would a shebang totally destroy this 21:51 < bridge> it seems to work in fish shell but 21:51 < bridge> what 21:51 < bridge> idk 21:51 < bridge> sus 21:51 < bridge> you cant put a shebang in a c file as the first line xd 21:52 < bridge> seems to work as second line tho 21:52 < bridge> mabye it is just being ignored bcs # 21:52 < bridge> probably 21:52 < bridge> #! 21:52 < bridge> seems to work i think 21:52 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1427746011467616267/image.png?ex=68effb97&is=68eeaa17&hm=6e09bcc62918247b2d1f2191cfe32a9bb25cbf1bc8d2d71ebb91030029b1b4ac& 21:58 < bridge> nice 21:59 < bridge> I cannot believe I'll need to execute a c file inside bash soon to compile your protects 22:00 < bridge> Because we both know you'll use this xd 22:00 < bridge> i am deeply surprised the shebang works on line 2 22:00 < bridge> coupled with tcc it could be insanely powerful 22:00 < bridge> Include all c files to only have one compilation unit 22:00 < bridge> that's something I'd expect from chillerdragon 22:01 < bridge> make bash do everything 22:01 < bridge> Chiller would do the opposite to have bash in c 22:01 < bridge> Modding support 22:03 < bridge> XD 22:53 < bridge> xD add ddnet bash modding support