In this game you control a plane flying over a sea. You encounter an increasing number of enemy planes that try to destroy you. You should avoid these or shoot them. The goal is to stay alive as long as you can and to destroy as many enemy planes as you can.
The background is formed by a scrolling sea with some islands. The player’s plane flies over this sea. You can shoot bullets that destroy enemy planes. There are four types of enemy planes: a plane that you encounter and should be destroyed, a plane that fires bullets downwards, a plane that fires bullets towards the player’s plane, and a fast enemy plane that comes from behind rather than from the front.
There are some explosion sounds and there is some background music.
The player controls the game with the arrow keys. With the space key you fire a bullet. Only one bullet can be fired every five steps.
The player immediately jumps into the game. The player has three lives. When all lives are gone a high-score table is shown. Pressing the <F1> (help) key will give a brief explanation. Pressing the <Esc> key will end the game.
There is just one level, but more and more enemy planes will arrive: first only the easy type but later the more difficult types
As our game takes place over the sea we need a background image that looks like a sea viewed from above. Add the following small image as a background resource to the game and give it the name bkg_water:
To create a room with a moving background, add a room to the game. At the left click on the tab labeled backgrounds. We need to change three settings here.
The room should now look as follows:
Create three sprites island images (with transparent background):
Uncheck the box Precise collision checking since we will not be checking for collisions.
of the islands we create an object.
When the island disappears below the bottom of the room we want to make it reappear at the top.We can use the built in feature of room_height to do this on a Step.
To move to the top of the room we use the action to jump to a position. We want to jump to a random position above the room, not a particular one. In the jump action we use random(room_width) as the x-coordinate. This will create a random value between 0 and the width of the room. So the jump action will look as follows:
Repeat for the other islands
The Main Plane
Add the enemy planes. Three fly down and one flies up.(I know ..... boring, we will make it more complicated later)
Create - set the vertical speed, jump random
Step - check if outside the room and respawn
Collision with the Main Plane
You will need an explosion sprite and an exploding sound.
In the explosion Animation
Later we will give the main plane damage.
Paint Ball Bullet
We need a bullet sprite. To make it a bit spectacular we use a rather large bullet. Exaggerating things is often important in games. Make sure to set the origin to center.
On the Plane add the Space key and create a bullet
On create of the bullet - set the verticle speed of the bullet
On Outside Room of the bullet - destroy the instance so the bullets do not continue to fly outside the room.
Wow ....... way to many bullets. We need to slow things down
We will only allow the player to fire two bullets every second, that is, one bullet every 15 steps.
To achieve this we use a variable can_shoot.
In the create of the plane set can_shoot to 1, indicating that we can shoot a bullet.
And add an Alarm to determine when we can shoot.
On the space key event we test whether the variable can_shoot is equal to 1.
Collision Event with the Bullet
Play a sound, create an explosion at (0,0) relative, destroy the bullet, destroy the enemy, respawn the enemy off the screen at a random location and add to the score.
Spawning Enemy Planes
We want to spawn more
planes as the game continues. Just like we did with the bombs.
Create an obj_spawnEnemies.
Set alarm0 to 200
Set alarm1 to 500
In the alarm0 create an instance of enemy1 and jump it to a random location off the screen (you may not need to jump if you did it in your enemy)
In the alarm1create an instance of enemy2and jump it to a random location off the screen
Repeat for the remaining enemy planes.
Scores, Lives, and Damage
To make the game a bit more interesting we will let enemies create damage on the main plane. Only when the plane gets too much damage will it be destroyed. Also we will introduce multiple lives and create a nice information panel that shows this information, together with the score.
Create a sprite of the
new object called the
obj_controlLives. It does not need a sprite.
Set the score to 0, the number of lives to 3, and the health to 100.
Draw the panel sprite at the correct position using the action to draw a sprite.
I put mine at the bottom (x=0, y=404)
Draw the score, healthbar and lives in the right spot
Draw a Health Bar that is 100 wide and 10 high
Collision Event with the Enemies
No More Health
Reset the health to 100, explode the main plane, subtract a life
End (of the Explosion)
No More Lives
Destroy the plane (explosion)
Show the high-score list and restart the game.
Enemy 1 and 2 will fire bullets straight down at different frequencies, enemy 3 will fire bullets towards the main plane, enemy 4 will not fire bullets but comes from the bottom of the room and is more difficult to avoid or shoot.
Enemy 1, 2 - Shooting Straight Down
Create an enemy
bullet object for each plane.
event of this bullet
Enemy Step event
Have the Enemy shoot 1
time out of 30 (Note: you could also use an alarm)
Feel free to modify the shooting.
Enemy 3 - Shooting at the Main Plane
On the bullet create
set the bullet to move towards the plane.
Use the dice action in the step of the plane but only create a bullet once every 80 steps, because our new type of bullet is a lot harder to avoid.
If you have extra time add extras to your game
Posting your Work
1. post the .exe and .gm81 files
2. post the game play video
3. Post the objects and spites list
4. Complete the Personal Evaluation
No Level screen shots or Peer Evaluations are required
This project will be marked on completeness only.
Do you have everything required?
There is no Rubric