Time Nick Message 00:00 Gustavo6046 I think MCl5 doesn't have an IRC bridge, soo https://git.minetest.land/MineClone5/MineClone5/issues/213 00:03 erlehmann umbrella issues are a bad idea from a project management POV, but what do i know 00:03 erlehmann Gustavo6046 can you make hopperdupe more reliable please? 00:04 Gustavo6046 hopperdupe? 00:04 erlehmann its so much work 00:05 erlehmann yeah, when the hopper dupes your items randomly 00:05 Gustavo6046 erlehmann, yeah it's generally better to have each change as its own thread or issue, but they're a cluster of small changes that probably don't need a lot of individual attention so I figured this was fine 00:05 erlehmann i think you are downplaying your contributions 00:05 Gustavo6046 larger changes will have their own issues and PRs 00:05 Gustavo6046 plus, it's an excuse to use markdown tables :D 00:05 erlehmann but ok 00:05 Gustavo6046 as for hopper dupes, I'm unaware of those 00:05 erlehmann lol markdown 00:05 erlehmann oh 00:05 erlehmann well 00:05 Gustavo6046 i mean tables in general 00:06 erlehmann ok so about hopperdupe, just get a stack of hoppers 00:06 erlehmann build a tower 00:06 erlehmann then dig them again 00:06 erlehmann then do it again and again 00:06 erlehmann at some point you will have 1 hopper more than before 00:06 Gustavo6046 o.o 00:06 erlehmann implying a dupe 00:06 Gustavo6046 that is bad 00:06 erlehmann yes, it should be triggered more reliably 00:07 Gustavo6046 no! 00:07 Gustavo6046 I think it's a hopper node sucks in a hopper item 00:07 Gustavo6046 but one that is already being picked up 00:07 erlehmann oh you are fast lol 00:07 erlehmann yes that's it 00:07 erlehmann i have to do precise movements 00:07 Gustavo6046 is there a grace time between an item being picked up (and counting to inventory) and despawning in which a hopper can suck it in? 00:07 erlehmann to get the dupe 00:07 erlehmann but the towering thing works fine 00:07 Gustavo6046 I will make it reliable... reliably impossible :D 00:07 erlehmann but people will hate you for it! 00:08 erlehmann :P 00:08 Gustavo6046 I take it! xD 00:08 erlehmann ok well i give you one more info 00:08 Gustavo6046 thanks erleh for shining that insight on me! 00:08 Gustavo6046 oh 00:08 erlehmann someone broke it in mineclone5 00:08 erlehmann or mineclone2 00:08 erlehmann but hopperdupe is not in mcla i think 00:08 Gustavo6046 hmm 00:08 erlehmann that should narrow it down 00:08 Gustavo6046 you want me to merge them to keep the codebases "in sync"? 00:08 Gustavo6046 I was thinking to figure a way to detect if any given item entity was "taken" 00:09 erlehmann no, i want you to figure out how to dupe more stuff lol 00:09 erlehmann dw i'll make a really mean antidupe too 00:09 erlehmann i figured out that anvilduped nodes have an easy to detect corrupted value in their meta 00:10 Gustavo6046 ah ha! 00:10 Gustavo6046 item_entity.collected 00:10 Gustavo6046 nvm 00:10 Gustavo6046 that's for orbs 00:10 erlehmann please, if you ask who has told you the dupe 00:10 erlehmann claim it was the player ASKI 00:11 erlehmann i have a grudge 00:11 erlehmann he asked me how to cheat 00:11 erlehmann :P 00:11 erlehmann and was like “if you do not tell me how to cheat, i shoot your friend with arrows of harming” 00:11 erlehmann ok so 00:11 Gustavo6046 huh 00:11 erlehmann it's a little kid 00:11 Gustavo6046 _removed is set to true in the collection subroutien in ENTITIES/mcl_item_entity/init.lua 00:11 erlehmann my revenge was, i mentioned it earlier 00:12 erlehmann making holes in the bedrock roof on kay27 server 00:12 Gustavo6046 lol 00:12 erlehmann and putting signs there implying ASKI had made the holes 00:12 Gustavo6046 ahaha 00:12 Gustavo6046 nice 00:12 erlehmann oh and one hole has a waterfall 00:12 Gustavo6046 that's a way to exact your revenge 00:12 erlehmann yes i hope ppl go on ASKIs nerve about how to break bedrock 00:13 erlehmann i might actually have broken the most amount of bedrock among the mcl* game servers lol 00:13 erlehmann not sure 00:13 erlehmann if you find a big hole in the roof on kays mcl5 server at zerozero, say hi from me ^^ 00:13 erlehmann after i made it, i actually patched it up again 00:13 erlehmann and hid a lot of tnt there 00:14 erlehmann and put a button somewhere 00:14 erlehmann i stood nearby when someone wondered what the button did 00:14 erlehmann it blew up the roof of course! 00:14 Pexin this is why keep all your items in backpacks 00:15 Gustavo6046 hehehe 00:16 erlehmann keep all your bedrock in your pocket 00:16 erlehmann Gustavo6046 so about hopperdupe 00:16 erlehmann can you reliably trigger it? 00:17 erlehmann mmhhh 00:17 Gustavo6046 I haven't tried 00:17 erlehmann i think only one of the three anvil dupes is unfixed 00:17 erlehmann might need a new dupe 00:17 Gustavo6046 is it the stacking one? 00:17 Gustavo6046 ...are you suggesting me to sneakily introduce a bug? 00:17 erlehmann hey, copying books is an intended game mechanic 00:18 erlehmann i mean books stack 00:18 Gustavo6046 one so cryptic and invisible in the code that it'll never be actually fixed 00:18 erlehmann so i have a stack of 25 books 00:18 Gustavo6046 hmmm 00:18 Gustavo6046 I think I'll apss 00:18 Gustavo6046 pass 00:18 Gustavo6046 erlehmann, ah 00:18 erlehmann and then i put an enchanted book in the second slot 00:18 erlehmann and then i have 25 enchanted books 00:18 erlehmann pretty simple lol 00:18 Gustavo6046 right 00:18 erlehmann get your MAX LEVEL enchantments while you still can 00:18 erlehmann wuzzy claimsed it was a mistake lol 00:18 erlehmann :P 00:18 Gustavo6046 lol 00:18 Gustavo6046 I can't 00:19 erlehmann you can't ENCHANT? 00:19 Gustavo6046 I can! 00:19 erlehmann nice 00:19 Gustavo6046 Just don't have enough book cases for the max level stuff yet 00:19 erlehmann just dupe some books 00:20 erlehmann using some other dupe 00:20 erlehmann e.g. hopperdupe 00:20 Gustavo6046 I think I'll pass 00:20 erlehmann funniest dupes are the sawing table dupes actually 00:21 erlehmann like cut wood into tiny pieces, but everyone of them has the same burntime as the input itemstack and stuff like that 00:23 kabou Gustavo6046 I made a composter, but I have a problem getting it to work with hoppers 00:24 erlehmann https://github.com/minetest-mods/moreblocks/pull/173 00:24 Gustavo6046 kabou, that might be the case if a composter does not have an inventory internally. 00:24 Gustavo6046 I'll look into that later 00:24 erlehmann ha, kabou i told you it should have one! 00:24 kabou well, brewing stands do not interact with hoppers either afaics 00:24 kabou composters have an additional issue 00:25 erlehmann look, banners have an inventory too 00:25 kabou they only accept items that are compostable 00:25 erlehmann yeah what's the issue with that 00:25 erlehmann the items do not go into the inventory 00:25 erlehmann oh wait 00:25 erlehmann you need TWO inventories 00:25 erlehmann one input, one output 00:25 kabou how to get hoppers to only push items that are compostable into composters? 00:25 erlehmann new container type? 00:26 erlehmann also where is group compostable 00:26 erlehmann that contains the chance 00:26 erlehmann wouldn't that be cool 00:26 erlehmann i mean stuff is flammable too 00:27 kabou erlehmann you're probably correct 00:27 erlehmann nice 00:27 Gustavo6046 do you need to do get_luaentity() on an item entity in order to get item-specific fields? 00:27 erlehmann refactoring incoming 00:27 kabou so GROUPS.md needs updating 00:27 Gustavo6046 like fields defined in the item's code 00:27 erlehmann kabou, make items have a group compostable, then make a container type that can not contain specific things, like shulkers. a hopeer will not put a shulker into a shulker (anymore). 00:28 Gustavo6046 erlehmann, does the hopper stack dupe work in mcl5? 00:28 erlehmann i hope that helps 00:29 kabou that means updating all items to have a group compostable value and updating mcl_hoppers to know about it 00:29 erlehmann Gustavo6046 i told you it is hard to trigger 00:29 erlehmann Gustavo6046 i am pretty sure it works, have you tried? 00:29 Gustavo6046 erlehmann, no I didn't try, I'm saying ebecause there seems to be code that would make it impossible for hoppers to suck in items already collected by the player 00:29 Gustavo6046 the collection code sets _removed=true on an item entity 00:29 erlehmann well i guess it's a race then 00:29 Gustavo6046 and the hopper code checks if it's set 00:29 Gustavo6046 a race condition? 00:29 erlehmann yes 00:29 erlehmann or was it changed recently? 00:29 Gustavo6046 well, turns out hoppers set the itemstring to "" 00:29 Gustavo6046 and the collection code ALSO checks for that 00:29 Gustavo6046 collection by player that is 00:30 Gustavo6046 but alright, I'll set _removed to true in hopper code too 00:30 erlehmann 1 item 2 hoppers lol 00:30 erlehmann no no no 00:30 erlehmann you need to recreate 00:30 erlehmann check that it works first 00:30 erlehmann do not take my word for it 00:30 erlehmann i have been wrong before! 00:32 Gustavo6046 well, in either case the fact _removed isn't set to true when a hopper collects an item is still concerning 00:32 erlehmann please check first 00:32 Gustavo6046 because in the future, a commit might unwarily trigger a regression which reintroduces the hopper dupe! 00:32 Gustavo6046 so I'll do it either way 00:32 erlehmann before you steal all the items 00:32 erlehmann NOOOO you should test 00:32 erlehmann it was a mistake to ask you to improve the feature 00:33 erlehmann i will never ask you to make a dupe better again! 00:33 erlehmann oh hmm 00:33 erlehmann maybe one 00:33 erlehmann can you improve firedupe? 00:33 Gustavo6046 what in the... 00:33 Gustavo6046 oh is this game broken 00:33 Gustavo6046 I don't want it to be broken anymore 00:33 kabou Gustavo6046 https://minecraft.fandom.com/wiki/Hopper#Container_interactions 00:33 erlehmann you probably didn't even know waterdupe 00:33 erlehmann the best dupe i knew only needed cobble and wood lol 00:34 kabou consider those when refactoring/improving hoppers 00:34 erlehmann hoppers, or shall we call them “dupers” 00:34 Gustavo6046 kabou, well, the current state of the code has it so that sideways hoppers only put items into containers beside them 00:34 Gustavo6046 I think 00:34 Gustavo6046 yeah 00:35 kabou I'm about to fall asleep 00:35 Gustavo6046 aw 00:35 kabou hope to to speak you guys soon again 00:36 Gustavo6046 see you kabou! 00:37 Gustavo6046 erlehmann, it seems from the chest code that double chests have two separate invs, top_inv and bottom_inv 00:37 kabou Gustavo6046 check out https://git.minetest.land/Mineclonia/Mineclonia/pulls/281 if you want to help me think about how to get composters to work with hoppers 00:37 kabou good night everyone! 00:37 Gustavo6046 kabou, erlehmann gave some good ideas, I just think they need investigation 00:37 Gustavo6046 see you! :) 00:37 Gustavo6046 hey, that's Mineclonia, not MCl5 00:38 kabou oh I have a PR for mineclone2 as well 00:38 Gustavo6046 uh, I think mcl2 is kinda dead 00:38 kabou kay27 already merged the PR for mineclone5 00:38 Gustavo6046 I prefer mcl5's development style 00:38 Gustavo6046 ah 00:38 Gustavo6046 neat! 00:39 kabou updates are here: https://git.minetest.land/kabou/MineClone5/src/branch/composters 00:40 kabou anyway, i'm falling over rn 00:40 kabou bye! 00:40 Gustavo6046 aw 00:40 Gustavo6046 cya! 00:40 Gustavo6046 sleep well! 00:40 kabou nice alking to you 00:40 Gustavo6046 same! ^^ 00:40 kabou talking 00:43 erlehmann I prefer mcl5's development style 00:43 erlehmann well 00:43 erlehmann kay27 merged kabous hoppers immediately 00:43 erlehmann whereas mcl2 and mcla wait until the submitter is actually finished with the feature lol 00:54 Gustavo6046 well, he could have added WIP: to the title 00:54 Gustavo6046 I did with my changes till I felt like they were good enough 01:00 erlehmann Gustavo6046 i think you misunderstand 01:00 erlehmann https://git.minetest.land/MineClone5/MineClone5/pulls/210 01:00 erlehmann > WIP: mcl_composters initial commit #210 01:00 ShadowBot https://github.com/minetest/minetest/issues/210 -- Cannot connect to local (stand alone) server "failed to emerge player" 01:01 erlehmann thanks for nothing, shadowbot 01:01 erlehmann Gustavo6046 since you like kay27 development style of moving fast and merging half-finished stuff, i bet you have no issue with this behavior 01:01 erlehmann :P 01:01 erlehmann i am jokings of course 01:09 onehittoaster For the past 25 years I have developed software using hand-crafted, (no autoconf bullshit) makefiles. Today I tried premake (based on lua). I am seriously considering adopting premake. 01:17 erlehmann onehittoaster try redo 01:18 erlehmann onehittoaster http://news.dieweltistgarnichtso.net/bin/redo-sh.html (thank me later) 01:21 onehittoaster um, no. bash is fine for shell scripts; I'm not going to use it for a complex build-system with lots of transitive build steps. 01:21 erlehmann i think you are mistaken 01:22 erlehmann onehittoaster first, this has nothing to do with bash 01:22 erlehmann you can, in fact, write your dofiles in lua 01:22 erlehmann if you so desire 01:23 erlehmann second, premake seems to have similar failure modes as cmake. 01:23 erlehmann basically, every build system that claims to generate a complete dependency graph before the build is lying to you 01:23 erlehmann bc it is impossible for the general case 01:24 erlehmann well, forget about it 01:24 onehittoaster If I were only ever going to target Linux, I owuld just use a makefile like I always have. However, for my next project, I want to retain the ability to build for windows and mac (someday). cmake looks like a pita to learn. premake seemed more elegant. 01:24 onehittoaster erlehmann: be thankful that you've never had to use bazel / blaze. :) 01:24 onehittoaster I would assume anyway. 01:26 erlehmann look, there are a bunch of tools that are faster, more reliable, easier to learn and easier to write build scripts for than make or cmake 01:27 erlehmann that i managed in about 400 lines of shell is just because of portability. some people write their build system in go and that makes go a build-dependency of all of their projects. 01:27 erlehmann which i consider impractical to a ridiculous extent 01:28 erlehmann onehittoaster i have a question, do you program in C or C++? 01:30 erlehmann onehittoaster if so, please tell me if premake can solve the problem outlined in this blog post: https://web.archive.org/web/20170326021857/http://news.dieweltistgarnichtso.net/posts/redo-gcc-automatic-dependencies.html 01:30 onehittoaster Mostly C++. I've not writen straight-up C in a long time. I wrote an OS kernel in C about 15 years ago. You could boot it with grub, but I never finished it. 01:31 Gustavo6046 I don't like C++ 01:31 onehittoaster erlehmann: I have no idea if premake can handle that, but I suspect not. However, the problem described in that article is not important to me at this time. 01:32 erlehmann why not? 01:32 erlehmann if your build system does not handle this case, all incremental builds may be wrong 01:33 erlehmann ever recompiled minetest after you changed something in the source and it was for some reason not in the binary until you made a clean rebuild? 01:33 erlehmann this type of thing 01:33 onehittoaster Nope. I just nuke it and rebuild from scratch. "-j32" and wait about 1 minute. 01:34 onehittoaster There are only two things that I use that take a long time to build, and I don't recompile them often: firefox and tensorflow. 01:35 erlehmann i have only 2 processors, not 32 01:35 onehittoaster ah. 01:35 erlehmann which is why i am upset with build systems that give wrong output (make, cmake) or are slow (like ninja) 01:35 onehittoaster I only recently acquired 32. For many years my daily-driver was a core i5 (2.8 GHz, 4 cores) from 2010. 01:36 onehittoaster How often do you update your libc/libstdc++ while concurrently building other projects though? 01:36 erlehmann rarely, but you probably miss the biggest impact 01:36 erlehmann target files depend on build rules 01:37 erlehmann if you change the build rules, a target needs to be rebuilt, right? 01:37 erlehmann (if you disagree here, i'd like to know why) 01:38 onehittoaster I have a personal project that has a dependency like that. But it only takes 6 minutes to build on my old box, and less than 1 on my new box, so "make clean" was fine for me. I understand that your concern is not one for me. 01:38 onehittoaster I don't disagree. I admit that this is a failing of make. 01:38 erlehmann well, if *all* builds you make are clean builds, then you do not have this kind of problem 01:38 erlehmann it is weird though, i usually only see this when ppl to embedded software 01:39 onehittoaster I've sometimes moved special build rules into a shell script, and make that shell script a dependency of the build rule, so that touching the script triggered a rebuild of the other files. 01:39 erlehmann cursed 01:39 onehittoaster but this was mostly about packing assets into a tar file that was then encoded into a .o and statically linked into a binary. 01:39 erlehmann my entire website is built with redo hehe 01:40 erlehmann i have written a tar packing implementation for it to have it build in a reproducible manner 01:40 onehittoaster the binary would use libarchive to extract files from the embedded tar file on the fly (was a built-in http server in a larger C++ program, and the tar file contained the static assets) 01:40 onehittoaster the thing that is annoying me about premake is that I see no easy way to have it emit custom "make TARGET" targets, like "make test". 01:41 onehittoaster If I were to create the makefile directly, that is trivial. "make test", "make lint", "make clang-format", "make run", etc.... 01:41 onehittoaster they just execute shell commands. 01:41 onehittoaster and sometimes check dependencies first. 01:42 onehittoaster premake doesn't seem to have a mechanism to jam stuff like that into the ephemeral makefiles that it creates when I run "premake5 gmake". 01:42 onehittoaster meh. 01:42 erlehmann as i said, you can write your dofiles in lua 01:42 erlehmann wait, doesn't windows have sh nowadays? 01:42 erlehmann my friend has sh i bet 01:43 erlehmann because git 01:43 erlehmann git is half c half shell scripts half black magic 01:43 erlehmann that makes 150% cursed software 01:43 onehittoaster no idea. I've not ran windows on bare metal in 7 years. All of the PCs at my home run Linux (Gentoo or Ubuntu) 01:45 onehittoaster I have NT4, W2k, XP and W7 in QEMU images if I need them, but I've not fired those up in years either. 01:45 onehittoaster I've never even seen a live windows 10 system. ever. I once saw windows 8 and got ill form it. 01:45 onehittoaster from 01:48 Gustavo6046 what is your goal with using gentoo? 02:00 MTDiscord a samurai has no goal, only a path 02:12 onehittoaster Goal with Gentoo? IDK. My first distro was slackware (1? kernel was 1.3.20). I tried redhat but hated it. In 2004 someone introduced me to gentoo and I just kinda started using it. 02:16 erlehmann https://github.com/minetest/minetest/compare/master...erlehmann:fix-localtime-2?expand=1 02:43 jingkaimori Are there any tile modifier to overlay a texture onto another with position movement like this? 02:50 jingkaimori https://i.bmp.ovh/imgs/2022/02/30e6ab1593e93880.png 03:01 MTDiscord Probably use combine 03:32 jingkaimori how can I retrieve CGUITTFont from client device? 07:46 sfan5 g_fontengine->getFont(), you can then do a dynamic_cast<> to CGUITTFont* 07:47 sfan5 generally this is only needed if you need a feature that is exclusive to it, IGUIFont contains basic font rendering 12:58 erle_web i have used callgrind to figure out where the media loading is spending its time. the answer seems to be: if the cache is full, >97% of the time is SHA1. 12:59 erle_web which makes sense, as after the hashing you compare and skip the rest. 13:00 MTDiscord Seems like it would make sense to use murmurhash or something instead, if that time is concerning. How much do we expect adversarial input here, and how bad are the negative consequences, anyway? SHA1 is sort of not secure enough if it is a concern, and not fast enough if it isn't. 13:01 erle_web the time is not concerning 13:01 erle_web there simply is not much optimization potential 13:02 erle_web Warr1024 i have planned to make an adversarial SHA1 example anyway hahaha 13:03 erle_web to figure out what the engine does if i give it two things with the same hash 13:04 MTDiscord how good is murmurhash compared to xxhash in terms of speed and uniqueness? 13:06 erle_web please don't change the hash function on a whim. you'll invalidate everyone's cache. and who says the other hashes are practically faster? the bottleneck might simply be reading in the bytes! 13:07 erle_web > MMH-3 function belongs not to the class of strong cryptography 13:08 erle_web https://stackoverflow.com/questions/5216736/hashing-murmurhash 13:08 erle_web > I used Murmur hash to hash around 800 000 string values, and this cause many conflicts (collision), that around 17 collision (different strings give the same hash value), is this normal, any one know the quality of murmur hash function 13:08 erle_web lol 13:08 MTDiscord Oh my god, people could lose their CACHE! 13:08 MTDiscord You're right, that would be horrible. 13:08 erle_web indeed. i am very smart! :P 13:09 MTDiscord me who has .cache in ramdisk: oh no! anyways... 13:10 erle_web Warr1024 did you ever experiment with texture atlases? 13:10 MTDiscord murmurhash is an actual hash function, not a cryptographic message digest. Obviously it shouldn't be used for cryptographic purposes, or anywhere that you expect adversarial input. 13:10 MTDiscord I haven't messed much with atlases 13:10 MTDiscord do you mean like using [sheet? 13:10 MTDiscord or like an internal engine thing? 13:11 erle_web yeah sprite sheets 13:11 MTDiscord Heh, sublayer plank, I also keep my MT cache (along with many others) on tmpfs :-) 13:11 erle_web minetest is full of adversarial inputs tthough 13:12 erle_web i am better than all of you (except kilbith), because i kept a whole minetest installation in tmpfs! 13:12 erle_web but then the power ran out, so i may not do it again lol 13:12 MTDiscord I was a bit interested in sheets at one point, but there were a lot of maintainability drawbacks to using them, and I don't see much benefit. 13:13 erle_web well, if you have a shit ton of textures and they are rarely changet it *might* help. but i am not interested as long as it is not automatable. 13:13 MTDiscord I don't see the point in keeping all of MT in tmpfs because I won't want to routinely clean out most of it... 13:13 erle_web oh it was just some compilation experiment 13:13 erle_web i wanted to ditch it eventually 13:14 erle_web i mean i am already too dumb to get a proper crack graphic for a node that has a texture wrapped around itself 13:14 erle_web the crack overlay overlays the entire texture and not the face that is mined 13:14 MTDiscord I actually copy MT src into tmpfs to compile it, then copy the bin back to disk. I don't feel like having to clean up obj files and crap :-/ 13:14 erle_web which is unfortunate 13:14 erle_web any idea? 13:14 erle_web nice 13:15 MTDiscord I think using [sheet and making each face a separate UV might be the sanest way to do what you're talking about 13:15 MTDiscord In general I optimize the way I handle textures for maintainability first, i.e. I prefer to keep textures in a format optimal for me to work on, not necessarily for network transfer, caching, or rendering 13:16 MTDiscord besides, texture atlases only really benefit caching and network xfer, if MT just chops them up in memory anyway. 13:16 MTDiscord far as I know you can't have context-specific crack textures either, so making a pre-wrappped version of that probably won't work either. 13:17 MTDiscord Really in the grand scheme of things, games and mods should by default use simple and compact textures, i.e. 16px only, and higher-res stuff should really be just for texturepacks. Correspondingly of course we need better texture pack compositing support so they actually work with the way people use mods :-| 13:19 erle_web well in my case the wraparound was for maintainability 13:19 erle_web the mineclonia christmas chests 13:24 MTDiscord You can still maintain the texture file as a wraparound, e.g. if you want to make it easier to edit the texture. I think you just use [sheet or whatever to chop it up. Then of course your UV map needs to use multiple materials to attach each one, which kinda sucks, esp if you've already got it setup the other way... 13:25 erle_web here https://git.minetest.land/Mineclonia/Mineclonia/pulls/212/files 13:25 erle_web these are the textures 13:25 erle_web i should probably use |sheet then 13:25 erle_web [sheet 13:26 erle_web btw, the idea to overlay some noise made the textures much nicer looking 13:27 erle_web and easier to edit 13:27 erle_web looks like this in-game btw: https://git.minetest.land/attachments/5c8a8412-6ae1-41dd-83ab-0e6f3773cd10 13:28 erle_web i did not expect it to *do* anything, but it lead to people spamming chests and snow around christmas hahah 13:31 erle_web kachegrind seems pretty cool 13:34 erle_web btw, callgrind also tells me that the most thing minetest does during mod loading is executing lua code 13:34 erle_web who would have thought! 13:34 erle_web :D 13:36 MTDiscord what a shocker, it executed lua code during mod loading? I would have never known! 13:38 erle_web what i mean is: optimizing lua code is probably going to help more than obsessing about spritesheets 13:39 erle_web try it yourself! http://kcachegrind.sourceforge.net/html/Usage.html 13:41 erle_web brb recompiling minetest with debug info 13:46 MTDiscord I don't suppose there's a way to get a combined view of C++ and Lua calls, is there? Like, to find out where time is being spent between the 2 of them. 13:48 erle_web i have no idea how, but you can see the exposed functions 13:49 erle_web this is pretty cool 13:50 erle_web yeah so i am looking at a callgrind run of minetest executing devtest now. 13:50 erle_web 1fps during it lol 13:51 erle_web according to this, mapgen is much more expensive than everything else 14:01 erle_web Warr1024 this is the view i have right now https://mister-muffin.de/p/diWU.png 16:57 erlehmann i think i may indeed be able to speed up media loading with a full cache 16:57 erlehmann without changing the server 16:57 erlehmann i'll have to investigate 16:59 erlehmann nope, forget it 17:02 erlehmann oh, i have something actually 17:25 erlehmann a blast from the past https://web.archive.org/web/20111012063056/http://test.mine.bz/blog 17:32 onehittoaster Challange: Code a minetest-like game that runs decently on a 486 dx2 @66 MHz, using VGA at 320x200 256-color mode. It can run using a dos-extender or on an ancient version of Linux. 17:32 erlehmann > The main design philosophy is to keep it technically simple, stable and portable. It will be kept lightweight enough to run on fairly old hardware. It runs playably on a laptop with Intel 945GM graphics. 17:32 onehittoaster doesn't have to be fancy, does not require networking. 17:32 erlehmann https://web.archive.org/web/20111010002614/http://test.mine.bz/ 17:32 erlehmann and indeed, i have a laptop with intel 945GM graphics 17:33 erlehmann celeron55 is keeping promises hehehe 17:35 rubenwardy c55 estimates be like "a day" 17:35 erlehmann ; lspci |grep VGA 17:35 erlehmann 00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03) 17:36 erlehmann i have exactly the target hardware. coincidence? :D 17:36 celeron55 erlehmann: nice find, the archived blog 17:37 celeron55 the server that holds that blog is sitting on a chair next to me, one day i'll re-publish it in some way 17:38 celeron55 erlehmann: "fairly old hardware" is a moving target, though 17:38 erlehmann celeron55 with mobile and stuff like reform it's not really 17:39 erlehmann if minetest had blown up to want like 16G RAM minimum it would not run on phones 17:40 erlehmann celeron55 i only found it because on github, my minetest repo still had the url in the description as a link and i was like “oh?” 17:40 erlehmann celeron55 i have used callgrind on minetest. is it true that 75% of mapgen time is light calculation? 17:41 erlehmann or am i reading the output wrong 17:41 erlehmann i thought, after the localtime() stuff i should probably investigate to figure out the structure of minetest 17:41 erlehmann to get free fps in the process 17:41 erlehmann ideally 17:42 erlehmann i mean, i bet the structure of most programms is while true { if poll() || poll() then poll() } or something; 17:42 rubenwardy 16GB is by no means fairly old hardware 17:43 erlehmann “old” is less important than “affordable” 17:43 v-rob light calculations are pretty bad 17:46 celeron55 light calculations are a recursive system going into 4 bit depth in 3d space 17:46 celeron55 it's naturally expensive 17:48 v-rob It would be worse with colored lighting 17:49 erlehmann celeron55 given that on the GM945 the realtime shadows from the irrlicht demo code work fine, why should they not be used? (i guess there is a reason, bc they are relatively simple to setup) 17:49 v-rob I mean, we should probably be glad light calculations aren't slower than they are 17:50 erlehmann (they also look better than the shadows i get on a thinkpad x390 with shadows feature) 17:50 v-rob Probably because they aren't voxel-based 17:51 Hawk777 I suppose one point is that lighting actually matters for non-visual reasons (e.g. mob spawning, at least I assume some mob mods care about light levels), so the server also needs to know light levels, and the server might not have a GPU at all. 17:52 erlehmann wait, you misunderstand me 17:52 erlehmann i mean why aren't they used. for purely visual reasons. 17:53 Hawk777 Well, if lighting matters for game logic reasons, isn’t it better that what you see and what impacts gameplay are the same thing? 17:53 erlehmann you can look at irrlicht demo 08 for that. smooth, nice shadows, minimum of gpu or cpu activity. 17:53 Hawk777 Rather than “hey it looks really dark over here, but actually nothing can spawn here because according to the server’s lighting model it’s illuminated”? 17:53 celeron55 erlehmann: you are talking about attempting to integrate fixed pipeline shadows with specially generated lighting. nobody wants to do that, nobody understands the black magic to do that (if it's possible), and nobody wants to understand it 17:54 erlehmann Hawk777 minetest recently gained a shadows feature that is different from map light calculation and is purely visual. 17:54 celeron55 erlehmann: shaders have been the way to do stuff in games for about 20 years now 17:54 celeron55 erlehmann: you seriously have to learn and do it yourself if you want it 17:54 Hawk777 Oh. Well I’ll just step out then; I admit I haven’t had time to play in a good few months now. 17:54 celeron55 erlehmann: the will and knowhow to make it does not exist 17:55 erlehmann ok! 17:55 v-rob Just about everything in Irrlicht is doing stuff in a way that's about 20 years old now. 17:55 celeron55 (and i don't know if it's possible at all) 17:55 erlehmann v-rob that doesn't mean it's bad though, if it is performant. but i guess if it's hard to use … 17:56 erlehmann the thing is, on the beefiest machine i know (thinkpad x390), the shader shadows look still noticeably blocky 17:56 v-rob I don't think we use Irrlicht properly enough to even use half of Irrlicht's features. Especially now that hecks removed the half that we can't use anyway :) 17:56 erlehmann s/know/have/ 17:57 erlehmann yeah, like the unit tests lol 17:58 erlehmann i'm pretty sure hecks was more about “is this in use” than “could this ever be used” with at least some of the stuff, but i don't think it matters in the long run. 17:59 v-rob In theory, all of Irrlicht will be removed at some point. 17:59 * v-rob waves hand towards the far, far future 17:59 erlehmann doesn't matter if you then can figure out what *approach* is good 18:00 erlehmann bc you can copy that over to whatever you are using then 18:00 v-rob At the very least, I know the Irrlicht GUI will burn when I get there. Bwa ha ha ha! 18:00 v-rob It deserves it. 18:00 erlehmann i agree. 18:00 erlehmann though i wonder, did you ever contribute to irrlicht upstream? 18:00 v-rob Nope 18:01 erlehmann i mean it is still in active development, the dev just rarely makes releases because they are work 18:01 rubenwardy I looked into it, but it's svn and sourceforge. So big nope 18:01 erlehmann haha what 18:01 rubenwardy depends on your definition of active 18:01 erlehmann i mean i even use github just for minetest, although it's probably not as bad as sourceforge 18:01 erlehmann active as in, not dead lol 18:02 v-rob Irrlicht reminds me of Slackware. Slackware had a release just a few weeks ago, but the previous release was in 2016. And both Irrlicht and Slackware are both ancient. 18:03 jonadab I guess my standards for "ancient" are somewhat warped by my exposure to the NetHack community. 18:04 erlehmann celeron55 i am learning and doing stuff myself. i'll have one test ballon per topic to see if anyone is even interested. i have the devtest nodes that no one wants for “is improving devtest wanted” (current assumption: probably not, i'll have to put it on contentdb), the localtime() thing will be for “are performance fixes wanted”, if i ever get to rendering, i'll consider the shadow stuff. you are correct, i 18:04 erlehmann have to learn it myself! 18:04 v-rob Well, if I'm ever developing 3D stuff for Windows 95, I'll look into Irrlicht. 18:04 erlehmann i mean, not no one. i got one approval! 20:00 Gustavo6046 hello! :o 20:05 definitelya_ 0/ 20:14 Gustavo6046 :D 20:15 erlehmann Gustavo6046 so about the load times 20:15 erlehmann 97% of the time is sha1() 20:16 Gustavo6046 o.o 20:16 MTDiscord oh so it is a large contributing factor to long loading times? I thought you said it wasn't... 20:17 Gustavo6046 oh my 20:17 erlehmann look 20:17 Gustavo6046 we need a better sha1 algorithm 20:17 erlehmann the reason is because first you compare the hashes 20:17 erlehmann and then you skip EVERYTHING else 20:17 Gustavo6046 or use the hashes more cleverly 20:17 erlehmann if your hash matches 20:17 Gustavo6046 or both 20:17 erlehmann i know a solution 20:17 Gustavo6046 or we could use a heuristic 20:18 Gustavo6046 like a micro-mash, that's just 6 bits long or something, that we use to divide into "buckets" 20:18 erlehmann look i have created a build system, i am pretty much an expert in freshness calculation 20:18 erlehmann oh my stop 20:18 Gustavo6046 :( 20:18 Gustavo6046 is my idea bad? 20:18 Gustavo6046 but ye apologies, go ahead 20:19 erlehmann remember the hashes 20:19 erlehmann maybe they are recalculated too often 20:19 erlehmann i wlll check that right now 20:22 MTDiscord what if we switched to a faster non-cryptographic hashing algorithm? 20:22 erlehmann then i will make sure you have collisions 20:23 erlehmann (before someone else does) 20:23 erlehmann look, as far as i can see, the hashes are content-addressing here 20:23 erlehmann so that means you really don't want collisions 20:25 erlehmann i think i found the problem 20:25 erlehmann if i am correct, a *lot* of stuff is hashed when not necessary. if i am incorrect, shame on me. 20:28 erlehmann subplayer plank Gustavo6046 have you looked at how the client checks the hashes? 20:28 erlehmann start with IClientMediaDownloader::tryLoadFromCache 20:28 erlehmann it's kinda obvious where it goes wrong 20:29 Gustavo6046 not yet 20:29 Gustavo6046 and C++ tends to be a pain to work with 20:29 Gustavo6046 compared to, say, plain C, or even Rust 20:29 Gustavo6046 uh what is that "even" doing there 20:30 Pexin don't make me throw perl at you 20:30 Pexin because I won't. it scares me. 20:30 erlehmann look, i am pretty sure you can make IClientMediaDownloader::checkAndLoad a tiny bit smarter 20:34 Gustavo6046 Pexin, right, good point, reading Perl is much worse than C++ xD 20:34 Gustavo6046 erlehmann, yes! I can try 20:35 erlehmann Gustavo6046 ok so first order of business, make it always load cached media without hashing. that's the upper bound. you can't get faster than that. figure out if it speeds up loading the game, if it does not, you do not need to optimize the function. 20:36 erlehmann only once you have figured out if optimizing this function would *actually* speed up the loading you have enough grounds to make it smarter 20:37 erlehmann i believe you can just comment out the parts that hash and check the content 20:37 erlehmann and then build it 20:37 erlehmann Gustavo6046, will you do that? my builds take forever, since cmake sucks 20:37 erlehmann also i am building some other PR right now 20:37 Gustavo6046 I'll try 20:37 Gustavo6046 yeah building is so sloooow 20:37 Gustavo6046 I might have to rely on CI 20:39 Kazeta Hi 20:39 Gustavo6046 Hello! o/ 20:40 Kazeta Any good mods for minetest? 20:40 erlehmann Kazeta be a bit more specific 20:40 erlehmann i can list a bunch of bad mods if you want 20:40 erlehmann i even made some myself! 20:40 Gustavo6046 Absolutely! Start by looking into Technic. Also, keep in mind you don't have to play the default game, Minetest Game, which is more like a demonstration anyways; you can try a more familiar experience with MineClone 5 or Mineclonia, or something completely new with something like NodeCore. 20:41 rubenwardy Kazeta: https://content.minetest.net/ 20:41 erlehmann or repixture! 20:41 Kazeta OK 20:41 rubenwardy See Top Mods, and Highest Reviewed 20:43 Gustavo6046 I feel like some of the reviews aren't very thought out 22:27 MTDiscord erlehmann: Is it perhaps verifying cache integrity by rehashing the cached files? 22:38 erlehmann luatic it is rehashing the files on every load as i see it 22:39 erlehmann the correct implementation would be to cache that hash and only recalculate it when the last-modified date changed 22:40 erlehmann i bet some fun-haters will have lobotomized their file systems and will soon tell me that their file system says every file was created shortly after the moon landing 23:08 Pexin erlehmann: the SPIRIT of the file has Always been part of us. 23:40 RhineDevil^ Gustavo6046: I know it sets a worrying precedent, but I honestly, seriously, non-sarcastically don't know what kind of dystopian future would come from this. 23:40 RhineDevil^ I wholeheartedly agree 23:40 Gustavo6046 I think capitalism is a much bigger, much more all-encompassing reality than data privacy violation, and one we've thoroughly failed to get rid of for centuries already. 23:41 Gustavo6046 The world is depresing, honestly. 23:41 Gustavo6046 I guess that means I am healthy and sane-minded. 23:41 RhineDevil Gustavo6046: My idea about the whole thing is more specific 23:41 RhineDevil I think human nature is both egoistic and collectivist 23:41 Gustavo6046 It's hard to be specific with the whole complexity of society. 23:42 RhineDevil And I think capitalism as we know it is based only on one side of it 23:42 Gustavo6046 I don't think human nature is inherently egoistic, but rather only as a result of the existence of currency. 23:42 RhineDevil Nah it is, but it is also capable of collective thinking 23:42 Gustavo6046 Trying to appeal to egoism and exploit it to encourage collectivism, through financial incentives to collectivist behaviour, is only going to fall short. 23:42 Gustavo6046 Because that turns the collectivist behaviour into the means to an end, rather than the ends themselves. 23:43 Gustavo6046 This psychological phenomenon is well studied, and is also (in part) why school sucks. 23:43 RhineDevil I never talked about financial incentives 23:43 RhineDevil My idea is way bigger 23:43 Gustavo6046 I know, but the idea is generalizable. 23:43 Gustavo6046 That's a tangible example for argument and explanation's sake.; 23:43 RhineDevil Nah depends 23:43 RhineDevil I think the whole idea stands in creating a positive feedback 23:44 RhineDevil If you let people experience a good feedback from their action, they'll slowly adapt to it 23:44 RhineDevil And this can be done in many ways 23:44 RhineDevil That's a general idea, I'll let you digress about what could I mean into this 23:45 RhineDevil *what could it mean into practice 23:45 Pexin there are some who believe that all of human history has been allowed to happen to prove a point: that without guidance, we are selfish short-sighted and self-destructive. and that every iteration of mistakes people keep making over the ages is another attempt to find their path. and it must be allowed to continue until nobody - past, present, heaven or earth, can legitimately point and say, "but but but 23:45 Pexin but they haven't tried THIS yet!" 23:45 Pexin but anyway, hey look, a voxel game! 23:46 RhineDevil Pexin: not getting what your point is, speak clearly 23:46 * Pexin plays with digimal legos 23:46 RhineDevil Gustavo6046: I won't dig deeper than what I said, the enemy listens 23:47 Gustavo6046 RhineDevil, I have spoken a lot of MArxist thought lately 23:48 RhineDevil Gustavo6046: I don't believe in political theory, I believe in political practice 23:48 Gustavo6046 Pexin, I think that human history has happened not to prove a point, because that isn't what creates history. What creates history is usually the ruling class, and the ruling class is usually the few humans who DID happen to be greedy enough to exploit everyone else to begin with. 23:48 RhineDevil Well said 23:49 Gustavo6046 RhineDevil, political practice is impossible without first understanding the underlying gears in motion. And then you realize that these very gears were built to make any political practice that tries to spin against the gears impossible. 23:49 Pexin hows that working out for you 23:49 Pexin s/you/us 23:50 Gustavo6046 Political practice, at least of the kind that actually improves society in a way that makes it more equal and just, is impossible until you change the system. And changing the system is impossible, until you understand it and its shortcomings. 23:50 Gustavo6046 Political theory does not move the world, but it moves people, and it educates them about the world around them, especially if said educatoin comes from people outside the framework of thought that the political system itself restrictively enforces under command of the ruling class. 23:51 RhineDevil Gustavo6046: the gears are explained (partically) by psychology, not by people trying to predict how the future will be 23:51 RhineDevil *partially 23:51 RhineDevil Gustavo6046: it's foolish thinking that the people are or can be educated 23:51 Gustavo6046 Psychology applies at an individual level. But strategy is much more high level than that. 23:51 Gustavo6046 The ruling class is not stupid. 23:52 Gustavo6046 They use strategy. 23:52 RhineDevil Nah they use psychology 23:52 Gustavo6046 Of the masses, yes. 23:52 Gustavo6046 So that they never catch onto the strategy they use. 23:52 Gustavo6046 For instance, they lopside the distribution of emphasis in social issues in order to distract the working classes from the true struggles they should prioritize, the class struggles. 23:53 RhineDevil Now we're talking the same language 23:53 Gustavo6046 They use geopolitical tension as an opportunity to glorify themselves, to hide their unfairly advantaged position under a veil of humanitarianism and progressivism. 23:53 Gustavo6046 Hell, even the Nazis veiled themseleves under humanitarianism and progressivism to mollify their public image, before the end of WW2 and the ensuing revelation of their horrors and their true faces. 23:54 RhineDevil Anyway as I was saying, there are no "gears" in motion. there is an enthropy that can be influenced on a certain extent 23:54 RhineDevil And that's all 23:54 Gustavo6046 Remember that back then, eugenics was a cool thing, and it was considered scientific. 23:54 RhineDevil *to a certain extent 23:54 Gustavo6046 Nowadays science has rejected eugenics, not just as a knee-jerk reaction. 23:55 RhineDevil actually eugenics IS a cool thing, but not that kind of eugenics 23:55 Gustavo6046 wat 23:55 Gustavo6046 you mean like, social Darwinism? 23:55 RhineDevil no 23:55 RhineDevil I mean like genetic engineering 23:56 Gustavo6046 what other kind of eugenics is there then? all I know is passive social Darwinsim (people dying for being stupid) and "active social Darwinism" (people being killed for being different). 23:56 Gustavo6046 the latter is also known as, among other things, racial hygiene, and a lot of other names 23:56 Gustavo6046 some try to downplay it, others are much more sraight to thep oint 23:56 Gustavo6046 the point* 23:56 RhineDevil I know that and I'm not talking about that 23:56 Gustavo6046 I wouldn't call genetic engineering eugenics in the traditional sense :p 23:57 Gustavo6046 Eugnenics was from an era before genes were well understood 23:57 RhineDevil I'm talking about fixing uncurable issues before they're going to happen 23:57 Gustavo6046 There was only a vague understanding of inheritability, based on Mendel's work 23:57 RhineDevil That was the problem 23:57 Gustavo6046 Now that we understand genes, it's not proper to call it eugenics anymore. We have adjusted our ideas away from what was eugenics. 23:57 RhineDevil Everyone from that era had a really vague understanding on how things worked 23:57 Gustavo6046 So please don't call genetic engineering eugenics :P 23:58 Gustavo6046 (Just like you shouldn't call all sorts of Marxist thought Stalinism!) 23:58 Gustavo6046 Anyway, incurable issues? 23:58 RhineDevil Gustavo6046: some would say eliminating certain traits from humanity would be eugenics, but what if these traits were actually harmful? 23:58 Gustavo6046 RhineDevil, yes, but the devil (no pun intended, RhineDevil) is in the details 23:59 RhineDevil What if we could build a better humanity by removing these traits from embryos instead of doing butchery experiments on people? 23:59 Gustavo6046 I completely agree with what you said, but some people can twist the definition of "harmful" 23:59 Gustavo6046 What does it mean for a trait to be harmful? You might think it's pretty unambiguous, it's things that make people's lives worse. 23:59 RhineDevil Of course Gustavo6046, but that's why I say eugenics isn't inherently bad 23:59 Gustavo6046 But what if some people redefine that in a way that appeases to their exclusionist thoughts?