#3 Further Development - Bopland
Beginning the prototype was difficult. This was to be my first game prototype and I felt absolutely overwhelmed. With this prototype, I know that itās impossible to flesh out the entire game. I donāt have the time to create multiple missing spaceship parts, multiple powerups, while balancing multiple terrain and enemy types.Ā I only have to capture the essence of the game:Ā
collect resources ā craft powerups ā explore new areas of the map.Ā
My goals with this prototype were:
Create one missing spaceship piece (initially inaccessible)
Create one powerup which grants access to the missing spaceship part
Introduce the resource and crafting options
Build a small level (cave system) with enemies (focus only on ground enemies, no projectiles or flying enemies yet
Art Assets: a Mental Block
It was difficult to start any part of development with free to use art assets - they just didnāt feel appropriate for the kind of environment I was trying to build. Iām not an animation student, I donāt have animation experience, nor the time to learn to make my own assets. I went with a super basic but stylistic approach. I found a space themed colour palette onĀ coolors.coĀ and created a 25px by 25px object for each colour. I set the grid to be 25px by 25px too, so I could cleanly design the level and easily modify it when necessary.
I did also modify and use some assets for the more difficult types of objects like enemies and the bops resource. I didnāt want those things to just be coloured squares. The other assets are from the tutorial resources and here.
Building a Tutorial: the Players Introduction to the Game
I wanted to introduce the story and the world to the player in an organic way. In chapter 4 of Fullertonās Game Design Workshop, the traditional drama element of premise is described asĀ āestablishing the action of the game within a setting or metaphorā. This game requiresĀ the player to collect bops (dropped by enemies) in order to progress. If I were to introduce the player to a group of enemies immediately, they might understand that they have to defeat the enemy, that the enemy drops some resource, but what is the importance of this resource? Why are they even defeating enemies in the first place?
Since the level is non-linear and encourages (even requires) revisiting zones, I had to create a somewhat restricted zone to introduce the premise, before letting the player engage in the actual game.Ā
The main things the player needs to know, in order, are:
Spaceship crashed and is missing parts
Spaceship must be repaired
Bops are a resource. Defeat enemies to obtain bops.
Bops are necessary to progress.
With this design, the player spawns in a locked-in area, next to the crashed ship. If they go right, they run into a broken bridge which requires 1 bop to repair. This introduces the concept of bops as a currency - a requirement to progress. The other way takes the player to an out-of-reach, missing ship part (temporarily represented by a key sprite). When accessing this part of the area, the player collides with an invisible object, which triggers the spawn condition for the first enemy. When the player realises they canāt reach the ship part and start heading back, they encounter the enemy which drops the first bop upon defeat, enough to repair the broken bridge. The premise has been set and the player has a clear objective, without being told explicitly.
Transforming the Environment: Collision and Timers
Along with transforming the player, iām interested in transforming the environment. I want to trigger events when the player reaches a certain point. The first instance of this is in the tutorial. When the player goes to look at the missing ship part, an enemy sneaks up behind them.Ā
The invisible collision checking sprite is represented here by the blue rectangle.Ā GDevelop uses anĀ āevent systemā as opposed to programming in the traditional sense.Ā
So āprogrammingā this check was simply hiding the rectangle at start, checking for player collision, then creating an enemy at the spawn location. If the rectangle isnāt deleted upon collision, then the enemies continuously spawn as long as the player is touching the rectangle. This can lead to some pretty interesting interactions.Ā
Another interaction that I didnāt consider until I actually implemented it: after defeating an enemy, a bop is spawned. When a bop is spawned, the player has to technically collide with it, to increase the bop count as seen in the UI, and also to delete the bop visually (visual confirmation that the player has collected the bop). However, if an object is set to spawn at the enemy location, then itās expected that on player collision with the enemy, the object will spawn. The problem is that as soon as the player hits the enemy, the bop spawns, then the player collides with the bop immediately, prompting it to delete. This creates a situation where it looks like the enemy didnāt spawn a bop at all, but actually, the events are just happening very quickly.
This first enemy was programmed to create a bop on collision. The second enemy was programmed to also create a bop on collision, but also unpause a timer. The event for the player to pickup the bop on collision now includes an extra condition which checks for time - if 0.5 seconds have passed, then the bop can be picked up.
This essentially makes the bop invulnerable for 0.5 seconds, during which time the player will technically collide with it, but it wonāt delete. This isnāt exactly a functional change, but it definitely feels better for the player to see the bop before they pick it up.
Fullerton, T. (2018). Game Design Workshop: A Playcentric Approach to Creating Innovative Games (4th ed.). CRC Press. https://doi-org.ezp01.library.qut.edu.au/10.1201/b22309