This write up is discussing a joint contribution of Simon and me, not only to ProcJam but also to the NoSecondChance iOS app the Metamakers are developing. My primary motivation for this project was to allow the system to explore a new game design space which requires functionality beyond the current limitation to purely physics-based behaviour. This means I was able to integrate THREE things into one small project. My personal interest in behavioural AI, working on our in-house project and working on something for ProcJam 🙂
Do you want to know more about NoSecondChance? Mike wrote a nice piece about NoSecondChance introducing the game and the design space it can encompass. So, if you want to know more about NoSecondChance have a look at Mike’s initial blog post.
Motivation for new Patterns of Movement
Inspired by naturally occurring cyclic movement patterns such as the jellyfish in image 2 entirely new game dynamics would be possible in NoSecondChance.
These patterns would not only allow people using our app to design new levels but they would also allow the generator to exploit an entirely new space using repetitive rhythmic movement.The repetitive nature of the movement which propels the jellyfish through the water creates interesting visual patterns which are highly distinct from existing physical characteristics and create some hypnotic and mesmerising effects.
Image2: Jellyfish movement from http://imgur.com/gallery/GSkQLIT
The problem with those complex patterns is, that they simply cannot be represented through physical properties of individual entities alone. Another way of creating similar patterns would be the use of multiple forces acting upon clusters of connected game objects, similar animal swarms. Both of those options would introduce control mechanisms that are complex and hard to control given that the aim of the app is to get around using programming. Thus, those options are currently not desirable within the game. Within the current game, the closest motion resembling the jellyfish is controlled through spawning elements in waves visible in image 3 and then tapping them or use collisions to invert their force.
Image3: spawning balls in waves
Introducing Timers to Trigger Cycles and Other Fun Things
To widen the existing game design space and allow the creation of movement resembling the jellyfish I had a closer look at timers and how they could be used to unlock functionality conditionally. More specifically I wanted to introduce timers to augment the force of particular balls. Using those timed locks gets around the issue of using tapping or collisions and allows some interesting dynamics.
Image4: inverting the force of nodes on a global timer
Image5: switching the type after 2 seconds
It also does not require any communication between game entities. Image 4 illustrates the first behaviour designed using the new timers and is based on a global timer for all balls of a type. The timer reverts the force and the velocity and creates a beautiful rhythmic pattern resembling the jellyfish. Utilising this allows some interesting game dynamics using locked in balls and a non-static area you have to avoid. Switching now from a global to a local timer and augmenting the game from Image 3 allows another interesting design pattern, making objects change their type. A global timer would have created a hard transition for all balls of a type whereas a local timer for each ball allows a more fluid transition. This allows me, or later a designer, to have specific locations where balls appear on screen and alter the required playstyle to win the level. Image 5 basically moves the spawning zone from the boundary of the screen inwards reducing the time & space available for the balls to set on the target.
Combining local and global timers
By coupling local and global timers, some fascinating dynamics are possible such as the ones in image 6. In that level local and global timers are combined to achieve a different game dynamic. The balls use a global timer to change from red to yellow and a local timer to pin to their local after a second of moving. The combination of those two timers leaves the impression of some clotting substance.
The current implementation of the timer offers 4 different parameters for each of the two ball types:
- Global timer: [0..10] sec
- Global timer option
- Local timer
- Local timer option
The current timers I developed allow the designer to switch ball type, invert forces, destroy balls or pin/unpin them after a given interval.
Image6: chaining two timers; changing type & pinning
How does that all fit into ProcJam?
Creating a new mechanism which generates different movement and interaction patterns for an originally purely physics based game was the first step I intended. At the MetaMakers Institute, we want to support the design process not only by giving new tools to the developers such as the new timer. A second objective is also to enrich the generative component which is able to explore the design space with and for us, giving us and hopefully the users of our software new inspiration. In the case of NoSecondChance the goal is to design a couple of levels with the new timer and then let the generator explore the design space to come up with interesting and fun new level suggestions which we can modify. So the main goal for me for ProcJam was not to come up with a new mechanism for me to toy around with but to give the generator a new space to explore and surprise me with a novel use of timers.