00:12 <+bridge> [ddnet] @TsFreddie is there an easy way to determine whether you're behind the great firewall of china? ^^ 00:12 <+bridge> [ddnet] how would one detect this to change the map server to the one in china 00:40 <+bridge> [ddnet] @heinrich5991 well geoip 00:40 <+bridge> [ddnet] everyone in china is behind the great firewall, no? 00:46 <+bridge> [ddnet] @Learath2 but the client doesn't necessarily know its own ip address, would have to check that too 00:48 <+bridge> [ddnet] @deen we host the dns, so when they do the request we check the geolocation and give them the correct ip 00:55 <+bridge> [ddnet] atm cloudflare hosts the dns 01:38 <+bridge> [ddnet] @Learath2 U fool cloudflare dns is god only problem is teeworlds does not have hostnames 01:38 <+bridge> [ddnet] I saw noby did some rare shizzle with 2 servers ips on 1 server 09:26 <+bridge> [ddnet] @!ʎø1øʞıƝg that does not help at all with the problem that we are facing: Cloudflare only offers servers inside of China to Enterprise customers, so our large player base in China is getting maps very slowly. 10:05 <+ChillerDragon> @timakro there is grep -F for fixed strings but that does not help when you depend on line start. Looks like you have to switch to another tool like awk https://unix.stackexchange.com/a/282446 10:06 <+ChillerDragon> or a manual escaping with sed xd 10:07 <+ChillerDragon> yo bois how do i change the render mode in the client? seems like there is one to render in the world and one for the hud 10:14 <+ChillerDragon> seems like every component has its own MapscreenToGroup func like woot 10:20 <+ChillerDragon> ok got it somewhat working 10:24 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803556078280900628/YDTJGK53A3R0XFET29F.bmp 10:24 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803556078490746910/FAWKT2YCITHBGAY9J4.bmp 10:25 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803556142700691476/unknown.png 10:25 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803556163101917184/unknown.png 10:25 <+bridge> [ddnet] Delete it and redownload 10:25 <+bridge> [ddnet] a tmp file existing doesn't allow client to redownload the map i seems 10:25 <+bridge> [ddnet] It happens sometimes 10:25 <+bridge> [ddnet] it seems* 10:26 <+bridge> [ddnet] i know 10:38 <+bridge> [ddnet] I don't understand these permission problems. Why can't we overwrite a file we previously created ourselves? 10:40 <+ChillerDragon> @deen maybe ddnet client was run as admin before idk i think some win users do that to boost speed or something 10:41 <+ChillerDragon> or does it happen during one client run? 10:41 <+bridge> [ddnet] For me it never happened, just sometimes people report 10:41 <+ChillerDragon> ye i can also not reproduce 10:50 <+bridge> [ddnet] The map error sometimes go away after restart the game. Sometimes it is persistent. It is weird 11:46 <+bridge> [ddnet] @TsFreddie it might depend on antivirus software being used. maybe it interferes and somehow locks the files 12:49 <+bridge> [ddnet] :poggers: 12:50 <+bridge> [ddnet] Pog 12:50 <+bridge> [ddnet] Champ 12:51 <+bridge> [ddnet] Banned 12:51 <+bridge> [ddnet] @deen > So how can I build this? Do I need to get the discord libs from somewhere? Or just set DISCORD enabled in cmake for the official builds? 12:51 <+bridge> [ddnet] isnt there a pr on ddnet libs 12:51 <+bridge> [ddnet] https://github.com/ddnet/ddnet-libs/pull/16 12:52 <+bridge> [ddnet] :poggers: 13:16 <+bridge> [ddnet] have we had a not-big release in less than six months? 😄 13:17 <+bridge> [ddnet] Development activity is quite large 😄 13:24 <+ChillerDragon> what can i do automatically fix clang-format with the same style guide github action uses? 13:24 <+ChillerDragon> my local one formats tenerays on multiple lines and github actions does not accept it so i have to manually format 13:25 <+bridge> [ddnet] You'd need clang-format 10. I do it manually when it doesn't fit at the moment :/ 13:36 <+ChillerDragon> hm k 13:36 <+ChillerDragon> the new one looks even worse than the current one 13:41 <+bridge> [ddnet] @deen why it doesnt build? 14:04 <+bridge> [ddnet] Hm 14:05 <+bridge> [ddnet] Why not let players download locally 14:17 <+bridge> [ddnet] @deen can we get more master servers? 🤡 15:07 <+bridge> [ddnet] @deen don't forget about translations 15:08 <+bridge> [ddnet] @gerdoe did you see the failing rescue on freeze/dfreeze? 15:08 <+bridge> [ddnet] on build checks or what? 15:08 <+bridge> [ddnet] Videos here: https://github.com/ddnet/ddnet/pull/3343 15:09 <+bridge> [ddnet] aaah, hammer unfreezes you 15:09 <+bridge> [ddnet] pretty obvious actually 😄 15:09 <+bridge> [ddnet] whoops 15:10 <+bridge> [ddnet] @heinrich5991 even saw that coming but you said you tested it 😛 15:10 <+bridge> [ddnet] one-tick unfreezes 15:10 <+bridge> [ddnet] ❤️ 15:12 <+bridge> [ddnet] okey, i guess it just should have `!m_FreezeTime` condition too 15:12 <+bridge> [ddnet] @deen laser too 15:13 <+bridge> [ddnet] with old ones 15:13 <+bridge> [ddnet] what would that help? 15:13 <+bridge> [ddnet] you're unfrozen for a tick when you're being hammered 15:15 <+bridge> [ddnet] > with old ones 15:15 <+bridge> [ddnet] `IsGrounded() && tile != TILE_FREEZE && tile != TILE_DFREEZE && ftile != TILE_FREEZE && ftile != TILE_DFREEZE && !m_DeepFreeze` 15:15 <+bridge> [ddnet] it solves heart problem and hammer unfreezes in freeze 15:15 <+bridge> [ddnet] I see 15:15 <+bridge> [ddnet] or should it just check heart position... meh 15:16 <+bridge> [ddnet] except if you get hammered inside a heart 😄 15:16 <+bridge> [ddnet] ye 15:16 <+bridge> [ddnet] > or should it just check heart position... meh 15:16 <+bridge> [ddnet] so this 15:17 <+bridge> [ddnet] or record whether you were frozen the last tick 15:17 <+bridge> [ddnet] and only if you're not frozen this tick *and* the last tick, save /r 15:18 <+bridge> [ddnet] then we can delete old tiles check, hm? 15:18 <+bridge> [ddnet] idk, I'm just hoping 😄 15:41 <+bridge> [ddnet] no, seems we shouldn't call it one-tick unfreeze xd 15:45 <+bridge> [ddnet] @Learath2 :poggers: i kinda fixed the token stuff 15:45 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803636796906668083/unknown.png 15:45 <+bridge> [ddnet] nice 🙂 15:48 <+bridge> [ddnet] @heinrich5991 i dont like it tho, the way it works for me is first making it a str and then parsing, i would prefer to read directly the integer tho 15:48 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803637484176670720/unknown.png 15:48 <+bridge> [ddnet] the commented code is how i rly want it 15:48 <+bridge> [ddnet] m_FreezeTick works strange 15:48 <+bridge> [ddnet] but it simply doesnt match 15:49 <+bridge> [ddnet] well, the number is in a string, no? 15:49 <+bridge> [ddnet] it makes sense that you need to call a parse() function 15:49 <+bridge> [ddnet] i guess 15:49 <+bridge> [ddnet] all the implementations i seen parse strings 15:50 <+bridge> [ddnet] well, it *IS* a string that is sent over the network 15:50 <+bridge> [ddnet] ah 15:50 <+bridge> [ddnet] like "1234\0" 15:50 <+bridge> [ddnet] true 15:50 <+bridge> [ddnet] i got confused i guess 15:50 <+bridge> [ddnet] xdd 15:56 <+bridge> [ddnet] > The int type is an integer encoded in the decimal system in a zero-terminated ASCII string. 15:56 <+bridge> [ddnet] it says it here but my brain said no 15:56 <+bridge> [ddnet] :feelsbadman: 15:57 <+bridge> [ddnet] oh, also for your other question from the other day: 15:57 <+bridge> [ddnet] > The receiver of such a server info can detect whether it has received the server info completely by comparing the number of players received with the number of players set in the main packet. 15:58 <+bridge> [ddnet] number of players 15:58 <+bridge> [ddnet] what does represent number of clients btw? 15:58 <+bridge> [ddnet] ah, that's probably wrong, should be number of clients* in both cases 15:58 <+bridge> [ddnet] players = non-spectator client 15:58 <+bridge> [ddnet] i se num of clients in my code rn 15:59 <+bridge> [ddnet] +1 15:59 <+bridge> [ddnet] use* 16:00 <+bridge> [ddnet] @heinrich5991 is it reasonable to expect to only need 1 "more" packet in the foreseeable future? 16:02 <+bridge> [ddnet] I get a maximum of 2624 bytes for the player info alone, maximum packet size is 1400, so I wouldn't bet on two packets being enough even today 16:02 <+bridge> [ddnet] (12+16+4+6+2+1)*64 = 2624 16:03 <+bridge> [ddnet] @heinrich5991 nice solution! 16:03 <+bridge> [ddnet] ok 16:03 <+bridge> [ddnet] it works better now 16:04 <+bridge> [ddnet] @gerdoe the "now and last tick" variant? 16:04 <+bridge> [ddnet] yeah, Chr has LastFrozenTick boolean 16:04 <+bridge> [ddnet] but corner problem is still here 16:04 <+bridge> [ddnet] corner? 16:05 <+bridge> [ddnet] if you will go into freeze from corner your save position will be in freeze 16:05 <+bridge> [ddnet] known thing? 16:06 <+bridge> [ddnet] maybe you need to make that freeze check at a different place 16:06 <+bridge> [ddnet] after you evaluated whether you should be frozen at this place 16:11 <+bridge> [ddnet] @heinrich5991 you mentioned you used unsafe code in libtw2, did you really need it or is it for perfomance reason? or more easy to do? 16:11 <+bridge> [ddnet] curious 17:01 <+bridge> [ddnet] you could get around it by allocating 17:02 <+bridge> [ddnet] but I don't want to allocate 17:02 <+bridge> [ddnet] so I guess you could say it's for performance 18:21 <+bridge> [ddnet] :ddnet: suggestion:ddnet: 18:21 <+bridge> [ddnet] putting special /team 18:21 <+bridge> [ddnet] for top 5 18:21 <+bridge> [ddnet] or number 1 inside server 18:32 <+bridge> [ddnet] @hussainx3 what is your sugestion you want a Command to show team ranks ? 18:40 <+bridge> [ddnet] Found a bug 18:40 <+bridge> [ddnet] On speedup 18:41 <+bridge> [ddnet] speedup is a bug itself 18:42 <+bridge> [ddnet] the bug u found is probs used 18:42 <+bridge> [ddnet] xD 18:42 <+bridge> [ddnet] on maps 18:42 <+bridge> [ddnet] All maps 18:42 <+bridge> [ddnet] i meant in speedups u can litterally stop moving if u move the other way 18:42 <+bridge> [ddnet] yep 18:42 <+bridge> [ddnet] its used in maps 18:42 <+bridge> [ddnet] there is crazier stuff 18:42 <+bridge> [ddnet] No No "Speedup" tile 18:42 <+bridge> [ddnet] u can hold momentum 18:43 <+bridge> [ddnet] tiles 18:43 <+bridge> [ddnet] Wtf 18:43 <+bridge> [ddnet] xD do u understand me 18:43 <+bridge> [ddnet] i don't mean a map 18:43 <+bridge> [ddnet] the tile 18:43 <+bridge> [ddnet] ye the tile 18:43 <+bridge> [ddnet] Yes 18:43 <+bridge> [ddnet] if u move along the speedup tile direction u will stop 18:43 <+bridge> [ddnet] why 18:43 <+bridge> [ddnet] physics 18:43 <+bridge> [ddnet] and its used in maps 18:43 <+bridge> [ddnet] to do parts 18:44 <+bridge> [ddnet] @Im 'corneum maybe u remember a map 18:44 <+bridge> [ddnet] ur the magician 18:44 <+bridge> [ddnet] mapgician 18:45 <+bridge> [ddnet] Nah 18:45 <+bridge> [ddnet] @!ʎø1øʞıƝg u high again? 18:45 <+bridge> [ddnet] Yes 18:45 <+bridge> [ddnet] i see 18:45 <+bridge> [ddnet] 🤡 @m!ki i did not know u are in ddnet discord 18:46 <+bridge> [ddnet] lol im in since 2010 18:46 <+bridge> [ddnet] Damn 18:46 <+bridge> [ddnet] you can even hold the same way and you stop moving 18:47 <+bridge> [ddnet] @Ryozuki https://ddnet.tw/maps/Therapy/ 18:47 <+bridge> [ddnet] first part of the map is speeder bug 18:49 <+bridge> [ddnet] lol 18:49 <+bridge> [ddnet] u guys know too much 19:11 <+bridge> [ddnet] isnt that what i said xd 19:15 <+bridge> [ddnet] example /team 1 nobody can go inside Except top 5 and put colors rainbow for the team 19:18 <+bridge> [ddnet] fun Feature for best one in map or top5 19:19 <+bridge> [ddnet] fun Feature for best one in server or top5 in map 19:19 <+bridge> [ddnet] just change name to whoever is r1 lol 19:37 <+bridge> [ddnet] i mean we are not fortnite or we would have paid skins and rainbow by now 19:49 <+bridge> [ddnet] i not sure what you mean but why not? 19:49 <+bridge> [ddnet] we need something To encourage players to get points or get good rank 19:53 <+bridge> [ddnet] data.tw domain would have been epic for the project i want to do 19:53 <+bridge> [ddnet] rip its taken 19:54 <+bridge> [ddnet] anyone has any domain name idea 19:54 <+bridge> [ddnet] related to data and teeworlds/ddnet 19:54 <+bridge> [ddnet] hm data seems to be an expensive name to have in ur domain xd 19:55 <+bridge> [ddnet] datee 19:59 <+bridge> [ddnet] not good :feelsbadman: 20:01 <+bridge> [ddnet] teedata.tw :monkaS: 20:02 <+bridge> [ddnet] finding good domains is always hard 20:02 <+bridge> [ddnet] edgay.com 20:03 <+bridge> [ddnet] haha 20:03 <+bridge> [ddnet] so funny 20:09 <+bridge> [ddnet] https://github.com/rust-lang/chalk 20:09 <+bridge> [ddnet] PROLOG is everywhere 20:09 <+bridge> [ddnet] :monkalaugh: 20:17 <+bridge> [ddnet] ddbase 20:22 <+bridge> [ddnet] Nooo the token is just an int 20:22 <+bridge> [ddnet] 3 bytes sent in big endian order 20:23 <+bridge> [ddnet] Other ints within the serverinfo message are indeed strings though 20:25 <+bridge> [ddnet] not sure 20:25 <+bridge> [ddnet] @Learath2 I think you mix up receiving and sending 20:26 <+bridge> [ddnet] Either side there is no string parsing, encoding involved 20:26 <+bridge> [ddnet] https://github.com/ddnet/ddnet/blob/f08812b06a78156a6d61a0c5470b39e555fec395/src/engine/server/server.cpp#L2081 20:26 <+bridge> [ddnet] ADD_INT adds an int encoded as a ASCII string 20:26 <+bridge> [ddnet] We generate a 3byte token. In big endian order its bytes go into extra_token0 extra_token1 and token 20:26 <+bridge> [ddnet] yes, that's the serverinfo request 20:27 <+bridge> [ddnet] in the response, the token is encoded as an ASCII string that contains a decimal integer 20:27 <+bridge> [ddnet] ye 20:27 <+bridge> [ddnet] Ah the response 20:27 <+bridge> [ddnet] in rust i generate a u16 and a u8 and send it 20:27 <+bridge> [ddnet] and receive this decimal string 20:27 <+bridge> [ddnet] xd 20:27 <+bridge> [ddnet] That makes more sense, thought I was going insane there for a sec 20:28 <+bridge> [ddnet] @Ryozuki make sure you pack it correctly wrt endianness 20:28 <+bridge> [ddnet] 😉 20:28 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803708007006863410/unknown.png 20:28 <+bridge> [ddnet] hmmmm 20:28 <+bridge> [ddnet] He doesnt need to pack responses does he? 20:29 <+bridge> [ddnet] but requests 20:29 <+bridge> [ddnet] https://docs.rs/bytes/1.0.1/bytes/buf/trait.BufMut.html#method.put_u16 20:29 <+bridge> [ddnet] apparently that is big endian order 20:29 <+bridge> [ddnet] Yeah, and I think in that we only pack the token big endian 20:29 <+bridge> [ddnet] network uses big endian right? 20:29 <+bridge> [ddnet] I'd have preferred it to be in the method name 20:30 <+bridge> [ddnet] i mean the standard is using bend 20:30 <+bridge> [ddnet] most network protocols use big endian, yes 20:30 <+bridge> [ddnet] https://docs.rs/byteorder/1.4.2/byteorder/ 20:30 <+bridge> [ddnet] with this u can explicitly do it 20:31 <+bridge> [ddnet] I wonder how this came to be with most cpus being little endian when the protocols were being invented 20:31 <+bridge> [ddnet] An unnecessary cycle waste during a time when cycles were actually a premium 20:32 <+bridge> [ddnet] > one point is that in a little-endian system, the address of a given value in memory, taken as a 32, 16, or 8 bit width, is the same. 20:32 <+bridge> [ddnet] 👀 20:33 <+bridge> [ddnet] > So, in short, ‘on little endian systems, casts are a no-op.’ 20:33 <+bridge> [ddnet] is this not true on big endian? 20:33 <+bridge> [ddnet] https://softwareengineering.stackexchange.com/questions/95556/what-is-the-advantage-of-little-endian-format 20:33 <+bridge> [ddnet] Huh, I thought it was 20:34 <+bridge> [ddnet] Not like you address the ends of values in big endian 20:34 <+bridge> [ddnet] its also for addition and substraction 20:35 <+bridge> [ddnet] doesnt the standard library also support the byteorder functionality? 20:35 <+bridge> [ddnet] ah 20:35 <+bridge> [ddnet] > Note that as of Rust 1.32, the standard numeric types provide built-in methods like to_le_bytes and from_le_bytes, which support some of the same use cases. 20:36 <+bridge> [ddnet] Ah I see what they meant about the casts 20:38 <+bridge> [ddnet] The way we define casts is why this happens 20:38 <+bridge> [ddnet] When we cast down we want to discard the most significant bytes 21:04 <+bridge> [ddnet] @Ryozuki but addition and subtraction happen in registers, mostly? 21:04 <+bridge> [ddnet] registers don't have byte order 21:04 <+bridge> [ddnet] https://github.com/ddnet/ddnet/pull/3492#issuecomment-767790313 did you mean that we send both messages to old clients? 21:04 <+bridge> [ddnet] @Learath2 ^ 21:05 <+bridge> [ddnet] Yes 21:05 <+bridge> [ddnet] I wanted to give everyone the opportunity to implement the new protocol 21:05 <+bridge> [ddnet] also helps for demos etc. 21:06 <+bridge> [ddnet] Shouldn't they need to bump up the version? 21:07 <+bridge> [ddnet] hm. I think I like it more if you can get all the information, see also the demo 21:07 <+bridge> [ddnet] the demo saves the new information which makes it easier to write demo parsers if you only care about the new protocol 21:08 <+bridge> [ddnet] (note that this wasn't laziness, I could have put the sendmessage in the else branch with no extra effort) 21:08 <+bridge> [ddnet] All the information includes redundant information was my main concern 21:08 <+bridge> [ddnet] But I guess these aren't messages sent all the time, a little redundancy shouldn't matter here 21:09 <+bridge> [ddnet] Wait a demo saved by an old client wouldnt save the new extended message it doesnt recognize, would it? 21:09 <+bridge> [ddnet] I think it saves all messages 21:09 <+bridge> [ddnet] all game messages 21:09 <+bridge> [ddnet] let me check 21:10 <+bridge> [ddnet] ye, saves all game messages, before decoding them 21:11 <+bridge> [ddnet] https://github.com/ddnet/ddnet/blob/f08812b06a78156a6d61a0c5470b39e555fec395/src/engine/client/client.cpp#L2095-L2103 21:14 <+bridge> [ddnet] new protocol? 21:14 <+bridge> [ddnet] :poggers: 21:15 <+bridge> [ddnet] no, just a couple of messages converted from non-ex messages to ex messages 21:15 <+bridge> [ddnet] ah 21:15 <+bridge> [ddnet] Sv_DDRaceTime#m_Time 21:15 <+bridge> [ddnet] will this allow a nanosecond resolution timer? 21:16 <+bridge> [ddnet] sir? 😛 21:16 <+bridge> [ddnet] i mean 21:16 <+bridge> [ddnet] ddnet time is in 00.00 21:16 <+bridge> [ddnet] why not nanoseconds 21:16 <+bridge> [ddnet] ah 21:16 <+bridge> [ddnet] well, we only tick 50 times per second, so every 0.02 seconds 21:16 <+bridge> [ddnet] we could potentially add random numbers beyond that, by trying to interpolate when exactly you hit the start line/finish line 21:16 <+bridge> [ddnet] I think race does that 21:16 <+bridge> [ddnet] hmm 21:17 <+bridge> [ddnet] trackmania has more resolution 21:17 <+bridge> [ddnet] and i dont think it runs at a crazy tickrate 21:17 <+bridge> [ddnet] only 0.01 I think? 21:17 <+bridge> [ddnet] tmnf at least 21:19 <+bridge> [ddnet] i guess ye 22:45 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/803742363272740874/Ii1zae7tWgUklTi6eSE_7YHoENA4ngh5abWIEUrA_jU.png