Time |
Nick |
Message |
00:18 |
|
riff-IRC joined #minetest |
01:38 |
|
wallabra_ joined #minetest |
02:24 |
|
alguien joined #minetest |
02:37 |
|
riff-IRC joined #minetest |
03:13 |
alguien |
I'm calling minetest.find_nodes_in_area_under_air in a callback to minetest.emerge_area for random coords, and I always get nothing. But when I TP there, there obviously are nodes under air. What gives? |
03:13 |
|
fling joined #minetest |
03:21 |
alguien |
In fact, even if I call minetest.find_nodes_in_area_under_air for an area next to the player, I still get 0 elements back! |
03:37 |
|
MTDiscord1 joined #minetest |
03:41 |
alguien |
Is there a group for walkable nodes? |
04:00 |
|
MTDiscord joined #minetest |
04:20 |
|
Lesha_Vel joined #minetest |
04:23 |
|
Alias joined #minetest |
04:52 |
|
YuGiOhJCJ joined #minetest |
05:40 |
|
Lesha_Vel joined #minetest |
05:42 |
|
Elouin joined #minetest |
05:42 |
|
chilledfrogs joined #minetest |
05:43 |
|
fossdev2 joined #minetest |
05:43 |
|
Swift110-mobile joined #minetest |
05:46 |
|
book` joined #minetest |
05:48 |
|
ericnoan joined #minetest |
05:48 |
|
rubenwardy joined #minetest |
05:49 |
|
eggman joined #minetest |
05:49 |
|
Teckla joined #minetest |
05:49 |
|
calcul0n joined #minetest |
06:01 |
|
TomTom joined #minetest |
06:33 |
|
comrad joined #minetest |
06:33 |
|
meldrian joined #minetest |
06:33 |
|
meldrian joined #minetest |
07:43 |
|
___nick___ joined #minetest |
08:04 |
|
harry-wood joined #minetest |
08:09 |
|
lemonzest joined #minetest |
08:15 |
|
alguien joined #minetest |
08:16 |
alguien |
Just to update anyone who might have been following, I had no luck with find_nodes_in_area_under_air because by default it searches for dirt nodes. Instead I fed it a bunch of groups so it finds whatever |
08:16 |
alguien |
A bunch of groups because it seems there is no "group:walkable" |
08:52 |
calcul0n |
alguien, i didn't follow but you could list existing items at startup and define the group yourself |
08:53 |
calcul0n |
existing nodes in fact |
08:53 |
alguien |
calcul0n, eh, that doesn't help for my needs |
08:53 |
erle |
what are your needs? |
08:55 |
alguien |
erle, identifying nodes one can stand on, but i'm using basic_robot so the code should (ideally) be transient. A custom group would have to be updated every time a new mod is added. Plus even if there were a group "all" it's not the same as "walkable" |
08:56 |
alguien |
(it's for a random teleporter that I wrote for basic_robots) |
08:56 |
erle |
you take the task seriously, i admire that |
08:56 |
alguien |
Thanks |
08:57 |
alguien |
It's not ideal, right now I'm looking for any of {"group:cracky", "group:crumbly", "group:choppy", "group:water"} under 2 blocks of air at a random location |
08:58 |
alguien |
But anyway, off to another thing: I don't suppose there's a handy way to access the log via the lua API? |
09:01 |
erle |
water is not exactly something you can stand on |
09:02 |
erle |
why would you want to access the log? |
09:04 |
MTDiscord |
<GoodClover> You could create a group:walkable by looping over node defs and adding it to nodes with walkable=true/false. group:all the same but for every node. |
09:04 |
MTDiscord |
<GoodClover> In an on_mods_loaded |
09:06 |
alguien |
erle, when i pick a place, there's a high chance that the surface is water, so i allow random teleportation to dump you into water |
09:08 |
alguien |
GoodClover: true |
09:09 |
erle |
GoodClover does the way this API works look good to you? https://git.minetest.land/erlehmann/tga_encoder/src/commit/1f9c446a98c9082ac1083532f8419966773a8f1e/examples.lua |
09:10 |
erle |
GoodClover also are you aware of the modlib written by luatic? |
09:11 |
erle |
GoodClover like i wonder if anyone actually wants to do stuff like … save("fractal_24bpp.tga", {color_format="B8G8R8"}) |
09:11 |
erle |
maybe luatic can do the same for PNG some time |
09:12 |
erle |
hmm, i should probably add a switch to control the pixel order, so the heart does not need to be upside down |
09:14 |
alguien |
erle, i want to find out where the player's bones are after the fact. Would be nicer if I could just remember it, but I can't have any event triggers, it's basic_robots again |
09:14 |
alguien |
(and bots other than the admin bot don't automatically start, and don't run after a person leaves an area) |
09:14 |
erle |
(i will not change the default encoding option, after all it needs to be 100% compatible with existing stuff) |
09:15 |
calcul0n |
alguien, are you working on a mod working with basic_robot or on robot code? |
09:15 |
calcul0n |
btw they can be started by a machine signal like a keypad or clock gen |
09:15 |
calcul0n |
if you also have basic_machines |
09:15 |
|
Fixer joined #minetest |
09:15 |
alguien |
calcul0n, i'm working on a quote-unquote mod that the basic_robot is going to run. Not planning on changing basic_robot code nor write a new mod. |
09:16 |
alguien |
calcul0n, really? I didn't know that. I know they can be started with mesecons |
09:16 |
calcul0n |
ho, didn't know that too :) |
09:18 |
alguien |
calcul0n, what kind of signal does a basic_machine clock emit? |
09:18 |
alguien |
I mean I'm not getting a lot of hits: https://github.com/ac-minetest/basic_robot/search?q=basic_machines |
09:18 |
calcul0n |
the same as keypad in repeat mode, it just never stops |
09:19 |
alguien |
heh, optional dependencies: what are those? https://github.com/ac-minetest/basic_robot/blob/master/depends.txt |
09:19 |
erle |
GoodClover https://content.minetest.net/packages/LMD/modlib/ |
09:19 |
alguien |
calcul0n, no i mean but i thought it only worked with other basic_machines |
09:21 |
calcul0n |
well machine signals just "activate" stuff, it's a list of predefined actions depending on the node receiving it |
09:22 |
calcul0n |
for instance they can also turn a furnace on iirc |
09:22 |
alguien |
calcul0n, just tried it with a clock, works |
09:23 |
alguien |
(though not when the area unloads, so) |
09:23 |
calcul0n |
yep, you have to forceload the area for that i guess |
09:24 |
alguien |
yuck |
09:25 |
alguien |
but thanks for the explanation of basic_machine clocks |
09:25 |
alguien |
i guess they do something like the robot's activate.<direction>(1) |
09:26 |
alguien |
intersting mod, too bad the mover UX is bad |
09:27 |
calcul0n |
let's say it's not very intuitive :) |
09:32 |
|
harry-wood joined #minetest |
09:35 |
alguien |
punch source 1, you punch a 1 appears. So far so good |
09:35 |
alguien |
punch source 2. -Ehm. source 2? |
09:36 |
alguien |
You punch source 1 because there's no source 2. The one disappears. No new message appears |
09:36 |
alguien |
You punch it again, 1 reappears |
09:37 |
alguien |
Punch target. 2 appears |
09:37 |
alguien |
okeh |
09:38 |
alguien |
It's a bit different, but that illustrates the confusion |
09:45 |
calcul0n |
yeah, that's because 1/2 marks are entities so you must "kill" the 1 before you punch again |
09:47 |
calcul0n |
but indeed that's confusing |
09:50 |
|
harry-wood joined #minetest |
10:05 |
|
appguru joined #minetest |
10:36 |
|
riff-IRC joined #minetest |
10:39 |
|
specing joined #minetest |
10:41 |
|
harry-wood joined #minetest |
11:01 |
|
definitelya joined #minetest |
11:24 |
|
riff-IRC joined #minetest |
11:24 |
|
cation joined #minetest |
11:25 |
|
debiankaios joined #minetest |
12:33 |
|
___nick___ joined #minetest |
12:36 |
|
___nick___ joined #minetest |
12:43 |
|
proller joined #minetest |
13:04 |
|
Thelie joined #minetest |
13:20 |
|
proller joined #minetest |
13:24 |
|
kamdard joined #minetest |
13:33 |
|
alguien joined #minetest |
14:13 |
|
orwell96 joined #minetest |
14:31 |
|
Sven_vB joined #minetest |
14:54 |
|
fling joined #minetest |
15:04 |
|
fling_ joined #minetest |
15:19 |
|
orwell96 joined #minetest |
15:48 |
|
Fixer_ joined #minetest |
15:51 |
|
debiankaios joined #minetest |
16:05 |
|
specing_ joined #minetest |
16:10 |
|
wallabra_ joined #minetest |
16:15 |
|
sobkas joined #minetest |
16:31 |
alguien |
calcul0n, the authort could've made it so that if you hit the 1 again it just skips to set destination |
16:33 |
alguien |
also I'd've made the second message "Hit the source again or hit something else to set an additional source" |
16:36 |
alguien |
But it's not just about numbers being entities, it's that sources are both marked "1", and the destination always "2", but the initial message is like "Hit source1, then source2, then destination" |
16:36 |
alguien |
And since there is no difference in colors of the source1's "1" and source2's "1", that's even more confusing |
16:46 |
erle |
palette encoding, finally! https://git.minetest.land/erlehmann/tga_encoder/src/branch/master/examples.lua#L104 |
16:48 |
|
Talkless joined #minetest |
16:49 |
erle |
i meant https://git.minetest.land/erlehmann/tga_encoder/src/commit/45e405982a820c3fb81c11b65350ca7cae2a53e4/examples.lua#L104 |
16:59 |
|
alguien joined #minetest |
18:00 |
|
Wuzzy joined #minetest |
18:16 |
|
definitelya joined #minetest |
18:17 |
|
proller joined #minetest |
18:33 |
|
___nick___ joined #minetest |
18:35 |
|
Verticen joined #minetest |
18:36 |
|
___nick___ joined #minetest |
19:09 |
erle |
luatic anything missing or inaccurate here? https://git.minetest.land/erlehmann/tga_encoder/ |
19:10 |
erle |
the color-mapped encoding is so simple i am surprised i did not do it before |
19:10 |
erle |
also i have about 150 lines of code that are duplicated in a <500 lines mod, i should clean that up |
19:12 |
|
harry-wood joined #minetest |
19:34 |
MTDiscord |
<GoodClover> erle: Looks nice to me :) |
19:35 |
MTDiscord |
<GoodClover> (The TGA lib) |
19:35 |
MTDiscord |
<GoodClover> Though I prefer handling disk myself, being enforced to do it via a library is never nice. |
19:37 |
MTDiscord |
<GoodClover> local bytes = tga.image(pixels):encode() or something |
19:39 |
MTDiscord |
<GoodClover> oh! turns out :encode is a function! |
19:40 |
MTDiscord |
<GoodClover> (personally I much prefer a stateless lib, without metatable-d "classes", but that's leaning into bikeshedding) |
19:40 |
erle |
GoodClover i started with a very simple thing made by fleckenstein. this stuff keeps backwards compatibility with it. |
19:40 |
erle |
GoodClover do you have any wishes? |
19:41 |
erle |
except puttting it on cdb, i'll submit it when i'm sure there is not an obvious API wart |
19:41 |
MTDiscord |
<Warr1024> If you accidentally guess an API function, then that's a sign of an intuitive interface :-) |
19:42 |
MTDiscord |
<GoodClover> … to end world hunger? ^^ My only thing would be making the :encode()s return the data they produce do I don't have to do a pointless variable dance |
19:42 |
erle |
i mean except that you can probably shave 150 lines off it because i triplicated the RLE encoder in a copy-paste orgy and better RGBA support in A1R5G5B5 and paletted encoding i don't have any ideas |
19:43 |
erle |
GoodClover the “pointless variable dance” is reading out the images .data attribute? |
19:44 |
erle |
i mean saving is basically |
19:44 |
erle |
local f = assert(io.open(filename, "wb")) |
19:44 |
erle |
f:write(self.data) |
19:44 |
erle |
f:close() |
19:44 |
erle |
end |
19:44 |
erle |
(ignore the ”end” obv) |
19:45 |
erle |
GoodClover, is the “pointless variable dance” that the *image* is a variable? |
19:45 |
erle |
Warr1024 do you see any API warts? |
19:45 |
erle |
in the examples.lua file |
19:49 |
MTDiscord |
<GoodClover> file:write(tga:from_table(pixels):encode(format_options)) Is more my style of API, but again, this is pointless debate when the API is already existing |
19:50 |
erle |
it was existing for a long time before i even made it that far |
19:50 |
erle |
there are like 4 different mods named tga_encoder out there that all have the usage tga_encoder.image(pixels):save(filename) |
19:51 |
erle |
they only differ in what they write |
19:51 |
erle |
(raw vs rle, 24bpp vs 16bpp) |
19:51 |
erle |
so i thought why not unify it |
19:51 |
MTDiscord |
<GoodClover> By avoiding the dance I was meaning add return self.data, so image:encode(); f:write(image.data); could be reduced to f:write(image:encode()); |
19:52 |
MTDiscord |
<GoodClover> oh wait, does it encode when you create from the table? |
19:52 |
erle |
as i said, the default is image(pixels):save(filename, put_encoding_options_here) … i had not thought of any other use case than my own, which are all file-writing-based |
19:52 |
MTDiscord |
<GoodClover> oh, nope |
19:52 |
erle |
it used to, but there is a problem |
19:53 |
erle |
i wanted to retain the same image and encode it in different formats |
19:53 |
erle |
obviously that means you need to encode on saving and not oncreation |
19:53 |
erle |
also if you want to edit an image, encoding on saving is obv the more useful thing |
19:55 |
sfan5 |
so what does tga.image(pixels) do? transform the data in some way? |
19:55 |
MTDiscord |
<GoodClover> Though it does seem to me like this could've just been once function local bytes = tga.encode(pixels, format_options |
19:58 |
erle |
the constructor only sets pixels, width, height. just in case anyone wants to play with the pixels before encoding. |
19:58 |
erle |
as i said, i kept it compatible with the previous onces. i would probably have made a single encoding function that is stateless. |
19:59 |
erle |
if i had designed it. |
20:00 |
erle |
then again, i might use this to offer a better in-place editing interface. |
20:00 |
erle |
anyways, i have no ideas what to do with this except maps, fractals and possibly much better signs. |
20:01 |
MTDiscord |
<Warr1024> Personally I like the fluent interface |
20:02 |
MTDiscord |
<Warr1024> I mean ideally anything that's not a getter would return the object and you can then just chain methods, like image(pixels):desaturate():to_palette():save(filename) or something |
20:02 |
erle |
well it could definitely allow something like “image:scale(2)” or so later |
20:03 |
erle |
i thought making desaturation and palette separate actions but it does not seem usable |
20:03 |
MTDiscord |
<Warr1024> It depends |
20:03 |
erle |
well, internally, mcl_maps actually has a palette of nodes when iterating over the surroundings |
20:03 |
MTDiscord |
<Warr1024> desaturate sort of makes sense to convert to an 8-bit since grayscale fits anyway |
20:03 |
MTDiscord |
<Warr1024> unless you allow partial desaturating |
20:04 |
erle |
well, my desaturation is “save this thing as grayscale”, so obviously it is a bit ham-fisted haha |
20:04 |
erle |
to_palette() is useless though, for me |
20:04 |
erle |
because i always want to provide the palette |
20:04 |
erle |
is there any case where you do not explictly want to give one? |
20:04 |
MTDiscord |
<Warr1024> Yeah, I mean, gimp has a command it calls "desaturate" where it just removes ALL saturation, but it also has ones where you can play around with the amount of saturation, so partial desaturation is sort of "implied"... |
20:05 |
MTDiscord |
<Warr1024> I mean to me to_palette() is like an RGBA-to-indexed operation. Might take options like a palette (or choice of algorithm to generate one) and dithering options. |
20:06 |
erle |
oh, i see, dithering |
20:06 |
MTDiscord |
<Warr1024> I suppose at that point it might make sense to just expand this thing into a general image manip library and TGA encoding is just one option. |
20:06 |
|
alguien joined #minetest |
20:06 |
erle |
well, i probably won't add any general things that are not directly connected to serialization formats |
20:06 |
MTDiscord |
<Warr1024> image(pixels):scale(2):rotate(180):to_palette({gen = "octree", dither = "patterned"}):format("tga"):save(file) |
20:07 |
erle |
that looks disgusting |
20:07 |
erle |
but i see what you mean |
20:08 |
MTDiscord |
<Warr1024> If you really want to stick with a very narrow scope of just turning a palette and array of pixels into a targa file, then olive's suggestion starts to make more sense. Fluent interfaces make more sense when you have enough operations ... it might make more sense to just have a function that takes the pixel inputs and spits out the encoded file content. |
20:08 |
erle |
i will revisit this mod when i finally get to the map scaling and updating |
20:08 |
erle |
so i guess then i will need a scale |
20:08 |
erle |
and an overlay thing |
20:09 |
erle |
in fact, i will need to scale textures *down* |
20:09 |
erle |
because the map is always 128×128 pixels |
20:09 |
MTDiscord |
<Warr1024> If you want to support full image operations but keep scope under control, splitting this into 2 libs might make sense, i.e. one abstract image handling library that wraps some pixels in an "image" object and then just lets you turn one image into another ... and a separate tga encoder that just turns pixels into targa. |
20:10 |
erle |
well i just made the latter |
20:10 |
MTDiscord |
<Warr1024> downscaling is a bit trickier, since you have to interpolate then... |
20:10 |
erle |
downscaling for paletted images in particular |
20:10 |
erle |
with a given palette |
20:10 |
MTDiscord |
<Warr1024> Yeah, I guess I'm saying that rather than scope-creep your tga lib to do scaling and such, maybe it's time to spin off a separate project. |
20:11 |
MTDiscord |
<Warr1024> downscaling with a palette and interpolation sounds like it could be tricky :-) |
20:11 |
MTDiscord |
<Warr1024> Not necessarily terribly so, but tricky enough |
20:13 |
erle |
my goal is to have maps not use B5G5R5 (as in mineclone2) or A1R5G5B5 (as in mineclonia) but colormapped bitmaps |
20:14 |
erle |
because that makes editing as simple as updating a single byte |
20:15 |
erle |
and also it makes it easier to actually create the thing |
20:15 |
erle |
but yes, downscaling will be … weird |
20:15 |
erle |
maybe i'll just stay with A1R5G5B5, no idea. |
20:16 |
erle |
GloodClover Warr1024 given that you have given me the most feedback so far, what should i address before i submit it to contentdb? |
20:19 |
MTDiscord |
<Warr1024> I'd say if it works then it's probably worth submitting, and you can always continue to improve the thing after it's released. There's even a "maintenance state" field you can use to indicate how confident you are that you won't be making breaking changes to the API, i.e. you can still make breaking changes while managing expectations. |
20:19 |
MTDiscord |
<Warr1024> Getting something published there is actually often a pretty good way to get it the kind of exposure that draws more useful feedback. |
20:20 |
erle |
i try to *never* make incompatible changes to public APIs |
20:21 |
erle |
i just think, maybe i am not seeing something here |
20:22 |
erle |
oh btw, treasure maps. that is one more thing. |
20:22 |
erle |
treasure maps will be great :) |
20:29 |
erle |
GoodClover btw, what use cases are there to want to save yourself? using minetest.safe_file_write() or how it is called ig? |
20:31 |
erle |
GoodClover i will edit my review after having tried your mod again, if i can do that. thank you for improving it! |
20:32 |
|
riff-IRC joined #minetest |
20:47 |
erle |
“Please make sure that this package has the right to the names tga_encoder.” – given that it's a drop-in replacement for code i have been improving as part of mineclone2, i'm … pretty sure. |
20:55 |
erle |
ok, i submitted it! https://content.minetest.net/packages/erlehmann/tga_encoder/ |
21:00 |
MTDiscord |
<Warr1024> Heh, nice, proactively addressed the inevitable issue :-) |
21:06 |
erle |
Warr1024 well, unfortunately there is something worse to come in the future. after fleck and me had done a lot of work on mcl_maps, kay27 at some point changed it in several incompatible ways, against the advice of literally everyone with knowledge about maps. so mineclone2 and mineclonia mcl_maps now work differently from mineclone5 mcl_maps. i guess i will have the discussion about the name some time later then. |
21:07 |
MTDiscord |
<Warr1024> I don't think the CDB team has figured out what we should do in cases like those either, tbh. |
21:07 |
erle |
well, basically everything in mcl5 accumulates incompatible changes over time |
21:07 |
MTDiscord |
<Warr1024> i.e. where multiple things all had claim to a name in good faith, and then over time they simply drifted apart... |
21:08 |
erle |
it relates to the desire to stuff new features in existing mods |
21:08 |
erle |
to ”reduce dependency problems” haha |
21:08 |
MTDiscord |
<Warr1024> I mean packages are allowed to have incompatible changes with themselves over time, i.e. a package is not required to rename itself simply because they changed certain things... |
21:09 |
erle |
yeah, but in this case it's literally, like mcl5 maps before a specific date were compatible, after a specific date were not, because kay had … different opinions on how maps should work. |
21:09 |
MTDiscord |
<Warr1024> The idea was just to discourage everyone for making their own default and throwing dependencies into chaos, but without policing change control across the entire community (which I'm not willing to do and I think few if any others are) there will still be loopholes. |
21:10 |
erle |
the thing is, the mod has to be called mcl_maps so that i can make one that is largely compatible and can be a drop-in replacement |
21:10 |
MTDiscord |
<Warr1024> Games, at least have generally gotten a bit of a pass because if they throw a whole mod ecosystem into chaos, it's generally only their own, so they sort of internalize the consequences. Also because like 80% of the games out there are just more MTG soups... |
21:10 |
erle |
i.e. my goal is to unfuck mcl5 |
21:11 |
MTDiscord |
<Warr1024> Unfortunately if mcl5's goal is to be ununfuckable, according to the definition of fuckedness you're using, then that's gonna be hard. |
21:11 |
erle |
well, mcl5 is incompatible to its own earlier versions often enough, so i hope people see that it is very different from mcl2 or mcla if it escalates |
21:11 |
erle |
it's the ”move fast and break things” style |
21:12 |
erle |
whereas almost all other games gradually upgrade and do not break compat willy-nilly |
21:12 |
erle |
i can't really aim for compatibility with mcl5 beyond “probably works, unless it has changed in incompatible ways again” |
21:15 |
erle |
i think the best thing was how i saw AFCMS do it with mcl_tmp_message or how it was called |
21:15 |
erle |
AFCMS just made a new mod that had a similar purpose, new name, everything goes |
21:15 |
erle |
and then updated all the callers to the new mod i think |
21:16 |
erle |
that way you get zero compatibility problems |
21:17 |
MTDiscord |
<Warr1024> Well, you're a fork of mcl2, not of mcl5, right? You can take responsibility for compat with upstream, but not with every "cousin" repo, right? |
21:18 |
erle |
i will argue that, obviously |
21:18 |
erle |
on the other hand, someone might argue that kay27 managed to be the first on cdb (with the compatible version of mcl_maps, he changed it much later) |
21:19 |
erle |
i hope the argument “i managed to submit code to cdb first and then changed it even though the original authors were against it, so i have the right to the name” does not work obv, because that's not a good general rule at all. |
21:20 |
MTDiscord |
<Warr1024> No, it's not just first on CDB; forum posts made before CDB was a thing (at least) also count. |
21:20 |
erle |
how about git history |
21:20 |
erle |
or bug trackers |
21:21 |
erle |
fleck made mcl_maps, the only issue why he was not the first on cdb is because mcl2 for a long time had no release |
21:21 |
erle |
so people were using git HEAD to play |
21:21 |
erle |
(it's better now) |
21:21 |
rubenwardy |
in that situation, I'd argue that mcl2 owns mcl_maps |
21:21 |
erle |
good |
21:22 |
erle |
then i can stop caring about what mcl5 does entirely i guess |
21:23 |
MTDiscord |
<Warr1024> The reason for the "right to a name" policy is to enforce at least SOME kind of stability over "public interfaces", e.g. APIs, equivalent game functionality, etc. |
21:23 |
MTDiscord |
<Warr1024> that basically means that you claim a name when you "publicize" it. |
21:23 |
MTDiscord |
<Warr1024> Git commit history is evidence that something was written, NOT that it was published/publicized. |
21:23 |
erle |
well “move fast and break things” is a belief in that API stability considerations are holding you back. |
21:24 |
MTDiscord |
<Warr1024> Arguably just dropping something out on GH is also not really making it "public" in the sense of the broarder community. |
21:24 |
rubenwardy |
this isn't something I'd considered when writing the policies. In this case, it's not that someone has independently come up with the mod name, they've forked it and pushed it to CDB first |
21:24 |
MTDiscord |
<Warr1024> "move fast and break things" isn't about breaking API compatibility, it's just about not letting API compatibility hold you back as much. |
21:25 |
erle |
look, when kay did the incompatible changes he knew about the arguments, knew the other code, i have even contributed to mcl5 myself to fix mcl_maps issues there. |
21:25 |
MTDiscord |
<Warr1024> Our stance on the RTAN policy has evolved over time. |
21:25 |
erle |
RTAN? |
21:25 |
rubenwardy |
If Mcl2 made a mod called "fishing", took ages to releases, and then a third-party developer make an independent fishing mod - then the independent modder would have the rights |
21:25 |
MTDiscord |
<Warr1024> Right To A Name |
21:25 |
erle |
rubenwardy it would of course be mcl_fishing |
21:25 |
erle |
yeah, my problem is not with unreleased stuff |
21:26 |
erle |
unreleased stuff can be renamed easily |
21:26 |
rubenwardy |
yeah, using game namespaces like that helps - and also preempts these issues a lot |
21:26 |
erle |
but if something is out there, people rely on it working |
21:26 |
MTDiscord |
<Warr1024> Lately we're trying to strongly encourage authors of games to use unique namespaces for their games unless they're more or less direct copies of an existing thing. |
21:26 |
erle |
yeah, but this still does not really work well for the mcl5 case |
21:27 |
MTDiscord |
<Warr1024> So really what kay should have done, ideally, is as soon as they decided to make changes that would break compat, just rename the affected mod(s). to like mcl5_whatever. |
21:27 |
erle |
i mean it's not malice or so, it's just the belief that compatibility with upstream is unimportant |
21:27 |
MTDiscord |
<Warr1024> If you don't think that compat is important, then renaming a mod is no problem for you :-) |
21:27 |
erle |
Warr1024 i think so too. would be the cleanest way. |
21:28 |
erle |
yeah, the problem is of course that “this is not important” in practice means “i'll do the minimum of work i need to do” |
21:28 |
erle |
that's always the case in software |
21:28 |
erle |
in my experience |
21:29 |
MTDiscord |
<Warr1024> To me, "move fast and break things" doesn't mean you just allow compatibility bugs to pile up, it means you tend toward addressing those bugs by declaring flag days more often than you address them by introducing compat code... |
21:30 |
erle |
yeah and to others it means “this API is ugly, i'll change it and change all the callers in my repo, screw everyone else” |
21:31 |
erle |
or even “unknown nodes or items can happen when updating this game/mod” |
21:32 |
MTDiscord |
<Warr1024> I actually followed a "move fast and break things" philosophy through the early days of NodeCore, but most of the changes have been "internal" APIs (it has no official external API), and things like recipe or process changes, but even today I can still load ancient map backups from the early closed beta server and run them, and they still load and, as far as I can tell, mostly still work the same. |
21:33 |
MTDiscord |
<Warr1024> Unknown nodes are so easy to solve, though ... just aliases. |
21:33 |
erle |
hahahaha |
21:33 |
MTDiscord |
<Warr1024> The easy way to avoid ugly API issues is to shoot for a medium amount of ugliness across everything, so that no single part of it sticks out. |
21:33 |
erle |
i think you are misunderestimating the stupidity that some people come up with |
21:34 |
erle |
for example, i recently saw something where an existing name did not really fit the item |
21:34 |
erle |
i'll keep it vague to protect the guilty |
21:34 |
erle |
so you have item A with an itemstring that would be better suited for the newly introduced item B (according to someone™) |
21:34 |
erle |
obviously if you change that, all the users' A items turn into B items |
21:35 |
erle |
and no amount of aliasing can fix it |
21:35 |
erle |
my response to that is of course: do not do this, the name is used once, then it is burned. |
21:36 |
erle |
but if someone thinks it is very important that the itemstring is a meaningful string that must refer to something else instead, they will not be satisfied with that advice. |
21:37 |
erle |
in general, i have learned that in situations where doing nothing is a proper alternative to something stupid, people really dislike the ”do nothing instead” advice. |
21:39 |
erle |
(as it was in this case) |
21:40 |
MTDiscord |
<Warr1024> Oh, right, yeah, discontinuing use of a name does NOT free it up to be used by something else |
21:40 |
MTDiscord |
<Warr1024> unless you've got some crazy trick you can pull :-) |
21:40 |
erle |
the person in question had a bunch of ideas |
21:41 |
MTDiscord |
<Warr1024> As a general rule, if you want to rename B to A and then C to B, then the second rename should fail because the alias you created during the first step blocks it :-D |
21:41 |
erle |
watching the inventory, converting the items, adding meta to the items |
21:41 |
erle |
introducing crafting recipes so that A can become B and B can become A |
21:41 |
MTDiscord |
<Warr1024> The ugliness of that kind of hack has GOT to be worse than the ugliness of a not-so-logical internal name. |
21:42 |
erle |
obviously |
21:42 |
erle |
but some people just can't do architecture |
21:42 |
MTDiscord |
<Warr1024> Well, I did run into a situation where I had 1 node def I needed to change into 2. |
21:42 |
erle |
they see one wart in the code and then nuke everything to get rid of it |
21:42 |
MTDiscord |
<Warr1024> NC has tree trunks that cannot be rotated and are falling_node, and logs that can be rotated and are not falling. It used to have only tree trunks. I had to replace all trunks in inventories with logs. |
21:43 |
erle |
well |
21:43 |
erle |
that doesn't sound stupid |
21:43 |
erle |
a “stupid” thing for me is an architectural choice that is very hard to recover from |
21:44 |
erle |
like the ”put everything in one mod” idea |
21:44 |
erle |
oh, btw, what's also interesting: there are mods on cdb that were pulled into mcl2 and mcl5 |
21:44 |
erle |
or other games, for that matter |
21:45 |
erle |
like, i wonder if there ever comes a point at which there is a conflict bc of that |
21:45 |
erle |
the stupidest thing is the mesecons redstone :/ |
21:45 |
erle |
but we are kinda stuck with it |
21:49 |
MTDiscord |
<Warr1024> If you pull a mod into a game, and either keep the name and compat, or keep neither, then it should all work out (barring, of course, engine problems involving multiple copies of a mod being installed due to e.g. modpacks ... I can't remember if they've worked those out yet ?) |
21:50 |
MTDiscord |
<Warr1024> Putting everything into one mod is not necessarily a stupid idea either, as long as you have some kind of plan for breaking it out if things end up expanding more than you thought. |
21:52 |
MTDiscord |
<Warr1024> NodeCore used to have a HUGE nc_api mod, and then it got broken out into an nc_api base mod, a bunch of ncapi* stuff, and then an nc_api_all that acts like a metapackage for depending on all the ncapi* mods under it, reestablishing the "big ball of mud" interface that the old nc_api monolith offered. There was no graceful way to do this, but I was in touch with the authors of pretty much all mods for the game (more than half were me) |
21:52 |
MTDiscord |
and so it wasn't so bad to just manage the flag day by hand. |
21:54 |
MTDiscord |
<Warr1024> Sometimes you just couldn't anticipate a need well enough in advance. I prefer to design in a lot of adaptability rather than focusing too hard on anticipating and preparing for specific challenges. |
22:00 |
|
Sven_vB joined #minetest |
22:17 |
|
behalebabo joined #minetest |
22:28 |
erle |
Warr1024 the thing i find stupid is stuff like mcl5 putting the respawn anchor into mcl_beds (because there is a convenient respawn function there) |
22:28 |
erle |
which obviously means you can not *ever* depend on the respawn anchor (because for many years mcl_beds did not have it) |
22:28 |
erle |
or putting crying obsidian into mcl_core |
22:29 |
erle |
i have a solution for that, but it's ugly: make a “shim” mod for such cases that checks if the node or item or function exists, and provides it itself if it does not. |
22:30 |
erle |
but really, this should not be necessary (and i think many people do either not understand or not care about the dependency issues) |
22:32 |
erle |
Warr1024 “flag days” are possible if you control everything. it is not possible if people meaningfully interface with your stuff and you can't get hold of everyone. |
22:32 |
erle |
in any way, i prefer having compatibility shims forever |
22:33 |
erle |
and if they aren't good enough to keep around forever, they aren't good enough to be used in the first place |
22:33 |
erle |
(i.e. they are too complex for the problem they solve) |
22:34 |
|
panwolfram joined #minetest |
22:36 |
|
specing_ joined #minetest |
22:36 |
MTDiscord |
<Warr1024> The respawn code being in the bed mod in the first place, instead of being in a separate utilities and APIs mod, seems like a problem that should have been refactored... |
22:39 |
erle |
Warr1024 you are, again, thinking about the problem from a POV of a person who does software architecture. if you think from the POV of a person who wants THIS FEATURE RIGHT NOW, it all makes sense. |
22:40 |
erle |
maybe i should play nodecore one day |
22:57 |
MisterE[m] |
erle: https://m.youtube.com/watch?v=10DQeSk1LaY |
23:01 |
erle |
MisterE[m] thanks for increasing the hand range so fast. btw, why did you clear the arena in this weird way? is bulk_set_node not good enough or so? |
23:02 |
erle |
MisterE[m] also it was a fun game, except for the fun-haters who start to build letters. is there a way to vote them out or so? |
23:03 |
erle |
i was especially impressed when Li0n managed to guess “candle” from someone building up a tower of white wool blocks and then slowly removing them one by one |
23:03 |
MisterE[m] |
I used set_node 2 commits ago. But that was causing massive lag on a weaker server |
23:03 |
MisterE[m] |
Yeah, a vote-out system would be good |
23:03 |
erle |
like those kind of people ruin the entire game |
23:04 |
erle |
what i have been successful with is the rule “30% of the people in the group, but at least 3” to be enough to kick someone out |
23:04 |
erle |
(of a groupchat, mostly) |
23:04 |
erle |
like if you manage to piss off 3 people in such a small game, it does not matter what you did, you need to go |
23:05 |
MisterE[m] |
I think 50% may be better |
23:05 |
MisterE[m] |
But at least 3 |
23:05 |
erle |
doesn't work from my experience to actually require half or a majority |
23:05 |
erle |
i copied the idea of the qualified minority from ”natural selection” |
23:05 |
MisterE[m] |
I don't want poeple being mean with it... |
23:06 |
erle |
hahaha this reminds me when Li0n and me and someone else played on a server with votekick (in another game) and kept it to ourselves, by votekicking every new arrival |
23:06 |
erle |
until the admin came and we got banned hehe |
23:06 |
MisterE[m] |
This is why |
23:07 |
erle |
yeah, but the thing is |
23:07 |
erle |
this is rare |
23:07 |
MisterE[m] |
* this is why we can't have nice things XD |
23:07 |
erle |
btw, did you test if bulk_set_node() was slow too? i mean, set_node() individually is, i know that. |
23:07 |
erle |
and if it is slow, do you have any on_construct or on_destruct that is relevant? |
23:08 |
erle |
or is it just naturally slow? |
23:08 |
erle |
i mean the volume is not even that big |
23:08 |
erle |
like i don't get why it *has* to be slow |
23:09 |
MisterE[m] |
No, I unfortunately don't have a lot of time to split among my plethora of projects. So I do a 'if it works, don't fix it' approach often |
23:10 |
MisterE[m] |
I was useing setnode over the entire inner area |
23:10 |
MisterE[m] |
That caused massive lag on aes (but not on MG) |
23:11 |
MisterE[m] |
So when I moved, I was forced to come up with something else. |
23:12 |
MisterE[m] |
I had used tracking what nodes are changed and repairing them for gems, after placing a huge schem froze MG |
23:13 |
MisterE[m] |
So I knew that that approch worked |
23:13 |
MisterE[m] |
And bc ppl were playing and lagging aes, that was quickest to implement |
23:14 |
MisterE[m] |
Hey erle, if you are interested, I would entertain PRs for improving the minigames |
23:15 |
MisterE[m] |
Since you seem to be interested enough to read the code :) |
23:16 |
MisterE[m] |
just for quikbild, sumo, gems, balloonbop, and wormball, those are the oly ones I have control of |
23:16 |
erle |
so far i only play kwikbild |
23:18 |
MisterE[m] |
My next focus for improvement is gems tho, I think. Its currently the worst of the bunch |
23:18 |
MisterE[m] |
Some people like it, but there are serious problems, |
23:18 |
MisterE[m] |
. |
23:20 |
|
Cork joined #minetest |
23:20 |
|
Sven_vB joined #minetest |
23:58 |
|
Cork joined #minetest |