Return of the Wolves
Early on in my development of the game I added a lone wolf, represented here by a long block:
I took the wolf out some weeks ago because it kept wandering into shot when I was taking my videos. Now the game has moved along to the point where I want to add wolves (and other mobs) back in. As I mentioned back in my introductory post (almost exactly a month ago), moving creatures will be a big part of the game, especially the robotic automatons that I want to you to be able to create and use to defend yourself with. To achieve that I want to enable different combinations of behaviours to be bolted together. For built-in animals like wolves these behaviours will be fixed but for the constructed automatons the player will be able to tweak them in all kinds of ways.
The classic text in this area is Craig Reynolds’ 1999 paper Steering Behaviours For Autonomous Characters which outlines algorithms for several basic steering patterns:
- Seek and Flee
- Pursue and Evade
- Wander
- Arrival
- Path following
- Collision avoidance
- Flocking (subdivided into Separation, Cohesion and Alignment)
type MobBehaviour struct { behaviour uint8 targetType uint8 targetRange uint8 targetAngle uint8 weight uint8 sunlight uint8 last bool }The behaviour field specifies what kind of behaviour pattern to use such as Persue or Wander. targetType, targetRange and targetAngle specify a particular type of thing that will trigger this behaviour if it comes within range and field of view. The weight field enables a particular behaviour to be more dominant than others when triggered. sunlight gives a range of valid light levels for the behaviour (so mobs could sleep at night or hunt at dusk). last simply indicates that no other behaviours should be triggered if this one has been.
I’ve used this to reimplement the Wolf in the game and added random spawning of wolf packs as you move around. The results are quite fun. Their natural behaviour is to wander around as a pack. During the day they will only attack if you get really close to them but at night they will pursue you from a much longer distance. I’ve tried to capture this in these videos but it’s quite hard because I’m constantly thinking about how to get the best shot for the video while trying to keep out of the way of the wolves. Also, I’m rapidly turning the camera and the player which looks jerky on the video. When you’re playing it’s veyr immersive but watching on a video is harder. The wolves are represented by the open squares moving around the landscape. When I recorded these last night I hadn’t implmented upward movement for mobs so they tended to get stuck in depressions in the ground. Since filming them I added auto jumping up blocks and now they can chase you a long way!