Time Nick Message 03:28 hmmmm celeron55, can you explain to me what exactly happens when a block is marked as underground? 03:30 hmmmm all i can actually see is that it's used in Map::isNodeUnderground() and it's marked as underground in a diagnostic string description of a block 03:30 hmmmm like, other than that, is it totally useless...? 03:47 hmmmm I don't understand why you need to emerge the neighbors of what's being generated either 03:55 hmmmm why is m_map->emergeBlock(obj->m_static_block) called without allow_generate = false in ServerEnvironment::removeRemovedObjects()? surely an object won't be in a nonexistent block...? or not? I'm thinking of the case where someone has noclip on, and they go into some far off area and the block hasn't been generated yet - you drop an object, such as a pickaxe, it falls, and it gets removed by something 03:56 hmmmm now i can get that, but this is being called in the main server thread, no? not the emerge thread where it's supposed to be, so the main thread will be held up by this douche who dropped his pickaxe in the wrong spot and it's being removed 03:57 hmmmm I personally think it should be changed to createBlock() 03:57 hmmmm do you forsee any undesirable side effects from this? 04:02 hmmmm i can't really continue until this is resolved somehow 04:47 VanessaE darkrose, thexyz: Can someone push this to upstream? It does look a bit better than what we have now. 04:47 VanessaE https://github.com/jordan4ibanez/minetest/commit/37d6c3a2f19854caf6dfeb352cb9f6c50bb52757 04:50 * VanessaE wanders off to bed. 04:58 OldCoder VanessaE, good night 07:01 celeron55 hmmmm: i am not exactly sure if it is used for something else, but i think this is the main thing: 07:01 celeron55 can you think of how the game can figure out from where the sunlight comes from? 07:03 celeron55 it does it so that if a block is not underground and there is no generated stuff above it, it assumes sunlight is coming from the top of it; otherwise it is not 07:03 celeron55 that may be a bit obscured or not used currently because it generates so large areas at a time; i am not exactly sure 07:04 celeron55 hmmmm: you need to get the neighbors because parts of trees and things like that need to be able to be placed on them 07:04 hmmmm ?!? 07:05 hmmmm are you sure about that? from what i'm reading, you just scan downward until you find a node which has sunlight_propogates = false 07:05 celeron55 i can't remember that much about what the code currently does; i just know the ideas behind the stuff 07:08 hmmmm indeed, it has nothing to do with isNodeUnderground 07:08 celeron55 there are probably three or more sunlight-related algorithms for different situations (node placed, mapblock generated, miscellaneous area generated; or something alike) 07:11 hmmmm if it's not too slow, i'd eventually like to have the sun at an angle (maybe like 8 directions total?) instead of directly above 07:11 hmmmm but, later 07:12 celeron55 it's probably possible; just statically offset the lookup of "above" every 8 nodes in the y direction 07:13 celeron55 or whatever 07:13 celeron55 ah, you meant to calculate 8 different lighting values? 07:13 hmmmm no 07:13 hmmmm what you said first was what i had in mind 07:13 celeron55 ok; it's worth a try 07:14 hmmmm but i mean the two ideas could be combined 07:14 hmmmm any thoughts on this? [22:47] I don't understand why you need to emerge the neighbors of what's being generated either 07:14 celeron55 i answered that already 07:15 hmmmm oh 07:15 hmmmm didn't see that 07:15 hmmmm if the tree placement and what not gets put in lua, you know SOMEBODY is going to make a tree larger than 16 blocks in some direction though 07:15 hmmmm which might break things 07:16 celeron55 minecraft has it's own way of making that happen: it generates only a single "mapblock" at a time, but generates caves and trees and things like that in a larger area around it to make sure everything that might end up in it gets put in it 07:16 celeron55 and discards the leftovers 07:17 hmmmm uber inefficient 07:17 celeron55 maybe; maybe not; depends on the details 07:17 hmmmm the cave generation algorithm i still don't entirely understand... the bottom line is that it's probably really slow and it's probably going to stay that way for some time 07:18 hmmmm i like the current caves anyway 07:19 celeron55 optimizing generation for speed only is not wise in the long run; the priority should be on the output of it 07:21 celeron55 people don't care if they get 10000000000 boring nodes per second; they care if they get whatever amount of awesome stuff at almost whatever speed 07:21 hmmmm it's awesome to have both, though. :) 07:22 celeron55 but if it's either or, then it must be the "not speed" one 07:22 hmmmm i'll agree with that 07:23 hmmmm now what do you think about emergeBlock being called with allow_generate = false? 07:23 hmmmm there are only two instances of that being used, both in environment.cpp 07:23 hmmmm i'd like to really get rid of any non-emerge-thread map generations for various reasons 07:24 hmmmm er, allow_generate = true* 07:24 celeron55 the same thing is done by the map generator/loader thread too, and it is invoked in more places afaik 07:24 celeron55 it doesn't use emergeBlock 07:25 celeron55 umm... 07:26 hmmmm the thing is i don't know where i'd plop the mapgen object for emergeBlock generation calls 07:26 hmmmm i intended for each emerge thread to have one mapgen object 07:27 celeron55 i see more than two instances of it being used with and with no allow_generate in environment.cpp 07:28 celeron55 and what is the problem with allow_generate=false compared to ture? 07:28 celeron55 true* 07:28 hmmmm lines 1275, 1518, 1768 07:28 hmmmm yea i missed one 07:28 hmmmm and there's one with it explicitly true in server.cpp 07:29 hmmmm ....which is in findSpawnPos 07:29 celeron55 ^ answer the question 07:29 hmmmm [02:26] the thing is i don't know where i'd plop the mapgen object for emergeBlock generation calls 07:29 celeron55 so it applies to false and true? 07:29 hmmmm just true, because that's the only case where it'd be using the mapgen 07:31 celeron55 i think all cases could work so that if the block isn't generated, they'd ask for the generation and come back polling for it later until it is 07:31 hmmmm ekh 07:31 hmmmm i wonder how it'd carry out the polling 07:32 hmmmm for example in findSpawnPos the only reason it uses emergeBlock is to ensure that the spawn position actually exists 07:32 celeron55 i think all of the places can just cancel what they are doing and automatically come back to try again, as they currently are 07:32 hmmmm but with the new mapgen setup i'd just add that block to the emerge queue 07:32 celeron55 findSpawnPos can't do that as-is, yes 07:33 celeron55 ehm... and ServerEnvironment::addActiveObjectAsStatic is some kind of a mapgen-with-mobs helper 07:33 celeron55 ...i guess 07:33 hmmmm and the other two are removeRemovedObjetcts and deactivateFarObjects apparently 07:33 celeron55 but for example ServerEnvironment::removeRemovedObjects can just queue, cancel and come back later 07:33 hmmmm right 07:33 hmmmm now why can't i just use createBlock for that? 07:34 hmmmm that particular one 07:34 celeron55 maybe 07:35 hmmmm i was saying before that it tries to emerge m_static_block, which is "the block frmo which the object was loaded from, and in which a copy of the static data resides" 07:35 celeron55 i don't see why that couldn't be done 07:35 hmmmm so if it didn't exist, then... 07:35 hmmmm basically 07:35 hmmmm is there something like createBlock except it'll fail if it's not in memory and not on disk? 07:36 celeron55 emergeBlock with allow_generate=false? 07:36 celeron55 dunno 07:36 hmmmm oh that's true 07:36 hmmmm hah 07:37 hmmmm yeah, so i'll just add ", false" there, and that should do the trick 07:37 hmmmm and there are the two remaining which will poll like you said 07:38 celeron55 it could be useful to have a working system for creating blocks without generating the node data, and have it work properly (leaving everything else in it intact) when it finally is generated 07:39 celeron55 including non-generator node data 07:39 celeron55 it probably works already though 07:39 celeron55 because tree-like thing scurrently need that 07:39 celeron55 s<<1 07:46 hmmmm will do 07:46 hmmmm but i'll have to do it in a different commit 07:46 hmmmm this is already ginormous 07:47 hmmmm 'night 14:37 RealBadAngel hi 15:37 PilzAdam Im currently developing a farming mod for upstream 15:38 PilzAdam should there be some functions like register_plant() or should I define every growing step by hand? 15:39 celeron55 register_plant() sounds like the way to go 15:39 celeron55 make it public so other lazy mods can use it 15:40 PilzAdam i already have some test code for this: https://github.com/PilzAdam/minetest_game/blob/farming/mods/farming/init.lua 15:48 RealBadAngel Hi celeron55 15:49 RealBadAngel what do you think about my modifications to the formspec? 17:16 hmmmm i was looking at addActiveObjectAsStatic again, and i've gotta wonder 17:16 hmmmm why must the emerge succeed? 17:17 hmmmm when would it possibly be valid for a static active object to be added to a nonexistant block? 18:03 hmmmm would you say that a definition of all the available biomes belongs in ServerEnvironment? 18:04 PilzAdam OldCoder, https://github.com/downloads/PilzAdam/minetest_game/farming.zip 18:04 OldCoder Hi 18:04 OldCoder Thank you! 18:04 OldCoder Working 18:07 PilzAdam oops, that was the wrong channel 18:07 OldCoder I got it anyway 18:09 celeron55 hmmmm: is addActiveObjectAsStatic even called anywhere 18:09 celeron55 appears it is not 18:09 hmmmm oh 18:09 celeron55 throw it in the bin 18:10 hmmmm that's true :)! 18:10 hmmmm well wait, what does it actually do? what's a "static" object? 18:11 celeron55 a static object is an active object that is stored in the non-active state... the state in which they are on disk, and the state in which they are when they are far away from players, to not have the full infinite world active at the same time 18:12 celeron55 it is basically a serialized AO 18:12 celeron55 stored in the mapblock, not environment 18:13 hmmmm hmm, i can't think of any situations where that'd be helpful 18:13 hmmmm what were you thinking of at the time when you wrote it? 18:14 celeron55 i... think it was used for at least testing the generation of mobs in the mapgen 18:14 celeron55 not sure 18:14 celeron55 but it's kind of useless for that too 18:14 hmmmm i don't think mobs will ever be a part of the engine 18:14 hmmmm again 18:14 hmmmm alright, to the trash it goes 18:15 PilzAdam what are the params active_object_count and *_wider that are passed to abms? 18:18 hmmmm active_object_count is the number of objects in that block 18:18 hmmmm active_object_count_wider is the total number of objects of that and all the neighbors 18:19 PilzAdam thx 18:19 PilzAdam there should be a hint in lua-api.txt 18:20 hmmmm i think someone was supposed to make a lua api documentation wiki 18:20 hmmmm all this crap should be added there 18:21 celeron55 well... cornernote had it, and he just quit 18:21 hmmmm pft 18:21 celeron55 the data has been copied, but we don't have the platforms he used 18:21 celeron55 http://api.minetest.net/ currently serves a static copy from thexyz's servers 18:24 celeron55 would be quite convenient to just add it now here, but well... http://api.minetest.net/type/view/name/abm.html 18:25 celeron55 thexyz: by the way, can you make that one available as a .tar.gz? 18:31 OldCoder The API site is back? 18:35 celeron55 it's in fact back by cornernote too, but he filled it with the vegan crap he started flooding everywhere 8) 18:36 hmmmm why did he quit again? 18:36 PilzAdam people sometimes go crazy 18:36 hmmmm it seems like it's a little better than it was, but people leave all the time 18:36 hmmmm like too often 18:36 celeron55 he was burned out and trolled out and got finally completely pissed off when thexyz kicked him 18:37 hmmmm this is basically the only minecraft clone project that's worth a shit 18:37 hmmmm i don't know where else he'd go to 18:37 PilzAdam RL? 18:38 hmmmm RL is overrated 18:38 PilzAdam +1 18:38 celeron55 i hope he first takes a break and then re-figures out his time management so he can possibly focus on something without going crazy 18:39 hmmmm i actually have a huge project due on the 17th for school but i'm procrastinating with minetest 18:39 celeron55 i seriously hope people don't screw up their lives because of minetest 18:39 celeron55 it's not worth it 8D 18:40 PilzAdam btw: if someone is interested in the farming mod I currently develop for upstream: https://github.com/PilzAdam/minetest_game/tree/farming/mods/farming 18:40 hmmmm nah if it weren't this it'd be some other video game 18:57 OldCoder celeron55, MT probably is not the leading cause of cancer :p 18:57 OldCoder If anything it is a stress reducer 18:58 OldCoder Except for those who must keep it working O_o 18:58 OldCoder :-) 18:58 OldCoder Calinou, tell me true // if you // can connect 18:58 Calinou nope 18:58 OldCoder PilzAdam, I will update farmingminus in a bit 18:58 OldCoder Calinou, Hmm?! 18:58 OldCoder I will connect myself, then 18:59 Calinou europe.minetest.org port 30010 18:59 OldCoder No! 18:59 OldCoder There is only 30000 18:59 OldCoder That is a separate VPS 18:59 OldCoder No connect to the first dozen or so worlds 18:59 OldCoder The entire point is that that VPS is in Europe 18:59 OldCoder For our Europe friends 19:00 hmmmm ermm let's not get too carried away with the off-topic conversation, okay? 19:00 Calinou ok 19:00 OldCoder I may have other Europe VPS lined up 19:00 celeron55 OldCoder: you're on #minetest-dev 19:00 OldCoder celeron55, yes? 19:00 OldCoder If that is not core dev 19:00 OldCoder I was simply answering his question 19:00 celeron55 that discussion started in #minetest 19:00 OldCoder Hmm? 19:00 OldCoder I am confused; one moment 19:01 OldCoder I have lost track of things celeron55 and am needed elsewhere regardless. If the load is slow on with the show it is regrettable. 19:01 * OldCoder will return 19:02 celeron55 to put it more simply: talk about your servers on #minetest, because this is simply not meant for those, especially as there is other discussion in here tonight 19:02 OldCoder OldCoder, https://github.com/downloads/PilzAdam/minetest_game/farming.zip 19:02 OldCoder celeron55, I am very very literal 19:02 OldCoder I regret this but it is true 19:03 OldCoder If somebody addresses me I do answer 19:03 OldCoder Your own remarks are not entirely on-topic as well; but of course as the head it is your privilege 19:03 celeron55 but calinou asked you on #minetest, not here 19:03 OldCoder That quote is from right here 19:03 OldCoder One hour ago exactly 19:04 OldCoder I will add, Sir, that some of my server issues are core dev issues as they are about testing core chanegs 19:04 OldCoder *changes 19:04 celeron55 ummmmmm 19:04 OldCoder Farming is not the case for that 19:05 OldCoder But for farming I was answering here 19:05 OldCoder A question that was asked here 19:05 hmmmm what the hell 19:05 OldCoder Hmpph. 19:05 OldCoder 19:05 celeron55 i don't understand; you haven't replied anything to that line of PilzAdam 19:05 hmmmm just don't talk about it any more 19:05 OldCoder I am confused; which line? 19:05 celeron55 ah, you did, but immediately after it 19:05 celeron55 i didn't mean those when i asked you to move to #minetest 19:05 celeron55 i meant the stuff you talked about with calinou 19:06 OldCoder Looking up, that appears to be an honest mistake. I am in about 30 channels ATM. 19:06 OldCoder It is not as you characterized it. I have no intent to be argumentative. 19:06 OldCoder More than 30 it appears. I have no idea how you more experienced IRC people do this. 19:07 OldCoder celeron55, mistakes are going to be made. I feel there is no need to emphasize the issue. 19:07 PilzAdam OldCoder, just stop talking in -dev 19:07 celeron55 OldCoder: i am not trying to emphasize it, but rather i haven't yet really seen you understand what i said 19:07 OldCoder As you wish, Mr. Adam. celeron55 please ban me from this channel. 19:07 celeron55 apparently you did understand it then 19:08 OldCoder Will you do as I ask? 19:08 OldCoder Ban now, please 19:08 celeron55 wtf 19:08 OldCoder There is no need for a kick 19:08 celeron55 i have no reason to ban you 19:08 OldCoder I am exitinhg 19:08 PilzAdam cornernote? 19:08 OldCoder Hmm? 19:08 OldCoder Nothing to do with him 19:08 OldCoder Though I see something of his point of view 19:08 celeron55 this doesn't make any sense 19:08 OldCoder OldCoder, just stop talking in -dev 19:08 OldCoder Honestly, Pilz, was that necessary? 19:09 celeron55 http://weknowmemes.com/wp-content/uploads/2012/04/what-the-fuck-man.jpg 19:09 celeron55 i'm actually laughing here, this has become hilarious 19:10 celeron55 i'm fucking glad i have zero money or anything involved in this :------D 19:12 celeron55 oh, anyway; back to figuring whether i can whip up a quick fix for the bad bandwidth throttling 19:13 celeron55 hmmmm: i assume you are making some kind of both-hands-and-feet facepalms in there and thus not being able to comment? 8) 19:14 PilzAdam ... 19:14 hmmmm i'm actually watching an episode of the 'minecraft world tour' 19:14 * PilzAdam doesnt understand what is going on with people 19:14 hmmmm what's wrong with the bandwith throttling? i didn't even know that there was bandwith throttling 19:15 celeron55 there has to be if you have the intention of stuffing up miscellaneous blobs of data through UDP 19:15 celeron55 as in moving media from the server to the client 19:16 celeron55 otherwise you'll just cause most of the packets to be dropped and you've basically failed networking 19:18 celeron55 in largeish servers it would make much more sense to use TCP for those, but it'll hurt small-scale hosting and testing and... ehm... well, this is an another case of "it's just not that simple" 19:19 hmmmm the original Starcraft has a udp transfer system much like this 19:19 PilzAdam would it be possible (in theory) to add a setting in config to switch UPD and IP? 19:19 hmmmm i remember transferring maps that were > 500KB being horribly slow 19:19 hmmmm pilzadam, sure... if you feel like rewriting the socket class 19:20 hmmmm which isn't actually too bad 19:27 celeron55 the correct name for what i talked about appears to be congestion control 19:27 PilzAdam so we have a name for the topic, now code it ;) 19:28 celeron55 it's really a full-blown research field 19:28 hmmmm of course 19:28 celeron55 which means i'll just whip up something from the top of my head! 19:29 hmmmm and if you want congestion control, TCP is where it's at 19:29 hmmmm seriously - the OS already has all sorts of great algorithms for congestion control and they're really good 19:29 hmmmm the reason to use UDP would be low latency 19:29 celeron55 oh well; we could use udp and tcp on the same port 19:29 hmmmm which i can see latency being really bad for FPSes and and racing games or whatever 19:30 hmmmm but this game... not as much 19:30 hmmmm right, and like you and pilzadam said, you can easily have both. i suggest that UDP be used for the regular game commands and a TCP connection is made for bulk transfers 19:31 hmmmm i think a lot of games do that as well 19:31 PilzAdam so you have to tell all the n00bs that they have to forward both, TCP and UDP 19:31 PilzAdam *port forward 19:32 celeron55 i find it somewhat useful, because there are some things that are updated very often and that are not that important to reliably go through (positions of entities and players, or whatever), and if you do that over tcp, you can get stupid hiccups because they didn't get through and tcp ends up re-sending them 19:33 celeron55 packet loss is a real thing on the internet, in any case 19:34 hmmmm unrelated but 19:34 hmmmm what's up with the naming scheme for things that are in gamedef? 19:35 celeron55 how so? 19:35 hmmmm what do you mean by "SomethingDef" 19:35 hmmmm 'definition'? 19:35 celeron55 yes 19:36 celeron55 it's a very common abbreviation almost everywhere in the source 19:37 hmmmm ahh yes, because whatever derived class that uses that interface is "defined" by that interface 19:37 hmmmm ? 19:37 celeron55 well... GameDef basically defines what the game is 19:38 celeron55 or, well, everything apart from the mechanisms that the engine does 19:38 celeron55 then there are some odd-but-per-game things like the sound and event thingies on the client 19:39 celeron55 because the pointers are so conveniently transferred in it 19:39 PilzAdam has anyone anything against this? https://github.com/celeron55/minetest_game/pull/26 19:40 hmmmm nah, it's fine 19:40 PilzAdam (except that the commit is gramaticaly nonsense) 19:40 hmmmm consistency is better than grammar i say 19:40 PilzAdam (there is a missing "of") 19:40 PilzAdam k 19:42 celeron55 there are two things that PilzAdam could have meant with "gramaticaly nonsense" 8) 19:43 celeron55 and i think hmmmm understood it the other way than PilzAdam meant 19:43 hmmmm right, bucket being capitalized in that context, and the commit message 19:43 hmmmm i realized what he ment after i pressed the enter key 19:43 hmmmm doesn't matter though 19:43 PilzAdam well, actualy i mean there has to be an "of" in front of bucket (in the commit message) 19:46 celeron55 i think i'll try how much of effort it is to make minetest set up a TCP connection in addition to the UDP one (well, technically it isn't a connection at UDP level, but minetest makes it be) 19:47 celeron55 this has to be made transparent to the upper layers, because i am lazy 19:47 PilzAdam in my farming mod I use textures were I cant remember were i got them from; but they are WTFPL iirc 19:47 celeron55 happily there is already enough abstraction to do it transparently :-D 19:47 hmmmm make a base ISocket class, have UDPSocket a derived class from that, then make another derived class for TCP that's literally just a wrapper for the standard TCP functions 19:47 PilzAdam can I use them if i want it to be upstream? 19:47 hmmmm should take like an hour tops 19:47 celeron55 ehm 19:48 celeron55 hmmmm: there is no benefit from making a common interface to them though 19:49 celeron55 they are both handled specially 19:49 hmmmm yeah i guess you're right 19:49 celeron55 and because minetest is built to use UDP, there is no thing called "connection" at the socket level; it is at the upper level from it 19:50 celeron55 but whatever; it'll turn out somehow 19:50 hmmmm oh ew, i need to add epoll() and kqueue() for WaitData 19:51 hmmmm select is ancient technology from the 1970s 19:51 celeron55 you need to make it work on windows in addition to posixy things 19:52 hmmmm simple, fall back to select where no alternative is available 19:53 celeron55 oh god this Connection class had these funny naming things... 19:54 celeron55 i don't want to touch this :D 19:56 celeron55 there's two generations of interfaces put in one class, and the naming of some public thread-safe things as compared to some internal things differ only in capitalization of first letter, and the public interface has the different convention than minetest mostly has... 20:00 hmmmm hmmmmmm...? http://codepad.org/GUbhC4mI <--- is this not really needed any longer? 20:01 hmmmm (well, i don't intend on removing it, just wondering if in theory that wouldn't be necessary) 20:02 celeron55 i don't know; i suspect the problem still exists 20:03 hmmmm if that still exists but there are no static objects being added, i think that'd classify as map corruption 20:06 hmmmm hrmm, how am i going to poll to see if the block is created or not in deactivateFarObjects, exactly? 20:06 hmmmm i am _not_ blocking in the main server thread - hell no. 20:08 hmmmm looking at what calls it, i guess it's alright to block in ~ServerEnvironment() since it's shutting down, but in ServerEnvironment::step, i think i can just return with no ill consequences 20:09 hmmmm i would rather let the caller know if i had actually completed deactivating far objects though so i'll have it return true or false if it did 20:09 hmmmm and of course if force_delete = true, it'll always succeed (return true) 20:11 hmmmm it seems like i'm going to have to make that "emerge blank block" function now 20:13 hmmmm okay nevermind any of that crap 20:15 hmmmm here's what i'm going to do: change emergeThread to: get from memory, load from disk, and if not existing, create a blank MapBlock with a "needs generating" flag set 20:16 hmmmm then if the emergeThread loads a mapblock from disk with "needs generating" set, it'll send it to the mapgen 20:48 celeron55 gotta hate these stupid header dependencies 20:48 celeron55 modifying connection.h causes like everything to be rebuilt 20:50 celeron55 well, 17 files out of almost 100... i guess that's reasonable 20:54 hmmmm speaking of modifying the map format... what do you say to me adding a noiseparams field along with a seed and other metadata 20:54 hmmmm or would you like me to include those things in the same text file where the seed is 20:57 celeron55 noiseparams field... to what? 20:57 hmmmm the map database itself 20:57 hmmmm instead of the map database containing only blocks, why can't it contain metadata as well? 20:58 hmmmm oh that's what you're asking... noiseparams fields of the terrain, biomes, humidity, temperature, etc. 20:58 celeron55 because it's there to only hold blocks; there is for example the leveldb implementation being developed somewhere 20:58 hmmmm if this mapgen is going to be modifiable i need to store it so that it stays consistent between people changing those parameters 20:59 hmmmm if someone modifies their mapgen parameters, that is 21:00 celeron55 (i wonder how hell of a job integrating this https://github.com/minetest/minetest/commits/db_backends to your stuff might be) 21:01 hmmmm that? not a problem at all 21:02 hmmmm so it's settled, i'll store the metadata in map_meta.txt 21:05 hmmmm and for the mapblock thing, i don't even need to add a flag, i can just use a so-called 'dummy' block 21:13 hmmmm well... THERE was a bug waiting to happen. if you tried to serialize a dummy block, it's segfault 21:14 hmmmm MapBlock::serialize, it tries to copy over the mapnodes without checking if data == NULL first 21:14 hmmmm so i'm going to add something like if (isDummy()) flags |= 0x10; after all 23:07 celeron55 lol i should sleep but i can't go now 23:07 celeron55 SOCKETS, SOCKETS EVERYWHERE 23:08 celeron55 lol minetest serves HTTP now :-----D