The good- Reasonably powerful API
- Simple-to use API
- Many of the core mobs from Minecraft can be re-implemented and the code looks relatively clean
- Support for tons of sounds
- Support for a ton of animations
- Use of callback functions allow for easy extensibility, even complex mobs like traders are possible without breaking Mobs Redo!
- Easy access to everyday stuff. Very easy to use
- Seems pretty stable so far
- Mob spawners
- Support for knockback
- Animal breeding and following
- Interesting unique ideas such as the mob protection rune or the lasso
- Monsters infighting + customization
- Damage immunity
- With the right mods which add mobs, greatly enhances the gameplay
- Popular, has a long history and support
The bad- Apparently rather weak shooting AI. Or at least I apparently can't customize it. I can't make mobs which try to stay at a distance so they can attack from afar and be safe from melee attacks
- Weak floating AI. They never change height, making use of floating mobs rather limited
- Documentation has many holes
- Water and lava damage are pretty much hardcoded, there i
- Not many options to customize hostility and/or likelihood to attack (agressiveness)
- No customization options for children or breeding behaviour (apparently there are many hardcoded values)
- Children seem to grow VERY fast
- Can't use it verbatim in my subgame (MineClone 2), I still have to modify it. :-( The reason is that it contains a couple of craftable items. For an API mod, it has still too much clutter which should go in a separate mod.
- Attacking strategies, especially shooting does not leave much room for customization
- Mob spawners don't contain the mobs they spawn (only via infotext) :-( (I know this is possible, see tsm_pyramids for an example)
- Knockback is weird and feels laggy and not fluid / unnatural
The ugly- Hard and totally avoidable dependency on default
- I don't seem to be able to set 0 damage for hostile mobs. I need this to reimplement the tiny slimes from Minecraft, which attempt to attack the player but never deal damage. But instead, my tiny slimes deal 1 damage. :-(
- A LOT of chat abuse, also often with poor spelling
- Children have the same drops as the adults
- replace_with and replace_what are limited in use. It is not possible to make a mob replace a particular node with another particular node. E.g. sheep replace Dirt with Grass with Dirt and Grass with Air. Current API forces me to pick one.
- I am not sure, but documentation seems to be partially inconsistent or wrong about true/false vs 1/0 values. Can you please check these fields?: pathfinding, floats
- follows: It seems this is also used for feeding and breeding. I don't like this as this conflates different things. IMO this should be split into several fields, one for following, and one for feeding.
- Only probabilities of form 1/x are allowed.
- fall_speed is very weird. A low fall_speed increases the jump height! I expected a terminal velocity here, was disappointed.
Suggestions (everything I need for MineClone 2):- on_breed: Callback function for custom breeding. Is called when a new child mob is created, parameters are the objects of both parents, and the child itself. This can be useful to further customize the child when it was born.
-
https://github.com/tenplus1/mobs_redo/issues/38- Rework the current replace_with and replace_what logic by allowing the modder to use a 1:1 mapping between replaced node and new node. I suggest to allow a table for replace_what, then both tables will be seen as a “mapping”, where item 1 from replace_with will be replaced by item 1 from replace_what. Like so:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
replace_with = {"default:dirt_with_grass", "default:grass_5", "air"},
replace_what = {"default:dirt_with_grass", "air", "air"},
Meaning, dirt with grass becomes dirt, and high grass and jungle grass become air. If a table is used for replace_what, it must have the equal length of replace_with, of course. The single string value can still be supported, it just means that ANY value from replace_with will be replaced with this (current behaviour)
- on_replace: Callback function which gets called whenever a mob replaces a node. Params: Position, old node, new node. Use case: Sheep regrow their wool after “eating” (read: replacing) grass.
- Allow to set how fast children grow
- Allow to set custom nodes in which mobs take damage. It is basically a more generalized version of lava_damage and water_damage
- Add an optional terminal velocity for falling mobs. Use case: Minecraft-style chicken which slowly decend to the ground at a maximum constant (!) speed because they flap their wings
Questions:
- How do I spawn a child?
- Can I customize children?
- Can I reuse an existing entity as an arrow? Or am I forced to call register_arrow?
Holes in the docsIn general:Many of the core mechanics are not explained at all (this info is crucial to better predict the behvaiour of the mobs): - Breeding
- Feeding
- Damage/armor
- Mob types
- Default behaviour/hostility
How to spawn a mob - Yes, I know it is just minetest.add_entity but it is not neccessarily obvious, because the modder doesn't know how
- It is not clear how animations are used and what the various animation names mean
- Many parameters are just very roughly explained, leaving many questions open. Underlying concepts are often without explanation
register_mob: - The different mob types as well as their typical behaviour are not explained at all. IMO this is VERY important to understand
- Mob hostility is confusing and scattered through many different parameters, their interaction is not always clear
- It is often not clear which fields are optional and which aren't
- The default values for optional fields sometimes missing
- What on Earth does “armor” do and how does it work? What do the values mean? And why do I find values like 100, 90, etc. in many Mobs Redo mods although the docs say only 1-3 are valid values
differences
- walk_chance, jump_chance: The valid value range is missing
- jump: No default value
- do_custom: It is not clear how often this is called
- self.gotten: This is just an example, but not a proper definition
- self.owner: It is not clear what it means to be the owner
- jump_height is confusing. It has nothing to do with the actual height the mobs jump. No explanation why.