Time Nick Message 04:45 lissobone hi im back from the refrigerator 04:47 muurkha how was it? 05:48 lissobone forgot my traffic card at home and was 10 minutes late, but everyone was yet jubilant to see me again 05:50 lissobone On the way to the fridge it was very hot in the bus: I had to open 2 windows on both sides for wind to go through. However, a caveat awaited me: upon accelerating after resting for a little while, the water from the rooftop rushed down, even flowing into open windows in great volumes. 05:51 lissobone I wrote it as if the water was accelerating. 05:51 lissobone It was, though, with the bus. 05:51 lissobone It was but resisting the accelerating force (like everything else in the world). 17:34 copygirl So hey, NodeCore is made of a couple different mods. Its API defines a function I would like to override, that itself returns a function. Overriding it late doesn' 17:35 copygirl doesn't help since they already have been called. 17:35 copygirl Is there any way to replace this function before the other mods get to call it? Sort of like the opposite of defining a "depends" in the mod.conf, perhaps? 17:36 jonadab If what they've got is effectively a lexical closure, you may not have an easy time overriding it. 17:37 jonadab Better to override the function that returns the closure, _before_ they call it and get the closure. 17:37 jonadab But the only way I can easily think of to guarantee that in MT, is to make the mods in question (optionally) depend on yours. 17:38 jonadab (The mods that call the function and get the closure and later call it; not the one that supplies it.) 17:38 copygirl Yeah that's what I'm trying to do, the question is how. 17:39 jonadab How to make another mod optionally depend on yours? You edit said other mod's dependency list. 17:39 copygirl That can't be done programmatically though, right? 17:39 jonadab I don't know of any way to do it from within YOUR mjod. 17:39 jonadab *mod 17:39 MTDiscord When I run into situations like this (e.g. trying to override LGPL builtin stuff) I basically end up cleanrooming shit. 17:40 jonadab Another option would be to fork NodeCore. 17:40 erle or nicely ask Warr1024 for a nodecore dependency injection framework 17:40 erle (okay i am joking, but only a bit) 17:40 MTDiscord forking the game doesn't make your mod able to run on that game 17:40 copygirl The functionality to override is not particularly big, but it is annoying as hell to just copy-paste code, rather than to do the simple thing that would be ... more ideal. 17:41 MTDiscord A generalized DI framework, I'm probably not gonna do, but I could probably think of a way to make this thing modifiable from the outside. 17:41 erle one thing that i did was *steal* code from other mods, if they defined it somewhere as a node dig thing or so 17:41 erle then maybe copygirl should spell out what it is exactly 17:41 erle so that Warr1024 can get to figuring it out 17:42 MTDiscord Stealing should be pretty easy here. The code in question is MIT, so licensing obstacles are less of an issue... 17:42 copygirl Like, hooking into that specific function would solve my problem, and even give me the parameters passed to it, allowing me to build my lookup table of valid orientations without providing them or a way to calculate them myself. (This is replacing the rotation functionality in NodeCore.) 17:42 jonadab A reverse-optional-dependency (if our mod and mod X are both being loaded, load our mod first) would theoretically solve this, but. 17:42 MTDiscord I could try breaking apart the "determine the rotation cycle" part from the "wrap it in an on_rightclick handler" part, probably. 17:43 MTDiscord Heh, reverse dependencies and such would be a really cool feature for MT to support. 17:43 jonadab Maybe, but I'd worry that it would break some people's brains. 17:44 jonadab People aren't used to thinking in that direction. Though it's not as bad as COME FROM 17:44 erle or maybe 17:44 erle Warr1024 what if the rotation tables are specified in node definitions 17:44 erle or in some other easy to access place 17:44 erle separation of concerns 17:44 erle no DI necessary 17:45 MTDiscord oh, that's not a bad notion 17:45 copygirl erle: It's arguably code so short it can't even be copyrightable, I'm not worried about that, but it's "not right", if you understand. There's a way to get what I want, (except there isn't,) but I have to just re-create the on-rightclick handlers for these nodes on my end for each of the nodes I wanna support? Hurts my programmer brain. 17:45 erle which is why i just made a suggestion 17:45 erle and now it's up to you two to figure out if it is appropriate 17:45 erle because i am only rotating stuff with screwdrivers anyway 17:45 copygirl Rotation table itself is not the problem. There's a node in NodeCore that can be rotated but then also turn into another code. 17:46 copygirl I only need to override the rotation functionality. 17:46 erle so is there a way to statically represent what you want at all? 17:46 copygirl I'm not super happy with a patch to NodeCore (if warr wants to consider that) because if my mod were to be used with an older version it wouldn't work. 17:46 copygirl erle: Sorry, please explain? 17:50 copygirl For context, here is the function I want to override: https://gitlab.com/sztest/nodecore/-/blob/master/mods/nc_api/util_misc.lua#L318 17:50 copygirl And this is an example of it being used: https://gitlab.com/sztest/nodecore/-/blob/master/mods/nc_doors/register.lua?ref_type=heads#L38 17:51 erle copygirl is there a data structure that contains all the information you need for your use case that Warr1024 could put in a node definition and then both of your functions use that structure? 17:51 erle and don't come at me with ”all data structures in lua are tables” lol 17:51 copygirl I still need to override the rotation logic, ideally without touching the rest of the rightclick function, which I could only do if I could override the node_spin_filtered function. 17:52 copygirl But since it returns a closure, the only way to do it would be to run after NC's API mod, but before the other mods call it. 17:55 copygirl I already re-create the information without too much trouble, but now I realize I need to recreate the rest of the on-rightclick functionality, which I accidentally got rid of. 17:55 copygirl https://git.mcft.net/copygirl/nc_extended_rotating/src/commit/b0fc98b841bebceaaee3d8cbfbcad38333ea1a6f/registry.lua#L58-L63 18:02 erle maybe that function should just be stored separately in the node def? 18:02 erle so that you could separately override it? 18:02 erle Warr1024 what do you think of that 18:08 copygirl There's a function that's called *after* a node is spun. 18:09 copygirl So if I wanted to I could hook into that and do another `swap_node` call. 18:09 muurkha all data structures in lua are tables 18:10 MTDiscord for the most part yes, though userdata, closures and coroutines are def. also worth mentioning 18:12 erle muurkha i have a question and you are a smart person. my RLE encoded TGA images differ by a few bytes if encoded bottom-top or top-bottom. could there be a good reason why an RLE encoder would not have the same length of output for a reversed string? i see none so far 18:12 erle i have three slightly-different RLE functions anyway, so i should *probably* refactor this 18:13 muurkha luatic: I wasn't being serious 18:13 erle for example, at least the A1R5G5B5 function is suboptimal because it makes the choice regarding run-length *before* it actually reduces the bit depth (which is not optimal) 18:13 muurkha erle: you're not reversing the pixels but the lines 18:14 muurkha so if the end of one line is the same as the start of another, it will be more RLE-compressible 18:14 muurkha am not smart person tho, am muurkha 18:14 erle if i have three lines AAA ABB BCC then the reversal of the lines is BCC ABB AAA and i see now 18:14 erle thank you 18:14 muurkha hhappy to hhelo 18:15 muurkha helop 18:15 muurkha ugh 18:15 copygirl The important thing is you tried. 18:16 muurkha effort is proportional to the derivative of skill? 18:35 muurkha more important question to me is why use RLE at all; how about whitening the input with Paeth or differencing and entropy-coding the, uh, residuals? 18:36 erle muurkha i am still only trying to improve a TGA encoder, not anything else. 18:37 erle when i am done with that i may start figuring out what other (more complex) image format parsers explode if you look at them funny 18:45 muurkha does TGA support RLE? 18:45 muurkha I thought the appeal of TGA was that it didn't support compression 18:46 muurkha but did support TrueColor 18:48 erle muurkha TGA has different types: type 1 (palette), type 2 (raw), type 3 (grayscale), type 10 (RLE) 18:49 erle i mean there is more 18:49 erle but that's what minetest can do 18:49 erle or irrlicht for that matter. 18:49 erle most game engines support only type 2 24bpp (RGB) or type 2 32bpp (RGBA) 18:49 erle consuming *that* is super easy obv 20:01 MTDiscord New Minetest Blog post: https://blog.minetest.net/2023/10/17/AugustSeptember/ Thanks to GreenXenith for this month's post! 20:02 MTDiscord has the matterbridge relay been banned here again? Messages are relayed from dev-irc, but not here 20:03 MTDiscord *to matrix, I mean 23:34 Dacmot Hi. I'm trying to hunt down a bug I'm having with a mod, and I'd like to try it with minetest 5.6.1 instead of 5.7. Is there an archive of old versions? 23:35 MTDiscord grab builds from github ci? 23:35 Dacmot The only place I found older versions was on the Ubuntu PPA, but it only has 5.5.1 and 5.4.1. 23:37 Dacmot Good point. I'll try to build it (no linux builds) 23:37 Dacmot thanks 23:43 Dacmot Is there a reason why Irrlicht isn't a submodule in the main minetest repository? 23:43 MTDiscord because that makes to much sense 23:44 Dacmot :S 23:44 MTDiscord there is the submodules at home ™️ solution where you can grab the version from 23:45 Dacmot I can make my own. Just annoying. 23:47 MTDiscord the file is at https://github.com/minetest/minetest/blob/master/misc/irrlichtmt_tag.txt 23:50 Dacmot Ok good to know. Though cmake complained with the right version needed.