Time Nick Message 00:06 hmmmm ermm 00:06 hmmmm you joke right 02:08 paramat hmmmm, in mgv5/v7 generate biomes this line https://github.com/minetest/minetest/blob/master/src/mapgen_v7.cpp#L623 checks for a supporting node below, but it doesn't also check for water, so unstable sand is placed above water, okay to fix this by adding '&& c_below != c_water_source'? 02:09 hmmmm didn't you write that part? 02:09 hmmmm sure, it's fine by me 02:11 paramat i may have .. cool 02:15 paramat i'll continue to experiment with fractals, they can get boring quickly, problem is they're fractal, so often dissolve into messy clouds of single dithered nodes. i'll try some different types, try to find some satisfying and playable terrain 02:16 hmmmm when in doubt, gaussian blur 02:19 paramat ah yes 02:31 hmmmm anyway I've been thinking of adding a mapgen flag that does a gaussian filter over the generated terrain 02:32 hmmmm it's super fast 02:32 hmmmm so the basic problem with perlin noise terrain generation is that in order to get a nice terrain shape you need to use a lot of octaves 02:33 hmmmm but the more octaves you use, the more messy dithered nodes you get 02:33 hmmmm minecraft sorta does this with its fundamentally different noise-first-interpolate-later algorithm 02:41 paramat that would be good to have 02:42 paramat i remember you have ideas for how to make blur faster 02:43 hmmmm I already have fast blur algorithms 02:48 paramat #2629 will push after checks 02:48 ShadowBot https://github.com/minetest/minetest/issues/2629 -- Mgv5/v7: Add check for water for deciding biome node stability by paramat 02:49 hmmmm sure, looks good to me. 02:49 hmmmm simple enough 02:50 paramat i feel like starting a core mapgen. does me v8, you v9 seem okay? 02:52 paramat i'll make a PR for freshwater river nodes, non-renewable and range = 2 02:52 hmmmm well hold up now 02:53 hmmmm the whole reason for the numbering scheme like v5 v6 v7 so on is because it's supposed to be the next mainstream mapgen 02:53 hmmmm obviously v7 never fully replaced v6 because it isn't as well rounded 02:53 hmmmm so I am wondering maybe we should continue on with different names 02:55 paramat sure i'm fine using a different name, watershed is a nice name. then you will have v8 02:56 paramat i feel no need for my work to be considered a mainstream mapgen =) i can be freer that way 02:59 paramat i just wanna choose the name now so i don't have to change it later, i'm open to suggestions for a new type of name 02:59 paramat now pushing 03:01 hmmmm well, why did you call it watershed? 03:04 paramat push done 03:06 paramat because it will be focussed on river generation, and to refer to my popular mod 03:08 hmmmm so it's not watershed exactly, but it's a derivative of watershed? 03:08 hmmmm why not call it watershed_v2 or something 03:10 paramat yeah a derivative, closer to riverdev actually, but that name is as bad as 'minetest' 03:11 paramat yes i had better not use watershed in case players expect an exact copy 03:12 hmmmm well if you have a v2 they should expect the next iteration of something similar 03:12 hmmmm i think you should keep the name because it's so recognizable 03:15 paramat yeah 03:17 paramat i need to push some new nodes first anyway, i think we might need freshwater (renewable, range = 8) for highland lakes, and freshriverwater (non-renewable, range = 2) for rivers 03:17 paramat highland lakes = the holy grail 03:19 hmmmm what is different about freshwater? 03:21 paramat different colour, see my watershed/riverdev screenshots, more turquoisey. inspired by MC actually 03:21 hmmmm oh cool 03:22 hmmmm how does it merge with regular water? 03:22 paramat in my mods there's an intermediate colour at y = 2 03:24 paramat http://i.imgur.com/IQdF0Yg.png 03:24 hmmmm oh that's pretty cool 03:28 paramat you might enjoy exploring riverdev mod if you haven't already https://forum.minetest.net/viewtopic.php?f=11&t=9210 03:29 hmmmm eventually I want to get Lua mapgens running faster so there's no need to use C++ at all 03:29 hmmmm i like that mountain there heh 03:30 paramat highland lakes will be a real challenge, i look forward to tackling that. back later after food 03:57 Sokomine the highland pools are a very nice feature. they make the maps more intresting 04:13 Sokomine hmmmm: i'm afraid the rotation for the schematics does not work correctly for nodes with param2 > 4 (i.e. upside-down stairs, wallmounted slabs) 04:13 hmmmm oh jesus christ 04:13 hmmmm I am done with schematic rotations 04:13 hmmmm if you want it fixed, do it yourself 04:14 hmmmm you might look at it as a bug, but this is feature creep plain and simple 05:22 paramat #2630 another bugfix 05:22 ShadowBot https://github.com/minetest/minetest/issues/2630 -- Mgv5: Fix above/below ground spawn when water level is altered by paramat 05:29 hmmmm whoops 05:30 * VanessaE wonders why paramat doesn't just stay in-channel... 05:32 * paramat likes to shut down the computer sometimes 05:34 paramat now pushing 05:38 hmmmm hey what's up zeno 05:39 paramat done 05:39 hmmmm great 05:39 hmmmm hmm 05:40 Zeno` hiya 05:40 Zeno` bbs (on hold on the telephone... great) 05:41 hmmmm paramat, so what kind of Lua interface would you like to see for setting the node resolver mode? 05:41 hmmmm as a modder what would you find the most useful 05:41 paramat oh those 3 options.. 05:42 hmmmm see what I was thinking was making it a global mode 05:42 hmmmm like... 05:42 hmmmm core.set_node_resolve_mode("direct"); 05:42 hmmmm core.register_biome({ ... }) 05:42 hmmmm and then for serialize_schematic: 05:43 hmmmm core.serialize_schematic("schematics/foobar.mts", "lua", "none", true) 05:43 hmmmm which would overide the global resolve mode^ 05:46 paramat that seems good (but i don't fully grasp the issues so don't feel particularly able to judge) 05:47 hmmmm also i should add another parameter no_register or something 05:56 paramat so, 3 is new water types okay with you?: fresh lake water, fresh river water (non-renewable, range = 2) and mixed river water (mixed colour, at y = 2 only). the fresh lake water will be the renewable, range = 8 version of fresh river water, and can also be used for when a player buckets some river water and then places it: they will want renewable and range = 8 05:56 hmmmm yeah that's fine 06:07 paramat okay. this will also add the possibility of drinkable fresh water that can add health, we'll have a use for vessels.. 06:19 hmmmm hrmm wth 06:20 hmmmm is it just me or does the luaJIT_setmode(script_execution_wrapper) do the opposite of what we want? 06:21 hmmmm rather no, it does what we want, but messes up lua exceptions in the process 08:22 hmmmm https://github.com/kwolekr/minetest/commit/9b5d734cd37be7d3569e59c5784310204b22d656 08:23 hmmmm will commit tomorrow morning if nobody has any objections 14:27 est31 This is weiiird 14:27 est31 I can safely pass a const unsigned char * bytes_v to a method, and inside that method, I can modify it 14:28 est31 but when I try to free outside again, it wont work because its const 14:28 est31 so next try: remove the const 14:28 est31 gives an error when you pass it to the method 14:28 est31 method requires const unsigned char ** 14:28 est31 so I cast it 14:29 est31 and the compiler is ok with that 14:29 est31 rly weird 14:38 * est31 learnt the difference between "char *const" and "const char *" 14:47 sfan5 whats a char *const? 14:49 sfan5 ohhh 14:49 sfan5 thanks cdecl.org 14:50 sfan5 char *const foo is "declare foo as const pointer to char" and const char *foo is "declare foo as pointer to const char" 14:50 sfan5 a const pointer isn't that useful 16:01 kilbith is there a possibility to add the support of the alpha textures for the meshnodes ? 16:03 luizrpgluiz it would be possible someday send commands to the server without being with the client open? Such as the MC? 16:25 Krock luizrpgluiz, write a bot 16:26 est31 btw discussion is in #mt right now 16:26 est31 (was a crosspost) 16:26 Krock k ty 16:26 luizrpgluiz sorry 17:21 Krock ShadowNinja, C++ is interesting, that method you said yesterday actually works. http://pastebin.com/S55fDxv0 Updated #2618 17:21 ShadowBot https://github.com/minetest/minetest/issues/2618 -- 20s timeout when connecting to server by SmallJoker 17:22 hmmmm what are you testing...? 17:23 Krock hmmmm, I tested this one: http://irc.minetest.ru/minetest-dev/2015-04-15#i_4224323 17:24 * Krock slaps himself 17:25 Krock | is the binary OR operator. Must use || instead. 17:26 hmmmm oh man 17:26 hmmmm there needs to be some basic level of C++ literacy 17:27 Krock Lovely. || returns 1, can't use that one 17:27 hmmmm i'm wondering if i should make some kind of pseudo-C++ class 17:27 hmmmm Krock, this is not lua, you can't do the "foo or bar" trick here 17:27 Krock pseudo-C++? 17:27 Krock hmmmm, I know but I thought ShadowNinja would be right there. 17:27 hmmmm training session 17:28 hmmmm well people can learn just as well off of kahn academy or likewise 17:28 hmmmm rather, code academy 17:29 hmmmm Krock, what is it that you intend to do with this + u32 last_time = fps_timings->last_time | time; 17:29 hmmmm if fps_timings->last_time hasn't been set before, then use 'time'? 17:29 Krock hmmmm, yes, exactly that. 17:29 hmmmm well first of all, where is fps_settings->last_time set in? 17:30 Krock FpsControl, a struct "u32 last_time", set to 0 everywhere it is new initalized 17:31 hmmmm yes, i can see that, i'm asking where does it get *set* to the value it normally holds 17:32 Krock I expect "= { 0 };" sets it to zero. 17:32 Krock What exactly do you mean? 17:33 hmmmm initialization is one such time where a variable would be set to a value. 17:33 hmmmm it's the time it's initially set 17:33 hmmmm however, it is not very useful for a variable to just hold the value "0" and never change. 17:33 hmmmm surely, it must be *set* to a different value somewhere later on in the execution. 17:33 hmmmm this is what i mean. 17:34 * Krock points at Game::limitFps(FpsControl *fps_timings, f32 *dtime) 17:34 Krock There it's used. 17:36 hmmmm are you sure it isn't used anywhere else? 17:38 Krock eh. it's used in some other Game functions 17:38 hmmmm but you're not very concerned about those other instances 17:38 hmmmm so tell me what the reasoning is behind modifying that line of code? 17:38 hmmmm what was wrong with it? why did it need to get changed? 17:40 Krock actually, I haven't thought that far because I only had the problem with instant timeout after 10s, doesn't matter it it was connecting or not 17:40 Krock *if it 17:41 hmmmm the first step to fixing code is to find out what the root cause of the problem is 17:41 hmmmm not making random changes 17:42 Krock I see. Everything starts with limitFps. It calculates the dtime and that one is used on various places 17:43 hmmmm so if you look in Game::run(), which also uses limitFps, you'll notice that it explicitly sets fps_control->last_time to the current time 17:43 hmmmm look at line 1748 17:44 Krock Oh, I see what you mean. One of those lines is useless 17:45 Krock removing 'draw_times.last_time = ' from Game::run() would be my soulation 17:46 Krock I doupt it's ever required to get a dtime "spike" the first time it is used 17:46 hmmmm no, no. 17:46 hmmmm that's not correct. 17:46 hmmmm how about instead of guessing, why don't you try it out yourself and see if it works or not? 17:52 Krock I'm sure this build will behave like the one with line 1748. 17:52 Krock However, CPU got something to do for the next 8 minutes 17:53 est31 btw you dont have to clean before you build 17:53 est31 its much faster 17:53 Krock est31, I know that. 17:53 est31 still needing 8 minutes? 17:53 Krock I never cleaned my minetest build since my first developement releases 17:53 est31 lol 17:54 Krock est31, yes, 5 minutes for linker and the rest for the .cpp files 17:54 Krock switching branches almost lets me do a clean build 18:12 Krock hmmmm, I decided to move the " 18:12 Krock - draw_times.last_time = device->getTimer()->getTime();" part into Game::limitFps() because FpsControl has no other use than limiting the Fps. Donno how to explain with other words. 18:15 Krock Minetest works as usual with that commit 19:31 hmmmm Krock: it needs to be initialized though 19:32 hmmmm Krock: the correct solution is to add draw_times.last_time = device->getTimer()->getTime() above the processing loop 19:33 hmmmm in both Game::run() (which it already does) and in Game::connectToServer() 19:34 hmmmm with that in mind: somebody please tell me WTF https://github.com/minetest/minetest/commit/0c634a97197d50f2ca58825f1b215d0407397ac6 is 19:34 hmmmm not only is there no discussion or review, but he's not even HERE in the channel saying that he's committing something 19:35 hmmmm these std::vector changes have lots of potential to break things in subtle ways. it needs to be thoroughly reviewed ASAP or reverted 19:35 hmmmm and celeron55: see above. 19:39 Krock okay, the boss spoke. Commit got updated. 19:40 celeron55 hmmmm: i can confidently say i now reviewed it and it's fine; but i agree that this kind of committing is dubious 19:40 hmmmm Krock: it's more important that you can see the reason why it's correct 19:41 celeron55 i mean, we need to have these kinds of micro-optimizations flowing in so that everyone doesn't have to always make perfectly optimized implementations on the first merge 19:41 Krock hmmmm, yes but I still would prefer a way where it's automatically set to the initialized time 19:42 hmmmm there is no way to do that 19:42 celeron55 but keeping track of them has to be based on trust, otherwise it's very inefficient 19:42 hmmmm I suppose what you could do is add a boolean field in FpsControl "is_initialized" and then if not initialized, set it to the current time in limitFps 19:42 hmmmm but that's inefficient and unnecessary 19:43 hmmmm celeron55: you trust the guy who was made core developer AND subsystem maintainer of a very critical subsystem after submitting 2 prior small patches? 19:43 hmmmm and subsequently introduced bugs with literally every feature added since then 19:43 celeron55 that's the problem; i really don't to the required extent 19:44 hmmmm he shouldn'tve been trusted in the first place 19:44 hmmmm but he was 19:44 hmmmm and then he proved why he shouldn't have been trusted 19:44 hmmmm and he still is 19:44 hmmmm how do you think this reflects on you, the team manager 19:44 Krock And I expected last_time would be zero after initializing and use that to set last_time. However, the current state is acceptable 19:45 celeron55 hmmmm: well if you look at his latest stuff and ignore the initial things, it's actually kind of ok 19:46 hmmmm he still hasn't fixed the damage counter bug and there's an obvious solution 19:46 hmmmm zeno and i are waiting to see what he's going to come up with 19:47 celeron55 i'm still trying to figure out how much risk taking makes sense, sorry for the inconveniences :P 19:47 hmmmm microoptimizations and new features come second to fixing bugs that were introduced by your own prior changes 19:47 hmmmm i do make bugs, sure, but i fix them 19:49 celeron55 one of things that i thought might help with nrzkt was that he seemed to be an active player too and i thought that would make him less inclined to leave problems unfixed in the long term; that didn't really work out that way 19:50 celeron55 altough i'm not doing any final judgements this time 19:50 hmmmm that's fine 19:52 VanessaE I think the problem, celeron55, is that he doesn't play on an average server. 19:52 VanessaE seems like it's only ever singleplayer or on his own private server 19:53 kilbith yes, his server use a custom engine though 20:01 hmmmm so... no discussion on https://github.com/kwolekr/minetest/commit/6222de5d915a4061658648a64cfa768167d4a900 ?? 20:05 VanessaE not from me :P 20:26 hmmmm :| 20:26 hmmmm okay then 20:26 * VanessaE pokes Sokomine 20:27 VanessaE she would be the most qualified to comment I guess. 21:10 est31 the * sizeof(char) in the string handling functions in networkpacket.cpp has really no use at all 21:10 est31 its deployed inconsistently 21:10 est31 so for platforms where sizeof(char) != 1, we will face issues 21:12 Sokomine what is the intended use of serialize_schematic? 21:12 est31 I've added a method to add c strings to avoid useless copying, and saw that 21:14 Sokomine i'm not sure how helpful inserting comments into a table will be. comments are certainly useful for humans who want to read a table manually - or who want to understand the table's structure. one or two examples may prove useful in such a case 21:14 est31 OK found out that sizeof(char) == 1 always 21:14 est31 https://isocpp.org/wiki/faq/intrinsic-types#sizeof-char 21:14 Sokomine allowing multiple parameters instead of just one in general seems a good idea 21:16 Sokomine the "register_after_load" parameter is certainly very intresting. i'm facing that problem with my village code as well. the original village code by nore did read the file whenever it wanted to spawn a house. i read it once now and store it as a table. hard to tell what is more efficient; probably requires extensive knowledge of the lua language in that case 21:23 hmmmm est31, yes, whenever you see "* sizeof(char)" in C/C++ code, you know it was written by a novice 21:23 hmmmm :) 21:23 hmmmm sokomine: serialize_schematic() takes a schematic and returns it in a serialized format of your choosing 21:23 hmmmm either mts file or a lua table 21:26 Sokomine i see. but what is the intended use of it? i did something similar on the lua side because i had to. the mapgen data is read via your useful voxelmanip, and the mts files are read using zlib-deflate - and then the schematics are inserted into the voxelmanip area manually using lua code - node by node 21:29 Sokomine it's certainly good to have a function for that at hand. maybe i ought to run it on a schematic and see what its output is. or do you have an example of the lua table format it generates at hand? 21:33 Sokomine hmmmm: i'd be very intrested in learning what the node_resolve_method is good for. that seems to be what you where working on? is it an internal optimization? 21:35 hmmmm object definitions in general are much more structured than you probably think of them as an end user 21:35 hmmmm biomes are an object definition; schematics are an object definition, decorations are, ores are 21:35 hmmmm they can be registered 21:35 hmmmm they all do something with nodes 21:36 hmmmm in the case of schematics, they can be loaded from files or defined from within lua 21:36 Sokomine *nod* so far so good 21:36 hmmmm there's a single, consistent internal representation that it gets converted to regardless of whichever method you use 21:36 hmmmm so let's say you register a schematic 21:37 Sokomine ok 21:37 hmmmm schem_tree = core.register_schematic("schematics/tree.mts") 21:37 hmmmm schem_tree is a *handle* to the schematic object that got loaded and registered 21:37 hmmmm when defining a decoration that places schematics, you can specify schem_tree instead of the filename 21:38 Sokomine ok, so far so good 21:39 hmmmm so let's say you have core.register_decoration({deco_type = "schematic", biomes = "jungle", fill_ratio = 0.5, schematic = schem_tree}) 21:39 hmmmm what I did right there is that I used the schematic handle as a specifier for the schematic 21:40 hmmmm it would have been also valid to repeat the same filename 21:40 hmmmm the filename for schematics is the object definition name 21:40 hmmmm and for biomes I referenced them by name too 21:40 hmmmm I could have registered a biome, and passed along the handle for the biome instead 21:40 hmmmm it's equally valid to do this: 21:41 hmmmm biomes = {core.register_biome({name="jungle", top_node="grass", ...}, "desert"} 21:41 hmmmm I put the definition right into the biome list for the decoration 21:41 hmmmm that's because register_biome returns a handle to the biome object which could be used just as well as the name specifier 21:42 hmmmm so anyway same with schematics 21:42 hmmmm core.serialize_schematic() takes *some* schematic identifier, whether it's by handle, name, or lua definition 21:42 hmmmm it loads it into its internal format 21:42 hmmmm and it keeps it there if register_on_load is specified, AND the schematic had to be loaded 21:43 hmmmm so another thing is that when schematics and ores and whatever are registered, they specify nodes 21:43 hmmmm but at the time the mod initialization is executed, those nodes do not exist yet 21:43 Sokomine yes. something i like to play with a lot. that list of node names the schematics come with is pretty helpful 21:43 hmmmm you need to resolve the string name of a node to the content id of the node at some point 21:44 hmmmm so they usually get converted to when all mods are finished initializing 21:44 Sokomine ok. but that ought to be a pretty fast process and needs to be done only once? the schematic object might hold a variable indicating weather its node names have been resolved or not 21:44 hmmmm this is what happens with the "deferred" node resolution method 21:44 hmmmm think of "resolving" as if you're resolving a hostname using DNS 21:45 hmmmm except instead of a computer hostname to an IP, it's a node name to content id 21:45 hmmmm so if you use the "direct" node resolver method, it'll look up the value of the nodes based on the current existing state of the node table 21:45 hmmmm it won't wait until all nodes are finished resolving 21:45 Sokomine yes, i'm doing that in lua for the nodenames as well. have to. sometimes it takes nodenames, sometimes it takes content_ids; sometimes my local replacements have to be taken care of 21:45 hmmmm so if you have grass and lava defined in your mod but there's water defined in a different mod that didn't load yet 21:46 hmmmm that water lookup will fail and it'll silently be replaced with air 21:46 hmmmm you don't normally want this 21:46 hmmmm but you might want it with schematic serialization 21:46 hmmmm the third resolve method, is not a resolve method 21:46 hmmmm it just tells it to not resolve 21:46 hmmmm this is obviously invalid combined with register_on_load 21:46 Sokomine hmm. hard to think of a use case where partial resolution of node names might be desired 21:47 hmmmm so because it's not resolved, there's no translation of node names to IDs at all 21:47 hmmmm this way if you have a super fancy schematic called coolschematic.mts and it contains nodes from MoreBlocks 21:47 hmmmm it won't give you screwed up output when you go to convert it in the base game 21:48 Sokomine hmm. but the list of node names is a finite, usually rather short list, and looking up nodenames (once they're registered) ought to be pretty fast as well? 21:48 hmmmm what do you mean 21:48 Sokomine i think waiting until all nodes have been registered and then doing the name resolution once ought to be no problem at all? 21:49 hmmmm it's an issue if a). you're doing this inside of mod initialization or b). you're doing this in a game without a mod that the schematic you're serializing has nodes from 21:49 hmmmm bbl 21:52 Sokomine loading schematics where the nodes the schematic (in the form of an .mts file) uses do not exist is actually an issue i'm working with currently. i've written some lua code so that players can manually select replacement nodes (or air if in doubt) for those none-existing nodes. that's admittedly code written for placing a single schematic manually - not for decorations used for complete biomes