123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- -=-=- DEVELOPMENT -=-=-
- Development of this game operates on a few basic principles. I felt it
- was necessary to outline these in case other developers want to get on
- board or even just submit pull requests. No code will be accepted into
- this subgame if it doesn't meet the standards laid out here.
- -=- No monolithic base mod -=-
- Minetest Game's "default" mod has a tendency to absorb other mods when
- their features are added to Minetest Game. For example, pieces of
- "moreores" and "conifers" were added to Minetest Game, and instead of
- retaining their separate mod status, they were lumped into "default".
- Likewise, "default" contains the basic things all mods depend on, such
- as sound files. That means that nearly every mod designed for Minetest
- Game has to depend on the presence of the ores, the trees, the map
- generators, a multitude of player-craftable items, et cetera just to
- use the same sounds everything else is using. Furthermore, server
- administrators can't remove, for example, desert biomes, without
- removing everything depended on by every other mod. It's utterly
- ridiculous.
- In Palette Game, we have no monolithic base mod. Anything even
- resembling a base mod is kept as minimalistic as feasible, so mods can
- depend on only what they actually need, and administrators can remove
- what they don't want. This results in a bit of a layered system. For
- example, one mod adds the basic sounds every mod will probably want
- access to as well as the images required by non-mod parts of the game
- (such as the life heart and player sprites). Another adds the base
- nodes (and nodes those nodes depend on) used by the bare-minimum map
- generator. Other mods can build off of that to create actual biomes,
- and each biome has its own mod.
- For the most part, we'll try to keep any mod included here from
- becoming monolithic, but in some cases, it might be unavoidable, such
- as when a paletted node has each of its versions act as a significantly
- different item. For example, a mod that introduces a palette-based
- sapling might need to define 256 types of log, one for each tree
- species, if each log has a significantly-different texture. (The
- currently-planned tree mod will only need to define 32 log nodes
- though.)
- -=- Clean dependencies -=-
- A while back, I filed a pull request to fix an issue where Minetest
- Game's "default" was using nodes from "flowers", even though it is
- "flowers" that depends on "default". The mapgen issue caused errors to
- be thrown by "default" any time "flowers" was not installed. The pull
- request was rejected on the grounds that the developers, at the time,
- wanted to keep all mapgen related stuff together in the same file. So
- why have "flowers" be a separate mod if both mods require the other to
- function properly? Later, this issue was actually fixed, but now
- there's a new problem: the schematics in "default" include mushrooms
- from "flowers". Again, these two mods have become entangled.
- In Palette Game, we keep our dependencies clean. If a mod doesn't have
- an actual dependency on another mod, it won't assume that mod exists
- and try to use its features. Administrators can remove any mod they
- like, along with the mods that depend on it, and there will be no
- errors.
- -=- Heavy use of palettes -=-
- Palette Game makes heavy use of palettes, hence its name. Not
- everything needs to have a palette, but if multiple nodes have
- basically the same texture, they will be combined into one node
- definition and use a shared palette.
- -=- Pseudonamespaces in media file names -=-
- The Minetest API documentation recommends media files have names in the
- format "{modname}_{some description}.{extension}". This is to avoid
- filename clashes. However, a mod called "x" could want to add a texture
- called "y_z", and a mod called "x_y" could want to add a texture called
- "z". Both mods would call their texture "x_y_z.png". Underscores cannot
- both be valid characters for use in mod names *and* be used as a
- namespace separator. A different character is needed as a separator.
- The obvious choice is the colon, due to its use in delimiting
- namespaces elsewhere in Minetest, but it isn't handled correctly in
- texture names. Instead, Palette Game uses a dash to delimit the
- pseudonamespace, as dashes both are handled correctly in texture names
- and are disallowed in mod names. Media files in Palette Game, except
- where the engine requires a specific name be used (such as
- "crack_anylength.png"), are in the format
- "{modname}-{description}.{extension}".
- -=- Namespaces -=-
- Speaking of namespaces, namespaces are actually used correctly in item
- names in this game. This point is one of the reasons this game is being
- created instead of my continuing work modding Minetest Game.
- Specifically, the Minetest Game "stairs" mod shoves all stairs and
- slabs into the "stairs" namespace, directly negating the benefits of
- each mod having its own namespace. Different mods using the "stairs"
- API that happen to choose the same name for their stairs will find that
- one mod's stairs overwrite the other mod's. In this game, library-type
- mods that help define nodes are only allowed if such libraries put the
- defined nodes in the correct namespaces instead of absorbing those
- nodes into their own namespaces.
- -=- This is a complete game -=-
- I mean, development isn't finished and we're always trying to make the
- subgame better, but this game isn't designed with modding being the one
- and only use case. For example, Minetest Game has a nasty habit of
- defining items that are utterly and completely useless, in hopes that
- some mod will give them purpose. For example, the vessels mod was like
- this originally, defining vessels for mods to use that had no function
- on their own. Thankfully, the developers accepted a pull request I put
- in to make the vessels placeable as nodes, giving them purpose on their
- own. Mods could still use them, but they were no longer dependent on
- mods to even be worth having in the game. Another example of this is
- mese crystal fragments. Originally, mese crystals were defined to be
- breakable into fragments, but there was no way to reassemble those
- fragments and no use for the fragments themselves. My pull request to
- make the fragments craftable back into full mese crystals was rejected.
- In other words, a new player could accidentally discover the mese
- fragment recipe, break their mese crystals, and ruin them with no hope
- of getting them back. Seriously? Thankfully, my exact solution was
- later implemented in Minetest Game independently of my pull request.
- Without these two fixes though, these items are rendered pointless in
- worlds that either are unmodded or that don't happen to employ mods
- that use these specific items.
- In any case, while Palette Game will try to make things easy for
- modders, it'll also care for its as-is subgame users. Everything has a
- purpose in this subgame.
- -=- Built-in ownership -=-
- Speaking of being complete, this subgame doesn't even require an
- external node-protection mod; it includes one. Feel free to swap it out
- for a different one in your own worlds, but even if you don't, this
- subgame comes server-ready as it is. Additionally, destructive mods in
- this subgame respect protection. I remember when TNT was added to
- Minetest Game and I tried to reason with the developers to have it
- respect node protection. If I recall, I even wrote up a pull request to
- do all the work for them. They refused, claiming people should be
- allowed to blow up their own protected areas. But what about *other
- people's* protected areas? These were left unprotected from TNT as
- well. Thankfully, this has been fixed independently of my own attempts
- later. However, the "fire" mod in Minetest Game, as of writing, still
- doesn't respect node protection. Everything destructive in this subgame
- respects protection.
- (Currently, the protection mod for this subgame has not actually been
- developed yet.)
- -=- No dried-up old worlds -=-
- All items in this subgame, without exception, are renewable. Even items
- that normally wouldn't get "used up" are renewable, as players can be
- short-sighted and throw away valuable items. For example, if there's a
- limited amount of dirt and players pulverise it, dirt will become too
- scarce. No mod will be accepted into Palette Game unless for every item
- it defines, it also defines a renewal mechanic. Renewal doesn't have to
- be easy, but there needs to be a way to recover lost materials without
- throwing away old maps and starting over.
- -=- Copying is a form of love. Please copy and share. -=-
- Imitation is the most sincere form of flattery. You don't copy what you
- don't like. We copy code and media from other sources, especially
- Minetest Game. We love Minetest Game. It's the best game ever,
- currently. We just want to try our hands at improving it a bit. If you
- love something from Palette Game, please take our code and media and do
- with it as you please. We make everything available under
- Minetest-compatible licenses too, in case upstream wants to incorporate
- what we're doing. Besides, ideas are not property and cannot be "owned"
- or "stolen". Trying to prevent others from making use of our work would
- be a morally repugnant thing to do.
- Please check individual mods in this game for specific details, but
- without exception, all code is under a license compatible with the GNU
- LGPLv2.1 and all media is under a license compatible with CC BY-SA 3.0.
- Anything not in a mod (such as the subgame's icon) is under one of
- those two licenses (not just a compatible license).
|