Time Nick Message 00:00 erle wait are you saying there isn't a lone guy doing this but like lots of them? 00:00 MTDiscord I think it's like an entire genre, yeah, and you can find shit going back like a hundred years or more... 00:02 erle i mean i know people label some stuff 00:02 erle but like 00:03 MTDiscord https://en.wikipedia.org/wiki/Political_cartoon ... you can see a lot of examples here where there's a LOT of labeling going on. 00:04 erle damn you are right 00:04 erle so garrison is just like 100 years behind the times caricature-style wise ig? 00:05 MTDiscord I dunno, I'm not very familiar with is work specifically but it does seem to fit in with the overall tradition. A lot of the other examples I've seen also express views that, let's just say, have not aged well when viewed by a modern audience... 00:05 MTDiscord Like hold up, Dr. Seuss did racist cartoons? I never noticed before. 00:06 erle i'm pretty sure that garrison uses more labels though 00:06 erle rational wiki has Garrison's Law: “The more labels you have, the more effective your cartoon is.” 00:06 erle hehe 00:08 erle though i must even with the labels i do not understand what ”trump as don quixote fighting windmills” is supposed to say LOL https://rationalwiki.org/wiki/File:Garrison_Quixote.jpeg 00:09 erle Warr1024 i think being racist was a bit of a thing back then 00:10 erle (it still is, i guess, but it also was) 00:13 erle Warr1024 apparently 6 books from dr. seuss are no longer published because of racist imagery https://www.vox.com/culture/22309286/dr-seuss-controversy-read-across-america-racism-if-i-ran-the-zoo-mulberry-street-mcgelliots-pool 00:18 MTDiscord Yeah, it's weird when I look at a historical icon and see the racism because I have to also look up what the level of Cosmic Background Racism was at the time for comparison. 00:19 erle yeah, comparisons are important! as a friend of mine once told me “you have to understand the racism in the works of H.P. lovecraft in the context of the time – he was extremely racist even for his era” 00:24 MTDiscord Medusa's Coil was so racist that it made Lovecraft seem kinda comical. Like, after reading the ending, it became super hard to take him seriously. Like, Lovecraft's eldritch outer dimensions with unspeakable betentacled horrors turns out to just be your average inner city Long John Silver's. 00:27 erle well, i generally have difficulties taking people seriously who make hating others a big part of their identity 00:28 MTDiscord Yeah, it just sucks when you have to suddenly find out about it after you had been enjoying taking them seriously before. 00:29 DeepThgt i find it much simpler to ignore artists political opinions 00:29 DeepThgt or entertainers for that matter 00:29 erle that's sometimes possible, sometimes not 00:30 DeepThgt if i had to ignore people based off ideology/morals, id find it hard to talk to anywone or enjoy anything 00:30 erle for some authors, their works themselves are soapboxes from which they cry their ideology 00:30 DeepThgt at times amusingly thats untrue 00:30 DeepThgt like ayn rand 00:30 DeepThgt who died accepting charity 00:31 erle this is even true with software 00:31 MTDiscord Being able to ignore their views would make it possible to enjoy their works again but I'm not sure if I can just choose to ignore those views and continue enjoying without somehow endorsing those views myself. 00:32 erle for example, urbit is written by a monarchist and when i looked at the way it was structured, it showed (do not learn urbit, the hoon programming language is a literal scam that uses annotations to execute fast c code with a questionable correspondence to the hoon code) 00:33 erle for a popular somewhat-contemporary literary work, you can just look at the topic of slavery in harry potter. the house elves work without payment! many of them do not want to be freed! 00:34 DeepThgt i dont hate harry potter for the authors views 00:34 DeepThgt i hate harry potter because its horrible fiction 00:34 erle yeah lol 00:34 DeepThgt i flat out dont care about artists views because usually they are horrifically uninformed 00:34 DeepThgt you dont have time to develop art and learn things 00:35 erle oh but they are interesting for interpretation 00:35 DeepThgt so, thats why i dont feel like im endorsing anyones views or anything 00:35 DeepThgt i just dont care of the opinions of a dancing monkey 00:35 DeepThgt they are there to dance and should sftu and dance 00:36 erle for example, do you know the movie starship troopers? at least some people who did not know it was made by a guy who hates nazis misunderstood it (though i would argue that neill patrick harris in the leather uniform is the point where you should realize the protagonists are NOT the good guys) 00:36 DeepThgt i have heard it was an attempt at lampooning the original story 00:37 DeepThgt but it falls flat at that 00:37 DeepThgt and just comes off as camp 00:37 DeepThgt the only real message one gets outta the movie is the only good bug is a dead one 00:37 erle did you watch it? 00:37 DeepThgt several times 00:37 erle it is very campy, but in the same way that the lion king is campy 00:37 erle (scar's song) 00:38 erle i think one of the best scenes is the gender-neutral shower scene. you have all these beautiful young soldiers … but they only talk about war. they are horny, but only for violence! 00:39 DeepThgt well, i imagine war is a common topic when at war, and they also discuss love in the same scene 00:39 erle it's a bit like contemporary superhero movies. everybody beautiful, but no one flirting. 00:39 DeepThgt eww capesh 00:40 erle (i'd argue that superhero movies that are not at least partial deconstructions are also inherently right-wing, regardless of the opinions of the authors) 00:41 DeepThgt i cannot say im intimately familiar with superhero franchises, but i cannot say id see anything id call right wing, unless you are referrirng to what americans call right wing 00:41 DeepThgt right wing is pro monarchy or theocracy 00:42 erle well, a lot of superhero movies are very authoritarian in structure. those who want to change the world are the villians (even if they have good intentions). the superhero keeps the status quo, through violence. 00:42 MTDiscord that is a very weird definition of right wing 00:42 DeepThgt either way, not minetest so im gonna stfu 00:42 erle luatic good that you are there, can you help me fix the horizon in xcam? 00:43 MTDiscord probably not (i should be going to bed soon-ish), but what's up with it? 00:43 erle DeepThgt btw if you want to make that camera crafting mod, you you need more than an api that says ”snap a photo for this player and give them the item” ? 00:43 DeepThgt no 00:43 erle not even image size or field of view or so? 00:44 DeepThgt fov ya 00:44 erle or rendering quality? (supersampling) 00:44 erle luatic https://content.minetest.net/uploads/906fd58f4e.png 00:44 DeepThgt well, idk how fov would help tbh 00:44 erle luatic as you can see the thing is slightly off 00:44 erle i do calculate the vectors the following way 00:44 erle local dir = girl:get_look_dir() 00:44 MTDiscord so basically your left / right or up vector is probably off 00:45 erle local right = vector.normalize( vector.new( { x=dir.z, y=dir.y, z=-dir.x } ) ) 00:45 erle local down = vector.normalize( dir:cross( right ) ) 00:45 erle see any issues with that? 00:45 MTDiscord the right vector is sketchy 00:46 erle a friend told me this is the ghetto version of rotating it by 90 degrees lol 00:46 erle i believed her, she seemed trustworthy 00:46 MTDiscord clever ... though I think I usually cross +y with lookdir to get right. 00:46 MTDiscord yeah but rotating it around what axis? 00:46 erle also she said something about matrix and quaternion 00:46 MTDiscord I guess it doesn't work in gimbal lock, but neither would swapping x/z 00:46 erle and that i should do this differently 00:46 erle to not gimbal lock 00:46 MTDiscord wise words, but my existing quaternion implementation has skill issues 00:47 MTDiscord well at least the API somewhat sucks 00:47 MTDiscord i think it works? 00:47 erle do you have tests? 00:47 MTDiscord no 00:47 erle LOL 00:47 erle then i don't think it works :P 00:47 MTDiscord that is a fair assumption 00:47 MTDiscord hence why i want to rewrite it, with test 00:47 MTDiscord s 00:47 erle there is too much that can go wrong 00:47 MTDiscord agreed 00:48 MTDiscord for example i don't seem to have even documented which conventions i'm following? 00:48 MTDiscord like, how is the coordinate system oriented? 00:48 erle i suggest to look into TDD and get some reviewer who is not familiar with your code 00:48 MTDiscord i know how to write tests, i just didn't care enough 00:48 erle if you have no issues with me asking questions like i am 5 years old and doing this for the first time, i can do that 00:49 MTDiscord (i am aware that this untested impl is not up to high standards, in part by virtue of being untested alone) 00:49 MTDiscord if you want tested pure lua stuff from me, take a look at https://github.com/TheAlgorithms/Lua 00:49 MTDiscord sadly i don't have a reviewer scrutinizing my code there 00:51 erle from my POV the trick with testing first is that you end up writing APIs that are easy to use 00:51 erle instead of easy to implement 00:51 MTDiscord you need to find a tradeoff between the two 00:51 erle well, i have seen enough software with test cases that were obviously bolted on afterwards 00:52 MTDiscord if i write the tests second, i do notice API deficiencies 00:52 erle the funniest thing so far is apenwarr redo, the ”recursive” build system that can not recurse on itself because of some strange choice of data structure. 00:52 erle within it's testsuite it needs to do cursed things with the database holding the build state, otherwise the tests that call redo themselves would not pass. 00:53 MTDiscord Who is apenme and why do you keep mentioning them 00:53 erle lol 00:53 erle that took me way too long 00:53 MTDiscord App'n'warr? 00:54 MTDiscord 🤷 00:54 erle avery pennarun 00:54 erle oh btw 00:54 erle is there a name for the extremely-well made style of journalistic presentation where people gloss over important details, like johnny harris for example? 00:55 erle i keep noticing this kind of thing, where people do not lie and do not seem to have any kind of ideological reason, but they smooth over details that are inconvenient to telling a good story 00:55 erle because they are, for example, difficult to explain in 3 sentences or are incredibly nuanced 00:56 erle this kind of stuff also happens in software, to an extent. you can not bullshit the computer, but you can simply pretend in the documentation that something does not exist and most users will not notice if it is well-hidden hehe 00:56 MTDiscord "fitting the narrative"? 00:56 DeepThgt i thought that was just journalistic SOP 00:57 MTDiscord you say i can not bullshit the computer, but i got a bull, and i can fit quite a bit of its shit into the computer case. 00:57 erle luatic i always thought that was the name for doing it out of ideological reasons 00:57 MTDiscord mhm, does a narrative need to be ideologically motivated? 00:57 erle i want one that purely covers the storytelling aspect though 00:57 erle hmmmmmmm 00:57 erle smilie_thonk.jpg 00:58 MTDiscord "narrative" is a term from storytelling 00:58 MTDiscord "a spoken or written account of connected events; a story" 00:58 MTDiscord Ideology isn't always a thing that the speaker is consciously aware of. 00:59 erle yeah, obviously there is a lot of cultural osmosis going on 00:59 erle (see: every story influenced by lovecraftian horror ever) 01:00 erle for something completely different, what do you do with the leftover water-vinegar-spices mixture from a jar of pickles? i found that cooking rice in it gives it an incredible taste 01:00 MTDiscord anyways erle for debugging, set up some particles; spawn them every globalstep, give them a short expiration time. spawn a particle at eye pos + look dir. that should be at the center of the screen. spawn a particle at eye pos + look dir + right. that should be, well, to the right of the center. if those two particles are correct, an "up" vector obtained as the cross product of the two should be correct too (though you may need to flip some 01:00 MTDiscord signs). 01:01 erle luatic nice tip. i already did it by just spawning the “lens” through which i cast though. this is why i *know* the thing is wrong. 01:01 erle i just don't know how to construct the correct one 01:01 MTDiscord it isn't easy. 01:02 erle well, i didn't do it because it was easy 01:02 MTDiscord i think i had this issue a while ago. i think i might've even "solved" it pretty much the way you now "solved" it. but i also think it probably didn't matter, because my spread was circular. 01:02 erle i did it because i thought it was easy when i came up with it 2 days ago 01:02 erle wdym? 01:02 erle like what was your problem? 01:02 MTDiscord yeah, now i remember. i did this twice: once for spiraling down, once for adv weapons. both have, well, weapons, and the weapons need spread, and that spread needs to be orthogonal to the look dir. 01:03 erle well that is exactly what i need 01:03 erle and circular vs rectangular is not really an issue is it? 01:03 MTDiscord you need the "right" vector to not be rotated 01:03 MTDiscord otherwise you get the rotation in your picture 01:03 MTDiscord rotated around the look dir, that is 01:03 erle well how to do 01:04 MTDiscord weapons with radial-symmetric spread don't care about such a rotation 01:04 erle oh now i get it 01:04 erle lol 01:04 erle sorry 01:04 MTDiscord i swear if the minetest game jam judges voted based on the quality of algorithms and math in the games we would have won ^.^ 01:05 erle math. not even once. 01:06 MTDiscord but probably nobody would have even noticed if we just used a random offset in a cube to randomize the directions of projectiles (possibly with normalization afterwards), even though that skews the distribution. 01:06 erle luatic btw if you want to be funny, tell me where the sun is in the picture i make with xcam and i can render it 01:07 erle then players could photograph the sunset in minetest hehe 01:08 MTDiscord luatic: if your algorithms and math could have actually run on a real-world computer, you'd have probably fared better than you did. 01:08 MTDiscord valid point 01:08 MTDiscord but good mapgen in lua is very hard to do 01:08 erle what game was it? 01:09 erle and was it dog slow? 01:09 MTDiscord depends on what you consider "good" 01:09 MTDiscord erle: spiraling down and.. the mapgen was 01:09 MTDiscord a dog would be much faster than the game, id say the game ran at more of a... tortoise pace 01:09 MTDiscord I'm on a thinkpad T430s and it was painful. 01:10 MTDiscord i blame minetest and luajit 01:10 MTDiscord was that last years jam or before 01:10 MTDiscord I blame how ambitious you were in your math and not being willing to cut corners 😏 01:10 MTDiscord that too 01:10 MTDiscord GX: last year 01:10 MTDiscord the year before i tried to write 4 arcade games at once and now i have a model-accurate particle-based lunar lander explosion. 01:10 erle memo to myself: do not let luatic near the raytracer 01:11 MTDiscord oh also the lunar lander basically works 01:11 erle (it is already very slow) 01:11 MTDiscord do not let luatic near the anything, lest it be assimilated into modlib 01:11 MTDiscord heh 01:12 erle modlib dependency system for its parts when 01:12 MTDiscord wdym dependency system? 01:13 MTDiscord You mean like breaking modlib up into modules so you can assemble trimmed down optimized versions? Would be kinda nice. 01:13 erle hehehe 01:13 erle yeah 01:13 erle modlib should be like a dozen mods 01:13 MTDiscord that'd be like < 1k lol per mod. heresy. 01:13 muurkha luatic: that sounds like a good lunar lander 01:14 MTDiscord i should probably polish it sometime 01:14 MTDiscord To be fair NodeCore's internal API was once a single huge mod, and then it evolved into a somewhat less huge mod with like half a dozen other mods with pieces spun off ... but becuase it's a pain to figure out exactly what things I need and don't need, and they're IN the game and all get loaded anyway, I just created a meta-mod that depends on them all and I just always depend on that, so Task Failed Successfully 😆 01:14 MTDiscord but there's always something else, something more interesting or pressing to be done.. 01:14 MTDiscord and then minetest always gets so hella frustrating 01:14 muurkha warr1024: apenwarr is the first person who implemented djb's redo, but erle isn't a fan of apenwarr's design choices 01:15 MTDiscord like i wanted non-voxely-surfaces for my lunar lander 01:15 MTDiscord i had to make the moon dust a liquid 01:15 erle muurkha i do not think he is even the first? only the most popular? 01:15 MTDiscord Ah, haha, I keep forgetting that djb does stuff other than cryptography :-) 01:15 MTDiscord (with modlib's advanced liquid raycasting capabilities this wasn't an issue, but it's still a dirty hack) 01:16 erle Warr1024 djb wrote some old makefiles like he had a redo-ish system and was just translating it to makefile syntax. i asked him twice in person about it, did not get an implementation, so i made my own. 01:17 muurkha I don't know why your horizon is a bit tilted 01:18 MTDiscord anyways, honestly i'm quite proud of how spiraling down's mapgen turned out, except in terms of performance, but i really don't see how to make it faster without compromising on the parameters; it has to place multiple layers, insert cavities (ellipses) connected by tunnels, add ore clusters (with "weaker" ores towards the edges), decorations (which follow some "grouping" rules) 01:18 erle muurkha btw the design choice is pretty much “it does not work recursively” which is a bit weird for a build system advertised as recursive 01:18 MTDiscord it's basically a full-fledged mapgen which does give quite a unique vibe 01:19 erle here is a redo timeline https://web.archive.org/web/20160818124645/http://jdebp.eu./FGA/introduction-to-redo.html 01:19 MTDiscord and if (1) minetest allowed mapgen to run in multiple, separate threads and (2) we had some way to write mapgens in a faster language than lua, it would actually be decent 01:19 MTDiscord (1) probably suffices to make it half-decent given the constraint of keeping lua 01:19 erle i question the wisdom of “it is slow, so let's make it threaded” 01:19 erle it will still be slow then 01:20 muurkha interesting, I guess when I was a kid I didn't recognize the racism in Mulberry Street, On Beyond Zebra, and Ran the Zoo. I don't think I ever read the others 01:20 muurkha I'm not sure if I can just choose to ignore those views and continue enjoying without somehow endorsing those views myself. 01:20 muurkha you can except in one case 01:21 erle wait what case 01:21 MTDiscord erle: multithreading increases the throughput; multiple mapblocks can be generated in parallel. 01:21 erle you mean except the overly racist works? 01:21 muurkha which is the case that the view is specifically that you shouldn't enjoy the works of artists you disagree with 01:21 muurkha because you are somehow endorsing that view by doing it 01:22 erle i am kinda glad that hitlers paintings are genuinely bad – otherwise we would have had such a discussion in art class with lots of edgy 16 year old teens 01:23 erle luatic really slow code is often not helped much by a linear speedup though. are you sure that this would help enough? 01:23 erle maybe you could just link the especially slow portions here 01:24 erle then all of us can take turns saying ”this is not necessary” and you can say ”but it is accurate” and then i can finally be on team ”better fast than correct” 01:24 muurkha I think it's reasonable to argue that superhero comics and movies are sort of inherently pro-monarchy or theocracy. Superman is a literal god and the whole comic is about how it's good for him to be free to use his divine powers to smite evildoers without answering to any human authority 01:24 erle this is what the deconstructions target actually 01:24 erle e.g. superman: red son 01:24 MTDiscord erle: maybe not enough, depending on how many threads. but IIRC the numbers were in the couple hundred millisecond (think 200-400) range. 01:25 muurkha there's also the issue that due to the Comics Code most of them engage in no questioning whatsoever of the justice of the established power structure 01:25 erle are you sure that's the fault of the comics code? 01:25 MTDiscord (this is not all that bad once you benchmark how long it takes to just fill a mapblock with random nodes) 01:25 muurkha DeepThgt: fov helps because you can take zoom photos 01:25 muurkha the right vector looks fine to me 01:25 erle i was taking zoom photos until i made the “lens” bigger 01:26 muurkha although who knows, maybe it's actually left ;) 01:26 erle could be left yeah lol 01:26 DeepThgt lok well fov too 01:27 erle WHO KNOWS 01:27 MTDiscord muurkha: you can't possibly expect to get the left/right vector just by rotating your look dir 90° around some axis. simplest counterexample: what if your lookdir is parallel to that axis? 01:27 erle i mean i was pretty much planning ending up with an upside down picture when i had this canvas camera obscura thing. but i am not doing that and i still have to switch x and y, so … 01:27 erle no 01:27 erle i mean x and -x 01:27 erle damn i sleepy 01:28 erle Need For Sleep 01:28 MTDiscord The "safe" way to get the left/right vector doesn't even involve lookdir, you have to use get_look_horizontal and then some trig separately. 01:28 erle oh that's some tip 01:28 muurkha erle: I think apenwarr is the first to publish, though plausibly djb wrote one that he never shared, as with qhasm 01:29 muurkha aha, thanks for the timeline 01:29 MTDiscord Haha, I sort of assumed maybe you already knew about get_look_horizontal but just didn't want to deal with it because the alternative works okay in like 99.9%+ of cases anyway 😆 01:29 erle muurkha alan grosskurth (2007) for his university thesis was first to publish 01:29 muurkha aha, apparently Alan Grosskurth implemented it in 02007 and I just never noticed. that's awesome! 01:30 erle which makes apenwarr's redo even more weird. it tries to be cleverer than all other implementations and has some neat features, but what use is a clever implementation that is less reliable than a naive implementation if the whole purpose of the thing is to get something correct that other systems do not? 01:31 MTDiscord anyways, i'll go to bed now. good night. 01:32 muurkha erle: I do think you can enjoy overly racist works without endorsing racism, although it depends on the context. like maybe you shouldn't show Triumph of the Will at a fundraiser for a Palestinian charity because it is probably going to get appropriated by racists (even though there's nothing specifically racist in the film itself) 01:32 erle in particular, scheduling parallel build threads with apenwarr redo puts particular constraints on your build that it does not ensure hold. 01:32 erle like, i would be happy with some system that just bugged out then 01:32 erle but assuming something and then silently failing because you don't actually check is less useful than gracefully failing 01:32 muurkha erle: really slow code is often helped sufficiently by an order-of-magnitude speedup, and I've used 64-core Linux amd64 machines 01:33 erle i have no 64 core linux machines, i was more thinking in terms of ”if this gets 8 times as fast, but is accidentally quadratic, that won't help much” 01:33 erle gets to be 01:33 muurkha yes, it is definitely the fault of the Comics Code that the comics that engaged in any kind of social or political critical thinking had to stop publishing 01:33 muurkha in the US 01:33 erle i see 01:34 erle weird that it lasts to this day 01:34 muurkha luatic: you can definitely get the left-right vector by rotating your look dir 90° around the Y-axis. if your lookdir is parallel to the Y-axis, you've still rotated 90°, after all :] 01:34 muurkha you need to rotate the up dir as well 01:34 erle dr. horrible's sing-along blog put a good spin on it: “it's not about MAKING money. it's about TAKING money” 01:35 muurkha maybe apenwarr didn't think Grosskurth's implementation was good enough to be useful 01:35 erle apenwarr definitely wrote do, a public-domain shell script that rebuilds everything every time 01:35 erle it is very useful 01:36 erle the thing is, you can see from the failure modes that apenwarr redo is one (maybe the only?) implementation that tries to act to the outside world as a recursive build system, but is actually just a normal one in a trenchcoat. 01:37 muurkha I agree that multithreading doesn't help much with accidentally quadratic code, though it does help some. I mean if you can get embarrassing parallelism from your accidentally quadratic code [maybe it's quadratic per mapblock] you can still process 8 times as big a problem on 64 cores. but usually EP requires that it be linear-time on a uniprocessor first 01:37 erle to work, it needs the concept of a ”run”, in which something is built. you can not nest ”runs” 01:37 MTDiscord If your code is accidentally O(n^2) instead of O(n), you can still get benefits running it on a quad-core as long as n <= 4 😏 01:38 MTDiscord I don't remember the complexity analysis, but I think spiraling down's mapgen should be roughly expected linear or linearithmic time, not quadratic. 01:38 erle luatic i have a tip for you that does not require complexity analysis: write code on a 10 year old computer 01:38 muurkha the influence of the Comics Code lasts because almost all of the popular comics are from the Comics Code period, even including somewhat subversive ones like V and Watchmen: https://en.wikipedia.org/wiki/Comics_Code_Authority 01:38 MTDiscord The problem is really just that it takes too damn many milliseconds, i.e. the constant factors, and I don't see much more potential for optimization without compromising on parameters. 01:39 erle muurkha how did a queer villain like V get past the radar though? 01:39 MTDiscord erle: can you even run any pure lua mapgen properly on your 10 year old computer? 01:39 erle not this shit again 01:39 MTDiscord Pretty sure erle's computer is older than mine and mine is 11 years old. 01:39 muurkha V was the villain? 01:39 muurkha ;) 01:39 MTDiscord IIRC when I benchmarked I figured out that the most simple pure Lua mapgens - like setting random content IDs - were already in the 50-something millisecond range or something. 01:40 muurkha maybe because he was plausibly the villain 01:40 erle muurkha well, from societie's point of view hehe 01:40 MTDiscord (50ms per register on generated call) 01:40 erle luatic but i meant it. when i wrote my synthesizer code for libglitch i purposefully chose the slowest computer i had at the time. 01:41 erle rationale: if it runs there, it probably runs on faster ones 01:41 MTDiscord Is setting random content IDs actually the simplest? A lot of it would be affected by your looping discipline, and the random function itself is a bit of a performance blackbox... 01:41 erle (with a synthesizer you can not afford not rendering a sample, as then you get stuttering music) 01:41 MTDiscord the loops were proper 01:41 erle show the code 01:41 muurkha luatic: register? 01:41 MTDiscord i also did just simple layered mapgen, also in the 50 ms range iirc 01:41 MTDiscord muurkha: register_on_generated 01:42 muurkha erle: I have plenty of computers that libglitch won't run on 01:42 erle the simplest mapgen is obviuosly setting every node to default:stone 01:42 erle muurkha they are probably slower than what i had at the time 01:42 muurkha luatic: oh, sorry 01:42 MTDiscord I generally insist on testing MT mods on the slowest machine I've got that will competently run MT at all. The minimum system requirements for a thing tend to gravitate toward whatever kind of system the developer uses, so don't get too powerful of a dev machine unless you want to limit your audience unnecessarily. 01:42 muurkha erle: mostly they have less RAM 01:42 erle muurkha oh, i did not realize it was limited by that! 01:42 MTDiscord @🕳 you got a link to that mapgen code? 01:42 erle ig you could reimplement it in C, but even then you need the ringbuffer 01:43 muurkha sure 01:43 erle i agree with what Warr1024 says. mineclone2 devs having much more powerful computers than their playerbase has lead to very sad bugs. 01:43 MTDiscord @warr1024 not the simple ones, no; that was early on in testing. the complex one is here: https://github.com/spiraling-down/game/blob/master/mods/sd_map/gen.lua. 01:44 erle the latest of which is it simply not working on devices with too little RAM (the new mineclonia works on those devices though, allegedly it has less code and more features hehe) 01:45 MTDiscord Well, it's got all the necessary microoptimizations I guess, it's just ... really complicated. 01:45 erle -- lazily creates noises (ahead-of-time is not possible) 01:45 muurkha ring buffers are fine most of the time, though someone did apparently reimplement my bytebeat "crowd" for the 6502 01:46 erle -- Each transition between two layers needs its own noise 01:46 erle haha this is where i would start the fakery if this turned out to be performance-relevant 01:47 erle (it is probably not, right?) 01:47 erle local chunk_size = 40 -- TODO this is not optimal due to offsets 01:47 erle what effect does this have luatic? 01:47 MTDiscord just placing the layers was still bearable. it's just that all the features together, even after optimizating using the LuaJIT profiler, were not optimal. 01:48 erle and you could, of course, not rip any one of them out or simplify them 01:48 erle as that would have messed with the vision 01:49 erle luatic in this optimized form, what is most expensive still? 01:49 MTDiscord erle: I don't remember, I'd have to fire up a profiler and check again 01:50 MTDiscord the chunk size is effectively a chunk size the mapgen uses for chunk features that go cross-chunk 01:50 erle -- Generate map: Loop over nodes in Z-X-Y order; 01:50 erle -- this is not optimal for cache locality (Z-Y-X would be optimal), 01:50 erle -- but it is required to minimize expensive perlin noise calls 01:50 erle why are those calls so expensive? 01:51 MTDiscord because they have to compute the perlin noise at a point 01:51 MTDiscord it's just that when you're doing layers, it's best to think of the world in terms of "stacks" rather than.. X-lines 01:51 erle would it have been possible to pre-calc something here? 01:51 erle like, the entire map? 01:51 erle place mapblocks as schematics hehe 01:52 MTDiscord erle: precalculating the entire map is something that has been considered in hindsight 01:52 erle so, would it have been possible? 01:52 MTDiscord IIRC the mapgen wasn't necessarily the worst thing. The ridiculous number of mobs was also a good contender. 01:52 erle i know that minetest struggles placing big schematics 01:53 MTDiscord It's not impossible to ship a precalculated map but then you'd be suffering in download times instead of compute... 01:53 erle would you though? how big can a mapblock be 01:53 MTDiscord I've found modgen to be a pretty impressively efficient way to pull in pregenerated maps... 01:53 erle i need to sleep, will read later 01:53 erle good night 01:53 MTDiscord the mobs have since been fixed. simply counting mobs in an area and not spawning new ones at some point does the trick. 01:54 MTDiscord https://github.com/spiraling-down/game/blob/master/mods/sd_mobs/max_count_by_chunk.lua here's the trick for any mob mod authors btw. simply divide the world into chunks, count by chunk, impose a limit. with such an efficient index, no inefficient get_objects_inside_radius calls are needed. 02:00 MTDiscord I use the trick of dividing the world up into a grid and doing an O(n) once-over indexing myself in a number of cases ... but it makes me wonder about how you can do a thing without having to be limited to the grid. Like if I want to efficiently tell every entity that is within N distance of every other entity with euclidian distance. IIRC there's a way you can speed things up with a grid index, but it's not quite so simple as checking 02:00 MTDiscord the one cell that the one entity ends up in; you have to check neighboring cells, and then post-filter... 02:01 MTDiscord IIRC wasn't there supposed to be some PR that was going to make this happen automatically for objects_inside_radius using some kind of spatial indexer? 04:19 fluxionary i'm just jumping into a dead conversation and then leaving, but get_objects_inside_radius and get_objects_in_area very much need to use more efficient data structures to reduce the time it takes to execute them. on busy servers like your-land, these functions can demand 90% or more of the total runtime of the server. i've looked into a solution to an extent, but updating such structures efficiently every server step is far from trivial. i've 04:19 fluxionary found a couple of relevant papers but i haven't tried to implement them and i'm not even certain they'd help in practice 04:25 fluxionary when you've only got 100 active objects on the server, iterating them all doesn't cost much. but if you've got 10000 on average, and most of those objects are calling `get_objects_inside_radius` or `get_object_in_area` every few server steps, it adds up 04:27 MTDiscord didnt lmd/josiah have a pr to use spacial trees or something at one point? 04:28 MTDiscord https://github.com/minetest/minetest/pull/12040 ah right, it never went anywhere 04:47 MTDiscord I've got like in the low thousands sometimes, and they hurt rendering quite a bit, but with a combination of no on_step hook and careful O(n) indexing when I do process them, there's very little server pain from them. 04:48 fluxionary @Warr1024, you're talking about single player? it gets much worse in busy multiplayer servers with lots of hostile mobs 04:49 MTDiscord Nah, mostly multiplayer. 04:50 fluxionary hm. i'm curious to see what you've done. thinking on it, how could you ever update mobs without an on_step hook? 04:50 MTDiscord Though the actual number of entities I need has been cut down a lot since converting some stack nodes to use actual mesh nodes for rendering. That helps a ton. Cobble storage used to be a massive frame rate sink. 04:50 MTDiscord I just don't do mob entries. 04:50 fluxionary entries? do you mean entities? 04:51 fluxionary you're just talking about static entities like in smartshops and shelves and stuff? 04:52 MTDiscord Stack nodes and such, but basically probably something like that 04:52 MTDiscord MT can handle a lot of static entities fine, it's just a problem dealing with ones that are constantly moving. 04:53 MTDiscord This is why some hosts pay like $5 a month for a server and have tons of capacity to spare while others pay $50 a month or more and are always struggling. 04:53 fluxionary "stack node" isn't a term i understand. i do a lot of work w/ mods and mobs, can you explain it in other terms? 04:54 MTDiscord A node representing a stack of items. You can't display those as a node so you need an entity to display them and the node itself is just airlike. 04:56 fluxionary Warr1024, so you're talking about a replacement for "builtin:__item" 04:57 MTDiscord I guess you've never actually seen NodeCore then? 04:57 fluxionary oh, i *have* seen NodeCore, but i don't think of it much 04:57 MTDiscord Builtin items are still a thing, but they only live as long as the item is moving. 04:58 fluxionary i never played on a multiplayer NodeCore server, i don't know anything specific to the performance of such servers 04:58 fluxionary mostly i've played on things that were based on minetest_game or things close to that 04:58 MTDiscord The fact that a few things require use of entities to display makes entity performance interesting. 05:00 MTDiscord I left MTG in 2018, and it was so long since I played it that when I played Piranesi, I found all the artwork really novel, but everyone was complaining about these old MTG textures they'd seen everywhere before. 05:02 fluxionary is Piranesi a public server? i'll have to check that ouot 05:02 MTDiscord No, it's a game, mostly SP. It placed 2nd I think in the last jam, and I ended up making a remake of it called the Piranesi Restoration Project which is now sort of the canonical edition. 05:02 fluxionary on mtg-ish servers, the worst performing entities are signs - complex composures of small textures. if you've got a ton of signs near /spawn, say goodbye to any potential low-powered clients 05:03 fluxionary Warr1024, i should check that out. i'm mostly interested in the interests of big multiplayer servers, but i do like to keep track of all creative aspects of the game 05:04 MTDiscord It is kind of funny how some entities can bog down a server but have little impact on a client, while others are okay on the server but just murder clients 😂 05:05 MTDiscord There are a lot of really interesting experiences in the jam games, and non-souplike games in general. Not all of them have much multiplayer potential, but some of them do nevertheless. 05:05 fluxionary Warr1024, well, there's at least some heuristics to explain that. some entities require sending a relatively large amount of data to the client, and the data needs to be decoded, and that isn't efficient. 05:06 fluxionary Warr1024, other entities have expensive on_step callbacks, and beat up the server 05:06 MTDiscord Entity rendering is particularly inefficient, so each visible entity incurs some baseline cost, and lots of little ones add up quickly. 05:07 fluxionary Warr1024, that's true too. the client has to draw every entity in range, even if the player can't see it 05:07 fluxionary though there's a little bit of culling going on 05:08 fluxionary some drawtypes are less expensive than others, which was the major reason why i forked the smartshop mod 05:08 MTDiscord There is no batching of any kind for entities, and apparently this hurts pretty badly. 05:09 MTDiscord Hmm, yeah, tool extrude meshes are painful too, especially with higher res textures 05:11 fluxionary are you talking about what the client sees as the wielded item, or what other players see from e.g. 3d_armor's wielditem submod? 05:11 fluxionary also this piranesi server what even is this. infinite maze? 05:13 MTDiscord Yeah, it's like a myst-like puzzle game set in a house that's hard to navigate. There are a lot of clues and stuff. 05:13 fluxionary i'm half-asleep but i mean to check this out sometime in the future. an interesting concept 05:14 MTDiscord The extrude mesh is that thing that MT does to turn a 2d image into a 3d model, like yeah, tools are a common use. 05:15 MTDiscord Dunno about 3d armor mod but I assume it works a lot like in NodeCore... 05:15 MTDiscord I think in all cases I just use the world item visual type and MT handles several different drawing modes. 05:16 MTDiscord wielditem dyac 05:16 fluxionary it's the "wielditem" drawtype, when used w/ an item that doesn't have a 3d model (mesh/nodebox/node) 05:19 fluxionary hm, maybe not node. but mesh and nodebox for sure 05:23 fluxionary https://gitea.your-land.de/your-land/bugtracker/issues/3723 05:24 MTDiscord Haha ick. Definitely worth cutting down on those if you can. 05:25 MTDiscord One issue with building spatial indexes though is knowing when during the server step cycle you should clear and rebuild the index ... 05:27 fluxionary yeah, there's descriptions of algorithms about rebuilding it when things are modified, but i haven't found much about updating only on a discrete update step 05:27 fluxionary and the vague algorithms are already pretty complicated 05:32 fluxionary zzz going to sleep, good talk 09:06 erle fluxionary you should check out cora's unicode signs and investigate it for performance 09:07 erle to see if it is improves the situation over the texmod signs 14:46 erle turns out i totally can get normals for the surfaces i hit and use that for lighting: https://mister-muffin.de/p/8Grn.png 16:13 celeron55 as you're using raytracing you could add water reflections 8) 16:19 erle indeed, but right now i am trying to make the water half transparent 16:19 celeron55 that could be more difficult actually 16:20 celeron55 as funny as it sounds 16:20 erle maybe i just need to cast twice 16:20 erle and average the results 16:22 celeron55 if you randomly make rays hit water and randomly not, you could get an interesting effect 16:22 celeron55 i mean, per ray 16:23 erle i think that happens already kinda because of the supersampling but give me a moment 16:23 jonadab That would come through as ditthered, celeron55. 16:23 erle water dithering neat 16:23 jonadab *dithered 16:24 erle this is pretty ghetto 16:24 erle exactly how i like it 16:25 MTDiscord IIRC you can just continue a raycast, you don't need to bail out on the first hit, right? So for semitransparency, when you hit water, just remember that you did, and continue on, and when you reach the end, average in the water color. 16:25 erle oh LOL 16:25 MTDiscord For reflections, yeah, you'd have to kick off another raycast. 16:25 jonadab Slightly smoother dithering could be achieved by replacing the random selection with modular arithmetic on a ray count. 16:25 erle Warr1024 the problem is that if you continue that kinda looks shitty at some node/nodebox edges 16:25 erle eg. a chair in water 16:26 jonadab Although you'd want to offset it on each line/row of rays. 16:26 jonadab If you want water to look actually realistic, you have to do refraction. 16:27 jonadab But that juice is probably not worth the squeeze. 16:27 erle celeron55 it works, but WELCOME TO THE EXTREMELY MOIRE EFFECT WATER 16:27 MTDiscord If you end up doing a 2nd raycast anyway, refraction wouldn't cost much beyond just adjusting the angle and a bunch of potential fine-tuning work. 16:28 jonadab It wouldn't cost much CPU time. Programmer time, I'm not sure. 16:28 MTDiscord But if the point of photography is to capture the scene you actually see, then you probably shouldn't do stuff like that unless somebody is going to make an at least optional shader or something to do it in the regular MT client. 16:29 jonadab If the point of photography were to be exactly what you see in-game, he wouldn't be doing black and white. 16:30 jonadab But I was mostly being silly when I mentioned refraction. I don't think users will _expect_ that. 16:32 MTDiscord An optional water reflection shader? Who would do such a thing? 16:34 jonadab People who think realism is more important than how much fun the game is to play. 16:34 jonadab Personally I dislike shaders. They make the world harder to visually parse. 16:35 MTDiscord Sorry, but i find that take to be rather narrow minded. I respect your opinion though 16:36 jonadab It doesn't bother me if other people want to use shaders. 16:36 jonadab I just don't want to use them myself. 16:36 MTDiscord Many people are able to appreciate both visual and mechanical complexity. Not to mention certain graphical effects enhance game mechanics. Also bold of you to assume reflections must be realistic. 16:37 jonadab *shrug* 16:38 erle i also think they make the world harder to visually parse. but i find it funny that you can probably cheat in some games using shadows and reflections. 16:39 MTDiscord Do you find it difficult to parse the real world? 16:39 jonadab I mean, if you can change how things are rendered, you can cheat in much more straightforward ways, e.g., see through walls. 16:39 jonadab Sometimes, @greenxenith 16:40 erle greenxenith, i do indeed and that is for example why i have bandstop filter glasses that filter out blue lights 16:40 jonadab e.g., it's hard to see the road when driving east around sunrise. 16:40 erle like at night i get disoriented by flashing lights from police and ambulance 16:40 MTDiscord Cheating via shaders is a moot point 16:40 erle if they drive by 16:40 erle tired: cheating via shaders. wired: cheating via looking directly at the opengl. 16:41 erle oh this is texture x? must be an enemy 16:41 MTDiscord Thats just looking at the rendered world with extra steps 16:42 jonadab "You're still using an external computer? I just run the game directly in my brain!" 16:42 MTDiscord I don't particularly care much one way or another about shaders (I'll turn them on for screenshot but off for day to day play) 16:42 MTDiscord I would like to say I also respect your opinion, but since you didn't offer the same courtesy I probably shouldn't either. 16:43 MTDiscord The fact that a suggestion might result in additional realism doesn't mean that you can just drag realism in as a strawman to argue against the suggestion. While I don't care too much about realism, I don't see what the point is in going out of your way to avoid it. 16:44 jonadab No, I didn't mean that. 16:44 jonadab I just don't know what shaders could contribute *other* than realism. 16:44 MTDiscord If you want to make a "don't be so realism-obsessed" argument you should probably wait for the other person to mention realism first 😆 16:45 jonadab (Setting aside weird hacks like using them to see around corners.) 16:45 MTDiscord What I'm saying is that it's not a good idea to put a whole bunch of shader-realism into the photography mod if there isn't a corresponding experience with the game itself outside of the photography mod. 16:45 jonadab That's fair enough. 16:45 erle jonadab the dithering shader i have seen actually makes the world more smooth 16:45 erle there could also be shaders for toon effects like outline ig 16:45 erle but those can easily be done otherwise 16:46 MTDiscord It would be weird to setup a scene a certain way, then go to take a photograph of it and then find out that because the photography thing does reflections and refraction with water that MT does NOT do, your photo came out looking dramatically different than the scene you lined up. 16:46 erle i will not put shader-stuff in the photo mod 16:46 erle i just want transparent water and MAYBE transparent glass (but then i have the issue with several glass plates behind each other) 16:47 MTDiscord haha, yeah, for glasslike render types, I think the mesh generation stuff does a lot of work that raycast is not going to be much help for you with. 16:47 MTDiscord Like you'll have to do a lot of "would this surface actually be drawn or not" logic all on your lonesome. 16:48 MTDiscord I would think that at least attempting to handle transparent glass might be important, while not supporting it for water is a more reasonable choice, since there are configurations of MT that make water opaque, but none that make glass opaque. 16:49 MTDiscord So if you just supported "MT with all the fancy shit turned off" then at least there would be configurations under which the camera's output makes sense. 16:49 erle well i just handled the water transparency bit i think 16:50 erle now give me a formula to draw the sun into the sky lol 16:50 MTDiscord Haha, seeing all those black and white photos, now I kinda want to see the camera mod support "infrared" and do heat photography. You'd have to have modders define a bunch of heat source stuff (though you could at least roughly infer from some heuristics like the igniter group) 😄 16:51 erle i am pretty sure that exile is probably weird enough to already define temperature everywhere 16:51 erle otherwise how would players die of freezing 16:51 MTDiscord NodeCore doesn't define it for everything but it has heat emitters pretty explicitly marked. 16:51 MTDiscord Actually, if I had film photography in NodeCore, I wouldn't even take pictures of stuff, I'd just develop the unexposed film to check for radiation 😆 16:52 erle lol neat 16:52 erle so what exactly is radiation in nodecore? 16:52 erle a node attribute? 16:53 MTDiscord Nodes and items have a lux_emit group, with the intensity being proportional (I think linearly) to the group value. 16:54 MTDiscord Similar with radiant_heat or whatever it's called; those only pass through sunlight_propagates though. 16:54 MTDiscord Lux radiation on the other hand can be absorbed or scattered by various material; there's a group to explicitly set it, and a heuristic function as a fallback for those that don't. 16:56 MTDiscord Haha, actually, a photography film that's sensitive specifically to radiation in NodeCore could be really useful high-tier equipment for fine-tuning radiation shielding. The radiation exposure algorithm actually uses raycasts already (I cast a random ray backwards out from the player and see if it strikes a radiation emitter). 16:57 MTDiscord Oh, no, actually, it does NOT use raycasts; I just step the ray manually. The fundamental frequency of lux radiation is ~1m so I have to allow for things like tunneling 😳 16:57 MTDiscord BTW shaders just define how a scene is rendered, jonadab, so the blocks you see regularly are also shaders. They have nothing to do with realism intrinsically. 16:58 erle warr1024 celeron55 jonadab greenxenith … partially transparent water, here: https://mister-muffin.de/p/RHNk.png 17:01 erle so what other effect is missing 17:01 erle don't say clouds lol 17:07 MTDiscord Haha, damn, they stack if you take the same scene twice? That's kinda nice 😄 17:07 MTDiscord You had some screenshots earlier where you had placed the photos against nodes in the world, right? 17:07 MTDiscord Now support taking photos of THAT. 17:08 MTDiscord (Ironically I bet it would actually be pretty easy) 17:08 erle what do you mean they stack? 17:08 erle oh 17:08 erle right 17:08 erle yeah i made this on purpose 17:09 erle instead of random variations i use a table with predictable offsets for the supersampling 17:09 erle this allows me to see if the rendering changed at all if i change code 17:10 MTDiscord Heh, actually the idea of "instead of using a digest of the scene in metadata, just use a new random number eachtime" wouldn't have occurred to me at first 😄 17:10 erle Warr1024 i do not think it would be so easy to take photos of photos in the world, because all i get is the node type and the normal. i could figure out where i hit and do some linalg i guess to figure out which pixel, but why don't you do it lol 17:10 erle a digest of the scene is not what i want though 17:11 erle i mean, i basically want the supersampling to send out more rays that ideally are slightly going into a different direction, to get the depth-of-field effect (and also a higher resolution kinda) 17:11 MTDiscord You're using raycast, aren't you? They're supposed to have intersection_point or something with the actual high precision place you hit. If you can figure out which pixel in the photo matches the in-world coordinates, you could yoink that pixel out of the original photo... 17:11 erle so hardcoding those directinos makes sense 17:12 erle pointed_thing.intersection_point and pointed_thing.intersection_normal 17:12 erle oh lol 17:13 erle this is funny 17:13 erle give me the math and i may do it 17:17 erle can entities have non-cube collision boxes? 17:36 erle idea: minetest ghostbusters game with human and ghost team. the ghost team are players only visible as dark shadows on photos and by indirect effects (e.g. sound of footsteps, whooooosh, torches extinguishing when they are near). the human team has cameras and a limited amount of ghost traps or whatever. ghost team must scare the human players to death, human team must catch the ghosts. 18:04 fluxionary entity collision boxes are currently always rectangular prisms aligned with the cardinal directions 18:44 erle Wuzzy btw did you see my photography mod? https://content.minetest.net/packages/erlehmann/xcam/ https://content.minetest.net/uploads/705be8a927.png 18:44 erle i wonder if you have any ideas on how to improve it 18:45 Wuzzy add color 18:48 erle can't easily 18:48 erle the shading right now is based on node name, normal vector on the hit surface and the light level 18:48 Wuzzy ahh thats how 18:49 Wuzzy i wondered how you got the grayscale color since i cant recall any function to get somthing like "pixel color" 18:49 erle oh there is also distance fog 18:50 erle node definitions have minimap_color but for reasons it is only exposed on the client 18:50 erle would be neat if it was exposed on the server, but i have no idea how much the server can actually do that 18:50 Wuzzy well. add a polaroid camera item, and a sound. give the player the item once it has "developed" 18:51 erle a sound would be funny hehe 18:51 Wuzzy hmmm 18:51 erle i think DeepThgt already had ideas to improve it 18:51 erle i think maybe i could add some noise to surfaces 18:51 Wuzzy oh the camera doesnt render plants correctly 18:51 erle no it does not 18:51 Wuzzy they render as cubes 18:51 erle because i just abuse minetest's raytracing function 18:52 erle well, do you have any idea what to do with plants? 18:52 jonadab erle: lens flair ;-) 18:52 Wuzzy not realy but plantlike nodes have a predefined shape so that might help 18:53 erle Wuzzy i am hitting the collision box i think 18:53 erle so if you want to make a game where you have to photograph players they have to be black cuboids 18:53 erle just label them SEELE-01 through SEELE-12 or so and it's okay ig 18:54 erle appguru i introduced normal-based coloring https://content.minetest.net/uploads/705be8a927.png 18:54 Wuzzy oh and async should definitely be utilized since the calculation appears to be slow. so creating a photo appears to block the entire server 18:54 Wuzzy found a bug. photo disappears when i place it 18:55 Wuzzy but in 5.8.0-dev 18:55 erle huh? 18:55 erle where did you place it though 18:55 MinetestBot 02[git] 04grorp -> 03minetest/minetest: Fix auto_install_spec being used as a table (#13970) 133944507 https://github.com/minetest/minetest/commit/394450758ed822b38a851f8c3ee601c68403e47e (152023-11-09T18:54:47Z) 18:55 erle i bet it's on the side of some node you pointed from above 18:55 erle the placement code should use raycasting too ig 18:56 erle so about those translations: if i input this to which function, what is the output? local string_assignment = S("string assignment") 18:57 MinetestBot 02[git] 04MisterE123 -> 03minetest/minetest: Fix misrendered fall_damage_add_percent calculation formula (#13969) 13fe8d04d https://github.com/minetest/minetest/commit/fe8d04d0b3c2e3af7c406fb6527f1b5230a30137 (152023-11-09T18:55:26Z) 19:00 Wuzzy S is a shortcut. it is implied the boilerplate code "local S = minetest.get_translator(translation_domain)" was called before, where translation_domain is a dev-chosen identifier that is usualyl equal to the mod name 19:00 Wuzzy the content of string_assignment should be the translated string of "string assignment" or, if no translation is available, the input 19:01 Wuzzy Minetest does some string magic behind the scenes for the "translated string" to work on clients but as a lua dev you dont have to worry about it. you can pass it around like a normal variable 19:02 erle i do not understand. can you maybe give me the *output* for that test file that you posted? 19:02 erle in german or english because i am not fluent in other languages 19:02 Wuzzy oh 19:03 Wuzzy ah you mean from the test script... lol right 19:03 Wuzzy i was talking about the actual output when executing the actual lua code, but you didnt mean that 19:04 Wuzzy erle, this is what my script has produced: https://mister-muffin.de/p/V0QX.txt 19:05 Wuzzy (file name: template.txt) 19:06 Wuzzy to get this output yourself. put the lua file in a dummy mod, with the code in init.lua, then create a directory called "locale", then run mod_translation_update within the mod directory. the script should then autogenerate locale/template.txt in the first run and update it in any subsequent runs when the lua file has changed 19:07 erle uh oh 19:07 erle thanks 19:08 erle so what is the simplest thing that could be tested here for a single line of input? 19:08 erle like: a combination of a function in the translator script, an input and an output 19:08 erle or is a single line not enough? 19:09 erle oh damn, could it be that everything important in this script is a side effect? 19:21 Wuzzy minimal lua file: S("Helloworld") 19:26 Wuzzy yeah this script relies on globals a lot (especially for the command line args) 19:27 Wuzzy but that could be refactored if its really needed 19:28 erle i think i need some time to figure out if it can be tested the way i think it should. it would probably still make sense to have an example input and output regardless. 19:28 erle i mean, your commented file contains a bunch of domain knowledge that might get lost otherwise 19:29 erle Wuzzy am i correct in that what is done there is parsing lua with regexes? 19:29 Wuzzy yes 19:29 Wuzzy this is not a full lua parser because that would be overkill, of course 19:29 erle well other people wrote one, but i see what you mean https://pypi.org/project/luaparser/ 19:30 erle it's just a bit confusing for me (but i know regexes) 19:30 Wuzzy the downside of regex is always the awful syntax. u just gotta learn it :/ 19:31 Wuzzy oh the excuse i use is that i just demand from the user that the strings are put in the lua in a certain way. i wrote it all in the README file 19:32 Wuzzy your xcam mod is quite impressive tbh and obviously the biggest downside is that ur very limited by minetest 19:33 erle i am not too concerned about lack of source redaability right now, it is more that i saw the minor changes and comments in the PR and thought maybe it needs tests. but i must admit that i am confused and should buy food and eat. 19:33 erle i think i am content with being limited. restrictions breed creativity 19:34 Wuzzy well in that case i suggest to just polish, polish, polish. in the current state is still very unpolished. i think performance is biggest issue but we have async 19:35 erle can i raycast in async though 19:35 erle also consider the following https://github.com/minetest/minetest/issues/13644 19:35 erle > When you pass vectors into or out of the async environment they lose their metatable. 19:36 erle sfan5 the commit you linked in https://github.com/minetest/minetest/issues/13644#issuecomment-1637040560 does not seem to exist, ig due to rebase or so 19:37 Wuzzy oh noes 19:37 Wuzzy this is a problem 19:38 erle well i can pass other things, pixels or so 19:38 erle but oh wait 19:38 erle i need to pass vectors 19:38 erle since otherwise the player will move and the photo will smear 19:38 erle guess one can just do a lot of vector.new() in the async env lol 19:39 Wuzzy am i right in the assumption the raycasts are the slowest part? 19:40 erle well, i am pretty sure that doing between 64k and twice as much raycasts is not fast 19:40 erle but then again i do other stuff that often too 19:40 erle maybe i should profile it 19:40 Wuzzy ouch 20:38 MTDiscord it would be nice if you could copy a part of the map into the async environment and do the raycasting there 20:38 MTDiscord transferring VoxelManips into the async env is already possible, what's missing is support for raycasting on VoxelManips 20:56 erle i mean otherwise i could just raycast the scene very slowly lol 20:56 erle like even slower 20:57 erle give the server room to breathe 20:57 erle long exposure time 22:47 erle i added a 8×8 noise texture to the nodes that xcam renders https://mister-muffin.de/p/pdjv.png