I'd like to begin by mentioning that I am VERY new here! I have only been a part of this project/community for about a month, and I am sincerely grateful for EVERYONE who has contributed here, whether by active participation in the development of the game, mods, etc., or just by way of participating on the forums and providing suggestions, ideas, and feedback. You have all come together to create something truly wonderful and amazing here.
Now, before I share any feedback, I'd like to mention that I am a professional developer / systems administrator with 25+ years experience. That, of course, probably makes me far more opinionated and biased than the vast majority of the actual user base. Since finding Minetest, I've been dedicating all of my spare time to studying Lua, the Minetest API, and the Minetest Modding Book, and while I'm a little peeved by how difficult it has been, I've managed to learn how to build and accomplish some really neat things, and I've even learned 3D modeling with Blender. Most importantly, to me, I've been using all this new knowledge I've gained, and all these new skills I've been learning, to build a Minetest server that I share with my wife and kids, and we've all had a LOT of fun along the way.
I'd also like to say that I love the game (by which I am referring to the Minetest application itself as a client and server based on the Irrlicht engine), and that is my only motivation for speaking up and posting this here today for the second time (my session apparently timed out, and I lost my first attempt at this post, so now I'm rewriting it from scratch since I couldn't go "back" from the login screen). I am posting this because I have found something here that I truly enjoy. Minetest, to me, represents an exciting and fun opportunity to challenge myself, to learn new skills, and to create something my whole family can have fun together with and enjoy. I've even explored the possibility of using Minetest as an educational tool (my wife and I homeschool our kids).
With all of that said, my journey into Minetest over this month has many times been difficult and proven itself to be a great source of frustration. I don't want to come across as some hostile newcomer who's just looking to stir things up, step on anyone's toes, or otherwise insult or offend anyone, but only to share my honest feedback. I have to imagine that if someone like me finds it as confusing and frustrating as I have, the "average Joe" must find it exponentially more difficult to navigate this incredibly diverse landscape of "addons" (mods, texture packs, etc.), nevermind the core API which is but sparsely documented. My intention here is only to hopefully contribute some constructive criticism that may perhaps make it easier for others who, like me, are late to the party and just finding Minetest 13 years down the road.
Now, of course, anyone can just install the game, play the default "Minetest Game", and call it a day... or even simply install one of the well-developed and actively-maintained games out there, such as MineClone2 or MeseCraft. These options seem totally painless thanks to the hard work and continued dedication of those who created them. That is precisely what I did in the beginning, and that was fun for a time, but that's also where the "ease of use" ended.
Ultimately, the coder in me prevailed, and I started digging into the source code rather early on. I quickly learned that these "games" are but a collection of mods carefully crafted and integrated to create a series of elements (nodes, tools, entities), challenges, rewards, etc. that make the game actually fun to play (the first thing I discovered when I dove in was the "devtest" game which offers nothing but a few dev/debug tools, and that was obviously not much fun). Once I wrapped my brain around the logistics of the game, and the relationship between Irrlicht, Minetest, and the mods and mod collections referred to as "games", that's where the real fun (but also a great deal of frustration) began.
Having played the default Minetest Game, then MineClone2 and MeseCraft, I realized that they all had some things in common, but they also each brought some unique thing or another to the table that was lacking in the others. It was for this reason that I began to wonder if, perhaps, I could incorporate certain things from one game into another, and build one that had everything I liked, and nothing that I didn't. For example, my 5 year old son (who I'm extremely proud of just for grasping "how to play" a pc game!!), finds it very difficult to enjoy playing whilst being repeatedly killed by angry mobs with bows and arrows in MineClone2. MeseCraft seemed to be the most "family friendly" and enjoyable for us all regardless of age or skill level, but it was also difficult for me, as a newbie who didn't know Lua, to extend and add things into due to conflicts with other mods, most of which seem to be "customized" specifically for use by that game (backtracking, I also found the same is true of MineClone2, for the record -- keep reading and you'll know that I ultimately came to understand why, too).
Before diving into learning Lua, studying the API, and all that, I first began by simply scouring ContentDB in search of mods that we found interesting. What I found was an extremely large and diverse hodge podge collection of mostly incomplete, incompatible, or abandoned projects that either never saw their way out of the conceptual stages or haven't been actively maintained for years, both of which yield little more than a ton of errors when attempting to install and run them. I found the "depends" information, at least, somewhat useful in that it at least pointed to other mods upon which certain mods are built upon. However, trying to figure out which VERSION of the game itself (Minetest) or mod upon which another mod depends proved much more difficult.
So, here it is, my itemized feedback (and commentary) for whatever it may be worth to this community:
#1 - Versioning, across the board, seems extremely convoluted, and for the most part, totally undocumented as it relates to interdependency.
As with other systems which rely on package management, for example, NodeJS/NPM, I believe this could be fixed simply by adding version information to the "depends" field in mod.conf. In its current (comma delimited string) format, it may prove difficult, but perhaps tables could instead be used? e.g.:
Code: Select all
depends = {
{ name = "mod_name", version = "1.2.3" },
...
}
#2 - Aside from "Maintenance State" which is, from my observations, most frequently "unknown", ContentDB doesn't maintain any sort of flag/field indicating the overall status of a project.
Based on the types of projects I've seen, I feel it would be extremely helpful to know, at minimum, what stage a given project is in, for example:
- concept ("I have an idea for a mod, and here's some mockups / mock code")
- proof-of-concept ("Here's a rudimentary implementation of that concept showing it's possible")
- pre-release ("More work needs to be done prior to being considered generally available")
- active ("This is fully developed, tested, and confirmed working with Minetest v1.2.3 [and mod_name v1.2.3, ...]")
- deprecated ("This project has been replaced by alternate_mod_name or is no longer compatible with newer releases of Minetest and no further development is planned")
- abandoned ("No commits to repo and no other forum/ContentDB activity from author(s) in over a year")
#3 - It's a little bit of a pain that everyone hosts their code in different places, some of which (e.g. Gitlab) require me to set up an account just to access the code.
I guess I'm just wondering... why can't we all agree on one code hosting platform? All the projects included in ContentDB seem to be extremely specific to Minetest itself, so there doesn't appear to be any benefit in keeping these "addons" separate by hosting elsewhere. Granted, I've read some people's arguments that "Minetest competes with Minecraft which, along with GitHub, is owned by Microsoft, and Microsoft may one day decide to just delete all our stuff!!", but these arguments are totally unfounded and, quite frankly, based in unreasonable paranoia. Do you know how many direct Microsoft competitors host their (extremely valuable) code on Github? Do you really think they'd dedicate valuable time and resources to hunting down and eradicating Minetest mods?
Speaking of which, and out of curiosity sake, given the number of projects and their overall filesize, if everyone has such an issue with choosing a single git host, why doesn't Minetest just host its own official git server? It doesn't seem that it would be cost prohibitive. I understand there are certain liabilities, especially if project maintainers incorporate copyrighted material or other material that may infringe on others' rights, however that could be easily mitigated with proper terms of service and administration.
#4 - Mods, texture packs, etc., overall, are poorly managed with no apparent oversight or vetting process
I've been around a long, long time, and over the years, I've seen probably close to a thousand different Linux distros pop up. Currently, there are hundreds which are actively maintained. The question I constantly ask myself is "why can't we all just work together?" I've found myself here having the exact same sentiment toward Minetest. Why does everyone who builds anything feel the need to stake their claim to fame by releasing a whole new mod (direct comparison: distro) rather than contributing to any of the thousand other mods (distros) already in existence, most of which are licensed such that there would be no reason not to, many of which have never left the initial pre-release stages anyway? If nothing else, you've got a perfect boilerplate! There is no less "creative genius" in bringing someone else's vision to life than there is in bringing your own.
Anyway, the point is, the namespace here is completely polluted, and as a result, annoyingly convoluted. Some of you people are like domain squatters, reserving a namespace for a mod that you haven't even built yet by releasing an empty repo to ContentDB, or maybe with nothing but some mock code or, worse, code borrowed from another project that you intend to do differently.
Meanwhile, others of you seem to have come up with some REALLY COOL ideas for modifications or additions to already existing mods, and though they are SUBSTANTIALLY similar, you for whatever reason insist on creating a whole new mod. WHY!? Like, seriously, do you have ANY idea what a TURN OFF it is to have to install 15 different door mods just to see which one actually (still) works, much less spend the time trying to figure out how to get them to work together? When I first went about figuring out how to create my own game, I just wanted doors. That's when I found "doors", "doors redo", "doors redux", "extra doors", "C doors"... holy cow! Which do I choose? Do I need them all? Oh, wait, none of them actually work right on their own, as sourced from the original repo (maybe a beginner mistake? Please correct me if I'm wrong!).
You guys DO know that the whole point of "open-source" is to allow contributions (see: additions and modifications) to a given project or piece of code, right? Is it that your ego is too big to contribute to someone else's work, or is the problem that the original authors' ego is too big to allow someone else to contribute to theirs? What's going on here? Why are there no less than 5 different ways to add any one thing to my game, all of which come with a boat load of other (mostly unwanted) tweaks or dependencies?
Another example is mobs. I've spent over a week now just trying to get mobs to work together, but I can't seem to do so. Everyone goes their own way, and nobody seems to have any consideration for the other. The ONLY author who has reached back out to me when I sent a private message asking for details was TenPlus1 **shout out, you're awesome**. From my limited newcomer perspective, the overall lack of cooperation screams "MY MOD IS THE COOLEST! Who cares about those other ones?"
You know what's way more attractive and encouraging to new developers who might want to join in? Other developers working together to ensure that their code doesn't break someone else's. It's just being polite / common courtesy, and on that note, seniority always wins. The creators of the original "door mod" should not have to ensure forwards compatibility, but vice versa. If I install "doors redo" or "doors redux" it shouldn't break my installation of "doors", your project's direct predecessor. ** Note: no offense to whomever created the various door mods. I'm not even specifically referring to the "doors" mods, just using it as an example.
#5 - What's up with the documentation?
The Minetest API itself (https://minetest.gitlab.io/minetest/) is a huge and helpful resource, and as I've said before, I am deeply grateful to those who made it possible. At the same time, it seems deftly incomplete; it's almost as if those who wrote it didn't want the casual reader to learn too much. Now, I'm shooting from the hip here. Perhaps it's just that nobody has had the time to go in and properly document things. Then again, it's been 13 years, and if I hold this project to the same standard I would any other open source project, I'd have to say there's a certain measure of neglect there. Either that, or there are way less people contributing here then I'd imagine. If there's only a handful of you working on this since day one, and nobody has so much as offered to help along the way, then I guess I'd understand.
My biggest complaint here is that there are no functional references (i.e. links to related documentation), very few working examples, and many functions, objects, classes, etc., leave too much to the imagination. All the functions (maybe? I don't know. I haven't cross-referenced the actual Minetest c++ source code or anything) seem to be documented, but there's few, if any places where the parameters/arguments or return values are actually documented. For example:
Code: Select all
Raycast¶
A raycast on the map. It works with selection boxes. Can be used as an iterator in a for loop as:
local ray = Raycast(...)
for pointed_thing in ray do
...
end
The map is loaded as the ray advances. If the map is modified after the Raycast is created, the changes may or may not have an effect on the object.
It can be created via Raycast(pos1, pos2, objects, liquids) or minetest.raycast(pos1, pos2, objects, liquids) where:
pos1: start of the ray
pos2: end of the ray
objects: if false, only nodes will be returned. Default is true.
liquids: if false, liquid nodes (liquidtype ~= "none") won't be returned. Default is false.
This is just one small example out of hundreds I could give.
Also, for example, I wanted to figure out how to modify my "Player". Where do I begin? Search the documentation...
Code: Select all
[b]PlayerMetaRef[/b]
Player metadata. Uses the same method of storage as the deprecated player attribute API, so data there will also be in player meta. Can be obtained using player:get_meta().
You get the idea. Again, this is just all my outsider's perspective looking in. If I drink enough coffee, and am skillful enough with my search queries, I can usually find what I'm looking for, however there are many places that leave lots of room for improvement.
P.S. RubenWardy, thanks for attempting to make a book on this. It needs some updates, and could definitely use a lot more work to be considered a complete volume, but it's become my best friend this past month and I am very grateful.
So, last but not least..
#6 Hi, I'm new here. Which permutation of possible items and configurations can I use to actually make a working recipe that doesn't conflict with / break someone else's without studying every single mod released to date and generating my own spreadsheet maybe?
Maybe this is my ignorance (again, I'm new, forgive me if this has already been figured out somewhere, but I certainly can't find it), but why isn't there a database of registered recipes somewhere so I can easily find what's NOT in use, and let other people know what I'm using so they don't step on my toes later?
-----
That's all for now, and... hopefully this is well received. Please know that I come from a good place in saying all of this. I truly believe that I've found something awesome here, and I took all this time out of my day to write this (twice now) because I'd really like to be a part of this and see this thing make leaps and bounds forward. Things are a mess right now, though, and I'm hoping that maybe some of my "newcomer passion" can inspire some sort of push in the right direction.
Maybe that sounds extremely arrogant, and maybe people have been here for 13 years trying to do exactly that, and you just need more help. If so, please tell me! I'd be happy to help, and I'm definitely qualified. All I can tell you is that I have seen far too many posts from people wondering why this game is not already more popular than Minecraft... well, probably because 1) they have a coherent, paid team of developers all working together to achieve the same goals, and 2) the current way everything is documented / structured, it's not really inviting to new developers like myself who might want to jump in unless, like me, they have personal motivations (so far, I REALLY like building and playing with my kids).
I will say this, too: I've been inspired by a number of mods to want to continue the original author's vision, or to bring it up to speed with the current Minetest version, make it more efficient, or otherwise contribute in some beneficial way, but as soon as I go to look at the PR's on the project, I usually find there's already a line of people there with their own PRs who have already been there waiting sometimes a year or more with no action from the owner! It sure would be nice if some of these abandoned projects could be revived and handed down to willing contributors.
For example, I'd happily take over the dinosaur mod (currently Paleotest, but apparently deprecated and abandoned as well?) -- my kids would love it! But what do I do if I want dinosaurs in my game right now? The models are broken, and the author only included the .b3d files, but no original .blend files. I could add to the madness by making more "new" mods (but not really, though, just a little different than the other 15 that already exist), or I guess I could just say screw it and keep my work private, but that sucks for others who might want it but aren't capable of creating their own... Original authors really should do the responsible thing and pass the torch whenever they're no longer interested in or capable of continuing a project.
I'd really like to help out if anyone is interested in allowing me to do so. I'm sure I'd gain a lot of knowledge and new skills in the process, so I'd be happy to do so. I know a whole lot about servers, databases, software, APIs, etc., and I'm proficient with a number of other languages, so it shouldn't take me much time to master C++/Lua...I'm learning, but it's a rough road of trial and error so far, and if there's anything I can do to help myself and remove some of the road blocks for the next guy, I'd be willing. Let me know!