00:32 < bridge> @sollybunny I even implemented a duo-tree today, always splitting a rectangle on the longest side, this isn't too hard, hard can be efficient updating 00:34 < bridge> and you will want to implement a range search in the quadtree in order to find nearby entities to check collisions with, this is the only benefit 00:35 < bridge> I think quad trees don't make sense in ddnet, because the overhead is too big for only 64 players 00:35 < bridge> I think quad trees currently don't make sense in ddnet, because the overhead is too big for only 64 players and the game doesn't contain too many entities 00:37 < bridge> it would make more sense if ddnet would work with mapchunks, which also could be integrated into a tree, similar to minecraft chunks. You don't want to check if you collide with a creeper with every creeper in a minecraft world 😄 00:58 < bridge> because we need to switch the texture for each sprite of the tee 01:09 < ws-client> @barbs0327 could you describe the bugs in words? 01:09 < bridge> But there's all on the same texture? 01:09 < bridge> wdym 01:09 < bridge> It gets separated in memory? 01:09 < bridge> everything gets cropped & chunked out afaik 01:09 < bridge> before it even gets to the gpu 01:09 < bridge> But you don't have to do it that way 01:09 < bridge> yeah i mean you can treat it as an atlas 01:09 < bridge> but that's not how it works rn 01:10 < ws-client> I am not sure if JSaurursRex is maintaining that modification. I for sure am not. I am maintaining the server at 88.198.96.203:8309 "ChillerDragon's CTF GER1" but it would still be good to know what kind of bug. 01:11 < bridge> Idk the atlas doesn't even sound that hard right? We already have them on one texture and know the coordinates. 01:12 < bridge> Is it because of the tee colors? 01:12 < bridge> Those get stored in the texture itself? 01:13 < bridge> you'd need a shader to change the color if not 01:13 < bridge> which idk if it does already 01:13 < bridge> but i would assume not because it's a fairly well known algorithm that's been reproduced in a few other software representations 01:13 < bridge> that web one 01:13 < bridge> idk 01:14 < bridge> i wonder what it actually does yeah 01:15 < bridge> They all write the colors to the texture directly I'm pretty sure 01:16 < bridge> too bad it's american hours rn 01:19 < bridge> updating quad trees isnt that intensive seeing as you only have to do it once per tick at most. each player checks against each player for collisions, and when hooking and for each projectile turning an O(n^2) to a O(n) or less it definatley worth 01:19 < bridge> specially if we go upto 128 clients 01:38 < bridge> <01000111g> does someone has resources/a link to the new years photoshoot mod? I want to do sth similar with my friends 01:48 < bridge> @tsfreddie 01:48 < bridge> if theres not many players u can just photoshop it :P 01:48 < bridge> https://github.com/TeeworldsCN/MomentCap i think its this one 01:48 < bridge> @01000111g 01:48 < bridge> good find 01:48 < bridge> ill use that freddie ping to ask him another question then 01:48 < bridge> ||org reminds me of the BemaniCN 😢|| 01:49 < bridge> that's probably totally lost on u sorry 01:49 < bridge> https://cdn.discordapp.com/attachments/1280247930518896724/1308293172908130335/balls.gif 01:49 < bridge> ||we love ya freddie, no questions and no answers ;3|| 01:57 < bridge> With proper collision you can effortlessly handle thousands :) 01:57 < bridge> ^ 03:40 < bridge> Who can create a script for fifo? 03:41 < bridge> I just want my message to be displayed in the broadcast every specified time. 03:41 < bridge> this is implemented via fifo 03:41 < bridge> But I do not know how 04:46 < bridge> @woidless you can 04:46 < bridge> do some research 04:46 < bridge> i believe in you 07:34 < ws-client> nice website http://www.bricktou.com/arch/x86/include/asm/syscallsyscall_get_error_en.html 07:54 < bridge> I can't do it 07:54 < bridge> I've been trying for 2 weeks now, I've even been looking for a programmer, I'm asking the gpt chat 07:54 < bridge> Nothing helped me. 07:55 < bridge> When I was looking for a programmer, no one understood what I wanted and because they didn't play ddnet 07:56 < bridge> Although I was willing to pay $12 07:57 < bridge> >When I was looking for a programmer, no one understood what I wanted 07:57 < bridge> 07:57 < bridge> You will become a really good project manager 07:57 < bridge> > When I was looking for a programmer, no one understood what I wanted 07:57 < bridge> 07:58 < bridge> You will become a really good project manager 07:58 < bridge> you need to be the programmer 07:58 < bridge> lol 07:58 < bridge> $12 means little to most ppl in here 07:58 < bridge> This command was not found. 07:59 < bridge> you would probably have an easier time getting ppl to help you if you showed initiative & tried to code *with* them instead of just asking them to do it for you 08:04 < bridge> https://tenor.com/view/parks-and-rec-andy-dwyer-oh-yeah-10-bucks-scratch-ticket-scratchcard-gif-3256349126806075052 08:25 < bridge> 2 weeks is nothing 08:26 < bridge> buy yourself some c++ course with that money 08:26 < bridge> better invested 09:05 < bridge> I do not know how python works, I will not be able to use it. 09:06 < bridge> maybe $ 12 is not enough for this job, but it's more difficult for me to find , I can find a maximum of $ 30, I don't know if it's good for just creating a script that simply enters the broadcast command into a fifo file every specified time 09:07 < bridge> I've already ordered a book. 09:47 < bridge> And even then I do not know how long it will take to write a script, maybe a day, maybe a week 10:04 < bridge> <01000111g> thank you! 10:04 < bridge> <01000111g> kinda true, but its hard for me (no skill) 10:23 < bridge> I agree, that this might be viable with 128 players, since, as you already noticed, you'll have 128^2 = 16384 collision checks for players instead of 4096 curently at most 10:42 < bridge> Tbf I cannot say if the bottleneck is purely tee rendering. 10:42 < bridge> But generally in the player rendering pipeline you have a lot of unbatched draw calls. 10:42 < bridge> You first render the left hand + hook, then the right hand + weapon, then the player 10:42 < bridge> 10:42 < bridge> And this is repeated for all players on a per player basis. and even if you render one tee in a whole you still render 1200 tees on its own, since all tees have different skins / weapon textures etc. (potentially) 10:46 < bridge> Tbf I cannot say if the bottleneck is purely tee rendering. 10:46 < bridge> But generally in the player rendering pipeline you have a lot of unbatched draw calls. 10:46 < bridge> You first render the left hand + hook, then the right hand + weapon, then the player 10:46 < bridge> 10:46 < bridge> And this is repeated for all players on a per player basis. and even if you render one tee in a whole you still render 120 tees on its own, since all tees have different skins / weapon textures etc. (potentially) 10:50 < bridge> Hmm yeah it's a lot of draw calls I guess. 10:51 < bridge> Is anyone familiar with some good open source profiling tools for c++? I refuse VSC and the only other solution i found was Orbit from google 10:52 < bridge> on linux u have perf (+ flamegraph), callgrind and i think gcc even has some integrated counter 10:52 < bridge> Also thinking about it, the client will suffer from the n^2 physics much more than the server right? Potentially it must do 1000ms/20=50 ticks of simulation for every actual tick due to prediction. 10:53 < bridge> oh that's good, going to look into that, thank you ❤️ 10:54 < bridge> yeah, defs a big problem 10:54 < bridge> does the client check for collisions? 10:54 < bridge> anti ping has to 10:54 < bridge> and local char pred 10:54 < bridge> It does almost everything 10:58 < bridge> It would be nice if the server and client simply shared the same physics implementation. They're not really that far apart right now. 10:59 < bridge> they are mostly doing this, both client and server include collision and gamecore 10:59 < bridge> but I agree, there could be a better separation 11:00 < bridge> Yeah but they duplicate all entities 11:00 < bridge> ? they have to, they run on different machines. I don't get your point there 11:00 < bridge> I mean the code 11:00 < bridge> There's a duplicate file for each entity 11:01 < bridge> I want less separation lol. None ideally 11:01 < bridge> I mean separation of the physics to the rest of the code 11:01 < bridge> Yeah 11:02 < bridge> slab a version on it and poof, backwards compatible physics 11:03 < bridge> The issue is cleanly integrating all the servers sideffects in the physics in a way the client can ignore 11:03 < bridge> The issue is cleanly integrating all the servers sideeffects in the physics in a way the client can ignore 11:03 < bridge> Idk how ddpg does this tbh 11:03 < bridge> Maybe you just probe the game stack instead of triggering events 11:04 < bridge> Maybe you just probe the game state instead of triggering events 11:05 < bridge> I can tell you how I do it, physics are only done on base-entity-objects and entity-entity-interactions have callbacks 11:06 < bridge> you mean like random teleporters? 11:07 < bridge> No like calling the function that saves your time to avoid database when you touch finish 11:07 < bridge> No like calling the function that saves your time to thw database when you touch finish 11:07 < bridge> ah, yeah the client simply has a dummy database that is disabled 11:07 < bridge> No like calling the function that saves your time to the database when you touch finish 11:07 < bridge> in the end ddnet's database is also optional 11:08 < bridge> But that means the physics depends on the database implementation? 11:08 < bridge> database interactions are async to me 11:09 < bridge> Or you need a bunch of callbacks 11:09 < bridge> no, only on the interface 11:09 < bridge> if they alter physics that cannot be predicted ofc xd 11:09 < bridge> ah there is an interface anyway 11:09 < bridge> Yeah 11:10 < bridge> since wasm has no access to anything 11:10 < bridge> you have to import host functions into the module anyway 11:10 < bridge> and only the server gives access to anything real 11:12 < bridge> How many interfaces does the server need for the physics? 11:12 < bridge> I have no estimate 11:13 < bridge> currently it only has database and terminal (basic logging) 11:13 < bridge> maybe it will need file access too, but ddnet doesnt 😄 11:13 < bridge> (i think) 11:14 < bridge> terminal includes chat? 11:14 < bridge> i meant like create logging 11:14 < bridge> But don't you need chat 11:14 < bridge> yes, it currently only gets chat commands 11:14 < bridge> but chat for me is an input into the wasm module 11:15 < bridge> if you mean that, then it ofc has lot more stuff 11:15 < bridge> rcon commands etc. 11:15 < bridge> the other way around is more interesting bcs it is more unsafe 😄 11:15 < bridge> Input into the module is different from an interface? 11:16 < bridge> well i thought you meant, what the server can call outside of what wasm offers 11:16 < bridge> hmm 11:16 < bridge> But if the physics wants to say "player has finished" how does that happen 11:17 < bridge> Idk what my question is anymore lol 11:18 < bridge> well twgame for example uses a mpsc channel. 11:18 < bridge> The player hits the finish line -> then the player_tick or whatever checks for events in that channel and starts a database query. 11:18 < bridge> and the query itself happens async 11:18 < bridge> and the database query itself uses a database interface 11:18 < bridge> the client uses a dummy database which implements that interface 11:19 < bridge> except for the actual query all things happen inside the physics module tho 11:21 < bridge> What doesn't happen in the physics module then? 11:22 < bridge> I thought it was very limited 11:22 < bridge> i mean what does limited mean. wasm allows you to basically do anything that doesnt require a kernel call (even allocations) 11:22 < bridge> so you couldn't just do a http request 11:22 < bridge> Snapshot packets? 11:23 < bridge> ok 11:23 < bridge> ah that happens indeed outside of it 11:23 < bridge> well no 11:23 < bridge> 50:50 11:23 < bridge> 11:23 < bridge> the snapshot binary data is inside the physics module. but the compression / binary diff etc happen outside 11:25 < bridge> How can you require a database interface on the client if this module is supposed to be sent over the network. Does that mean servers need to use the standard interface? 11:28 < bridge> The wasm module has imports, which are functions inside a wasm module without a state or anything else. 11:28 < bridge> so e.g. you do `call_sql("SELECT ..")` inside the wasm module. and then inside the host you can do with that information whatever you want. 11:28 < bridge> The client simply returns an error that this is unsupported. 11:28 < bridge> 11:28 < bridge> This is very simplified, bcs i abstracted these simple functions away using derive macros, in the end it feels more like you use a instance of a database object. 11:28 < bridge> 11:28 < bridge> so you do `object.query(my_statement)` and the rest happens hidden away from the user 11:29 < bridge> ok that makes sense 11:32 < bridge> the color is added in the shader. 11:32 < bridge> the client doesn't use texture atlasses, probably because the colors might leak over (?) 11:33 < bridge> Not even for the tile atlases? 11:33 < bridge> Those get separate textures? 11:35 < bridge> btw with 128 tees that do random inputs on ctf1 i get an avg of: 11:35 < bridge> ``` 11:35 < bridge> 28601 t/s 11:35 < bridge> 29154 t/s 11:35 < bridge> ``` 11:35 < bridge> with the non O(n²) approach 11:35 < bridge> 11:35 < bridge> Which surprises me, this is like 2x more than i had a month ago lol. 11:35 < bridge> Time to git bisect xd 11:35 < bridge> 11:35 < bridge> But defs worth to optimize it ig 11:36 < bridge> those are texture arrays. those are great and work well with same-sizes textures 11:37 < bridge> This sounds high but it limits perceived smoothness to 29000/50 "fps" if you do it on the same thread 11:38 < bridge> which is probably fine 11:38 < bridge> what if all parts of tee will render batched? 11:38 < bridge> yep, kinda sad, but i'd assume ddnet does much worse even 11:38 < bridge> Not many people are playing with 1000ms 11:38 < bridge> is it the same in terms of visuals 11:38 < bridge> Am i a fortune teller xD 11:38 < bridge> it's first of all not easy 11:39 < bridge> skins can have hd variants so texture arrays are not really usable 11:39 < bridge> you are :troll: 11:39 < bridge> on high end gpus u can probably bind like 200 textures at once 11:39 < bridge> The teero tater client has identical physics at 3x+ the speed of the github one but I don't want to publish these changes because it only helps botters lol 11:39 < bridge> in one shader 11:40 < bridge> yep, but i guess yours is mostly optimized for single player 11:40 < bridge> can you dynamically select one? 11:40 < bridge> e.g. a pickup also goes through all characters in cpp version 11:40 < bridge> afaik there are at least extensions for that 11:41 < bridge> oh neat 11:41 < bridge> Not entirely true, it replaces length checks with square distance to decide if it should do the expensive check which is a huge gain for multi tee and high entity counts 11:41 < bridge> But now I'm leaking 11:41 < bridge> xd 11:41 < bridge> i see 11:42 < bridge> we can switch to a different chat 11:43 < bridge> There's nothing too ground breaking I just look at the profiler and optimize the expensive parts over and over 11:43 < bridge> yeah i basically did the same 11:43 < bridge> but i cannot fully trust the flamegraph i use XD 11:43 < bridge> 11:43 < bridge> it 100% wasnt so fast a month ago 11:43 < bridge> and i only rewrote other stuff than physics 11:44 < bridge> Quad tree or spatial having would eliminate n^2 but idk if you can have collision order perfect consistency with the slow version 11:44 < bridge> Quad tree or spatial hashing would eliminate n^2 but idk if you can have collision order perfect consistency with the slow version 11:45 < bridge> i mean collision order in ddnet is just the client id sorted or not? 11:45 < bridge> No 11:45 < bridge> it always does for i < MAX_CLIENTS .. 11:45 < bridge> There's 2 currently 11:45 < bridge> There's client ID and week strong order 11:45 < bridge> Both affect physics 11:45 < bridge> yeah but week strong still exists in my version too 11:46 < bridge> i only optimized the fetching of which ids are interesting 11:46 < bridge> idk 11:49 < bridge> i mean it scales better than lineary now. 11:49 < bridge> 11:49 < bridge> 64 tees are more efficient to calculate than 1 tee 11:49 < bridge> so it must work ig xd 11:49 < bridge> (if i just divide the ticks/s with 64) 11:49 < bridge> You did something special for tee checking? 11:50 < bridge> Wait better than linear??? 11:50 < bridge> That's impossible lol 11:51 < bridge> yeah, i created a world field where every tile contains the ids of the current tees inside the tile. 11:51 < bridge> 11:51 < bridge> as long as you don't stack redicolously, like 128 tees in 1 tile, this removes the O(n²) and is O(n) 11:51 < bridge> i mean there is other overhead than physics in the whole tick 11:51 < bridge> so maybe it's possible 11:51 < bridge> O(n) is linear 11:51 < bridge> yes 11:51 < bridge> i mean the actual results xD 11:52 < bridge> like with 1 tee i have 350k ticks 11:52 < bridge> with 64 i have 40k ticks 11:52 < bridge> Well that's C + O(n) 11:52 < bridge> 350000/64 = 5468.75 11:53 < bridge> So what method do you use for moving tees 11:53 < bridge> you mean move_box? 11:54 < bridge> or inside the field? 11:54 < bridge> No for tee<->tee 11:54 < bridge> Like if a tee moves across multiple tiles in 1 tick, you have to check all of them 11:54 < bridge> to sum it up shortly: 11:54 < bridge> i get a list of all ids of neighbouring tiles of the current tees position 11:55 < bridge> This is just spatial hashing tho right? 11:55 < bridge> kinda 11:56 < bridge> How it is not 11:57 < bridge> i dunno, i dont have an exact defintion, but yeah it looks similar 11:58 < bridge> i guess since tees are always a circle you don't need them to be in mutliple tiles at once 11:59 < bridge> Rly? 11:59 < bridge> i'd say so xd 12:00 < bridge> I guess TW has no unskippable interactions with entities right? 12:00 < bridge> So you skip needing to do intersection over buckets to find fast collisione 12:00 < bridge> So you skip needing to do intersection over buckets to find fast collisions 12:03 < bridge> I think you're just assuming a maximum object size with this 12:04 < bridge> You can use a bigger radius for all collisions to avoid figuring out how many buckets they should be in 12:04 < bridge> It's asymptotically linear but for a normal number of tees you're not reaching that asymptote 12:05 < bridge> Better than linear observed performance is possible with an apparently linear algorithm because of many reasons. The algorithms are usually not linear over their whole domain but only after a certain limit. The compiler can aggressively vectorize giving similar performance for a couple n in a row 12:05 < bridge> Many others 12:05 < bridge> Scaling doesn't factor the constant cost in the calculation so you ignore the overhead 12:06 < bridge> Wait+ 12:06 < bridge> Wait! 12:06 < bridge> @jupeyy_keks how do you have laser walls and those things 12:06 < bridge> They will break your 1 bucket per item model 12:06 < bridge> what is that? i implemented vanilla 😬 12:07 < bridge> but anyway, most entities only check for itself<->character collision or not? 12:07 < bridge> i dont know any entity that does entity<->entity collision 12:07 < bridge> Its still n*n 12:07 < bridge> Its still n*m 12:07 < bridge> For map lasers 12:08 < bridge> but why 12:08 < bridge> how else? 12:08 < bridge> you have n lasers, but only check for the characters in range 12:08 < bridge> There are currently none. But I guess you do preclude them from existing in future mods too 12:08 < bridge> which is O(1) 12:08 < bridge> Every tee has to check every laser once per tick 12:08 < bridge> but doesnt ever laser check for all characters in range instead? 12:09 < bridge> or wait 12:09 < bridge> is that part of the movement? 12:09 < bridge> of a char 12:09 < bridge> It is part of movement 12:09 < bridge> i see 12:09 < bridge> Currently lasers aren't checked like that iirc. They insert imaginary stoppers 12:09 < bridge> It's not a real entity<->entity collision 12:10 < bridge> well we'll find a solution for them if the time comes xD 12:10 < bridge> but yeah they sound like they always consume a tile, similar to any tiles 12:10 < bridge> ok they can be diagonal right 12:10 < bridge> that ofc sucks 12:11 < bridge> I mean fully correct spatial hashing is a valid solution 12:11 < bridge> but in worst case you could assume their length is treated as the diameter? 12:11 < bridge> Its not that hard 12:12 < bridge> Yes 12:12 < bridge> sure, could try that some day 12:12 < bridge> But 1 tile size is small tbh 12:12 < bridge> for now i just wanted 2000 tees on my screen xd 12:14 < bridge> Quad tree is like a fancier version you get to have small and big buckets, at more cost. But it's probably not worth it at all for just the lasers 12:14 < bridge> They can just update a few dozens buckets per tick 12:15 < bridge> I've stared at this problem for a while now. Quadtrees are not great for this usecase. Updating them is too annoying 12:16 < bridge> I mean Jupstar has apparently already proved you don't need it 12:17 < bridge> Spatial hashing is good enough 12:17 < bridge> I mean teeworlds has also proven that you can get away with O(n^2) for a loooong time 12:17 < bridge> well with n=<64 you can do almost anything 12:18 < bridge> if grenades would collide with each other this wouldn't be viable lol 12:19 < bridge> Shouldn't you instead only be updating the smallest node of the tree that contains the laser? I guess you'll get less fine grained collisions that way so it's a trade-off between a more complex update and more expensive collisions 12:19 < bridge> There is no tree 12:19 < bridge> I'm just thinking that in realistic play scenarios the more expensive collisions won't be expensive at all 12:19 < bridge> So to correct my intial wrong benchmark: 12:19 < bridge> ``` 12:19 < bridge> 6442 t/s 12:19 < bridge> 6678 t/s 12:19 < bridge> ``` 12:19 < bridge> 12:19 < bridge> Which is still quite good if we assume the 1p vs 128p bencmark 12:19 < bridge> But still much less 12:20 < bridge> Quadtrees and spatial hashing are broad passes of collision. It's to cull things that you can't possibly collide with. So they wouldn't change the "resolution" of it 12:20 < bridge> Wdym resolution 12:20 < bridge> Nvm 12:20 < bridge> Replying to this "fine grained" comment 12:21 < bridge> At the end of the day you just have to do the box/sphere/capsule/whatever collision check 12:22 < bridge> I mean, the tree consists of a bunch of different sized quads, so depending on which size you're comparing against you'll get information that's of different levels of usefulness 12:22 < bridge> One thing is for certain. if all 128p in ddnet would be active at the same time and collide with each other, we probably have super bad performance xD 12:22 < bridge> point being that lasers would naturally be placed in much larger quads 12:22 < bridge> so PSSST 12:23 < bridge> I feel like calculating the collisions of 128 players should be no problem at all, but calculating the result of those collisions might be depending on how it's done 12:24 < bridge> but you calculate it a few houndred times on the client 12:24 < bridge> If your tree has quads that are very small your broadpass eliminates a lot, but your updates get expensive. If they are very large it degenerates to current ddnet situation 12:24 < bridge> 100*128 = ? 12:24 < bridge> So there is a balance there 12:24 < bridge> This is still actually quite good I didn't do the math on your previous one but it would have been insane lol 12:24 < bridge> yeah i added spectator slots recently and didnt update the benchmark lol xD 12:24 < bridge> pros at work 12:24 < bridge> I think 128 still doesn't completely break. I remember someone testing it with just tees dumped into the start of a map 12:25 < bridge> How fast is your single tee 12:25 < bridge> that's still on the order of tens of thousands, should be doable in less than a millisecond if you do it right, right? 12:25 < bridge> 256 is where it starts breaking down and 512 is barely still working iirc 12:26 < bridge> Wym by do it right? I'm guessing Jupstar is more talking about the current situation. There are obv ways to do it properly and handle far more 12:27 < bridge> I'm just not exactly seeing the reason why we can't do it properly, so I'm assuming there's something fundamentally difficult about keeping identical behaviour 12:27 < bridge> around 350k. 12:27 < bridge> 12:27 < bridge> And the flamegraph shows that most is spend in the pickups. 12:28 < bridge> 12:28 < bridge> so since it's vanilla and ctf1 you can do your own math. 12:28 < bridge> If i disable that i get around 500k 12:28 < bridge> ok im pretty impressed by your "super linear" performance 12:29 < bridge> should I be using multiple tees in the same gameworlds to get more ticks/s? 12:29 < bridge> lol 12:29 < bridge> lmao 12:30 < bridge> i guess it's fair to say that with few tees, other factors like player ticks etc. also have a small impact 12:30 < bridge> If your previous benchmark was real it would be 3.5 million tee ticks/s lol 12:31 < bridge> I think we can pump those numbers up 12:31 < bridge> With multi threading yes 12:31 < bridge> TPS: tees per second 12:33 < bridge> Multi threaded collision is a thing as well if we want 10,000s of tees 12:34 < bridge> The reason is that the ROI is low on doing it properly. 64p works just fine. 128p also works pretty acceptably which is our next stop. 12:34 < bridge> 12:34 < bridge> So migrating to a full spatial hashing or quadtree solution would just be a marginal performance improvement on the server side 12:34 < bridge> water simulation _tee edition_ 12:34 < bridge> YES 12:35 < bridge> You can't really do this well deterministically, the only option seems to be maintaining islands of tees that you simulate separately, but you need to be careful with moving tees between them as it will require locking and blocking if not done properly 12:35 < bridge> it might really already be needed now. 12:35 < bridge> 12:35 < bridge> if someone has prediction_margin of like 200 and zooms out, good bye xd 12:35 < bridge> What would happen if you pumped high pressure tee into the spawn point of Multeasymap? Would some of it eventually finish? 12:36 < bridge> Yeah the client running the physics aswell is a bit of an issue. I can only advise them to not do that 😄 12:36 < bridge> this is a funny experiment ngl xd 12:36 < bridge> Its a good model tho. The client should run physics as many AAA games do 12:37 < bridge> If anyone wants to do it properly it'll definitely be accepted as a PR. The hardest part is reviewing it since we don't currently have the capability of replaying teehistorian files to check nothing broke 12:37 < bridge> I think the client could potentially cull tees that are fad away for prediction if it becomes an issue 12:37 < bridge> I meant as in not set prediction margin so high then zoom all the way out 12:37 < bridge> I think the client could potentially cull tees that are far away for prediction if it becomes an issue 12:38 < bridge> Running the physics on the client aswell is sane and the correct(tm) thing to do 12:38 < bridge> Now the real question: 12:38 < bridge> How high should the flow rate be for the pumped tee fluid to achieve a finish faster than a 63 player server of average Multeasy players? 12:38 < bridge> Now that is one demo I would love to see 12:38 < bridge> Prediction margin is capped at 300 now so the real issue is the 4000ms ping cap 12:39 < bridge> Keep pumping tees at the start. See how fast you need to spawn tees to get an average finish 12:40 < bridge> i found a new elevator. 12:40 < bridge> 12:40 < bridge> The tee popping one 12:40 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1316731391769182228/tee_elevator.mp4?ex=675c1d2b&is=675acbab&hm=64383358aeee1580048e79c6178fa7d30df04c4979f3cc6ae67edee049cbb6ed& 12:40 < bridge> I'm not sure any number is faster with current physics, the tees don't push each other than fast 12:41 < bridge> ok now make each tee in the fluid hammer in a random direction once every 10 seconds 12:41 < bridge> oh wait the mazes would immediately stop the fluid on multeasy 12:42 < bridge> Would be better on aip gores 12:42 < bridge> yeahhh 12:42 < bridge> needs to be a simple map without no collision or large areas of tele backwards 12:43 < bridge> though tele backwards with ever increasing tee pressure could be funny to see 12:45 < bridge> morning 12:52 < bridge> hai 13:02 < bridge> gm 13:17 < ws-client> @avolicious will there be a irc bridge for kog? 13:17 < ws-client> ``[client] got disconnect from server. reason: You have been banned (IP banned! Open a ticket on https://discord.kog.tw/)`` 13:17 < ws-client> 88.198.96.203 13:20 < bridge> Mhmmm I guess not 13:21 < bridge> You cant use Hetzner ips to join our servers 13:24 < ws-client> where can i apply for a whitelist? 13:25 < ws-client> @avolicious its my ip it will not change and i host my vpn there 13:26 < bridge> If we whitelisted every person having a static hosting IP, our poor admins would go monkey brain creating exceptions 13:26 < bridge> I assume it's something similar for kog 13:27 < bridge> I've added the IP to the allowlist for now, needs now a few minutes to populate across the system 13:27 < ws-client> If you dont have the staff to create exceptions you should disable ip blocking otherwise users cant use vpns 13:27 < bridge> Thats true tho 13:27 < bridge> We dont want people with vpn 13:27 < bridge> thats the whole purpose 13:27 < ws-client> @avolicious so nice of you thanks 13:28 < ws-client> i assume you dont want vpns so that you can identify users based on their ip you can still identify me with the ip pointing to zillyhuhn.com 13:29 < bridge> I dont care about any identification from our side ^^ 13:29 < ws-client> what do you care about then? 13:29 < bridge> Banning vpns to make it harder to avoid bans 13:29 < ws-client> yea avoiding bans is also what i mean by identifying 13:30 < ws-client> if you ban my ip i can not avoid the ban 13:30 < ws-client> but now i can secure my confidental kog credentials in public wifis 13:30 < bridge> I dont ban per ip 13:30 < ws-client> based on what do you ban? 13:31 < bridge> The whole hetzner AS is banned 13:31 < bridge> all their ip ranges 13:31 < bridge> (because there are no ddnet players playing from inside a hetzner datacenter) 13:31 < bridge> 😄 13:31 < ws-client> @learath2 there should be 13:31 < ws-client> selfhosting vps is a thing 13:32 < bridge> In general it's 99% of the time a VPN 13:32 < bridge> For the 1% of the time where the players are selfhosting a vpn, we have a whitelist 13:33 < ws-client> yes and vpns are good for the security and privacy of the player and should be allowed by the server 13:33 < ws-client> @learath2 how do i get on the whitelist? 13:33 < bridge> Clearly the real solution is accounts 13:33 < bridge> Its not 🙂 13:34 < bridge> Accounts can be created very easily like you can use a vpn 13:34 < bridge> Its just an additional layer to bypass 13:34 < ws-client> paid accounts it is then 13:34 < bridge> clearly we just need players to supply ID :D :D :D 13:35 < bridge> $1 for an account and only one account per card 13:35 < bridge> This command was not found. 13:35 < bridge> You open a ticket 13:35 < bridge> Chiller, please never talk about privacy if you want paid accounts 🤣 13:35 < ws-client> @avolicious pay in cash is of course an option 13:35 < ws-client> @learath2 how? 13:35 < bridge> But this is also a privacy issue if you pay in cash. I can identify you then 13:35 < bridge> In this day and age I think it's about time we start introducing real id solutions for some things 13:36 < ws-client> @avolicious how o.O 13:36 < bridge> He can mail you cash with no return address 13:36 < bridge> ok but regulating things properly makes them less fun :( 13:36 < bridge> That's how mullvad took cash payments for a while 13:36 < bridge> True, but he is on the postal camera then 13:36 < bridge> Identified by Deutsche Post 13:36 < bridge> We had enough fun, people calling other people racial slurs is so 2009 13:37 < bridge> He can wear a mask and drop it off into a postal box outside 13:37 < ws-client> but you cant see the footage @avolicious and even if you can see it you cant identify me 13:37 < bridge> I already did & talked with you about that xD 13:37 < bridge> I just dont wanna expose anything 13:37 < ws-client> @learath2 imagine going to the postal office once a week with a ski mask to buy new accounts for botting on gores 13:37 < bridge> If there's a realistic way to universally deanonymize communications on the internet then everyone and their neighbour's dog is going to start requiring it to use their services... 13:37 < bridge> idk if germany still has them actually, but in italy we still do have some postboxes around 13:37 < bridge> But we talked some days back 13:37 < bridge> about how I did 13:37 < ws-client> @avolicious what? rly 13:38 < bridge> Yes 13:38 < ws-client> i dont recall at all 13:38 < ws-client> are you sure you talked about it with me? 13:38 < bridge> Yes 13:38 < ws-client> you can identify people based on a picture? 13:38 < bridge> I will tell you ingame in whisper 13:38 < bridge> I don't want to deanonymize in all cases. Usually all you need is a token that this is a real person, sadly no government really provides this service 13:38 < ws-client> @avolicious ok join me in game 13:39 < ws-client> 88.198.96.203:8303 libre server with vpns allowed! 13:39 < bridge> A token that allows you to prove that you are a single human that has never registered on my service before 13:40 < bridge> one that I can submit to the govt, and the govt can verify that it is a single person without knowing who that single person is 13:41 < bridge> Zero Knowledge Proof 13:41 < bridge> I guess it would work if the individual had to generate a new token for every service, so they can't be tracked across services 13:41 < bridge> I should sit down and figure out how one might structure such a service actually. 0 knowledge proof of being a human person 13:42 < bridge> The only issue is how such a token could be verified to be legitimate without exposing to the govt who that person is, so they can't track it either 13:43 < bridge> Before doing that, please add this finish db so we can show the flag next to the map if a player finished 13:43 < bridge> I quit my job, so I'll have more time very soon 😄 13:43 < bridge> You dont need to quit your job 13:43 < bridge> oh yeah I'd be devastated if my government knew I played DDNet 13:43 < bridge> oh wait I connect to their servers all the time so they know anyways 13:43 < bridge> I guess this is how that relates to the VPN issue 13:43 < bridge> Just 3 http endpoints 13:43 < bridge> Add, delete, update 13:44 < bridge> oh yeah I'd be devastated if my government knew I played DDNet 13:44 < bridge> oh wait I connect to your servers all the time so they know anyways 13:44 < bridge> I guess this is how that relates to the VPN issue 13:45 < bridge> That part would take like 2 hours, that's not the issue. The internal part needs some thinking 13:46 < bridge> The server needs to expose an internal interface that allows our python info script to query it and that python info script needs modifying too 13:46 < bridge> Anyway, not too difficult. I just did not have the time 14:00 < bridge> Who can create a script for fifo? 14:03 < bridge> :pepeW: 14:52 < ws-client> @avolicious could you add this to kog o.O https://github.com/ddnet/ddnet/pull/8866 15:05 < bridge> :justatest: chillerdragon specific feature 15:12 < bridge> as a fellow greensward enjoyer i love this, greensward should just be a default skin at this point :owo: 15:17 < bridge> as a passionate greensward hater, it should not 😏 15:27 < bridge> 😬 15:45 < bridge> wow greensward is a great skin 15:45 < bridge> I didn't even know about that one 15:49 < ws-client> Well I did make an attempt to make it an official skin. And that resulted in the skin swardy being added... 18:09 < bridge> <_voxeldoesart> greensward is just chiller skin at this point 18:52 < bridge> https://github.com/teeworlds/teeworlds/pull/2152 :feelsbadman: 19:24 < bridge> https://discord.com/channels/252358080522747904/295908390956433410/1006185945969725601 :greenthing: 19:25 < bridge> 🌟 19:37 < bridge> how u doing 19:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1316836305174269973/20241212_135348.png?ex=675c7ee0&is=675b2d60&hm=44465e551555bcf1e41ee7ba69f6c51b979aeeb148fb0e570cd66c8165b09186& 19:39 < bridge> My chat input clears itself while writing, restarting the client fixes it but its annoying 19:40 < bridge> Anyone else experience this? 19:41 < bridge> Are you writing in a language that requires IME support? Like Chinese, Japanese, Korean, or maybe something with an Arabic script? 19:41 < bridge> Turkish characters at most but I remember it happening only writing english too 19:41 < bridge> Turkish characters at most but I remember it happening while only writing english too 19:42 < bridge> Hm, Turkish characters shouldn't cause this anyway. What do you mean by "clears itself"? 19:43 < bridge> for example while writing "hello world", the input gets cleared after I write "hel" 19:44 < bridge> sometimes allows more characters then clears 19:44 < bridge> sometimes only 1 19:44 < bridge> does the chat prompt stay open or does it go away? 19:44 < bridge> its open 19:44 < bridge> it stays open 19:45 < bridge> Can you type more or is it stuck? 19:45 < bridge> I can keep typing but the above problem keeps repeating 19:46 < bridge> One more question, is the clearing instant or does it delete characters one by one? 19:46 < bridge> instant 19:46 < bridge> I couldnt record it sorry 19:47 < bridge> Hm, @robyt3 I think you touched the text input last, does this sound like anything you can think of? 19:48 < bridge> Doesn't sound familiar. @zaer1n Does it work with any older version from https://ddnet.org/downloads ? 19:49 < bridge> Didnt try older clients 19:50 < bridge> happens since 18.6 or 18.7 I cant really remember 19:50 < bridge> I cant reproduce it too 19:50 < bridge> just happens randomly 20:04 < bridge> @robyt3 @learath2 It happened again, can I show it in screen share? 20:06 < bridge> @robyt3 @learath2 It happened again, can I show it in screen share? found the trigger too 20:07 < bridge> Please record a video if you can 20:28 < bridge> And what's the trigger? If it happens consistently you could test with older versions to find the first version where it's broken 20:29 < bridge> its in the video, my shitty internet doesnt upload it 20:30 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1316849788603596882/idg66f.webm?ex=675c8b6f&is=675b39ef&hm=74eb716325e4495620137d09c0bcee83c5fe2db341aed08030d536d0679999c8& 20:33 < bridge> Looks like a bug with your snipping tool 20:35 < bridge> is it tater client? maybe tater might have a clue 20:37 < bridge> its tclient in the video 20:38 < bridge> Tested with ddnet 18.7 still happens 20:38 < bridge> just noticed other text inputs are affected too 20:46 < bridge> <_voxeldoesart> @totar 20:46 < bridge> No it happens with normal ddnet client too ^ 20:48 < bridge> Did it work with any previous version? Since it happens after using the clipping tool I'll blame the clipping tool for grabbing the focus incorrectly 21:00 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1316857123707158568/image.png?ex=675c9244&is=675b40c4&hm=4394c60e8cd77839720b83894234343fff728afe8e6b48412bfc7cfcf9302f50& 21:00 < bridge> :justatest: 21:00 < bridge> @blaiszephyr how do I try older versions 😭 21:02 < bridge> https://ddnet.org/downloads/ 21:02 < bridge> laughs in nixos roby :kek: 21:02 < bridge> 21:02 < bridge> ``` 21:02 < bridge> { config, pkgs, ... }: { 21:02 < bridge> nixpkgs.overlays = [ 21:02 < bridge> (self: super: { 21:02 < bridge> ddnet = super.ddnet.overrideAttrs (oldAttrs: { 21:02 < bridge> version = "16.0"; 21:02 < bridge> src = pkgs.fetchFromGitHub { 21:02 < bridge> owner = "DDNet"; 21:02 < bridge> repo = "ddnet"; 21:03 < bridge> rev = "16.0"; 21:03 < bridge> sha256 = ""; 21:03 < bridge> ``` 21:03 < bridge> 21:03 < bridge> build once, get shasum, (or prefetch it), insert it, and run 21:27 < bridge> hi, how i can set direction of walk tee? i’m trying use controls->minputdata->direction, but he not walking 21:27 < bridge> (Controls()->m_aInputData[g-Config.m_ClDummy].m_Direction = 1; 21:27 < bridge> hi, how i can set direction of walk tee? i’m trying use controls->minputdata->direction, but he not walking 21:27 < bridge> (Controls()->m_aInputData[g-Config.m_ClDummy].m_Direction = 1;) 21:31 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1316865084982825011/75572828331__3AF3762C-9130-4D17-BF6A-7245360653E9.mov?ex=675c99ae&is=675b482e&hm=8e184b0c4bd79235ae928beb78dd362ed7a895249c9817f64b55ab69a46e7b69& 21:32 < bridge> he seems to be trying to walk, but he doesn't 21:32 < bridge> pls dont alter your input on our official servers! - this will get you banned pretty quickly. 21:33 < bridge> in general questions towards automation or input modification are usually not answered here. 21:33 < bridge> *not allowed 21:34 < bridge> this is don’t official server 21:34 < bridge> 😔 21:34 < bridge> <_voxeldoesart> Don't Client 21:34 < bridge> my second question was ackhtuhally targetted towards his question, not whether or not we even allow that 🤓 21:34 < bridge> my second answer was ackhtuhally targetted towards his question, not whether or not we even allow that 🤓 21:36 < bridge> oh, okay 21:47 < bridge> can i ask a quick question? when will there be: 21:47 < bridge> levels, leveled up by completeing maps. harder maps are locked for higher levels 21:47 < bridge> payed skins, you only own the basic skin by default, you can buy skins with real money 21:47 < bridge> gatcha system: the good skins are locked behind a gatcha system, where you open loot boxes and have to open 100 to get the skin you want 21:47 < bridge> @jupeyy_keks ^ 21:47 < bridge> yes, finally we can introduce gambling to children 21:48 < bridge> finally we can introduce gambling to children 21:48 < bridge> 😄 21:49 < bridge> level up things is currently not planned on ddnet. you could make a #town-hall thread if you are invested in it. payed skins are also not planned. and a gacha system is a bad idea in any way. 21:52 < bridge> no no, we add lootboxes and hats and DDNet will be the next hot thing in no time 21:52 < bridge> (I still kinda think that hats could be fun) 21:52 < bridge> yea yea exactly xD 21:52 < bridge> then you only need to have an infrastructure that supports 200000 tees 21:52 < bridge> which we don't have 21:53 < bridge> ok but imagine the infinite money 21:53 < bridge> hats would be cool. decorations in any form would be 21:53 < bridge> Just set up more servers :D :D :D :D 21:53 < bridge> okay i see 21:53 < bridge> imagine only 50 people of those 200k would be perma ddosing :D 21:53 < bridge> Hammer skins and the existing weapon packs only apply to default? I guess that would kinda take away the point of weapon packs... 21:54 < bridge> I mean, it would half do that and half improve the situation 21:54 < bridge> for people who want a specific set of weapons because they find it nice to play with it'd be bad 21:55 < bridge> but for people who use weapon skins because it makes the game look more interesting it'd be a big positive 21:55 < bridge> Add hammer skins and make the existing weapon packs only apply to default? I guess that would kinda take away the point of weapon packs... 21:56 < bridge> I could see a small set of people getting mad over weapon skins 21:56 < bridge> do not the client! 21:56 < bridge> @inv41idu53rn4m3 hehe go try implementing all of that with backwards compatability in mind. (or go argue with deen and heinrich) 21:57 < bridge> backwards compatability is evil. If we would have a version system like minecraft for example so many issues would go away and many new features could be added 21:58 < bridge> Is it hard to add new messages that get ignored by older versions? 21:58 < bridge> no thats not the problem 21:59 < bridge> also hats and personalized stuff isn't really possible until we have accounts 22:14 < bridge> <_voxeldoesart> its why im eating up whatever juppey's cooking 22:17 < bridge> yeah was my no1 prio, all implemented, my paypal acc is set as target ofc 22:18 < bridge> No that's fair, sanitize your stuff tho, I now have your name address phone number email social security number the name of your first pet and how much you make annually 22:19 < bridge> And the name of my wife too? 22:19 < bridge> I'd like to know it 22:19 < bridge> <_voxeldoesart> tbh payed skins feels a bit sad but if it means it goes to ddnet servers then id be supportive of it 22:20 < bridge> It differs depending on how much you work out in a month 22:52 < bridge> I was going to stay quiet but since it's been misspelled three times in a row by three different people I have to speak up. 22:52 < bridge> It's paid, not payed. 23:26 < bridge> <_voxeldoesart> 🤓