00:41 < bridge> https://github.com/swarfeya/teeworlds-library-ts/pull/14 finally, i actually did a teeworlds thing, with help from furo 00:48 < bridge> ah, forgot to update docs 00:49 < bridge> mh, and maybe should have passed all 128 even if they're unused on ddnet currently 00:55 < bridge> gud morning fellow ddevs 09:09 < ws-client> **** @milkeeycat aaaaaaaaaaaa 09:09 < ws-client> **** i feel like headers is such a dance 09:10 < ws-client> **** if you have one huge header it works, if you have lots of tiny headers it works too. But as soon as you have a few bigger headers it becomes such a struggle 09:30 < bridge> chillerdragon 09:30 < bridge> > ono message.h uses the chunk data type so this also errors. 09:30 < bridge> 09:30 < bridge> Idk why but I remember trying and it was compiling fine for me :\ 09:30 < ws-client> **** lol wut 09:30 < ws-client> **** chunk.h has so much message stuff it should be basically message.h xd 09:31 < ws-client> **** but message.h uses the chunk datatype so it has to include it 09:31 < ws-client> **** here https://github.com/MilkeeyCat/ddnet_protocol/blob/2e51204054f09e159b4db054f16f87f4d425e526/include/ddnet_protocol/message.h#L76 09:31 < ws-client> **** message.h uses `DDNetChunk` 09:31 < bridge> ye, and it should be fine 09:31 < ws-client> **** but chunk uses MessageKindId 09:31 < ws-client> **** https://github.com/MilkeeyCat/ddnet_protocol/blob/2e51204054f09e159b4db054f16f87f4d425e526/include/ddnet_protocol/chunk.h#L155-L167 09:32 < ws-client> **** MessageKind* 09:32 < ws-client> **** the chunk holds a message so it needs to know the message type 09:32 < ws-client> **** so the message kind enum has to be accessible to chunk.h 09:33 < ws-client> **** i will continue with actual snap code now -.- already wasted 30 mins on this 09:34 < bridge> `DDNetMessageKind` was originally defined in `chunk.h`, not `message.h` 09:35 < ws-client> **** yes 09:35 < ws-client> **** because it needs it 09:35 < ws-client> **** so moving it to message.h breaks 09:35 < ws-client> **** so the thing that would work is moving the packer init to chunk.h i did that now 09:36 < bridge> I said to only move `ddnet_packer_init_msg`, no? 09:36 < ws-client> **** but i still think best would be to leave it all in packer.h 09:36 < ws-client> **** u said to move it to message.h 09:36 < ws-client> **** wait that should work now that i think about it xd 09:37 < ws-client> **** because message includes chunk and it has it then 09:37 < bridge> yes -.- 09:37 < ws-client> **** i feel like i moved the wrong enum 09:38 < ws-client> **** yup i did xd 09:38 < ws-client> **** thanks :D 09:38 < ws-client> **** what about the name tho? 09:38 < ws-client> **** i still like to keep `ddnet_packer_init_msg` 09:39 < bridge> ye we can keep it, I still think it makes sense that it's not in `packer.h` because it's not "core functionality" of packer to work with message kinds. It's message related and it can define its own functions which work with packer. 09:39 < bridge> or maybe I drank too much stupid juice :\ 09:40 < ws-client> **** yea i guess it makes sense 09:41 < ws-client> **** @milkeeycat whats you take on unknown snap items? 09:41 < ws-client> **** in my libs i usually store their entire payload 09:41 < ws-client> **** so one can for example build a proxy and alter known snap items and pass on unknown snap items correctly 09:42 < ws-client> **** teeworlds just skips over unknown snap items 09:42 < ws-client> **** if we decide to store their data without knowing what it is to support any kind of future ddnet ex snap item in a proxy that repacks the snap we would have to think about memory 09:43 < ws-client> **** because the size is not known and snap items dont have a max payload size as far as i know so stack allocating doesnt really work. Which means we would need to do a heap allocation for EVERY unknown snap item 09:43 < ws-client> **** idk i feel like this entire lib will be a slow bloat already because of how many heap allocations it needs to do to parse a single packet 09:46 < bridge> how many heap allocations is a slow bloat? xd 09:47 < ws-client> **** well i would say it starts from 1 per packet :D 09:47 < ws-client> **** and we do like a gazillion already 09:47 < ws-client> **** or like 2 xd 09:47 < ws-client> **** huffman decompressed payload and chunks 09:48 < ws-client> **** but now doing it for MULTIPLE chunks would be a whole different level 09:55 < ws-client> **** oh wait we dont need to malloc 09:55 < ws-client> **** we can just point into the payload 09:55 < ws-client> **** all good 11:38 < bridge> Gumo, have some nice holidays devs 🙂 11:38 < bridge> merry crimmas 11:39 < ws-client> **** fck christmas 11:39 < ws-client> **** fakin relgious cult x coca cola ad bs 11:40 < ws-client> **** horrible music, horrible decoration and horrible vibes 11:40 < ws-client> **** christmas should be banned 11:40 < bridge> Hey guys, first off, Merry Christmas. Secondly, just theoretically, how difficult would it be to add voice chat to the game? I know there are a lot of subtleties, but I'm just curious about your opinions. 11:40 < bridge> Hellou :3 11:41 < ws-client> **** @sqwinix its in ddnet-rs i think 11:41 < ws-client> **** just uninstall your c++ client 11:41 < ws-client> **** nobody plays minecraft bedrock 11:41 < ws-client> **** why play ddnet bedrock 11:41 < ws-client> **** https://github.com/ddnet/ddnet/issues/6547 11:42 < ws-client> **** ddnet wont be adding voice chat 11:43 < bridge> Ok, thanks 11:48 < bridge> xD there are too many people just hallucinating and vibe-explaining the universe 11:49 < ws-client> **** @Assa hm? 11:49 < bridge> but on the other hand, having some time with your familiy can also be nice 11:49 < ws-client> **** family time during christmas is the worst kind of family time 11:54 < bridge> Welcome to China we banned Christmas 11:59 < bridge> Can confirm 12:00 < bridge> Idk, different cultures I guess, do you have a religion that china follows or is it like meh for all of them? 12:00 < bridge> We have a teacher in our family and they were given instructions to stop students from celebrating Christmas 12:00 < bridge> we don't anymore i think. at least for regular hans. 12:01 < bridge> hello my name is ddnet player but ı banned vpn ı musnt off vpn how off vpn 12:02 < bridge> https://ddnet.org/vpn/ 12:02 < bridge> thank you so much bro 12:03 < bridge> basically check if you have any network programs open. if not then you can #✉-create-a-ticket and use the ban appeal and they might help you there 12:06 < bridge> We had an outright ban back then in the DDR, but it was like really forbidden and you needed to hide in order to celebrate your regiligios events. It had the opposite effect of people becoming more religions as rebellion against the state. As far as I read china didn't outright ban the celebration with your familiy at home 12:06 < bridge> wow rly? 12:06 < bridge> Ye you can do whatever you like at home or in your company as long as you are not disturbing other people. it's not like police will bust down your place cuz you've setup a tree. 12:07 < bridge> Not too difficult, mostly very costly and extremely horrible for moderation 12:07 < bridge> It's just banned in any official setting and disencouraged in commercial settings 12:08 < bridge> I think the higher up order is just to discourage it but local gov over enforce stuff since the order are vague. that's just how china works. 12:08 < bridge> are there many religious ppl in china 12:08 < bridge> not really 12:08 < ws-client> **** @Assa oldge ddr story teller 12:09 < bridge> also i guess depends on which part. i'm sure there are ethnicity minorty groups that have higher chirstians percentages 12:09 < ws-client> **** also the term "DDR" is ambigious in the ddnet #developer channel 12:09 < bridge> I am a western german, my knowledge is fairly limited on **that** topic ... 12:11 < bridge> I wasn't even alive during the "Mauerfall", this was around 37 years ago already 12:12 < bridge> Being anti-religion is communism 101 anyway 12:12 < bridge> ~~:PepePopcorn: communism is a religion~~ 12:13 < bridge> obligatory #off-topic as a blue name 12:13 < bridge> That is kind of sort of the idea, you want to replace religion with dialectical materialism 12:14 < bridge> I replaced it by optimitistic nihilism :justatest: 12:15 < bridge> lol, I thought this was #off-topic with how offtopic this entire convo was 12:15 < bridge> mb 12:16 < bridge> can't even wish ppl nice holidays without causing offtopic :kek: 12:17 < bridge> Wishing nice holiday is off topic 12:17 < bridge> Same as „good morning“ 12:18 < bridge> I don't think so, lol 12:19 < bridge> our apartment did setup a light up christmas tree 12:19 < bridge> Waiting for the police to storm your house /s 12:20 < bridge> the estate company did it, please arrest them and lower our fees lol 12:21 < bridge> so I wonder why 0.7 use a extra texture for Christmas hat. Could we add something like that? Though we have already had `santa_` skins. 12:22 < bridge> I guess this allows for cusomizing the santa head for differently styled skins 12:22 < bridge> but - I agree - we could add a lot of hats 12:23 < bridge> and we have OCD people insist that every skin combination should look good so the 0.7 skin system was not really popular to begin with (among these people) 12:24 < bridge> whatever you do, sb is complaining in ddnet 12:24 < bridge> Yeah you're right 12:24 < bridge> iirc there was a convo like 5 years ago about banning conflicting colors in the picker 12:24 < bridge> it is stupid 12:25 < bridge> I have to say that it looks like not really nice. 12:26 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1453710363177648149/image.png?ex=694e70c7&is=694d1f47&hm=1000132df9537a8a31d052cbf153ed42aa1e3f935a0ee69340ec4f5289e86544& 12:27 < bridge> Really small. 12:28 < bridge> Didn't it? 12:28 < bridge> wdym? 12:29 < bridge> I just thought that the 0.7 Xmas hat looks weird. 12:43 < bridge> aww #11318 broke our internal parser :KEKW: 12:43 < bridge> Merry christmas to everyone celebrating 12:43 < bridge> https://github.com/ddnet/ddnet/pull/11318 12:50 < bridge> should be an easy parser fix 😉 12:51 < bridge> ye, just a slight annoyance because we only noticed it when the servers restarted which took a while :kekw: 12:53 < bridge> do we need a PR: Changes log parsing label? :kek: 12:53 < bridge> nah doesn't make sense for new messages anyway 12:54 < bridge> you'd theoretically have to slap that on anything strings/formatting :kekw: 15:21 < bridge> why is the scoreboard title showing the time of a player if I spectate them, but only if it's not a timescore, but a normal score 15:24 < bridge> why is the scoreboard title showing the score of a player if I spectate them, but only if it's not a timescore, but a normal score 16:53 < bridge> I mean this https://github.com/ddnet/ddnet/blob/master/src%2Fgame%2Fclient%2Fcomponents%2Fscoreboard.cpp#L181 16:53 < bridge> @robyt3 do you have an idea? 18:06 < bridge> how does vital netmsg flag work? 18:13 < bridge> Except for preinputs, clients just ignore messages without this flag :pepeW: 18:16 < bridge> and the server? 18:18 < furo> @louis The vital flag will include a sequence number to the packet chunk. The sequence number is incremented for every vital msg. The sender adds the vital msg to its resend backlog. The reciever will increment its ack number for every vital msg and if the msg sequence differs from ack. The reciever will request a resend of the senders backlog and reset its ack to the msg's sequence. 18:19 < furo> Not really a complete answer, and may be slightly incorrect. but should hopefully explain the idea at least. 18:22 < bridge> ty 18:29 < bridge> i thought vital just resends? - does the client seriously drop all non-vital msgs?, i feel like i'm missing some code lore here 18:31 < bridge> The client drops game (non-system) messages that are not vital because all game messages are expected to be vital (except preinput) 18:32 < bridge> I don't know. Seems like the server record is rendered when timescore is enabled. 18:45 < bridge> why are demos 25 tps? 18:47 < bridge> @milkeeycat what do you think about my commit 🗣️ (i uploaded test data) 18:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1353804416200872036/image.png?ex=694e315d&is=694cdfdd&hm=4a52975239447b95d9e81201bf85ade0c88617966cd1c5f93f13daf30a910262& 18:48 < furo> @alw5 Because clients are only sent 25 snapshots a second by default. Could be changed on the server with `sv_high_bandwidth 1` 18:48 < bridge> a okay 18:49 < bridge> how do race times have 0.02 then? 18:50 < furo> The server is still running at 50 ticks a second, but the client only recieves data at half the rate. 19:03 < bridge> @sqwinix Mumble voice chat is in CMClient (TClient fork) but when we have time it will be merged into TClient. You just join any Mumble server with the plugin installed on your client and it will work. It also does proximity chat volume changes by default. 19:05 < bridge> Not a perfect solution, since you would need to only join one channel per server, but works good enough for events probably 19:07 < bridge> We might be able to have it send the server IP as well, and mute people not on your server, or maybe the Mumble plugin already handles this, idk 19:13 < bridge> Also, in Volleybot-related news, the basic win reporting and stats system are now finished. But I'm having a time complying with rate limit / chat points without somehow losing whispers still? Maybe that's just life and the way the networking stack works with sv\_chat but I'm at least never muted by the server now 19:17 < bridge> yeah sometimes ur messages just dont get sent 19:17 < bridge> It's really weird, I asked in here if they are not vital (assume so now) but I'll have to look into tracking the delivery 19:19 < bridge> I could try inflating the rate limit timeout so that it's super guaranteed to not hit it (right now it's (31 + Len) / 32 exactly) 19:19 < bridge> But idk how that's still beating the server. with network lag and runtime execution loop 19:21 < furo> Chat messages are vital, but they will get silently dropped if you excedd the rate limit. 19:29 < bridge> ah okay good, so i must just be getting limited still. its possible my math is wrong, or """javascript""" 19:39 < bridge> ```js 19:39 < bridge> if (client.chat_queue.head !== null && client.chat_points >= CHAT_POINTS_PENALTY) { 19:39 < bridge> const time = Date.now() 19:39 < bridge> if (time > client.chat_time) { 19:39 < bridge> const message = client.chat_queue.pop() 19:39 < bridge> client.chat_time = time + ((31 + message.length) / 32) 19:40 < bridge> client.chat_points -= CHAT_POINTS_PENALTY 19:40 < bridge> client.game.Say(message) 19:40 < bridge> } 19:40 < bridge> } 19:40 < bridge> ``` 19:40 < bridge> I even added some sanity parens because i dont trust js 19:40 < bridge> (and yes i know my chat points implementation is not canonical, i guess it goes backwards technically) 19:40 < bridge> (and yes i know my chat points implementation is not canonical, i guess it recovers backwards technically) 19:46 < bridge> probably i need to refactor this out of on_snapshot and use async/await, or maybe measure time by getting the ticks out of snapshots (apparently not obvious to me how to do that) 20:14 < bridge> btw why is there a stack limit? 20:54 < bridge> wow, this is great 21:44 < bridge> @robyt3: huge android maintainer o0 21:44 < bridge> Not that it matters much but I wouldn’t call apple macOS Darwin 21:44 < bridge> It’s so legacy 21:49 < bridge> I wish we had an iOS maintainer as dedicated as robsi for android 21:50 < bridge> Just this morning I was approached in a cafe by someone who wanted to install the game on ios 21:57 < bridge> I just called it darwin because Google also does in the Android NDK filenames 22:01 < bridge> You need macOS to develop for iOS so it seems impossible to maintain without getting an Apple device. 22:03 < bridge> chiller aren't you iphone fan? 22:04 < bridge> or it was meskalin 22:04 < bridge> i always confuse you two 23:11 < bridge> unique servers are back in usa 23:12 < bridge> merry christmas 23:12 < bridge> go race