06:35 <+bridge_> <12944qwerty> hook works, but for some reason doesn't extend so far? just 2 tiles i think or something 06:35 <+bridge_> <12944qwerty> https://cdn.discordapp.com/attachments/293493549758939136/1456521313299599401/TWMap_Arcade_Renderer_2026-01-01_23-34-48.mp4?ex=6958aaad&is=6957592d&hm=c1b55f3ae7e76c979d1027814c9b6dc7e7a2c7eed96747894b4f967b9a653e6e& 07:11 <+bridge_> <12944qwerty> hook works, but for some reason doesn't extend so far? just 4 tiles i think or something 07:11 <+bridge_> <12944qwerty> https://cdn.discordapp.com/attachments/293493549758939136/1456521313299599401/TWMap_Arcade_Renderer_2026-01-01_23-34-48.mp4?ex=6958aaad&is=6957592d&hm=c1b55f3ae7e76c979d1027814c9b6dc7e7a2c7eed96747894b4f967b9a653e6e& 07:35 <+bridge_> <12944qwerty> ~~hook works, but for some reason doesn't extend so far? just 4 tiles i think or something~~ 07:35 <+bridge_> <12944qwerty> https://cdn.discordapp.com/attachments/293493549758939136/1456521313299599401/TWMap_Arcade_Renderer_2026-01-01_23-34-48.mp4?ex=6958aaad&is=6957592d&hm=c1b55f3ae7e76c979d1027814c9b6dc7e7a2c7eed96747894b4f967b9a653e6e& 07:35 <+bridge_> <12944qwerty> ~~hook works, but for some reason doesn't extend so far? just 4 tiles i think or something~~ 07:36 <+bridge_> <12944qwerty> fixed 07:36 <+bridge_> <12944qwerty> https://cdn.discordapp.com/attachments/293493549758939136/1456536607007051796/TWMap_Arcade_Renderer_2026-01-02_00-35-52.mp4?ex=6958b8ec&is=6957676c&hm=2d80cc36a2a93f8645e65fa93bfd5f70e22a3cbc6632579c0ae7151cf3b2116e& 07:36 <+bridge_> <12944qwerty> fixed, so good yay 07:36 <+bridge_> <12944qwerty> https://cdn.discordapp.com/attachments/293493549758939136/1456536607007051796/TWMap_Arcade_Renderer_2026-01-02_00-35-52.mp4?ex=6958b8ec&is=6957676c&hm=2d80cc36a2a93f8645e65fa93bfd5f70e22a3cbc6632579c0ae7151cf3b2116e& 08:55 <+bridge_> I find it a bit scary that the github ui automatically generates commit messages for me in private repos 08:55 <+bridge_> Isn’t that a bit too much on the nose? Didn’t they at some point at least publicly claim they don’t train their models on private repos? 08:56 <+bridge_> I wonder how realistic it is that regular chatgpt users could extract private repo data with prompting 08:59 <+bridge_> @louis.place: I don’t understand your issue? What is the problem? Which tick you talk about? 08:59 <+bridge_> Do you want to remove duplicated code? 09:19 <+bridge_> @12944qwerty: cool stuff 09:20 <+bridge_> Hello , i use shutdownwhenempty command in fng so when players quit server shutdown script run it again and server runs with fresh config but it probably gonna reboot the server constantly is there other solution for this in fng2 09:25 <+bridge_> <12944qwerty> Yeye. I'm gonna add freeze and unfreeze and see if I can complete a gore map exactly the same. 09:25 <+bridge_> <12944qwerty> 09:25 <+bridge_> <12944qwerty> Then it's off to connect it to a server 09:49 <+ChillerDragon> @12944qwerty I have two fng servers and I do `sv_redirect_and_shutdown_on_round_end 09:49 <+ChillerDragon> omg paste 09:49 <+ChillerDragon> `sv_redirect_and_shutdown_on_round_end 09:49 <+ChillerDragon> adiuad 09:49 <+ChillerDragon> i miss webchat 09:49 <+ChillerDragon> `sv_redirect_and_shutdown_on_round_end` 09:49 <+ChillerDragon> when i want to shutdown the server 09:50 <+ChillerDragon> so no round is interrupted and players basically notice nothing 09:50 <+ChillerDragon> this way i can even restart full servers 09:51 <+bridge_> <12944qwerty> Ok? 09:51 <+ChillerDragon> Ok! 09:51 <+bridge_> <12944qwerty> I keep forgetting what fng is lol 09:52 <+ChillerDragon> well i use ddnet-insta i am not sure what fng2 can do 09:52 <+ChillerDragon> i think ddnet runs an external script that sets shutdown when empty daily on all servers with fifo 09:53 <+bridge_> <12944qwerty> I'm so confused 09:53 <+ChillerDragon> by what 09:53 <+bridge_> <12944qwerty> Did you ping the wrong person 09:53 <+ChillerDragon> oh fuck yes 09:53 <+ChillerDragon> haha 09:53 <+ChillerDragon> @thefe_110 * 09:53 <+ChillerDragon> jesus i used to feel so comfortable in weechat 09:54 <+ChillerDragon> now after almost 2 years of using a website i am confused af by terminal hacker shits 09:54 <+ChillerDragon> @12944qwerty you were the one that was also interested in my twnet parser project right? So you didnt start with the network stuff yet? 09:55 <+ChillerDragon> i now added snapshots so it might actually be useful for you 09:55 <+bridge_> <12944qwerty> Yeah 09:55 <+bridge_> <12944qwerty> Haven't yet, will do tomorrow after gore test 09:57 <+bridge_> <12944qwerty> By adding snapshots do you mean adding the deltas to get actual positions at each snap? 09:57 <+bridge_> <12944qwerty> Or would i have to calculate that 09:58 <+ChillerDragon> yes it can do that too! 09:59 <+bridge_> <12944qwerty> Yay 09:59 <+ChillerDragon> You get a snap storage object you can spam snaps into and then instruct it to undelta 09:59 <+ChillerDragon> https://gitlab.com/teeworlds-network/twnet_parser/-/blob/830caceb8f44c465c039794ff9090545481c2516/examples/07/gui_client/gui_client.py 09:59 <+ChillerDragon> here a full 0.7 client with gui 09:59 <+ChillerDragon> but 0.6 is supported too! 10:01 <+bridge_> <12944qwerty> Ooh should be easy to add the reckoning with that 10:01 <+bridge_> <12944qwerty> Thanks 10:02 <+ChillerDragon> yes reckoning is the last crucial part missing there actually 10:03 <+bridge_> ChillerDragon: https://github.com/ddnet/ddnet/blob/13d0cadcaf79758329678a76b47e20cd930fa578/src/game/server/entities/projectile.cpp#L86 this function is extremely unreadable and IMO handles way too much logic. 10:03 <+ChillerDragon> okay and what is your proposed solution louis? 10:03 <+bridge_> Split projectile.cpp into separate files corresponding to each projectile type 10:04 <+ChillerDragon> i see i get it now 10:04 <+bridge_> <12944qwerty> Ooh should be easy to add my reckoning with that 10:06 <+bridge_> oh i used < and > characters which made some text in the issue description invisible, sorry 10:09 <+ChillerDragon> @louis github nob 10:09 <+ChillerDragon> by a github coaching session from me and maybe one day you will be as gigachad githubber as me 10:09 <+ChillerDragon> using html in comments 10:09 <+bridge_> how much per hour 10:10 <+ChillerDragon> https://zillyhuhn.com/cs/.7897696c-ca8f-4c25-a4fe-946f172c9223.png 10:10 <+ChillerDragon> 60 bucks one hour 10:10 <+ChillerDragon> fair price 10:10 <+ChillerDragon> with happy ending too 10:11 <+ChillerDragon> buy* omg 10:39 <+bridge_> Oh, nice! 11:26 <+ChillerDragon> @sonic (Solly) yo souly vevo 11:26 <+ChillerDragon> why is selfkill disabled in tsmash? 12:16 <+bridge_> guess who's back 🙂 12:19 <+bridge_> who? 12:20 <+bridge_> :thonk: 12:21 <+bridge_> Tardo? 12:24 <+bridge_> Shady's back? :justatest: 12:29 <+bridge_> ``` 12:29 <+bridge_> prevtick tick predtick 12:29 <+bridge_> 4 8 14 12:29 <+bridge_> |---------------------|---------------------| 12:29 <+bridge_> 0 <- intratick -> 1 12:29 <+bridge_> 0 <- ticktime(in s)-> X 12:29 <+bridge_> 0 <- predintratick?-> 1 12:29 <+bridge_> ``` 12:29 <+bridge_> 12:29 <+bridge_> This graphic haunts me, why is prevtick 4 and tick 8 and predtick 14? The intratick doesn't go from 0 to 1, it goes from 0 to tick - prevtick, isn't the predtick always tick + 1 ? 12:30 <+bridge_> also predintratick and tick don't align, so this doesn't even work 12:31 <+bridge_> Shady's back, tell a friend! 12:31 <+bridge_> 4 8 and 14 look like arbitrary examples 12:31 <+bridge_> @robyt3 😢 12:32 <+bridge_> the real example is 4 and 6, and then intratick goes from 0 to 2 12:32 <+bridge_> The server can send snapshots at any rate, e.g. every 4 ticks. The predicted tick is what the client works with. 12:33 <+bridge_> That doesn't really make sense. The code assume that intra tick at 1 means that the current tick's value is used. Otherwise all positions calculations would be wrong. `mix(vec2(pPrevChar->m_X, pPrevChar->m_Y), vec2(pCurChar->m_X, pCurChar->m_Y), IntraTick)` 12:34 <+bridge_> my measurement disagrees with this 12:34 <+bridge_> see https://github.com/ddnet/ddnet/issues/11388 12:35 <+bridge_> ``` 12:35 <+bridge_> 2025-12-04 12:04:28 I dbg: GameTick 278, IntraTick 1.408281, Predicted Tick 281, Predicted IntraTick 0.422893 12:35 <+bridge_> 2025-12-04 12:04:28 I dbg: GameTick 280, IntraTick 0.421115, Predicted Tick 281, Predicted IntraTick 0.448500 12:35 <+bridge_> ``` 12:35 <+bridge_> it's not that it overshoots sometimes, it's always around 1.4 - 1.8 or something 12:37 <+bridge_> should it just use the current tick value for intratick > 1 🤔 12:41 <+bridge_> mix doesn't clamp if amount goes > 1: 12:41 <+bridge_> ``` 12:41 <+bridge_> constexpr T mix(const T a, const T b, TB amount) 12:41 <+bridge_> { 12:41 <+bridge_> return a + (b - a) * amount; 12:41 <+bridge_> } 12:41 <+bridge_> ``` 12:41 <+bridge_> > Otherwise all positions calculations would be wrong 12:41 <+bridge_> 12:41 <+bridge_> I guess they might 🤔 12:43 <+bridge_> lol it just perfectly aligns, because the next tick starts at 0.42 then, I guess this is why it doesn't go off 12:43 <+bridge_> and suddenly it makes much more sense to me 12:46 <+bridge_> It's magic. It also works completely differently when playing demos, then almost all `IntraGameTick` values are all less than 0.03. 12:46 <+bridge_> It's magic. It also works completely differently when playing demos, then almost all `IntraGameTick` values are less than 0.03. 12:48 <+bridge_> 🎊 magic 🎊 XD 12:49 <+bridge_> I fixed the graphic: 12:49 <+bridge_> ``` 12:49 <+bridge_> prevtick tick predtick 12:49 <+bridge_> 4 8 14 12:49 <+bridge_> |---------------------|------- | 12:49 <+bridge_> | 0.x <- intratick -> 1.x | 12:49 <+bridge_> 0 <- ticktime(in s)-> X 12:49 <+bridge_> | 0 <- predintratick?-> 1 | 12:49 <+bridge_> ``` 12:49 <+bridge_> I fixed the graphic: 12:49 <+bridge_> ``` 12:49 <+bridge_> prevtick tick predtick 12:49 <+bridge_> 4 8 14 12:49 <+bridge_> |---------------------|------- | 12:49 <+bridge_> | 0.x <- intratick -> 1.x | 12:49 <+bridge_> 0 <- ticktime(in s)-> X 12:49 <+bridge_> | 0 <- predintratick?-> 1 | 12:49 <+bridge_> ``` 12:49 <+bridge_> it showcases how nothing aligns 12:50 <+bridge_> except for demos 12:50 <+bridge_> the joy of gamedevelopment innit 12:51 <+bridge_> and now tell me what is the **current time** in subticks 12:51 <+bridge_> what is time, does the game work next to black holes? 12:52 <+bridge_> i wonder if the fact that nothing aligns is the goal after all 12:55 <+bridge_> I am pretty sure there is a reason for the intratick beeing like this, so it can be predicted/smoothed better 12:56 <+bridge_> Maybe check if it also works like this in Teeworlds, to rule out a regression in DDNet 12:57 <+bridge_> it's just, that everything that relies on intraticks is about 0.4 ticks in the future like this 12:58 <+bridge_> that are 0.008 seconds, 8 ms 12:58 <+bridge_> I think this is barely noticable 13:06 <+bridge_> @robyt3 what is the "current time" to the client? Is it prevtick + intratick, or is the "current tick" considered current time? 13:09 <+bridge_> What do you mean with current time? `LocalTime` is entirely separate from ticks 13:09 <+bridge_> I mean current server time, because the gameworld is for example synced to the current tick and not the previous 13:10 <+bridge_> The gametime is `CSmoothTick` so also magic 13:10 <+bridge_> I don't understand why envelopes should run on the previous tick, when everything else runs on the current tick 13:11 <+bridge_> I don't understand it, so you'll need another reviewer for this 😅 13:11 <+bridge_> Aaaaaa what the heck is "GetSmoothTick" 13:12 <+bridge_> sorry that I can't properly describe what I mean 13:24 <+bridge_> ` float MixAmount = 1.f - std::pow(1.f - TimePassed / (float)Len, 1.2f);` 13:24 <+bridge_> Ah yes ofc normal mixing strategy 13:39 <+bridge_> https://github.com/AssassinTee/ddnet/actions/runs/20658023660/job/59314599991 13:40 <+bridge_> hmm 🤔 13:47 <+bridge_> Should be fixed on master 14:23 <+bridge_> @essigautomat you assigned yourself 🙂 14:38 <+bridge_> Apparently this works? Self-documenting code :thonk: 14:38 <+bridge_> ```cpp 14:38 <+bridge_> #define MACRO_CONFIG_INT(Name, ScriptName, Def, Min, Max, Flags, Desc) \ 14:38 <+bridge_> /** Config variable: ScriptName\n 14:38 <+bridge_> Type: Integer\n 14:38 <+bridge_> Default: Def\n 14:38 <+bridge_> Minimum: Min\n 14:38 <+bridge_> Maximum: Max\n 14:38 <+bridge_> Description: Desc */\ 14:38 <+bridge_> int m_##Name; 14:38 <+bridge_> ``` 14:38 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1456642815219073075/image.png?ex=69591bd6&is=6957ca56&hm=68d244254a0b8d1a8edadc21caedbb8a097e37478b869349a1e825b5694cef34& 14:50 <+bridge_> more macro shenanigans :justatest: 15:07 <+bridge_> smoke test flaky again :tear: 15:14 <+bridge_> We need #11526 15:14 <+bridge_> https://github.com/ddnet/ddnet/pull/11526 15:36 <+bridge_> That is such a nice trick 16:15 <+bridge_> @chillerdragon 16:15 <+bridge_> > why is selfkill disabled in tsmash? 16:15 <+bridge_> thats how it was in original 17:11 <+bridge_> gm devopers 17:13 <+bridge_> yes, sorry I am currently very busy, I wasn't home since before christmas, needing to keep up with my own PRs, but I am looking to review the upcoming week 18:47 <+ChillerDragon> @avolicious server has strong connection problems FRA #1 but its not crashed 193.70.37.160:8303 18:47 <+ChillerDragon> its over 18:47 <+ChillerDragon> took almost a minute if i had to guess 18:48 <+ChillerDragon> oh its back hmm 19:44 <+ChillerDragon> i am having a midlife crisis 19:44 <+ChillerDragon> `2026-01-02 19:43:35 I chat/server: *** Happy DDNet birthday to ChillerDragon for finishing their first map 12 years ago!` 19:51 <+bridge_> :brownbear: 20:14 <+bridge_> Bro has been playing for more years than some players have been alive ☠️ 20:35 <+bridge_> Hey everyone, could you please tell me how to link my DDnet account to Discord? 20:35 <+bridge_> Please 20:37 <+bridge_> ddnet doesn't have account linking. If you mean rich presence, you can enable game activity in discord settings 20:38 <+bridge_> Okay, thanks for your help 20:44 <+bridge_> this is fire, that'd be cool if we could configure the animation to the player who triggered it or global 22:22 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1456759575817748692/chiller_incident.gif?ex=69598894&is=69583714&hm=a65913b03a94bfacec17254442ab05d373d8fc7bf73ec1bbd95318811dbd2246& 22:23 <+bridge_> new meme 22:27 <+bridge_> new meme "chiller incident☠️" 22:48 <+bridge_> Best way to have a chat with Chillerdragon nowadays? 22:48 <+bridge_> Best way (platform) to have a chat with Chillerdragon nowadays? 22:55 <+bridge_> tag him here, he'll eventually answer 22:55 <+bridge_> @chillerdragon 23:31 <+bridge_> matrix prob? 23:44 <+bridge_> Wire 23:44 <+bridge_> :nouis: 23:49 <+bridge_> https://tenor.com/view/deer-interview-doe-winter-deer-interview-gif-16806606910500140994