Time Nick Message 00:45 rubenwardy bgstack15: you should provide aliases in the response to migrate author names 00:45 rubenwardy Of ContentDBProxy 00:45 rubenwardy I forget the exact syntax (search the cdb API response for alias) 00:46 rubenwardy But Luanti supports packages changing author name 00:46 rubenwardy So you could use this to allow moving from existing CDB installs to your proxy 01:44 bgstack15 rubenwardy: awesome idea. That was a breaking thing; if a user installs official mod author/ABC but then switchs luanti config to use the contentdbproxy, it does not recognize author~https___content.luanti.org/ABC as the same mod. It sounds like alias should do the trick, because I'm exploiting the author field. 01:50 bgstack15 Is there a good example mod I can examine in the api response? Unfortunately the /api/packages/?type=mod list doesn't seem to indicate anything about aliases anywhere. 01:51 MTDiscord if you did /api/packages you would see like 3 in a 1920 x 1080 screen 01:52 MTDiscord *2, requires a slight scroll. one on page load (with pretty print) 01:54 bgstack15 Ah, I had some crazy set of query params, probably from the client interactions, so I didn't have a bare /api/packages. Thanks! 03:21 bgstack15 Cool, thanks for the info! I was able to add the alias info, so it gracefully lets packages update. That was something I hadn't yet solved. It only took a few lines. 03:21 bgstack15 Surprisingly, codeberg is down, so I guess everybody'll have to wait. 03:34 [MatrxMT] > We've also made CloakV4 harder to detect by removing the custom version string. 03:35 [MatrxMT] This is not very nice. I know we never expected to actually be able to trust those, but, for goodness sake, don't do that, keep the skiddies out 10:16 [MatrxMT] what's cloakv4 10:17 [MatrxMT] do you want to take a guess with context clues? 11:01 [MatrxMT] something with scrapers? 11:01 [MatrxMT] it's a cheat client 11:01 erle cloakv4 is an alternative luanti client with improved CSMs, colloquially known as a “debug” or “cheat” client. such clients usually have improved rendering/GUI options, like tracers that point to targets of interest (other players or specific mobs) and vastly improved CSM APIs compared to vanilla luanti 11:02 erle contrary to the name, you can't cheat that much with it, except in PvP. and outside of anarchy servers, you definitely shouldn't. 11:02 [MatrxMT] yes, the cheating is in PvP, or cheating the usual rules of visibility and knowledge of game state 11:02 erle game state? 11:02 [MatrxMT] sounds interesting though 11:02 erle oh you probably mean fullbright 11:02 [MatrxMT] the literal point of Luanti's built in CSM API is that it can't automate player actions 11:02 erle yeah, that's the fundamental difference. 11:02 [MatrxMT] erle: fullbright, x-raying, et cetera 11:03 erle cora once made an amazing CSM that automated “put the node i have in hand on each node in range that has the same type” 11:03 erle which means if you want a castle or a tower you can just make the outline of the walls 11:03 erle and then hop around and press the key bound to that action multiple times 11:03 erle to make it go higher 11:03 [MatrxMT] the bridge is mangling those smart quotes. I love unicode! 11:04 erle doesn't allow you to cheat, 11:04 erle like you still need the materials 11:04 erle but if you know you want to build a tower 100 nodes high it will take only a minute or so instead of forever 11:05 erle Bracket most of the useful stuff is like that. i.e. not full-blown bot automation but rather binding a complex action to a single command. 11:05 [MatrxMT] I know you take a very loose interpretation on what constitutes it, so I won't argue the point, but, someone would definitely feel ripped off by cheat-client users that they had to go through something because they didn't have that client capability 11:05 erle which is why these clients announce themselves on connection to the server 11:05 erle so they are easily auto-bannable 11:06 [MatrxMT] *on what constitutes cheating, and your general view of emergent gameplay 11:06 erle at least last i checked 11:06 [MatrxMT] cloakv4 says in their github release that they do not, so, I pointed it out, and asked in their issue tracker that they consider doing so again 11:06 erle oh okay 11:07 [MatrxMT] predecessors like dragonfire have been polite about it 11:07 erle yeah, stuff like “fly/walk to these coordinates” or “angle my player character exactly that i am looking at a target” or “build a nether portal” is usually not part of the core gameplay loop i experience 11:08 erle or “output coordinates of all particle spawners so that you can see if your game has an info leak” 11:08 erle waspsaliva also has a thing where you can mark other players as friend or foe (IFF) and IIRC a private chat CSM that encrypts your chats so server owners can not spy on users 11:08 [MatrxMT] I do like the idea of some of these features as "debug" options, it tends to lend more credence than "yeah you use this to win at PvP" 11:09 erle the people who use this in PvP usually only fight others who use these things in PvP 11:09 erle because it's fucking boring to just win by default 11:09 erle it's like a battle in DragonBallZ 11:09 erle people flying around, fucking up the environment, landing hits 11:09 [MatrxMT] there's always some people out there who just wanna grief & gank 11:10 erle that is true, but these people are usually too stupid to do much. i once defeated one of them with a vanilla client modified to just move randomly. he got bored after like 20 minutes. 11:10 [MatrxMT] at least it should get boring quickly enough 11:10 erle defeated by a literal random walk ;) 11:11 erle i usually tell people on anarchy servers to only trust those who either gift you valuable items, without wanting anything in return or demonstrate knowledge of complex mechanisms like redstone or mesecons or technic 11:12 erle in any case, all the things that are used for griefing are super simple to do 11:12 erle like, anyone knowing the engine even a tiny bit could modify their own client to fly, noclip, xray, etc. easily 11:13 erle stuff like tracers and debugging features are the useful things 11:13 erle they serve as a counterweight to grinding features in games 11:13 [MatrxMT] hence I mentioned "& gank" in particular, since it's all about causing grief, and that gets done various ways 11:13 erle you can see this partially by the fact that the more grindier games are easier to beat using cheat clients 11:14 erle whereas e.g. nodecore … i think i never saw anyone use one there 11:14 erle nodecore is also virtually free of griefers 11:14 erle too unsatisfying of a game for a quick fix 11:14 erle players don't even die 11:15 erle and servers focused on technic or so … their users also don't profit much from modified clients 11:15 erle because the in-game automation already covers stuff like autocrafting 11:16 erle but e.g. mineclonia has a button “fill the crafting grid with all resources i have for this recipe that is in it”, authored by cora, i believe. i made the icon for it :) 11:16 [MatrxMT] not much beyond what you could provide with server mods and ordinary level CSMs, like waypoints or different ways of looking up information 11:16 erle and every single time i play a game that does not have that button i am EXTREMELY frustrated when i want to craft like a full stack of bamboo wood or compressed cobble or so 11:17 erle one reason why these clients can not be used to cheat much is also that the creators of cheat clients often fix the bugs 11:17 erle lizzy fixed entity speed IIRC 11:17 erle cora fixed a lot of stuff 11:18 erle like, you used to be able to access your echest from anyone. now there is a distance check. you can still try to access echest inventory … but if there is no echest nearby, sucks to be you. 11:18 erle this nerfs griefers a lot 11:18 erle previously they could die and literally pull out sword and armor out of their ass (echest inv) after respawning 11:18 erle now they can't 12:14 bgstack15 I was making a "mcl_colored_chests" mod, and found in the ender_chest code that distance check. 12:17 erle be aware that the distance check is subtly faulty 12:17 erle or may be 12:17 erle i think it is not exactly equivalent to the hand distance, but a tiny bit less 12:18 erle bgstack15 in any case, try accessing the chest you made if it uses that kind of code from below, it might be that you can open the inv but not interact with it because the cheat detection is triggered 12:19 erle also if you saw the xmas deco code, that was my doing :P 12:19 erle on 24th/25th/26th december all mineclonia chests become xmas present chests 12:24 repetitivestrain Blockhead256: there are plenty of legitimate applications for client side physics/interaction/graphics overrides 12:25 repetitivestrain mcl_localplayer (my CSM) exercises these to replace luanti's atrocious localplayer physics with a reproduction of minecraft's physics engine, and implement client-side item animations 12:25 repetitivestrain it does not facilitate cheating in any wise 12:26 [MatrxMT] ok well, that is the best vector available for delivering it, and any form of DRM to check otherwise would be a waste of effort 12:26 erle i am convinced though that the local physics thing can just be solved with a better traits system like OpenRA has 12:26 [MatrxMT] it still feels inappropriate compared to C++ 12:27 erle while openRA does have lua scripting, almost all unit/superweapon/building stuff is defined in declarative YAML 12:27 erle to make something work you combine traits 12:27 erle and make up state transitions that define traits, like in CSS 12:27 erle a submarine might have an invisibility trait when submerged and the state transition for submerging might be the “deploy” action 12:28 repetitivestrain erle: minecraft physics require a constant tick speed which cannot be supported without engine modifications 12:28 erle repetitivestrain which is why i think the engine should be modified 12:28 erle in combined arms (a game running on a modified openRA) engine they added more traits and then took advantage of it 12:28 repetitivestrain my luanti patches implement enough to permit csms to implement constant tick speeds in lua 12:28 erle repetitivestrain are you halon? 12:28 repetitivestrain yes 12:28 erle hi then 12:28 repetitivestrain hello 12:29 erle repetitivestrain about your mapgen thingy, i think you could sidestep a lot of “does it ruin singlenode worlds” discussions if your client (and/or luanti) would just make it easier to register/enable lua mapgens 12:30 erle did you think about making that an option in your client, given you have a custom client already? 13:46 luatic erle: i am convinced that trying to engineer some sort of traits system is not going to cut it 13:47 luatic it will always end up with more work, a more complex and messier API, and less capabilities. 13:47 luatic and really there is not much of a risk coming from running lua on the client if properly sandboxed. 13:47 erle lmao 13:48 luatic indeed i wouldn't be surprised if an overengineered "data-driven" system resulted in more vulnerabilities. simply because more C++ code = more potential for messing up. 13:48 erle luatic from my work experience a good traits system basically summarizes the domain. e.g. openRA CA has figured out the RTS domain. 13:48 luatic you can not "summarize" the (voxel) game engine domain without a turing complete programming language. 13:49 erle and while it is not always like that, the people advocating loudest for “let's just have lua or another scripting language” (at least in a work context) were people unable to model the domain at all without a concrete task, so they needed it as an escape hatch 13:49 erle i mean don't understand me wrong, OpenRA also has custom lua scripts for e.g. special maps 13:49 erle minigames and so on 13:49 erle but they mostly mastered their domain in declarative terms 13:50 luatic good for them. we can try to do that once we have the lua scripts. 13:50 erle i believe the domain can be mostly modeled in declarative terms but failure of things like dual wielding push people to CSMs 13:51 erle and also the fact that at least some devs are unable or unwilling to do abstractions they deem unnecessary or difficult 13:51 luatic dual wielding is a perfect example of bad, overly game-specific modeling that can be abstracted much better by SSCSM 13:52 luatic and even without SSCSM it's a very particular feature 13:52 luatic more general alternatives (at least for visuals) go in the direction of first-person attachments, HUD mesh elements 13:52 erle e.g. sending shaders to the client is always easier than encapsulating an effects API as long as you only support one graphics backend and a limited amount of GPU and don't intend to support anything the devs don't have 13:52 [MatrxMT] if your domain model is "all of the features minecraft has", "dual wield" begins to look like a good fit 13:52 erle i'd add roblox, but yeah 13:53 luatic sending shaders to the client is also a good example. because it's one of the things i thought was a good idea like half a decade ago and now i see that it isn't. 13:53 luatic (i had implemented it and the PR was rejected. in hindsight for the better.) 13:53 erle luatic the push to be as generic as possible is something that for me is an indicator for “i have not been able to model the domain and consider it either to difficult or not a task that is worth anyone's time” 13:53 luatic erle: wrong way around 13:53 erle oh yeah but then you understand why it seems like a good idea 13:53 erle the shader stuff i mean 13:54 luatic "i have modeled the domain and observed why SSCSM" is the better solution is what it is. 13:54 luatic move that quote 13:55 erle what 13:56 erle i don't get it 13:56 luatic you're free to check out github, plenty of discussions there, you'll see that we are modeling the domain 13:56 luatic and time and time again the conclusion is just: SSCSM would result in an easier, more flexible, more efficient API with less work for engine developers 13:56 [MatrxMT] what would make an antipattern of sending shaders to the client? 13:56 repetitivestrain erle: my mapgen is supposed to support unmodified luanti implementations too 13:56 luatic in other words: it is strictly better 13:56 erle > less work for engine developers 13:56 erle lol motivated reasoning 13:56 luatic Blockhead256: Among other reasons, we do not want to freeze our messy rendering pipeline at the current point in time. 13:56 erle “less work for API implementors so more work for everyone else” 13:57 repetitivestrain i'm sorry to be blunt but i think sending shaders to the client is a fool's errand because shaders are not portable and really do not admit of stable interfaces 13:57 erle luatic have you read “the seven turrets of babel”? 13:57 luatic yes, but it's been a while 13:57 erle then you must know there is always a cost to higher flexibility 13:57 erle namely that some problems become unsolvable 13:58 luatic yes poorly written SSCSM can halt your client. such is the nature of a game engine. 13:58 erle up until the point whereas every client has a halting problem for trivial tasks (e.g. web with javascript) 13:58 [MatrxMT] oh yes, right, "shaders" are actually quite specific to the pipeline, GL version and hardware targets that they exist within 13:58 luatic (though, given that they'll be on a different thread, we could even cope somewhat i believe.) 13:58 erle shaders are also the mechanical instantiation of an intent 13:58 repetitivestrain e.g. ask yourself how many modders will understand what MSAA is and in what circumstances to qualify values centroid 13:59 erle most often you care about the intent, not about the implementation 13:59 luatic anyways the assertion that SSCSM would somehow be "less work for API implementors so more work for everyone else" is pretty far from the truth in general 13:59 luatic i'm very optimistic that in plenty of cases it'll be a win-win 14:00 [MatrxMT] erle: just curious, do you disable a lot of javascript in your browser? 14:00 repetitivestrain i cannot speak for erle but i do 14:00 repetitivestrain i have noscript installed with the default whitelist disabled 14:01 erle Blockhead256 i do in fact disable js by default and only enable what i need to make the site function. and e.g. for stuff like youtube that usually translates to “one higher resolution step of the video can be decoded without the image lagging” on multiple machines. 14:01 repetitivestrain erle: i think you shouldn't hold exaggerated expectations as regards the scope of my luanti branch 14:01 erle like you get 480 instead of 360 or whatever they call their resolutions 14:01 [MatrxMT] may we live long enough to see Luanti-noscript users complaining about too many client scripts :P 14:01 erle repetitivestrain you do work on tasks that are vast and do impressive stuff. i thought “make a hook to register a custom mapgen so it can be selected at world config” would be within that scope. it's not that i expect you to do it, i just think it kinda fits. 14:02 repetitivestrain since i intend to restrict departures from upstream to the minimum required for my mineclonia features to function well 14:02 repetitivestrain erle: if i had boundless time to dedicate to maintaining my branch i would probably have implemented such facilities already 14:03 erle Blockhead256 i think it will pretty much happen immediately, judging from mineclone2 development. like, there was once a bug that was simply sending like 60+ packages per second when the player was on fire. my bug report about it was retitled to “post your computer's specs”. meanwhile, cora was able to set people on fire multiple times and managed to cause 2MB traffic per second or so just from that shitty implementation. 14:03 repetitivestrain but i need periodically merging upstream to be a feasible chore 14:03 erle you can see this with luanti engine development as well: inefficient code is often excused as “works on my machine” 14:04 erle and sometimes you get stuff that you can't sidestep, like halons mapgen that needs a computer more powerful than most machines i have seen that run mineclonia have – because it is a full-featured mapgen in lua. imagine such a feature that is useful, but not optional, as part of a game. it is not a question *if* it will happen. 14:04 [MatrxMT] 16 Mbit? ouch, right in the badinternets 14:05 erle also in mineclone2 there was the ghost inventory bug 14:05 erle nodes could be destroyed but the inv would stay 14:05 erle safe to say this made game laggier for people with worse internet/hardware 14:05 erle also it allowed easy duping because the items would still spill out hehe 14:06 erle with the right CSM even in vanilla minetest you could pluck the items out of thin air when a base got griefed hehehehehe 14:08 repetitivestrain i think a very compelling argument against expecting lua to manage absolutely every aspect of gameplay can be found in the voxelmanip API 14:09 repetitivestrain which at the present requires multiple 12 mb arrays to be allocated in addition to the VoxelManip's contents itself to be manipulated efficiently from lua 14:09 repetitivestrain (one array for param2 data and one array for cid data) 14:09 erle i think a very compelling meta-argument is that for most use-cases where people want SSCSM it is trivial to adjust the engine (were it not for the “but we want it to be general” argument) 14:10 erle repetitivestrain yeah but then again most APIs are designed for ease of implementation and not really for ease of use in the first place. like, the png encoding API shape is atrocious. and while i disagree with how zughy goes about a lot of things, having e.g. get_sky and set_sky be assymetric is an API smell. 14:11 erle or take the picture-in-item meta thing. for stuff like bows or compasses it would make sense to e.g. be able to change the pic without the item switch animation or to even map different states of an item to different textures. but that is harder to implement and while multiple users of such an API want this, no implementor did. 14:11 repetitivestrain this VoxelManip issue in particular is a limitation imposed by lua as a language 14:12 erle care to elaborate? 14:13 repetitivestrain All lua values are numbers, which are 8 byte doubles, and it is not possible to expose native memory (e.g. a voxelmanip's mapnode array) directly to PUC Lua programs 14:14 repetitivestrain and C module function calls are damnably slow in LuaJIT--they interrupt the jit trace recorder--and consequently efficient lua programs must avoid nearly all engine APIs altogether 14:15 repetitivestrain take my map generator, for example 14:16 repetitivestrain it doesn't remotely approach the performance of an equivalent in C, but it is roughly half as performant on a single thread as minecraft's java level generator, and one of the reasons it can attain such performance is that it dilligently avoids invoking code which cannot be compiled by the jit compiler or which may produce unnecessary allocations and so forth 14:18 repetitivestrain and this inherent divorcing of the lua domain from the C++ domain is one of the factors preventing lua scripts from running optimally 14:19 erle repetitivestrain i think i know that kind of thing very well. i profile my shell scripts using strace. 14:20 erle and most of the time, shell scripts are slow because people have overhead of subshells, which means overhead of process creation. 14:20 repetitivestrain yes, with luajit the bottlenecks are operations which the compiler cannot compile, and after that, garbage collection, and loops with unpredictable control flow 14:21 repetitivestrain "yes, the analogy is accurate," i meant to say 14:21 erle meanwhile, i have outperformed C programs using shell scripts for some specialized tasks because the C stuff was just badly written (and i am not going to repair C code if i can get better performance with a shell script) 14:21 erle lua garbage collection goes fucking weirdo when it hits a memory limit btw 14:22 erle cora once made a fire implementation for mineclonia that improved on the previous one but used node timers 14:22 repetitivestrain LuaJIT's garbage collector is completely unfit for a real-time video game 14:22 repetitivestrain hence programmers really ought to cut down on operations that allocate vectors 14:23 erle since fire copies itself, memory usage goes skywards. and that is how i found out that the garbage collector can go in a weird death loop if you fuck up your mod programming to the extent that a node (fire) is a memory leak 14:23 erle cora's solution was to have probabilistic fire, so no new timers are created 14:23 repetitivestrain all >50ms globalsteps on my server are either produced by ABM execution or by outstanding garbage collection operations triggered by vector operations and object moveresult allocations, during which operations which access tables or arrays become one order of magnitude slower 14:24 erle btw, i do think “make it possible to register a custom lua mapgen” is a worthwhile goal for vanilla luanti. maybe luatic can weigh in on that. 14:24 erle like, if it's the kind of feature that would be accepted 14:25 repetitivestrain what i would truly appreciate would be the ability for a game to implement its own New World dialog 14:25 erle because IIRC there are quite a number of “install this mod and enable singlenode” mapgens 14:25 repetitivestrain or at the minimum to specify its own mapgen flags 14:25 erle i'd appreciate the latter, not the former 14:25 repetitivestrain https://minecraft.wiki/images/CreateNewWorld_World_1.21.6.png 14:25 erle (this is consistent with the “intent, not implementation” thing) 14:26 repetitivestrain because my world generator implements every single one of the flags in this dialog, but enabling them requires that the server administrator manually edit map_meta.txt or minetest.conf before the world is created 14:28 erle repetitivestrain unfortunately, shortly after i made a mod that was able to change the main menu path, that capability got taken away forever on “security” grounds. this also exposed the folly of naming flags with “secure” in the name, hehe. 14:28 repetitivestrain that's lamentable 14:28 erle (all my mod did was add a CSM menu) 14:29 repetitivestrain furthermore it would be nice to permit games to override the algorithm that hashes seeds specified as strings 14:29 erle yeah, but i understand it. what i don't understand is why you can't have “menu” mods at all. like a mod that is just a main menu. after all, it's a general game engine, right? ;)))) 14:29 erle repetitivestrain btw what i don't get about your mod storage use. if the mapgen is deterministic, can missing values not be recalculated? 14:29 erle or are you building the world bottom-up instead of top-down and can't do it because of that? 14:30 repetitivestrain erle: in the case of biomes, it's because biome generation is not efficient enough to be repeated whenever a biome is required, and what is more, changes to the biome table mustn't affect biomes in existing chunks 14:30 erle (top down: recursively going from biggest to smallest feature. bottom-up: starting with the smallest unit, then working up. bottom-up is harder to extend.) 14:31 erle screw efficiency, i mean could it be done theoretically? 14:31 repetitivestrain biomes, yes, but not the other uses 14:31 erle because “yeah cool mapgen but map downloads do not allow me at all to explore the world” is a bit of a let-down 14:31 erle and why not the other uses? 14:31 repetitivestrain the "generated" flag cannot be reconstructed because it depends on whether the post-processing system has already processed a chunk 14:31 erle i used to use map downloads to generate a world on a server using the exposed seed and mapgen and then find a good place for shenanigans 14:31 repetitivestrain which cannot be determined from its contents 14:32 repetitivestrain a MapBlock, actually, in fact 14:32 erle well you could set a secret node meta on every node that has been generated 14:32 erle or only on one corner one 14:32 erle or a public one, who knows 14:32 erle would actually be interesting 14:32 repetitivestrain the issue is that node metadata is somewhat storage-intensive and liable to be overwritten 14:33 erle “show me all nodes that have been modified since this has been generated” 14:33 erle i guess i am about as useful as hacker news comments :P 14:33 repetitivestrain i have in fact requested https://github.com/luanti-org/luanti/issues/16125 14:33 [MatrxMT] if you want to mess up map download users, lie about the seed, or better yet, change the noiseparams seeds to troll them 14:33 repetitivestrain on several occasions, but reading the thread, it appears that the tide of core developer opinion has now turned against the proposal 14:34 erle Blockhead256 i am pretty sure repetitivestrain is the opposite of a person who wants to mess up things 14:34 repetitivestrain Yeah, i would prefer that offline map downloads functioned correctly 14:34 repetitivestrain > IIRC, back then the whole world storage had to be loaded as a whole into memory (because it was just a file with json), but now we use an sqlite db. So, nowadays, using worldstorage instead has no real issues. 14:35 repetitivestrain erle: you might cite this as an argument in favor of mapblock-specific metadata 14:35 repetitivestrain at least so long as such metadata is delivered to clients 14:36 erle repetitivestrain my opinion matters very little on it, but yes. mapblock-specific metadata could be interesting, although i'd probably see how far i can get with node specific metadata until it craps out. 14:37 FeXoR "erle: i usually tell people on anarchy servers to only trust those who either gift you valuable items, without wanting anything in return or demonstrate knowledge of complex mechanisms like redstone or mesecons or technic" Lets tell a story: "Here, have some lava boots" *climbs up to a cube of lava mysteriously not spilling over the recipient's base, starts to throw eggs at them* "Hey, stop throwing eggs at me!" *moves to the offender 14:37 FeXoR and with their newly acquired lava boots replace the illumination nodes holding the lava in place and after a few seconds their base is flooded with lava* 14:37 erle repetitivestrain btw no matter how many holes i punch into your proposals, i am a big fan of having such goals and trying to achieve stuff. i'll probably not be able to see the mapgen any time soon for lack of a beefy machine, but what you did to mobs is exquisite. 14:37 FeXoR So, yea, also knowledgable players can be vicious :p 14:37 repetitivestrain erle: thanks for the scintillating feedback :-) 14:38 erle repetitivestrain well sometimes people think that engaging with their stuff and pointing out what sucks means i'm a hater. 14:38 erle but that's just what i do when i care about it working 14:38 repetitivestrain i appreciate well-informed criticism haha 14:39 erle FeXoR the shenanigans that experienced players get up to are often funnier though 14:39 erle FeXoR like, uh, i could make a redstone bomber easily on oysterity. i am pretty sure there are people who would be impressed if i made a bomber fleet just to raze their base. 14:39 repetitivestrain it is only those who fly into a rage and accuse me of profiteering from microsoft's divinely ordained intellectual property that i can't abide 14:40 repetitivestrain erle: biome data (which in the optimal case only consumes two bytes, a biome id and a repetition count of 64 quart positions) is already cached in the origin node of each mapblock, but node metadata is erased whenever a block is altered by the player or by core.set_node and so forth 14:40 repetitivestrain and it cannot be reliably restored after it is so erased 14:40 erle i see 14:40 erle FeXoR i once saw a griefer name a lot of pillagers and lure them to someone's respawn point 14:41 erle so someone got killed over and over and had to fight them with bare hands 14:41 erle shit was hilarious 14:41 erle (named mobs don't despawn IIRC) 14:41 repetitivestrain correct, they don't 14:41 erle well i guess you may have implemented that :P 14:41 erle in any case you are an expert on the topic 14:41 repetitivestrain i think this is the case even in Mobs Redo 14:42 repetitivestrain in all fairness 14:42 repetitivestrain also, https://github.com/luanti-org/luanti/issues/16229 would obviate the need for non-biome mapblock metadata to begin with 14:42 erle i see 14:43 repetitivestrain but before anyone actually contributes a serious effort to implementing such a facility, i invite such prospective contributors to consider the requirements my map generator would actually place on it 14:44 erle repetitivestrain what is the part of the mapgen that does make it infeasible to implement it on weaker machines like old thinkpads or MNT reform btw? 14:44 erle i mean minecraft used to work on such things a long time ago 14:44 erle now it has higher requirements than a bunch of 3D shooters lol 14:44 repetitivestrain erle: LuaJIT itself is generally not as efficient as Java or C/C++ 14:44 erle that's all? so there is no big chunk that can be taken away or made optional to support weaker machines? 14:45 repetitivestrain i hate to disappoint, but nope 14:45 repetitivestrain lots of information must also be duplicated across each mapgen environment 14:45 repetitivestrain as unlike java, lua does not support shared-memory concurrency 14:45 erle and there is zero chance that any future mapgen API could replicate that stuff in terms of a declarative mapgen that comes close to what you want to do? 14:46 erle so lua would only need to touch it up 14:46 repetitivestrain nearly nil, but minecraft's mapgen api (which mine implements) is 100% declarative anyway as far as terrain is concerned 14:47 repetitivestrain and if the core developers are willing to incorporate it into luanti proper i already have a largely complete version implemented in C 14:47 repetitivestrain as a standalone library 14:47 repetitivestrain but that's a castle in the air lol 14:49 repetitivestrain ... requirements my map generator would actually place on it ... 14:50 repetitivestrain namely, it must be possible for one stage to access metadata attached to mapblocks generated by preceding stages 14:50 erle repetitivestrain i would bet money on “this is not a minecraft clone engine, it is a generic engine” and your chances of your contribution being accepted close to the survival chances of an ice cube in hell 14:51 repetitivestrain erle: yeah 14:51 repetitivestrain but i will recapitulate the structure of a dimension preset (which generates terrain) 14:51 erle in fact, a bunch of proposals i consider sensible are not considered sensible by people arguing from “make it generic” POV 14:52 erle and i am pretty sure if these people were OpenRA devs, it would have a lot more custom lua 14:52 erle because sometimes it has traits that are used only by very few things and nowhere else 14:53 repetitivestrain a dimension preset is just a series of parameters, a list of noises which are made unique by keywords and are defined as octaves and amplitudes, a terrain density function, a biome table, and a surface rule 14:53 erle like, i am pretty sure that the attack mode of tesla coils and obelisks is such a thing. it first charges up and then fires, which (almost?) no other weapon does. 14:53 erle and you can move out of range during the charging up IIRC and then it powers down harmlessly 14:54 repetitivestrain a density function is a function which can sample a noise or perform various logical or arithmetic operations on the results of other density functions 14:54 erle like most stuff in OpenRA is hitscan weapons (almost all guns) or projectiles (mostly artillery, rockets, but also flamethrowers) 14:54 repetitivestrain at a given position 14:55 erle also i am pretty sure that the “ctrl + deploy” movement thing is a trait they added to the engine only to support jumping mechs and teleporting tanks (again, two very special cases, with different animations) 14:55 erle or was it force move? 14:55 erle i guess it was force move 14:55 erle downgrade it to “reasonably sure” in that case 14:55 erle :P 14:56 repetitivestrain their operations include selecting the minimum of two values, applying a value to a spline, deriving a depth value which increases as the y level decreases, selecting between two values contingent on whether or not a third value lies within a specified range, and so forth 14:57 repetitivestrain the terrain generates a solid block (stone) at a position if the density function yields a value greater than 0, and air if otherwise 14:57 erle repetitivestrain if you ever have too much time i'd love to have you criticize some lua code of mine, since you seem to have ideas about performance 14:58 repetitivestrain i would recommend running your code under "luajit -jv" (or "luajit -jdump=+birxmT" if you understand luajit's IR and assembler) 14:58 repetitivestrain and profiling it with "-jp=v" 14:59 repetitivestrain then strive to eliminate all issues reported by "-jv" preventing your code from reaching 98% compiled 14:59 erle i don't understand that (yet?) but thank you 15:00 repetitivestrain and profile your code with "-jp=2fv" to establish what code spends the most time in garbage collection 15:00 erle my speedups so far were mostly related to not creating an excessive amount of strings 15:00 repetitivestrain and attempting to minimize the number of allocations incurred 15:00 erle thanks 15:00 repetitivestrain ah, i have thankfully not been required to interact with strings in developing my map generator 15:01 MTDiscord erle: have you read the Lua performance tips? 15:01 erle yes 15:01 erle this is how i got the string thing 15:01 repetitivestrain https://web.archive.org/web/*/http://wiki.luajit.org/Numerical-Computing-Performance-Guide 15:01 repetitivestrain is very important 15:01 repetitivestrain https://codeberg.org/mineclonia/mineclonia/src/commit/mineclonia_mapgen/mods/MAPGEN/mcl_levelgen/API.txt#L2088 15:01 repetitivestrain i also have a number of recommendations here 15:02 MTDiscord erle: well it also has more allocation related things. eg if you have a table of vectors, transpose that and make it 3 XYZ tables. 15:02 repetitivestrain ... minecraft-style overworld terrain is generated from two fundamental functions which are combined by simple addition 15:03 repetitivestrain the first is an offset and the second is the depth 15:03 MTDiscord re vmanip earlier, in theory LuaJIT FFI could help, no? 15:03 repetitivestrain luatic: yes, but that's not portable to PUC Lua 15:03 MTDiscord I know 15:04 MTDiscord but it should be possible to make it portable by having a poly fill for puc 15:04 repetitivestrain although i doubt performance matters on PUC Lua since my lua mapgen, which theoretically supports puc lua, is nearly 100x slower and completely unusable on such configurations 15:04 MTDiscord that too 15:05 repetitivestrain ... depth increases in proportion as the y position being sampled approaches sea level, and the offset is derived from three noises which are applied to splines to produce the offset 15:06 repetitivestrain (three 2d noises) 15:06 repetitivestrain these two values are subsequently summed so that the offset effectively decides the surface height of the terrain at a given column 15:07 repetitivestrain and a jaggedness value with very low persistence is added to create more variance in the height of the terrain 15:08 repetitivestrain then, if above the surface, the result is multiplied by a factor value which is derived from another series of splines and which defines the brokenness of the terrain and combined with a 3d noise to create overhangs 15:09 repetitivestrain and if below the surface, cave and pillar noises are integrated into the density value 15:11 repetitivestrain a surface system is a list of conditions and control flow operators which define a function that specifies blocks to substitute for stone after terrain has been generated from density function values 15:11 repetitivestrain https://codeberg.org/mineclonia/mineclonia/src/commit/mineclonia_mapgen/mods/MAPGEN/mcl_levelgen/surface_system.lua 15:11 repetitivestrain https://codeberg.org/mineclonia/mineclonia/src/commit/mineclonia_mapgen/mods/MAPGEN/mcl_levelgen/surface_presets.lua#L61 15:11 repetitivestrain see here for an example of the rules that apply in the Overworld 15:13 repetitivestrain and a biome table is a spatial index where each of the noises that contribute to the terrain's offset and brokenness are axes in a hyperspace, and biomes are assigned to hypercubes within this hyperspace, the nearest of which to a point sampled from the noises at a position yields the biome at that position 15:13 repetitivestrain https://codeberg.org/mineclonia/mineclonia/src/commit/mineclonia_mapgen/mods/MAPGEN/mcl_levelgen/biomes.lua#L637 15:13 repetitivestrain here is where the overworld's biome table is defined 15:14 repetitivestrain https://codeberg.org/mineclonia/mineclonia/src/commit/mineclonia_mapgen/mods/MAPGEN/mcl_levelgen/biomes.lua#L169 15:14 repetitivestrain and the spatial index itself is something akin to an r-tree that is not modified at run-time 15:15 repetitivestrain there is no reason this could not serve as the engine's declarative mapgen api 15:16 repetitivestrain and it is infinitely superior in practice to the built-in map generators 15:18 repetitivestrain regarding which i could cite a litany of complaints off the cuff, such as non-determinism, overgeneration, invalid heightmap data, biomes being evaluated at each mapchunk's terrain height rather than at actual y transitions, and carvers (randomwalk cave generators) which overwrite the contents of mapblocks that have already been generated 15:20 repetitivestrain luatic: btw, can i ask whatever became of the proposal to implement proper perlin noise in the engine 15:54 [MatrxMT] I think we just renamed "Perlin" to "fractal" and never got to the "make actual Perlin" part 15:54 [MatrxMT] https://github.com/luanti-org/luanti/pull/15858 15:54 [MatrxMT] mind you, we had to wait for the patent to lapse as well 15:55 [MatrxMT] sorry, I think that was simplex that actually got patented 15:59 MTDiscord I kind of understand that. Math can be absolutely horrific to implement. :( 16:32 luatic repetitivestrain: #15877 is apparently in adoption needed status.. i've not been very involved with that despite knowing it exists, sorry. 16:32 ShadowBot https://github.com/luanti-org/luanti/issues/15877 -- Add Perlin and Simplex noise by kno10 16:32 luatic s/despite/besides perhaps 16:43 luatic btw erle re physics: a lot of game physics can be done fairly declaratively (see popular physics engines). but trying to mix that in with our current hardcoded weird physics is a recipe for disaster. 16:43 luatic it probably needs to be a distinct system people can opt into and use instead of our current physics. 16:43 [MatrxMT] I don't want to defend default physics too much but.. 16:44 [MatrxMT] I really enjoy holding space and easily jumping uphill 16:44 [MatrxMT] also, Steve is way too heavy compared to Sam once you're used to Sam 16:44 luatic Steve is obese 16:45 [MatrxMT] I don't think he can even walk over 1m gaps 16:46 erle luatic i actually think that most stuff should be opt-in so to not break existing usage 16:54 luatic erle: a system extending the existing one need not break usage 16:55 luatic but real physics is so far apart from luanti physics that i don't think it can easily be safely extended without breaking things 17:02 MTDiscord There is always the option of using a bunnch of #defines. 17:03 MTDiscord That way, it can be broken only if the developer want to break things. 17:16 jonadab Actual real-world physics is not a desirable goal. Excessive focus on realism is the enemy of fun gameplay. 17:16 MTDiscord Not necessarily. 17:17 [MatrxMT] yes, but considering the history with "features" like Sneak-glitching, well.. what we have often lives much to be desired 17:17 jonadab I'm not saying you can't ever make anything realistic at all in any way. Just that there's always a limit to how far it's worth taking it. 17:17 MTDiscord For instance, I would love to see a long-range artillery mod with a range of 10s of kilometers (kilonodes). The math to do this isn't that difficult, but it's hard to get the motivation to do server-side stuff. 17:17 [MatrxMT] s/lives/leaves 17:18 MTDiscord Maybe I will actually do that someday. 17:18 [MatrxMT] you only have 60 km of distance to work with, so no ICBMs 17:18 MTDiscord I was thinking of stuff like mortars and howitzers. 17:18 jonadab You want to implement a voxel-based version of Scorched Earth? 17:19 MTDiscord Something more than just point-blank range like most weapons tend to be in video games... 17:19 MTDiscord Not necessarily just scorched earth. 17:19 MTDiscord I just want to see more long-range combat in games. 17:20 [MatrxMT] would be nice if that could work with farmesh + binoculars for spotting that can see in more detail 17:20 jonadab I mean, in a sense, some games (e.g., NetHack) have unlimited-range combat. Scroll of genocide counts, right? 17:21 [MatrxMT] > Confused effect: You genocide your own role, causing instadeath. 17:21 [MatrxMT] lol 17:24 erle > considering the history with "features" like Sneak-glitching 17:24 erle it's an ascended glitch 17:24 erle like bunnyhopping, plasmasliding, rocketjumping 17:27 jonadab @Blockhead256 : NetHack has a ton of those sorts of funny gotchas. 17:28 erle btw two things that are relatively easily implementable in the engine but are often mentioned as an argument for CSMs are entity path prediction and the red flash you get even when fall damage is canceled 17:29 jonadab The best argument for CSMs isn't any specific thing you can think of, it's the things you _haven't_ thought of. 17:29 jonadab That's true for mods in general, actually. 17:30 erle yet, strangely, i have never seen an engine patch that addressed the path thing (e.g. by saving a movement path or just future waypoints in the entity meta if you want to KISS) or something that makes zero fall damage result in not having a flash (which is trivial) 17:30 erle jonadab which gets back to the domain thing 17:31 erle if you say “i need turing complete input so i can do things i have never thought of” means you think it is not a worthwhile endeavour to map the domain to discrete concepts you can express declaratively 17:31 erle doesn't matter if that is because this is an inherent property of the domain or lack of skill 17:32 erle although for domains that have been “solved” you can pretty much see when it's a lack of skill 17:34 erle e.g. people failing to do things with not-turing-complete languages that are, in principle, achievable. many (but not all) animations in browsers can be done in a declarative way (using CSS animations/transitions or SMIL) but people use JS for it simply because of a lack of skill. 17:35 luatic erle: i love your examples because they completely obliterate your point 17:36 erle wdym? 17:36 luatic for example, you want an entity moving on a predefined path? you could do that today with the model features 17:36 luatic you could even send such models to the client dynamically 17:37 erle i have written both js and non-js animations and i am pretty sure almost everyone i have seen who does js animations would be unable to make a declarative solution if their life depended on it 17:37 luatic bone overrides (interpolatable) also 17:37 luatic point being, model file formats have offered declarative solutions here 17:37 luatic only problem is its inaccessible and hard to dynamize properly 17:38 erle wdym dynamize 17:38 luatic actually the dynamize point may be wrong 17:38 luatic somewhat at least, hmm.. depending on if you want to use attachments or bake the model in 17:38 luatic erle: i mean being able to change the path at runtime 17:39 luatic anyways representing "the red flash you get even when fall damage is canceled" as an "often mentioned argument for SSCSM" is a misrepresentation 17:39 luatic the entity paths get closer, but still doesn't cut it 17:39 luatic one thing which is really often mentioned: player physics 17:40 luatic well, the more precise term is controls 17:40 luatic contrary to your assertions, you can not do that well with a declarative server centric api. not if you want to give game devs freedom. 17:40 luatic client logic must react in the blink of an eye to client inputs 17:41 luatic and trying to somehow map every possible reasonable "player control function" in a declarative api will just result in bloatware which nobody knows how to utilize or maintain properly 17:42 erle luatic i don't understand how you think that agreeing with me that two things (paths and no red flashes) can be done without CSMs applies to something else entirely 17:45 luatic i'm saying your examples show you're focusing on the wrong things. these are not the major points in favor of SSCSM. and these are things which in principle limited other solutions exist for. 17:45 luatic let me give some other examples in no particular order: 17:46 erle i think you are misunderstanding the point i am making 17:46 erle what i am saying is that these are weak points AND the people arguing them have not made an effort to remedy it using server-side mitigations AFAIK 17:46 luatic yes, that i can agree with 17:47 erle which does help in mapping the domain 17:47 luatic but this is not representative of the average SSCSM supporter, i would hope 17:47 erle e.g. your zeroing in on control schemes. celeron55 has also brought the example of an airplane. i would give you the example of elytra flight in mineclonia. 17:47 luatic another example 17:47 luatic particles. this is something i thought about recently. someone was asking for more particle spawner features. for the time being, the solution i suggested and implemented is to make add_particle more efficient (less network traffic) by batching and compressing. 17:48 luatic (they want particular shapes and things for fireworks) 17:48 luatic but it would be preferrable if they could just tell the client "spawn a heart firework" and the client had the logic to do that 17:49 erle ultimately the “fireworks” thing leads to “i want a particle definition that is associated to a state”, so you need a binding to a state and a particle position/effect DSL 17:49 luatic of course it is possible to always extend the particle spawner api, and that has been done a few times, but at some point it just becomes too much of a bottleneck 17:49 luatic erle: you'll pretty soon arrive at a solution that essentially boils down to "i need to send a list of particles" and that sucks a bit i think 17:49 luatic like take this example. say i want an exploding heart. i need at least positions, possibly velocities. 17:50 luatic someone else might want to do an exploding image using particles. they need textures (colors) on top. 17:50 luatic batching with compression is actually a half decent solution, because all the redundant properties can be optimized out pretty well by the compression, with little effort 17:51 luatic anyways i gotta work on something else 17:53 erle luatic do you know this library call irrlicht? it has a function to emit particles from the vertices of a mesh 17:54 erle i mean batching with compression is also a good first approximation for a lot of stuff 17:55 erle (you have to choose your compression right ofc to get the most bang for your buck) 17:55 erle but it's not like no one has ever made a usable fireworks API 17:57 erle i interpret “at some point it just becomes too much of a bottleneck” as “i am not maintaining that shit” and IMO that means you have come upon a fundamental social issue: when APIs are implemented/maintained by people who have no “skin in the game”, no “stake”, you get tension. 17:58 erle one solution to avoid that is having subsystem maintainers who are personally invested, but i have a guess that this is not a thing ever 17:58 erle (in luanti) 18:31 luatic "not a thing ever" is patently untrue 21:13 bgstack15 repetitivestrain: I think your CSM somehow hides the player indicator on a crafted map, in-game. When I use the mainline Luanti client, I can see my little indicator on a map where I am. When I use the mineclonia client with CSM, I don't see that indicator. 21:14 bgstack15 Would you like me to file an issue against your mcl_localplayer repo about this?