Skip to main content

Mean Peas

I did something silly. I'm finishing up some behavioral changes for an aquatic creature that I'm about to release, called a water pea. For fun, I've been playing with different ideas to show the player interesting behaviors. One of those was teaching water peas to be territorial.

The way to teach a program to "learn" to do anything is called training. It simply means having the program recognize incorrect (undesired) behaviors, and reinforcing positive behaviors. Over time, the program starts combining a multitude of desired behaviors to produce results that were never explicitly programmed in. These results can be...surprising.

I eventually had peas that would fight to protect "their" area of the water tank. But water peas also form friendships, and they won't fight their friends. At least, that was the plan. Most territorial peas simply stayed in their area, along with their friends, and any poor pea that happened to wander by would be killed.

I noticed that in one corner of the tank was a single, large water pea named Bup. He hadn't formed any friendships. In order to make friends, water peas have to meet each other first, but this pea was so aggressive that it killed any pea that it encountered before they could become friends. That's not so bad, but this water pea unexpectedly decided to wander out of its territory, yet continued to remain territorial wherever it went. After awhile, there was a single, solitary, big, mean water pea left in the tank with bodies littering the bottom.


I tried to create a large group of aggressive peas who were all friendly with one another in order to fend off Bup. One by one, he killed them all. While testing behaviors with other peas, I would continually move him to one corner of the tank, but he would somehow find and kill the peas I was working with while I wasn't watching.

Finally I had enough, and dropped Bup out of the tank, killing him. Ultimately, I removed the aggressive behavior system altogether. Water peas are meant to be kind, social little jellies. Except for Bup. He was the meanest pea I've ever seen.

Comments

Popular posts from this blog

Collisions with line intersections

Collisions can be determined by testing for line intersections. Imagine a line representing the ground and an object above, falling down. At time t1 , take the center point  p1  of the object. At time t2 , move the object down and take the center point p2 of the object. If the line formed by endpoints (p1, p2) intersect the ground line, a collision has occurred. On a collision, reset the object to its original position before the movement. When a collision occurs, be sure to reset the object by the same point used to determine the line intersection. In this example, I use the center point, so the object should be reset by the center point, not its actual x, y (usually top left) coordinate. It is not always the case that resetting by the x, y coordinate is sufficient. This can be seen in the following picture. It can be seen that even if the object isn't moving, but its size changes, a line intersection can occur, and resetting the object to its x, y position will...

Momentum transfer

This image shows different possible paths that result in a collision. Intuitively, we know which way the object should continue along the wall. Determining this mathematically is a bit more challenging. The object could go in one of two directions. That is, it could follow the wall one way or the other. But why should it prefer one direction over another? We need a generalized rule that applies for every wall and every angle of approach. The rule is that momentum is transferred along the path of least resistance . Least resistance is the difference between the wall angle and the angle of approach that is less than 90 degrees. This raises the issue that a line's angle is determined by its direction. This means that the end point we start with determines the angle of the line. See the line below. Is it a 45 degree line, or a 225 degree line? It depends on which point you start from. But, for a generalized rule of momentum transfer, the answer shouldn't matter. ...

Moving with Trigonometry

These are some thoughts on Trigonometry that I wanted to write down, and someone, somewhere may want to read. But probably not. If you're not into it, turn back immediately. In a top-down view on a two dimensional plane, you can face any direction and move in a forward direction by moving on the x-axis by the cosine of your rotation and moving on the y-axis by the sine of your rotation. This seems to require a physical orientation in the world, but this physical limitation is only on the surface. We can take one step back and use these abilities in more subtle ways. Imagine a side view on a plane in which you can move left and right, and jump up and fall back down to the ground. Let us first think of the left and right movement in terms of trigonometry. Facing right means 0 degrees and so we can move on x by the cosine of our rotation. Facing left is 180 degrees, and we move on x by the cosine of our rotation. Let's maintain a logical rotation factor called xf . When sta...