01:35 < bridge> https://twitter.com/David3141593/status/1573218394358386688 02:31 < bridge> that is rather old 02:31 < bridge> i've seen the post if this is the original one 02:32 < bridge> i've seen the post when it was posted if this is the original one 06:58 < bridge> Update on my Godot 4 extension: 06:58 < bridge> made new functions to access them across all classes and not make duplicated code 06:58 < bridge> made character class having a proper input system, where with a boolean, it either automatically detects input (mouse, keyboard or joystick) and changes actions depending on the input pressed, or it's not automatic and it only detects one type of input 06:58 < bridge> expended data for dashing, walljumping, wallsliding, gliding and game knowledge (hp, mana, stanima) 06:59 < bridge> I think I'm in a good direction, I don't feel overwhelmed, because of how I organize my code, it's insane 11:20 < bridge> <судный день.> where will ddnet work possibly better: linux or windows? 11:21 < bridge> linux 11:22 < bridge> if you are planning to host a server - use linux probably 11:23 < bridge> Funnily enough ddnet might be the only game that has a client that works better on linux too 😄 11:23 < bridge> 😄 11:31 < bridge> <судный день.> factorio? 11:31 < bridge> I haven't tried but wouldn't be surprised if it did work very well. Those guys know how to write good code 11:32 < bridge> <судный день.> in fact they support asynchronous autosaving in linux 11:32 < bridge> <судный день.> but not in windows 11:32 < bridge> <судный день.> but thats not big problem 11:32 < bridge> <судный день.> what does exactly "fifo" mean? i mean ddnet 16.8 will support "fifo" on windows 11:32 < bridge> Funnily enough for me many games work better simply because dxvk is better written then dx9 drivers and default on Linux 11:33 < bridge> first in first out 11:33 < bridge> <судный день.> i have read it, but whats exactly it will do 11:33 < bridge> <судный день.> is it working with packets or what 11:33 < bridge> You can echo commands in a fifo file that will get executed 11:34 < bridge> <судный день.> oh 11:34 < bridge> <судный день.> so thats why named pipe was used 11:34 < bridge> <судный день.> i guess 11:37 < bridge> technically named pipe == fifo 11:39 < bridge> Best 11:39 < bridge> Ddnet is linux first 11:39 < bridge> Windows is an afterthought 11:39 < bridge> :gigachad: 11:40 < bridge> First in first out 11:41 < bridge> Oh should have red 12:07 < bridge> I use windows 12:09 < bridge> Windows uses you 12:11 < bridge> i'll switch to linux when I can play current games I do like to play alot 12:12 < bridge> i'll switch to linux when I can play current games that I do like to play alot 12:12 < bridge> like Escape From Tarkov, which is playable but the biggest problem = Battleye 12:19 < bridge> Give up on that game. It's not worth it xd 12:23 < bridge> 6k hours 12:26 < bridge> 6k hours u could have spent into teeworlds 12:37 < bridge> Why do you not appreciate Nikita's work? 12:41 < bridge> I appreciate teeworlds work more;) 13:07 < bridge> https://tenor.com/view/%D0%B1%D1%83%D1%8F%D0%BD%D0%BE%D0%B2-%D1%82%D0%B0%D1%80%D0%BA%D0%BE%D0%B2-tarkov-nikita-%D0%BD%D0%B8%D0%BA%D0%B8%D1%82%D0%B0%D0%B1%D1%83%D1%8F%D0%BD%D0%BE%D0%B2-gif-26042394 13:30 < bridge> <<~{Barsik}~>> https://tenor.com/view/teeworlds-ddrace-teeworld-gif-24816713 14:37 < bridge> Hjjhhjmhgghopk 14:37 < bridge> Hhhhhhjoknbbfd for the delay 14:37 < bridge> Nnnmm animal animal 14:43 < bridge> no drinking and texting 14:44 < bridge> very dangerous 14:44 < bridge> Voice message.ogg 14:44 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1079760931057307718/Voice_message.ogg 14:54 < bridge> <<~{Barsik}~>> :gigachad: 🙏 16:38 < bridge> I have a question and an Idea: What do you think of removing height and width from the mapper and doing it automatically (adjusting shift/width/height when placing the map)? 16:38 < bridge> I have a question and an Idea: What do you think of removing height and width from the mapper and doing it automatically (adjusting shift/width/height when saving the map/placing tiles)? 16:39 < bridge> interesting 16:39 < bridge> how do you handle the edge tiles? 16:39 < bridge> those that replicate endlessly 16:40 < bridge> exactly like before, you could add a button showing the current borders of the selected layer 16:41 < bridge> this would allow playing tiles outside the current borders while mapping, because before placing the map would auto adjust to the new size 16:41 < bridge> this would allow playing tiles outside the current borders while mapping, because before placing, the map would auto adjust to the new size 16:42 < bridge> this would also allow for automatically make layers smaller and shrinking the map filesize 16:43 < bridge> definitely sounds good 16:43 < bridge> but I don't understand your solution for edge tiles 16:43 < bridge> I now understand your issues, imagining a floating island 🤔 16:44 < bridge> And then u zoom out accidentally place a tile and now? 16:44 < bridge> Should it always reduce width and height every time a tile is placed? 16:44 < bridge> now you delete it again 16:45 < bridge> Is removed* 16:45 < bridge> on the borders, yes, should be rare 16:46 < bridge> you could also set the start background layer to 200/200 or something, since it's dynamically adjusted anyhow 16:46 < bridge> But could create quite some lag 16:46 < bridge> you could also set the start layer size to 200/200 or something, since it's dynamically adjusted anyhow 16:46 < bridge> Checking border. Or if border is empty, find new border 16:47 < bridge> I doubt it happens that rarely if everything is automatic 16:47 < bridge> you can be relaxed with it 16:47 < bridge> A mapper often adds and removes tiles when creating a new map 16:47 < bridge> like doubeling/halfing it 16:47 < bridge> as long as you adjust it while saving 16:48 < bridge> But then u cannot only rely on border again 16:48 < bridge> Which makes the calculation even shower 16:48 < bridge> Slower 16:48 < bridge> I don't get this one 16:48 < bridge> How do u know the current border is u doubled the size 16:49 < bridge> If 16:49 < bridge> Perfect ide theme found 16:49 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1079792481060794429/VID_20230227_174809_939.mp4 16:49 < bridge> if I double the border, the new border coordinates are twice as large? 16:50 < bridge> Ok let's say I place a tile somewhere outside... U would double width or height right? 16:50 < bridge> yes, I double until it's inside 16:51 < bridge> What if u remove the tile again? 16:51 < bridge> It's not part of the border 16:53 < bridge> slowly checking the last col/row and reducing the size one by one so that it's now cpu heavy could be an option. The size only matters for the editor itself, as I said saving could rearrange it anyway. Also maybe not making it smaller at all could be an option, too 16:54 < bridge> A decrease means copy all tiles that exists 16:54 < bridge> And increase 16:55 < bridge> It's not a two dim array 16:56 < bridge> I mean it's certainly somehow possible. But if u implement it, you might end up having to rewrite the rendering 16:56 < bridge> And use a different date structure to save the tiles in editor 16:57 < bridge> sounds like a quadtree, now that you say it 16:57 < bridge> yup 16:57 < bridge> also thought that 😄 16:57 < bridge> how do I decrease? The leaf is empty 16:58 < bridge> how do I save? Making a quadtree into an array 16:58 < bridge> how do I increase? adding nodes 17:00 < bridge> still the issue of @heinrich5991 remains, the only thing I can think of is placing invisible tiles, but that's bad 17:00 < bridge> This can make the rendering much slower than it already is tho 17:01 < bridge> I don't think it's that much if you have a good leaf size 17:01 < bridge> Depends on the data structure itself 17:02 < bridge> A continues array is very fast in accessing and irritating 17:02 < bridge> Iterating 17:04 < bridge> A quadtree is faster if you only need to access parts of it 17:06 < bridge> I dunno. I'd say it's much much slower 17:06 < bridge> we have a render limit and a zoom limit, you don't need to render the full map, just the part that you are looking at 17:07 < bridge> Qquadtrees are good if u want to find a specific region 17:07 < bridge> That's not my point 17:08 < bridge> Explain to me how do u render each tile after each other in a quadtree efficient 17:08 < bridge> U have a x start y start. X end y end 17:09 < bridge> Array access is basicaly 2-3 instructions 17:09 < bridge> Y * width+x 17:09 < bridge> first you only need to render the leafes inside the FOV, each leave can be an array too? 17:10 < bridge> How do u find the required leafs 17:10 < bridge> x, y, w, h inside a node 17:10 < bridge> And then go over all leafs 17:11 < bridge> no 17:11 < bridge> you go from the root of the tree 17:11 < bridge> <<~{Barsik}~>> not removing but adding auto-scale 17:11 < bridge> <<~{Barsik}~>> i still need my borders :< 17:11 < bridge> Anyway, implement it. Now I'm interested 17:12 < bridge> is there a quadtree already in ddnet accessible? For player collisions or somethign 17:12 < bridge> <<~{Barsik}~>> nah 17:13 < bridge> Entity collision and interaction is THE usecase of a quadtree 😮 17:13 < bridge> It is yes 17:13 < bridge> <<~{Barsik}~>> tried to implement it on 07, broke whole protocol xd 17:13 < bridge> we just do the O(n²) thing 17:13 < bridge> BCS u go from a specific point ^^ 17:15 < bridge> But even here. For 64 players it's maybe already worth. For 16 players it's maybe already slower 17:15 < bridge> U also have to maintain the quad tree^^ 17:15 < bridge> here is a working version: https://github.com/AssassinTee/teeworlds/blob/feature/quad-tree-test2/src/game/server/worldtree.h 17:16 < bridge> Any benchmarks? 17:16 < bridge> <<~{Barsik}~>> huuuh 17:16 < bridge> the idea is good but moving the top or left border can break some parts 17:16 < bridge> I had some other issues with it: the update order! 17:17 < bridge> for example? 17:17 < bridge> any part that relies on some specific floating point behavior like kill edges or freezejumps 17:17 < bridge> Maybe simple adding an autoscale tool would do just 🤔 17:18 < bridge> <<~{Barsik}~>> https://www.youtube.com/watch?v=HbbvMb7G8HQ 17:18 < bridge> this is true, arguments could be made that this is ... bad mapping 17:18 < bridge> I agree that it is but it's far too common to ignore 17:18 < bridge> it's also the reason why our discord bot doesn't automatically resize physics layers 17:19 < bridge> I already had the same problem creating an insanely hard jump map 17:20 < bridge> So, okay, I think the old proposal is out of the window, but here is a new one: adding autoscale and (only) expanding when klicking outside the map borders? 17:21 < bridge> So, okay, I think the old proposal is out of the window, but here is a new one: adding autoscale and (only) expanding when clicking outside the map borders? 17:21 < bridge> does this also happen when changing the map height/width or only when shifting? 17:22 < bridge> it happens when the position of tiles relative to world origin changes 17:22 < bridge> so when shifting 17:22 < bridge> I think the automatic resizing sounds like a good idea. I think a fine workaround for now would be to be generous with the map size until the map is finished (increasing it a lot whenever you need new space), at which point you optimize it 17:24 < bridge> I think this could be done with an additional tool, there is already a tool to remove envelops 17:25 < bridge> at least the resizeing 17:25 < bridge> that's a good idea 17:25 < bridge> both of those functionalities are already in the ddnet discordbot 17:25 < bridge> it could also warn in a tooltip or something that it can change behavior of some parts 17:26 < bridge> (but should probably be in the client at some point) 17:26 < bridge> but it doesn't, because the relation to the origin doesn't change? 17:26 < bridge> just adjusting width and height, not touching shift 17:26 < bridge> not all maps are submitted to ddnet and this can still be useful to mappers for other mods 17:27 < bridge> jupstar would argue, it might, because it's a 1 d array 🤔 17:29 < bridge> I don't know what you mean by 'shift'. on `$optimize`, only the tiles layers are touched. but with the `$edit` command it can optimize physics layers as well. it can also `$edit --extend- ` where direction is one of up, down, left, right, to extend all tilemap layers (including physics layers) by the specified amount of tiles. (this does change physics, but this is point of this command) 17:30 < bridge> you can offset a layer, (even for half blocks), it can be really usefull 17:30 < bridge> you can only do that for entire groups, and not on the game/physics group 17:31 < bridge> yes, but you could use that to make file sizes smaller, too 17:31 < bridge> when the first 20 rows of a tileset are empty, you can remove the first 19 and add a shift instead 17:32 < bridge> but as @Ravie pointed out, this could change physics 17:32 < bridge> ah yes, the tool does exactly that 17:32 < bridge> but that cannot be done with physics layers and can't affect physics because of that 17:32 < bridge> yes, which makes sense 17:32 < bridge> my point is, that a tool is missing inside the editor 17:33 < bridge> physics are affected when you change where the top-left corner of the physics layers is, so if you extend the map upwards or to the left, the physics change 17:33 < bridge> damn wtf :justatest: 17:34 < bridge> yes, I agree that it would be handy for the client. I could also see if I can make the tool simply more accessible. the `$edit` command is a pretty direct frontend to the twmap tools 17:38 < bridge> Can somebody tell me, where the "remove unused envelopes" tool is hidden? 17:38 < bridge> Can somebody tell me, where the "remove unused envelopes" tool is hidden on Github? 17:38 < bridge> that one is actually also in the editor now 17:39 < bridge> top left next to `File` is a `Tools` dropdown 17:39 < bridge> yes I know, I mean the sourcecode, I hoped it has an entry point for other tools 17:39 < bridge> apart from that, the discordbot uses https://gitlab.com/Patiga/twmap/-/tree/master/twmap-tools , in particular `twmap-edit` 17:40 < bridge> oh yea I misread your message, oop 17:40 < bridge> The popup menu is created by `PopupMenuTools` 17:40 < bridge> This shows a confirmation popup and calls `RemoveUnusedEnvelopes` when confirmed 17:41 < bridge> Thank you 17:42 < bridge> this function does the shrinking of the tilemaps, including the physics layers https://gitlab.com/Patiga/twmap/-/blob/3a99b5d821536bb5a25b11ea752db715f3588c87/twmap/src/map/edit/shrink.rs#L33 18:02 < bridge> @heinrich5991 you've been talking about a proxy/well split backwards compatibility layer for a while now, how feasible do you think that actually is? 18:03 < bridge> I have one for 0.5/0.6 18:03 < bridge> While working on the 0.7 bridge I encountered many places where I had a lot of trouble splitting off the compatibility stuff due to the sheer amount of information that is lost as you go down the stack 18:03 < bridge> ah, you mean 0.7 is sufficiently different? 18:04 < bridge> Yeah, especially the things that moved from snaps to netmsgs and vice versa 18:04 < bridge> you shouldnt compare 0.6 to 0.7 anyway 18:04 < bridge> 18:04 < bridge> u should compare whatever we have now with whatever is possible 18:04 < bridge> and then every single backward compability sucks 18:04 < bridge> you're talking about breaking backward compatibility old client → new server, right? 18:05 < bridge> or also new client → old server? 18:05 < bridge> A translation layer between `CServer` and `CGameContext` just didn't have enough information to construct the stuff necessary to feed a 0.7 client. I can't imagine it being any easier further down you go. I can't even think how to do it between `CServer` and `CNetwork` e.g. 18:05 < bridge> yeah why would we need this? 18:05 < bridge> 18:05 < bridge> even without adding new stuff to network we have so much useless branches to supports some features the client does not support 18:06 < bridge> these things specifically seem fine if the proxy can keep state 18:06 < bridge> I'd love to move to a new protocol and keep the backwards compatibility if it doesn't have to have this very invasive approach we currently have 18:07 < bridge> why btw, serious question, why? 18:07 < bridge> name me one game that does this stupidy 18:07 < bridge> compatibility with existing content 18:07 < bridge> nobody except you wants it 18:07 < bridge> I doubt you'd be satisfied if we named one ^^ 18:07 < bridge> This was the approach I was going with early on, but it just felt so wrong to double the state 18:07 < bridge> i also dont say break it every week 18:08 < bridge> we could break all clients older than ddnet 16 without any problem today 18:08 < bridge> and all vanilla clients 18:08 < bridge> then we can start to see what we can refactor with just that information already 18:09 < bridge> tbf you could do that with the proxy approach as well, but you also seem to be against that hypothetical approach 18:09 < bridge> Well, if it's not invasive it doesn't lead to ugly code and it means less drama. Let's be realistic we get a temper tantrum in here everytime we break a decade old version, do you think actually breaking compatibility we'll get people to follow us? They'll just use old versions and host their own 18:09 < bridge> @deen https://ddnet.tw/ down 18:10 < bridge> hm, probably broken by me or so 18:10 < bridge> see i understand what u mean 18:10 < bridge> but someone is always mad, 99% of the players wont care 18:10 < bridge> what we do is listen to the 1% 18:10 < bridge> Fixed 18:11 < bridge> Well not sure which one of us fixed, I assumed nginx didn't reload after renewing the certificate so I gave it a reload but someone else might have done something too 😄 18:12 < bridge> The 1% gets very mean, then I feel bad, then I don't sleep well 18:13 < bridge> the 1% dont even give bad steam review, bcs they clearly dont use the steam version xDDD 18:14 < bridge> Instead they voice their concerns in dms telling you that you are a sea slug for removing their favourite bug 18:16 < bridge> I turned of certificate verification on cloudflare 18:16 < bridge> for ddnet.tw 18:16 < bridge> that probably fixed it 18:16 < bridge> I turned off certificate verification on cloudflare 18:16 < bridge> "fixed" 18:17 < bridge> IOW someone™ should check why the certificate for ddnet.tw wasn't valid 18:17 < bridge> I swear to god certbot is the worst piece of software ever engineered. It's so horrible that I knew it was made in python before I ever checked 18:17 < bridge> 😄 18:17 < bridge> there's acme_tiny.py 18:17 < bridge> I use it 18:17 < bridge> it's really good (despite being python?) 18:17 < bridge> I put all my money on certbot being stuck on.... something 18:18 < bridge> I use acme.sh, mostly because that's the one I found first when looking for a certbot alternative 18:19 < bridge> https://github.com/diafygi/acme-tiny 18:20 < bridge> Ah this one doesn't generate the csrs for you, that's probably why I never bothered 18:22 < bridge> `exec openssl req -new -sha256 -key domain.key -subj "/" -addext "subjectAltName=DNS:heinr ich5991.de,DNS:www.heinrich5991.de,DNS:cd.heinrich5991.de,DNS:grafana.heinrich5991.de,DNS :hc.heinrich5991.de,DNS:kaiser.heinrich5991.de,DNS:teeworlds-friends.heinrich5991.de,DNS: yadam.heinrich5991.de" > domain.csr` 18:22 < bridge> `exec openssl req -new -sha256 -key domain.key -subj "/" -addext "subjectAltName=DNS:heinrich5991.de,DNS:www.heinrich5991.de,DNS:cd.heinrich5991.de,DNS:grafana.heinrich5991.de,DNS:hc.heinrich5991.de,DNS:kaiser.heinrich5991.de,DNS:teeworlds-friends.heinrich5991.de,DNS:yadam.heinrich5991.de" > domain.csr` 18:22 < bridge> It is good that it just does one thing and does it well. I approve 😄 18:22 < bridge> not rocket science :p 18:23 < bridge> Like just do one thing, is it really so hard? 18:43 < bridge> No need to check, just to know you have to use snap to install the current maintained version proves it's shit ad 18:43 < bridge> Af* 18:49 < bridge> I asked chatgpt to create a quadtree c++ template and it did it flawlessly 18:54 < bridge> There are lots of implementations of it out there, it shouldn't be that hard 😛 18:54 < bridge> might wanna check if it copied some implementation 18:54 < bridge> due to licensing 18:54 < bridge> there are different types of them, if you want one that automatically expands/shrinks itself it's a bit harder 😉 18:56 < bridge> I meant hard for the gpt model. It was probably trained on enough implementations of it 19:07 < bridge> yeah probably 20:03 < bridge> eyo where is `CNetObj_Character` defined? 20:03 < bridge> eyo where is the defenition of`CNetObj_Character` ? 20:03 < bridge> eyo where is the definition of`CNetObj_Character` ? 20:04 < bridge> protocol.h 20:04 < bridge> which is generated 20:04 < bridge> so idk where the original def comes from 20:04 < bridge> but for linkage purposes u want that 20:20 < bridge> kk 20:22 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1079846040653549668/RDT_20230227_2022228614773797975210496.jpg 20:23 < bridge> Gpt is just a function with a billion parameters 20:24 < bridge> lol 21:03 < bridge> <~Myata> Good evening everyone, can you explain what I need to do to remove these errors and successfully complete the compilation? 21:03 < bridge> <~Myata> https://cdn.discordapp.com/attachments/293493549758939136/1079856220556501072/image.png 21:03 < bridge> how did you download the ddnet source code? 21:04 < bridge> did you use the built-in method to clone a git repository? 21:07 < bridge> <~Myata> No, I just downloaded the repository from github 21:07 < bridge> <~Myata> https://github.com/DDNet/DDNet 21:09 < bridge> try this from step 20: https://forum.ddnet.org/viewtopic.php?t=5765 22:12 < bridge> <~Myata> ♥