Top Banner
How to Make a Game Like Space Invaders
43

How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Mar 26, 2015

Download

Documents

Isabel Schmidt
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

How to Make a Game Like

Space Invaders

Page 2: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

What IS Space Invaders?

• a SHMUP (shoot-em-up)

• Player has one ship, enemy has many

• Player and enemies interact by shooting at each other

• Top-down 2D (usually)

Page 3: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Concepts

Page 4: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Video Frames/Ticks

• A film is made of 24 still pictures per second

• Motion is achieved by small changes to each picture, but 24 fps is still fast

Page 5: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Video Frames/Ticks 2

• Video games are usually 30 or 60-80 fps

• Video games achieve movement by moving each screen object a little bit every frame

Page 6: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Shmups are very object-oriented

• Ships are objects

• Bullets are objects

• The player is an object

• Explosions are objects

• Levels can be objects (certainly made of objects)

Page 7: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Question

• How many bullets can be on the screen at once?

• Space Invaders = 1 for player, 2 for enemies

• Modern = completely arbitrary

Page 8: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Lists

• A great way to store and organize objects

• Most beginners get hung up here

• Conceptually harder than arrays

• C and C++ use linked lists (with pointers)

• BlitzBasic has list:TList

Page 9: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

What is a ship?

• Is-dead flag• Health value• X and Y positions• Path logic and data• Reference to the art• Animation state• Bullet/missile launch state• Bullets and Explosions are very similar to

ships!

Page 10: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

What is a player ship?

• Not as much, surprisingly

• Path logic is in your fingers, not in code

• So keyboard state checks (for avatar control) go here

Page 11: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

What is a bullet/missile?

• Like a ship, but (usually) simpler movement• Erased when it goes off screen, not when it

reaches the end of its path• State: Player shot or Enemy shot• Each Player-bullet collides against every

enemy• Each Enemy-bullet collides against player

Page 12: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

So, to make space invaders…

• Make a player• Make a bunch of enemies• Move them every frame, have them create

bullets• Move the bullets every frame• Check for enemy-bullet collision every frame• Keep going, even if all the enemies or the

player is dead

Page 13: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Programming

Page 14: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Main loop in PseudocodeMain(){

SetupEverything();

CreatePlayer();CreateAllEnemies();

done = false;while (done == false){

TickPlayer();TickEnemyList();TickBulletList();

DrawPlayer();DrawEnemyList();DrawBulletList();

if (EscapeKeyPressed() == TRUE)done = TRUE;

WaitForNextFrame();}

ShutDownEverything();}

Page 15: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Timer callback versionTimerFunction()

{

TickPlayer();

TickEnemyList();

TickBulletList();

// some systems, like Flash and Torque, do the drawing for you

DrawPlayer();

DrawEnemyList();

DrawBulletList();

if (EscapeKeyPressed() == TRUE)

done = TRUE;

}

Page 16: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

TickBulletList()TickBulletList(){

ForEach( bullet){

x = x + dx;y = y + dy;

if (BulletOffScreen()){

isDead = TRUE;}ForEach(enemy){

if (Collides(enemy, bullet)){

isDead = TRUE;DamageEnemy(enemy);

}}

}

RemoveDeadBulletsFromList();}

Page 17: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Basic Math

Page 18: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors and Offsets

• Where is your Ship? X and Y

Page 19: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors and Offsets 2

• Where is your bullet? Also X and Y• Where is your bullet in relation to your ship?

bulletX – shipX and bulletY – shipY

Page 20: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors and Offsets 3• How far apart are they? Pythagorean

theorem (sqr(a) + sqr(b) = sqr(c))

• This requires a slow square root function

Page 21: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors and Offsets 2

• What direction from the ship to the bullet? Arctangent

• Atan2(bulletX – shipX, bulletY – shipY)

Page 22: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Arctangent• Usually gives a direction in radians, from 0-(2*PI)• PI is 3.1415927 (= 180 degrees)• Radian to degrees = dir / (PI*2) * 360

Page 23: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors and Offsets 3

• So you can describe the relationship between two objects on the screen in two different ways

Page 24: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Offsets

• Offset = x and y coordinates (or differences)

Page 25: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors

• Vector = direction and distance

Page 26: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Translate Offsets to Vectors

• Get distance with Pythagoras

• Get direction with Atan2 (Arctangent)

Page 27: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Translate Vectors to Offsets

• X = sin(direction) * distance

• Y = cos(direction) * distance

Page 28: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Vectors & Offsets = important

• Shooting bullet directly at the player

• Homing missiles

• Collision detection (is bullet close enough?)

• Enemy follows path

Page 29: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

What is TurnTowardsPoint()

• If you want the homing missile to turn slowly towards the enemy (instead of instantly) what do you do?

• The answer is the TurnTowardPoint() algorithm.

Page 30: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Designing Your Game

Page 31: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Bosses

• Traditional part of shmups

• Each one is a love letter to the player

• Multiple weapons• Multiple parts• Multiple Modes• It’s a boss, not just an

extended enemy

Page 32: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Powerups

• Functionally just like Bullets

• Give expanded powers to the player

• Key to one of the basic metagames

Page 33: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

The Game Modes

• Play mode

• Start mode

• Results mode (you are dead, how’d you do)

• Pause mode

• Credits mode

• Options mode

Page 34: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Game Modes 2

• Recognize that game modes are just states

• Completely different states than game states

Page 35: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

Scrolling Background

• Space Invaders background was black

• Galaga and others had winking, scrolling stars

• Zaxxon and others started making the background complex and interactive

• Treasure games are famous for complex, puzzle-like environments

Page 36: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

What are Shmup levels?

• Hand-crafted definitions of when each enemy shows up

• The things that happen before a boss shows up

• Divisions of art

• Scoring opportunities

Page 37: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.

How are levels made?

• Make the editors yourself, for yourself

• Ship path editor (mirror-able)

• Level editor• Place art tiles• Place ship spawn

points• Place camera path• Boss editor

Page 38: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.
Page 39: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.
Page 40: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.
Page 41: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.
Page 42: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.
Page 43: How to Make a Game Like Space Invaders. What IS Space Invaders? a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact.