Time Nick Message 00:28 hmmmm Zeno`: So have you or have you not been able to replicate it? 00:30 Zeno` hmmmm, yes. But it's strange 00:30 Zeno` I've been able to replicate it 75% let's put it that way. And the issue happens before your commits anyway 00:31 hmmmm A++++++ accusations would raise again 00:31 hmmmm s/raise/rage/ 00:31 Zeno` That would apparently be the case 00:33 jin_xi hmmmm: im currently using a double vm setup to first find nodes placed by decorations and then replace them with generated structures. this produces holes in the map reliably 00:33 jin_xi anyways, if decorations could directly call some lua it would be easier 00:33 Zeno` hmmmm, as for the assertion failure (which I didn't report I don't think), it hasn't happened again so it must be some weird and very rare case. The server is still running under gdb anyway 00:34 hmmmm jin_xi, that shouldn't happen. can you show me how you're running it? 00:34 hmmmm Zeno`, my guess is that it might occur in out-of-memory conditions. 00:34 hmmmm a/in/under/ 00:35 Zeno` hmmmm, you might be right 00:35 jin_xi sure, gimme a sec 00:35 hmmmm that's literally the only condition in which get_data() could throw an exception 00:39 jin_xi http://paste.ubuntu.com/8294886/ http://i.imgur.com/ESb1hYw.png 00:39 hmmmm is that hole made of air or content_ignore? 00:40 jin_xi how can i check? 00:40 hmmmm try walking into it with noclip disabled 00:40 jin_xi can walk 00:42 hmmmm okay 00:42 hmmmm anyway so find_dummies is run first, in on_generated 00:43 hmmmm by the way jin_xi, that code is actually not required at all. you're not using a rather obscure mapgen object that was made for this situation. 00:43 jin_xi pls tell me more 00:43 hmmmm decoration callback 00:43 jin_xi its there? 00:44 jin_xi oh 00:44 hmmmm yes, it's been there for about a year now 00:44 jin_xi i missed that, i asked for it long time ago 00:44 hmmmm i used it to place chests inside of dungeons and desert temples 00:45 hmmmm see "gennotify"? 00:46 jin_xi um, yes but i fail to parse 00:46 hmmmm actually sorry about that 00:46 hmmmm shoot 00:46 hmmmm it didn't have a schematic flag 00:47 jin_xi Returns a table mapping requested generation notification types to arrays of positions at which the 00:47 jin_xi corresponding generated structures are located at within the current chunk. 00:47 jin_xi ??? 00:47 hmmmm i'll have to expand gennotify to include decorations 00:49 jin_xi oh i see now. took a lot of repeated reading 00:50 hmmmm ah uh oh 00:50 hmmmm i don't think i have minetest.set_gen_notify() documented 00:51 jin_xi it is kindof obscure as it is now, yes 00:51 hmmmm yep, so minetest.set_gen_notify() 00:52 hmmmm takes a flags table of events to notify on 00:52 hmmmm current flags being dungeon, temple, cave_begin, cave_end, large_cave_begin, large_cave_end 00:52 hmmmm i think the idea was to have one associated with a specific schematic ID 00:52 hmmmm but that never got implemented because i forgot about it 00:53 hmmmm then, in your on_generated callback 00:54 hmmmm foobar = minetest.get_mapgen_object("gennotify") -- at this point, foobar = {cave_begin = {x = blah, y = blah, z = blah}, cave_end = {x=400, y=-200, z=200}} 00:54 hmmmm so on 00:54 hmmmm so it'd have a table containing tables 00:55 hmmmm table containing an array of tables that are the position vectors 00:55 jin_xi or a list of positions where decos were placed, nice 00:55 hmmmm right 00:55 hmmmm that was the idea 00:55 hmmmm the list of the decorations for a certain node placed 00:55 hmmmm so that should be trivial to implement 00:56 hmmmm add an option to register_decoration where you provide a gennotify "feature ID" and that'll be the key where things are stored in the table 00:56 hmmmm so it'd be like 00:56 hmmmm minetest.register_decoration{ blah blah blah blah, 00:57 hmmmm gennotify_feature_id = "SomeShittyDecoration23" 00:57 hmmmm }) 00:57 jin_xi or just gennotify flag decorations, and get a list of all decorations for a chunk? should be small enough 00:58 hmmmm so then in your on_generated, foobar = minetest.get_mapgen_object("gennotify"); foobar = {SomeShittyDecoration23 = {{x=400, y=-200, z=200}, {x=410, y=-220, z=220}} 00:58 hmmmm or so on 00:58 hmmmm no no no. 00:58 hmmmm no. 00:58 hmmmm you can't control other mods that way 00:58 hmmmm do it this way 07:39 Zeno` are you awake ShadowNinja? 07:39 Zeno` Thanks for the detailed explanation 07:40 Zeno` I still don't like the idea of sandboxing (not in a 0.4.x release anyway) but... *shrug* 08:59 kahrl could someone who speaks French take a look at #1202? 09:03 kahrl also I'm adding a Translation subsystem (with no subsystem maintainer at the moment) 09:04 kahrl just so we can label these kind of PRs as "@ Translation" 09:04 kahrl if anyone is against that subsystem please say so 09:17 kahrl I'd like to resolve as many of the issues/PRs at https://github.com/minetest/minetest/labels/@%20Translation as possible before weblate goes back up, so comments on those are welcome 14:58 jin_xi hmmmm: ok, so i tried adding the feature, but im not exactly sure what im doing. 15:00 hmmmm well no no 15:00 hmmmm you don't need to! i will! 15:00 hmmmm just not right now, I'm on work 15:01 hmmmm i was just raising awareness that there is something already existing that you tried to do in your mod. really I'd like to solve your voxelmanipulator issues 15:02 hmmmm now yesterday you said that there were two voxelmanipulators but in your posting i only saw one where you scanned for nodes and then called remove_node() on it 15:04 jin_xi see line 45 http://paste.ubuntu.com/8294886/ (same paste) 15:04 jin_xi this calls the turtle system, which does a dry run to determine the size of the structure and then calls vm with that area 15:08 jin_xi here is what i tried so far... http://paste.ubuntu.com/8300598/ 15:43 hmmmm jin_xi: what does p[2].spawn(p[1]) do? where is spawn()? 15:44 hmmmm what you've done so far on implementing decoration stuff so far is mostly correct 15:47 jin_xi http://paste.ubuntu.com/8300881/ http://paste.ubuntu.com/8300591/ its a cascade of functions named spawn... so the call p[2].spawn(p[1]) is basically tetris2.spawn(pos) 15:47 jin_xi tetris2.spawn calls turtle.spawn which does the vm stuff 15:48 hmmmm ahhh okay... so you build up a buffer table of things to write 15:48 hmmmm you realize that voxelmanip is a buffer to the map 15:48 hmmmm so you're writing to a buffer so that you can write to a buffer 15:49 hmmmm you can change the table.insert things to vm_data[vm_area:index(rpos)] = materials[mat]; 15:50 hmmmm hrmm, the code looks solid enough. you don't write to the mapgen object VM 15:50 hmmmm however if another mod runs after your code uses a voxelmanip 15:50 hmmmm that'd overwrite your changes 15:55 hmmmm assuming turtle.spawn is called once, this code should work. 15:55 hmmmm and assuming there are no mods that use voxelmanip that might be overwriting your changes 15:56 hmmmm could i have a copy of your mod to debug this? 15:58 jin_xi sure 16:36 hmmmm you know, I don't usually recommend hacks, but here's a really simple way to prevent cavegen from shitting over your stone/sand/dirt structures: 16:36 hmmmm build the structures with nodes identical to the original node you wish to use, except with is_ground_content = false 16:36 hmmmm and then on dig, have them drop the regular, is_ground_content = true variety 16:37 VanessaE I already suggested that to Sokomine weeks ago :P 16:37 hmmmm as long as people don't go overboard it should be okay 16:37 hmmmm this is good enough until we get hardware lighting in minetest and we're able to free up an extra 8 bits in a mapnode 16:38 hmmmm VanessaE: I think it may be worthwhile to add some sort of "inheritance" mechanism to nodedefs. 16:38 VanessaE how would it work? 16:38 hmmmm add a new api? 16:39 hmmmm minetest.register_node_inherit("default:stone", {is_ground_content = false}) ? 16:39 VanessaE I meant... 16:39 hmmmm it would copy the nodedef from default:stone, and then override the settings with the custom ones you specify 16:39 hmmmm the best part about what I'm suggesting is that in order to implement this feature, there are no additions to the core required. 16:39 VanessaE the equivalent of doing this: https://github.com/VanessaE/angled_walls/blob/master/init.lua#L108 ---> https://github.com/VanessaE/angled_walls/blob/master/init.lua#L145 16:40 VanessaE but not in that sort of hacky way 16:40 VanessaE ok so yeah, the same sorta thing. 16:40 hmmmm yeah it seems you have the idea mostly 16:41 hmmmm that's what I'd want to do, except all in one call and it'd be officially part of the API 16:41 VanessaE right 16:41 hmmmm does it make sense? 16:41 hmmmm I realize that modders had probably thought of all these tricks a long time ago 16:41 VanessaE it DOES make sense but I wonder if it's the right way to actually do it 16:41 hmmmm but I'm just saying, we should actually do something about it rather than just let people do their own thing 16:41 VanessaE *nod* I agree 16:42 hmmmm VanessaE, there is no other way to do it 16:42 VanessaE this clone method originally came from pilzadam, though what I do here required a recursive copy to avoid some hidden pass-by-reference fuckups I was running into. 16:42 VanessaE but yeah, if there's no other way, then so be it 16:42 hmmmm I mean you're probably thinking of not maintaining a copy of the node internally 16:43 hmmmm but that won't make a difference because the vector containing the nodedefs isn't a list of pointers, it's a list of actual NodeDef structures 16:43 hmmmm so you wouldn't be saving any space 16:44 VanessaE right 16:44 VanessaE well I got that ^^^^ code from the Roblox wiki but it's just a generic copy so feel free to use it :) 16:44 hmmmm it'd also make access non-trivial. you'd need to use getters/setters for all of the nodedef members 16:44 VanessaE (line 11 in the file) 16:45 hmmmm so, yeah, copying a node definition of something already registered then applying modifications, and registering the new one is the way to go. 16:45 hmmmm i don't think it's hacky really. 16:49 VanessaE I'll back it, since I've had to use this same construct more times than I care to remember ;-) but you can expect others will bitch 17:58 diemartin re: subclassing, it's trivial to do it with `setmetatable()` and `__index` 17:58 diemartin (assuming register_xxx works by using `lua_getfield` instead of `lua_rawget`) 18:00 diemartin just point `__index` to the "superclass", and explicitly set the overrides 18:22 ShadowNinja How should a Lua API for mkdir be implemented? Add os.mkdir from ScriptApiUtil? minetest.mkdir? minetest.{fs,path}.mkdir? Should we include something like LuaFileSystem? 18:22 VanessaE minetest_fs.mkdir 18:22 VanessaE strictly filtered to never overwrite and only to create within certain areas e.g. the world dir or mod dir 18:23 * VanessaE looks at Luafs 18:23 kaeza minetest.fs.mkdir doesn't follow the naming conventions; we don't see minetest.game.register_node or such 18:23 Krock ShadowNinja, minetest.create_folder("foobar") ? 18:23 VanessaE folder? 18:23 Calinou it needs to work easily on all operating systems 18:23 VanessaE no fucking way 18:24 Krock VanessaE, Y no? 18:24 VanessaE it's a G*d damned directory 18:24 VanessaE that's why no. 18:24 kaeza also, `listdir()` pls 18:24 ShadowNinja VanessaE: Nah, no new table. Then we'd need core_fs too. 18:24 VanessaE ShadowNinja: hrm. well ok 18:24 VanessaE core.mkdir or minetest.mkdir then 18:24 ShadowNinja kaeza: for x in require("lfs").dir(...) do... 18:25 VanessaE either one is about the same 18:25 ShadowNinja VanessaE: (core == minetest) == true 18:25 VanessaE looking at lfs, there's a lot of stuff here that some OS's might not allow 18:25 VanessaE I wonder if lfs might be overkill. 18:26 VanessaE ShadowNinja: case in point. it's just a matter of which name looks better in the API doc. 18:27 VanessaE I guess you could add in lfs and just disable the functions that we don't need. 18:27 VanessaE e.g. symlinks, file locking a 18:27 VanessaE -a 18:32 ShadowNinja Symlinks work on Windows, and file locking might be usefull. 18:34 VanessaE mmmh 19:15 Columbus Excuse me, a bit off topic question, about Graphics Processing 19:15 Columbus A CPU uses Pipelining, so that multiple instructions at once are processed. 19:16 Columbus Would a programm be able, to emulate such function, 19:16 Columbus that a program pipelines the draw (and so on) process 19:16 Columbus Could that work? 19:18 Columbus When someone could, please give that idea to someone of OpenGL, because maybe, that it works, and it could create new technology 19:18 Columbus Excuse me for my bad english, it isn't my mother-language 19:20 luizrpgluiz guys because minetest runs faster on Linux? 19:25 luizrpgluiz ?