Time |
Nick |
Message |
00:06 |
hmmmm |
ermm |
00:06 |
hmmmm |
you joke right |
00:33 |
|
AnotherBrick joined #minetest-dev |
00:37 |
|
geheimnis joined #minetest-dev |
01:41 |
|
chchjesus joined #minetest-dev |
01:58 |
|
paramat joined #minetest-dev |
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:30 |
|
paramat left #minetest-dev |
03:39 |
|
deltib joined #minetest-dev |
03:41 |
|
Hunterz joined #minetest-dev |
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:07 |
|
Zeno` joined #minetest-dev |
05:22 |
|
paramat joined #minetest-dev |
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:45 |
|
Hunterz joined #minetest-dev |
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 |
05:59 |
|
Anchakor_ joined #minetest-dev |
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:07 |
|
paramat left #minetest-dev |
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 |
06:33 |
|
cib0 joined #minetest-dev |
06:45 |
|
VanessaE joined #minetest-dev |
06:47 |
|
selat joined #minetest-dev |
07:00 |
|
MinetestForFun joined #minetest-dev |
07:05 |
|
wilkgr joined #minetest-dev |
07:26 |
|
Krock joined #minetest-dev |
07:39 |
|
kilbith joined #minetest-dev |
07:40 |
|
wilkgr left #minetest-dev |
08:01 |
|
jin_xi joined #minetest-dev |
08:04 |
|
Yepoleb joined #minetest-dev |
08:06 |
|
FR^2 joined #minetest-dev |
08:22 |
hmmmm |
https://github.com/kwolekr/minetest/commit/9b5d734cd37be7d3569e59c5784310204b22d656 |
08:23 |
hmmmm |
will commit tomorrow morning if nobody has any objections |
08:46 |
|
cib0 joined #minetest-dev |
08:51 |
|
selat joined #minetest-dev |
09:53 |
|
MinetestForFun joined #minetest-dev |
10:08 |
|
proller joined #minetest-dev |
10:10 |
|
Krock joined #minetest-dev |
10:26 |
|
cib0 joined #minetest-dev |
10:35 |
|
kilbith joined #minetest-dev |
10:49 |
|
proller joined #minetest-dev |
11:04 |
|
MinetestForFun joined #minetest-dev |
11:07 |
|
leat joined #minetest-dev |
11:11 |
|
err404 joined #minetest-dev |
11:40 |
|
Fritigern joined #minetest-dev |
11:45 |
|
kkk5k joined #minetest-dev |
12:04 |
|
MinetestForFun joined #minetest-dev |
13:21 |
|
cib0 joined #minetest-dev |
13:28 |
|
leat joined #minetest-dev |
13:42 |
|
Wayward_One joined #minetest-dev |
14:25 |
|
est31 joined #minetest-dev |
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 |
15:09 |
|
JZTech101 joined #minetest-dev |
15:19 |
|
hmmmm joined #minetest-dev |
15:24 |
|
ElectronLibre joined #minetest-dev |
15:34 |
|
MinetestForFun joined #minetest-dev |
15:54 |
|
cib0 joined #minetest-dev |
15:56 |
|
Calinou joined #minetest-dev |
16:01 |
kilbith |
is there a possibility to add the support of the alpha textures for the meshnodes ? |
16:01 |
|
luizrpgluiz joined #minetest-dev |
16:03 |
luizrpgluiz |
it would be possible someday send commands to the server without being with the client open? Such as the MC? |
16:05 |
|
proller joined #minetest-dev |
16:15 |
|
Hunterz joined #minetest-dev |
16:15 |
|
MinetestForFun joined #minetest-dev |
16:16 |
|
MinetestForFun joined #minetest-dev |
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 |
16:27 |
|
luizrpgluiz left #minetest-dev |
16:28 |
|
rubenwardy joined #minetest-dev |
16:30 |
|
MinetestForFun joined #minetest-dev |
16:44 |
|
Robert_Zenz joined #minetest-dev |
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 |
|
proller joined #minetest-dev |
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:03 |
|
Krock joined #minetest-dev |
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 |
18:54 |
|
selat joined #minetest-dev |
18:56 |
|
OldCoder joined #minetest-dev |
19:08 |
|
ElectronLibre joined #minetest-dev |
19:18 |
|
leat joined #minetest-dev |
19:27 |
|
Player_2 joined #minetest-dev |
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:38 |
|
Hijiri joined #minetest-dev |
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 |
19:55 |
|
cib joined #minetest-dev |
20:01 |
hmmmm |
so... no discussion on https://github.com/kwolekr/minetest/commit/6222de5d915a4061658648a64cfa768167d4a900 ?? |
20:05 |
VanessaE |
not from me :P |
20:22 |
|
chchjesus joined #minetest-dev |
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:09 |
|
est31 joined #minetest-dev |
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 |
|
proller joined #minetest-dev |
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 |
21:52 |
|
ElectronLibre left #minetest-dev |
23:01 |
|
Anchakor_ joined #minetest-dev |
23:03 |
|
Hijiri joined #minetest-dev |
23:35 |
|
Robby joined #minetest-dev |
23:38 |
|
Hijiri joined #minetest-dev |