Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 3 | |||
![]() |
| × | 1 | |||
![]() |
| × | 3 | |||
![]() |
| × | 1 |
This is my first ever project on Arduino, please be kind LOL.
I was looking for a good idea to learn how Arduino works and I decided to build a Space Invaders clone. I tested on Arduino Nano but it should work with Arduino Uno too.
-------------------------------
You need to install the TVout libraries: get them using this link:
https://github.com/Avamander/arduino-tvout
and follow the instructions from the page in order to install the libraries.
-------------------------------
Here you can see a video of the 1.0 release.
In the 1.1 release I fixed a few bugs, improved the shields shape and number (now are four like in the original game) and the cannon shape, and added the alien ship in the game.
In the 1.2 release I added the audio FX, I improved the cannon size and I added the chance to use two buttons instead of the potentiometer to move the cannon (like the original arcade game).
-------------------------------
What you need (and why):
- Arduino Nano / Uno
- 1x 100 kohm resistor (cannon fire)
- 1 kohm resistor (TV out)
- 470 ohm resistor (TV out)
- 100 kohm potentiometer -OR- two pushbutton (cannon movement)
- 2x 100 kohm resistors (if you want to move the cannon with the buttons)
- button normally open (cannon fire)
- 1 RCA connector (video out)
- 1 breadboard (optional)
Hardware setup (also see the schematics picture):
1a) if you want to use the potentiometer:
Connect the center pin of the potentiometer to the Arduino A0 pin and the other two pins of the potentiometer respectively to +5V and GND.
1b) if you want to use the two buttons: Connect a 100 kohm resistor between GND and Arduino D4; Connect a 100 kohm resistor between GND and Arduino D5; Connect the left button between +5V and Arduino D4; Connect the right button between +5V and Arduino D5;
2) Connect the 100 kohm resistor between GND and Arduino D12;
3) Connect the button between +5V and Arduino D12;
4) Connect the 1 kohm resistor between Arduino D9 and Video Out connector (signal pin);
5) Connect the 470 ohm resistor between Arduino D7 and Video Out connector (signal pin);
6) Connect Arduino GND to the Video Out connector (GND);
7) Connect a speaker between D11 and GND
Upload the sketch to your Arduino Nano / Uno and you're done!
Note: due to poor resolution (and the consequently lack of space) the score and the alien ship appear only when the aliens go down few rows.
---------------------
Known issues I planned to improve it later (actually are not bugs but workaround I took in order to simplify a bit my life writing the code, LOL):
- when you destroy the leftmost column, the other columns are all shifted leftward
- bombs are dropped by empty columns too.
/**************************************************************************
*
* ARDUINO SPACE INVADERS 1.2
*
* Jan/2022 Giovanni Verrua
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Connections to Arduino Uno/Nano:
*
* Connect a button to pin 12 (digital) and +5V (button Fire / Start)
* Connect a 100 kohm resistor between pin 12 (digital) and GND
*
* If you want to use a Wheel, connect a 100 k ohm potentiomenter to:
* GND (left pin), +5V (right pin), A0 (middle pin)
*
* If you wan to use two buttons for left and right (like the original arcade)
* Connect two buttons to pin 4 and +5V (but.left), and pin 5 and +5V (but.right)
* Connect two 100 kohm resistors between pin 5 and GND, and pin 6 and GND*
*
* TV composite out:
* Connect 1k ohm resistor from pin 9 to TV out (+)
* Connect 470 ohm resistor from pin 7 to TV out (+)
* Connect GND to TV out (-)
*
* Audio:
* Connect a speaker between pin 11 and GND
*
* Release history
*
* 1.2 - added audio effects
* - added an option for using buttons or potentiometer
* to control the cannon (see: #define USE_WHEEL)
* - emproved the size of the cannon (you can go back to the
* old size changing cn1, cn2, cn3 with ca1, ca2, ca3
* (look in the cannon section below)
*
* 1.1 fixed some bugs
* 1.0 initial release
*
**************************************************************************/
#include <TVout.h>
#include "bitmap.h"
#include <fontALL.h>
//----------------------------------------------------------------------------------
//#define USE_WHEEL activate this if you want to use potentiometer instead of buttons
#define CANNON_SPEED 20 //higher value, slower cannon - only for button control
#define BUTTON_LEFT 4
#define BUTTON_RIGHT 5
#define BUTTON_FIRE 12
#define WHEEL_MOVE A0 //Analog A0 - potentiometer
#define RATIO_WHEEL 8.2 //Ratio Video X resolution Vs. potentiometer resolution
//----------------------------------------------------------------------------------
#define CAN_Y_POS 86 //Cannon Y Position
#define SHD_Y_POS 70 //Shield Y Position
#define ASHIP_SPEED 50 //higher value, slower ship (must to be >0)
#define ALIEN_SPEED 20 //higher value, slower aliens (must to be >0)
TVout TV;
int gamSt = 0; //0 = menu, 1 = in game, 2 = game over
//int canMove = 0; //cannon move (wheel value)
//int canShot = 0; //cannon shot (button pressed)
int canPosX = 0; //cannon position
int canOldX = 0; //cannon old position
int canFire = 0; //cannon fire 1 = bullet flying, 0 = idle
int canFirX = 0; //bullet X position
int canFirY = 0; //bullet Y position
//int lives = 3;
int aSound = 0;
int gLevel = 0;
int begiY = 0; //Y begin
int shftY = 1; //Y movement
int shftX = 0; //X movement
int direX = 1; //X direction (1 ; -1)
int corrZ = 0;
int coluR = 8; //rightmost column with at least 1 alien
int rwLow = 4; //last lower row with at least 1 alien
int alien = 5*9; //aliens still alive
int aliFire = -1; //alien fire 1 = bomb falling, 0 = idle
int aliFirX = 0; //bomb X position
int aliFirY = 0; //bomb Y position
int aMatrix[5][9] = { {0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0} };
//===================================================================================== SETUP
void setup() {
//Serial.begin(9600);
TV.begin(_PAL); //128x96 default
#ifdef USE_WHEEL
pinMode(WHEEL_MOVE,INPUT);
#else
pinMode(BUTTON_LEFT,INPUT);
pinMode(BUTTON_RIGHT,INPUT);
#endif
pinMode(BUTTON_FIRE,INPUT);
canFire = 0;
canOldX = -2;
gamSt = 0;
}
//===================================================================================== AlienReset
void AlienReset() {
for (int i=0;i<5;i++){
for (int j=0;j<9;j++){
aMatrix[i][j] = 1;
}
}
begiY = gLevel*2; //Y begin - every level 2 pixels lower
shftY = 1; //Y movement
shftX = 0; //X movement
direX = 1; //X direction (1 ; -1)
corrZ = 0;
coluR = 8; //rightmost column with at least 1 alien
rwLow = 4; //last lower row with at least 1 alien
alien = 5*9; //aliens still alive
aliFire = -1;
}
//============================================================================= AlienCheck
void AlienCheck() {
alien = 0;
for (int i=0;i<5;i++){
for (int j=0;j<9;j++){
if (aMatrix[i][j] == 1) alien ++; //how many aliens still alive
}
}
if (alien >0){ //checking what are the leftmost and rightmost columns with at least 1 alien alive
//shift all the columns leftward if the leftmost column is all empty
// if (shftX == 0 && direX == -1) {//solo quando sto tornando, cos evito di fare degli scatti bruschi
if (aMatrix[0][0] == 0 && aMatrix[1][0] == 0 && aMatrix[2][0] == 0 && aMatrix[3][0] == 0 && aMatrix[4][0] == 0){
for (int i=0;i<5;i++){
for (int j=0;j<8;j++){
aMatrix[i][j] = aMatrix[i][j+1] ;
}
}
for (int i=0;i<5;i++){
aMatrix[i][8] = 0;
}
}
// }
//check if the rightmost column (that at last check had at least 1 alien) is now empty
if (aMatrix[0][coluR] == 0 && aMatrix[1][coluR] == 0 && aMatrix[2][coluR] == 0 && aMatrix[3][coluR] == 0 && aMatrix[4][coluR] == 0) coluR -- ;
//check if the lowest row (that at lat check had at least 1 alien) is now empty
if (aMatrix[rwLow][0] == 0 && aMatrix[rwLow][1] == 0 && aMatrix[rwLow][2] == 0 && aMatrix[rwLow][3] == 0 && aMatrix[rwLow][4] == 0 &&
aMatrix[rwLow][5] == 0 && aMatrix[rwLow][6] == 0 && aMatrix[rwLow][7] == 0 && aMatrix[rwLow][8] == 0) rwLow -- ;
}
}
//============================================================================= AlienDraw()
void alienDraw() {
TV.draw_rect( 0, 00+begiY+shftY-corrZ, 127, (10*rwLow)+9, 0, 0 ); //deleting the old aliens position
for (int j=0;j<=coluR;j++){ //drawing the columns, considering the left/rightmost columns with at least 1 alien alive
if( shftX % 2 == 0){
if (aMatrix[0][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+00+shftY, a3a);
if (aMatrix[1][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+10+shftY, a2a);
if (aMatrix[2][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+20+shftY, a2a);
if (aMatrix[3][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+30+shftY, a1a);
if (aMatrix[4][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+40+shftY, a1a);
}
else {
if (aMatrix[0][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+00+shftY, a3b);
if (aMatrix[1][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+10+shftY, a2b);
if (aMatrix[2][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+20+shftY, a2b);
if (aMatrix[3][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+30+shftY, a1b);
if (aMatrix[4][j] == 1) TV.bitmap((j)*10+(shftX*2), begiY+40+shftY, a1b);
}
}
aSound++;
if (aSound >3) aSound = 0;
TV.tone(100 - aSound*22,50);
//TV.delay_frame(3); NOOOO!!!!!!!!!! This will compromise the game speed, don't activate!
}
//============================================================================= AlienMove
void AlienMove() {
shftX += direX;
corrZ = 0;
if (begiY+shftY >=2) corrZ = 2;
if ( (shftX<= 20 + (8-coluR)*5 && direX == 1) || (shftX>=0 && direX == -1) ){ //checking the horizontal movement of the aliens, considering the left/rightmost columns with at least 1 alien alive
alienDraw() ;
}
else {
shftY = shftY + 2;
direX = direX *-1;
shftX += direX; //don't remove!
alienDraw() ;
}
}
//============================================================================= AlienHit
void alienHit() {
for (int j=0;j<=coluR;j++){ //drawing the columns, considering the left/rightmost columns with at least 1 alien alive
for (int i=0;i<=4;i++){ //drawing the columns, considering the left/rightmost columns with at least 1 alien alive
if (canFirX >=(j)*10+(shftX*2) && canFirX <=(j)*10+(shftX*2)+8 && canFirY >= begiY+ i*10 +shftY && canFirY <= begiY+ i*10 +shftY+8) {
aMatrix[i][j] = 0;
j = coluR+1;
i = 5;
canFire = -1;
TV.tone(2000,50);
TV.delay_frame(1);
}
}
}
alienDraw() ;
}
//===================================================================================== LOOP
void loop() {
unsigned long miab = millis() ; //delay - alien bomb
unsigned long micb = millis() ; //delay - cannon bullet
unsigned long mill = millis() ; //delay - aliens
unsigned long mish = millis() ; //delay - ship
#ifndef USE_WHEEL
unsigned long cand = millis() ; //cannon delay
#endif
int canMove = 0;
int Score = 0;
int lives = 3;
int shpMove = 0;
int shpPosX = 0;
//-----------------------------------------------------------------------------------------------------MENU
if (gamSt == 0){ //MENU
TV.clear_screen();
TV.bitmap(0, 0, logo);
TV.bitmap(0, 32, start);
delay(500);
while ( digitalRead(BUTTON_FIRE) == 0){
//canShot = digitalRead(BUTTON_FIRE); //cannon shot
}
gamSt = 1;
delay(300);
}
//-----------------------------------------------------------------------------------------------------IN GAME
if (gamSt == 1){ // IN GAME
Score = 0;
lives = 3;
canOldX = -2;
aSound = 3;
gLevel = 0;
TV.clear_screen();
TV.bitmap(10,SHD_Y_POS,shd);
TV.bitmap(35,SHD_Y_POS,shd);
TV.bitmap(60,SHD_Y_POS,shd);
TV.bitmap(85,SHD_Y_POS,shd);
AlienReset();
AlienCheck();
delay(50);
/* shouldn't be needed....
#ifdef USE_WHEEL
canMove = analogRead(WHEEL_MOVE); //cannon move
#endif
canShot = digitalRead(BUTTON_FIRE); //cannon shot
*/
shftY = 0 ;
//-----------------------------------------------------------------------------------------------------Main Cycle-begin-\
while ( (shftY/2 < 19 + (4 - rwLow)*5) && gamSt != 2 ) { //Vertical moving.
//-------------------------------------------------------------Cannon-begin-\
//-----------------------------------cannon move
#ifdef USE_WHEEL //------------------------------------- using potentiometer -----------------------------------------------|
canMove = analogRead(WHEEL_MOVE); //cannon move
canPosX = canMove / RATIO_WHEEL ;
if (canPosX -1 == canOldX || canPosX + 1 == canOldX) canPosX = canOldX; //Avoiding flickering
#else //------------------------------------- using buttons left and right----------------------------------------|
if (cand + CANNON_SPEED < millis()) {
cand = millis() ;
if (digitalRead(BUTTON_LEFT )==1 && canPosX >0 ) canPosX-- ;
if (digitalRead(BUTTON_RIGHT)==1 && canPosX <110) canPosX++ ;
}
#endif //-----------------------------------------------------------------------------------------------------------|
if (canOldX != canPosX) {
TV.bitmap(canOldX, CAN_Y_POS, cnn);
if (lives == 3) TV.bitmap(canPosX, CAN_Y_POS, cn3); //use ca3 instead of cn3 if you want a wider cannon
if (lives == 2) TV.bitmap(canPosX, CAN_Y_POS, cn2); //use ca2 instead of cn2 if you want a wider cannon
if (lives == 1) TV.bitmap(canPosX, CAN_Y_POS, cn1); //use ca1 instead of cn1 if you want a wider cannon
canOldX = canPosX;
}
//-----------------------------------cannon fire
//canShot = digitalRead(BUTTON_FIRE); //cannon shot
if (canFire == -1){ //cannon fire 1 = bullet flying, 0 = idle -1 = Hit
TV.draw_line(canFirX,canFirY, canFirX,canFirY+4,0);
canFire = 0;
}
if (canFire == 0){ //cannon fire 1 = bullet flying, 0 = idle
if (digitalRead(BUTTON_FIRE) == 1 && micb < millis() ) {
canFire = 1;
canFirX = canPosX+8; //bullet X position
canFirY = 81; //bullet Y position
}
}
if (canFire == 1){ //cannon fire 1 = bullet flying, 0 = idle
if (micb+10 < millis()){
if (TV.get_pixel(canFirX,canFirY-1) == 1){
if (shpMove == 1 && canFirY < 10) {
//hit the ship
TV.tone(2000,50);
Score += 10;
shpMove = 0;
canFire = -1;
TV.draw_rect(00,00,128,9,0,0);
TV.draw_line(canFirX,canFirY-2,canFirX,canFirY+4,0);
//micb = millis() + 200; //delay before next shot
}
else {
if (canFirY <=begiY+(10*rwLow)+9+shftY){
//hit an alien
alienHit();
Score ++;
//micb = millis() + 200; //delay before next shot
if ((00+begiY+shftY-corrZ) > 4 && shpMove == 0){
TV.select_font(font4x6);
TV.print(00,00,"SCORE:");
TV.print(40,00,Score);
}
}
else{
//hit the shield
canFire = -1;
TV.draw_line(canFirX,canFirY-2,canFirX,canFirY+4,0);
//micb = millis() + 200; //delay before next shot
}
}
micb = millis() + 200; //delay before next shot
TV.draw_line(canFirX,canFirY,canFirX,canFirY+4,0);
canFire = -1; //error trap
}
else
{
canFirY --;
micb = millis();
if (canFirY <= 0){
canFire = 0;
TV.draw_line(canFirX,canFirY,canFirX,canFirY+4,0);
micb = millis() + 200; //delay before next shot
}
}
if (canFire == 1){
TV.draw_line(canFirX,canFirY+1,canFirX,canFirY+4,0);
TV.draw_line(canFirX,canFirY, canFirX,canFirY+3,1);
}
}
}
if (alien == 0){
gLevel++;
TV.clear_screen();
AlienReset();
TV.bitmap(10,SHD_Y_POS,shd);
TV.bitmap(35,SHD_Y_POS,shd);
TV.bitmap(60,SHD_Y_POS,shd);
TV.bitmap(85,SHD_Y_POS,shd);
canFire = 0;
canOldX = -2;
}
//-------------------------------------------------------------Cannon-end---/
//-------------------------------------------------------------Ship begin--\
if ((00+begiY+shftY-corrZ) > 8 ){ //if there's enough space in the upper part of the screen
if (shpMove == 0){
if (mish + 15000+random(10000,25000) < millis()){ //every 25-40 seconds
shpMove = 1;
TV.draw_rect(00,00,128,9,0,0);
mish = millis() - ASHIP_SPEED - 1 ;
shpPosX = 1; //not = 0!
}
}
if (shpMove == 1){
if (mish + ASHIP_SPEED < millis()){
TV.bitmap(shpPosX-1,0,cnn);
TV.bitmap(shpPosX,0,shp);
shpPosX++ ;
mish = millis();
if (shpPosX >= 112){
shpMove = 0;
TV.draw_rect(00,00,128,9,0,0);
}
}
}
}
//-------------------------------------------------------------Aliens-begin-\
if (mill + ALIEN_SPEED*alien < millis()){
mill = millis();
AlienCheck();
AlienMove();
if ((00+begiY+shftY-corrZ) > 4 && shpMove == 0){
TV.select_font(font4x6);
TV.print(00,00,"SCORE:");
TV.print(40,00,Score);
}
}
//-------------------------------------------------------------Aliens-end---/
//--------------------------------------------------------Aliens bomb-begin-\
//----------------------------------------------------
if (aliFire == -1){ // end of bomb fall
//TV.draw_line(aliFirX,aliFirY, aliFirX,aliFirY+4,0);
aliFire = 0;
miab = millis() + 40*alien ;
}
//----------------------------------------------------
if (aliFire == 0){ //0 = idle - waiting for the next bomb
if (miab+10 < millis()){ //drop the bomb at the right time
aliFirY = begiY+(10*rwLow)+9+shftY; //bomb Y position
aliFire = 1;
//to be improved: should not drop bomb from an empty column
if (canPosX >=(shftX*2) && canPosX <=10*coluR+(shftX*2)){ //the cannon is below the aliens
aliFirX = canPosX+8+random(-4,+4); //bomb X position = center of cannon
}
if (canPosX < shftX*2){ //drop the bomb as closest as possible to the cannon
aliFirX = shftX*2;
}
if (canPosX > 10*coluR+(shftX*2)){ //drop the bomb as closest as possible to the cannon
aliFirX = 10*coluR+(shftX*2);
}
//check if there's at least an alien over it
int fndAlien = 0;
for (int i=aliFirY;i >begiY+9+shftY;i-=3){
if (TV.get_pixel(aliFirX,i) == 1) fndAlien = 1;
}
if (fndAlien==0){ //the cannon is under an empty column, so there's no need to drop a bomb
aliFire = 0;
}
}
}
//----------------------------------------------------
if (aliFire == 1){ //bomb dropping
if (miab+10 < millis()){
TV.draw_line(aliFirX,aliFirY-1,aliFirX,aliFirY-4,0);
TV.draw_line(aliFirX,aliFirY,aliFirX,aliFirY-3,1);
if (TV.get_pixel(aliFirX,aliFirY+1) == 1){
aliFire = -1;
TV.draw_line(aliFirX,aliFirY,aliFirX,aliFirY-3,0);
if (aliFirY+1 >=CAN_Y_POS) {
//hit the cannon.
for (int i=0;i<27;i++){
TV.tone(70,10);
TV.delay_frame(1);
TV.bitmap(canPosX, CAN_Y_POS, hit);
delay(5);
TV.tone(40,10);
TV.delay_frame(1);
if (lives == 3) TV.bitmap(canPosX, CAN_Y_POS, cn3); //use ca3 instead of cn3 if you want a wider cannon
if (lives == 2) TV.bitmap(canPosX, CAN_Y_POS, cn2); //use ca2 instead of cn2 if you want a wider cannon
if (lives == 1) TV.bitmap(canPosX, CAN_Y_POS, cn1); //use ca1 instead of cn1 if you want a wider cannon
delay(5);
}
lives --;
delay(500);
if (lives <=0) gamSt = 2;
if (lives == 3) TV.bitmap(canPosX, CAN_Y_POS, cn3); //use ca3 instead of cn3 if you want a wider cannon
if (lives == 2) TV.bitmap(canPosX, CAN_Y_POS, cn2); //use ca2 instead of cn2 if you want a wider cannon
if (lives == 1) TV.bitmap(canPosX, CAN_Y_POS, cn1); //use ca1 instead of cn1 if you want a wider cannon
}
else {
//hit the shield. Just open an hole.
TV.draw_line(aliFirX,aliFirY+2,aliFirX,aliFirY-3,0);
}
}
else
{
aliFirY ++;
miab = millis();
if (aliFirY >= 92){
aliFire = -1;
TV.draw_line(aliFirX,aliFirY,aliFirX,aliFirY-4,0);
}
}
}
}
//--------------------------------------------------------Aliens bomb-end---/
}
//-----------------------------------------------------------------------------------------------------Main Cycle-end--- /
gamSt = 2 ;
}
//-----------------------------------------------------------------------------------------------------GAME OVER
if (gamSt == 2){ //GAME OVER
gamSt = 0;
TV.clear_screen();
TV.bitmap(0, 0, logo);
TV.bitmap(0, 32, over);
TV.select_font(font6x8);
TV.print(40,90,"SCORE:");
TV.print(76,90,Score);
delay(1000);
//must to release and press again the button before to continue
while ( digitalRead(BUTTON_FIRE) == 1){
//canShot = digitalRead(BUTTON_FIRE); //cannon shot
}
while ( digitalRead(BUTTON_FIRE) == 0){
//canShot = digitalRead(BUTTON_FIRE); //cannon shot
}
}
}
/**
* Space Invaders - aliens definition
*
*/
//alien 1
PROGMEM const unsigned char a1a[] = {
8, 8, //pictureresolution
0x18,0x7E,0xFF,0xDB,0xFF,0x66,0xDB,0x42
};
//alien 1
PROGMEM const unsigned char a1b[] = {
8, 8, //pictureresolution
0x18,0x7E,0xFF,0xDB,0xFF,0x24,0x5A,0x81
};
//alien 2
PROGMEM const unsigned char a2a[] = {
8, 8, //pictureresolution
0x42,0x24,0x7E,0xDB,0xFF,0xBD,0xA5,0x24
};
//alien 2
PROGMEM const unsigned char a2b[] = {
8, 8, //pictureresolution
0x42,0x24,0xBD,0xDB,0xFF,0x7E,0x24,0x42
};
//alien 3
PROGMEM const unsigned char a3a[] = {
8, 8, //pictureresolution
0x18,0x3C,0x7E,0x5A,0x7E,0x24,0x42,0x24
};
//alien 3
PROGMEM const unsigned char a3b[] = {
8, 8, //pictureresolution
0x18,0x3C,0x7E,0x5A,0x7E,0x24,0x5A,0xA5
};
//mother ship
PROGMEM const unsigned char shp[] = {
16, 8, //pictureresolution
0x07,0xE0,0x1F,0xF8,0x3F,0xFC,0x6D,0xB6,0xFF,0xFF,0x73,0xCE,0x20,0x04,0x00,0x00
};
//cannon 1 life left
PROGMEM const unsigned char ca1[] = {
16, 8, //pictureresolution
0x01,0x80,0x03,0xC0,0x03,0xC0,0x3F,0x7C,0x7E,0x7E,0x7F,0x7E,0x7F,0x7E,0x7E,0x3E
};
//cannon 2 lives left
PROGMEM const unsigned char ca2[] = {
16, 8, //pictureresolution
0x01,0x80,0x03,0xC0,0x03,0xC0,0x3E,0x7C,0x7F,0xBE,0x7F,0x7E,0x7E,0xFE,0x7E,0x3E
};
//cannon 3 lives left
PROGMEM const unsigned char ca3[] = {
16, 8, //pictureresolution
0x01,0x80,0x03,0xC0,0x03,0xC0,0x3E,0x7C,0x7F,0xBE,0x7F,0x7E,0x7F,0xBE,0x7E,0x7E
};
//cannon 1 life left - narrow
PROGMEM const unsigned char cn1[] = {
16, 8, //pictureresolution
0x01,0x80,
0x03,0xC0,
0x03,0xC0,
0x0F,0x70,
0x1E,0x78,
0x1F,0x78,
0x1F,0x78,
0x1E,0x38
};
//cannon 2 lives left - narrow
PROGMEM const unsigned char cn2[] = {
16, 8, //pictureresolution
0x01,0x80,
0x03,0xC0,
0x03,0xC0,
0x0E,0x70,
0x1F,0xB8,
0x1F,0x78,
0x1E,0xF8,
0x1E,0x38
};
//cannon 3 lives left - narrow
PROGMEM const unsigned char cn3[] = {
16, 8, //pictureresolution
0x01,0x80,
0x03,0xC0,
0x03,0xC0,
0x0E,0x70,
0x1F,0xB8,
0x1F,0x78,
0x1F,0xB8,
0x1E,0x78
};
//delete cannon
PROGMEM const unsigned char cnn[] = {
16, 8, //pictureresolution
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//cannon hit
PROGMEM const unsigned char hit[] = {
16, 8, //pictureresolution
0x89,0x51,0x62,0x86,0x18,0x99,0xA3,0x44,0x5C,0x3A,0xB3,0x4C,0xCD,0xF3,0x37,0x5C
};
//shield
PROGMEM const unsigned char shd[] = {
32, 8, //pictureresolution
0x00,0x1F,0xF8,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,
0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xF8,0x1F,0x80,0x01,0xC0,0x03,0x80
};
//start
PROGMEM const unsigned char start[] = {
128, 64, //pictureresolution
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF3,0xCF,0x9C,0x70,0x07,0x3E,0x73,0xCF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x8A,0x28,0x22,0x88,0x08,0x88,0x8A,0x22,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x8A,0x28,0x20,0x80,0x08,0x08,0x8A,0x22,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF3,0xCF,0x1C,0x70,0x07,0x08,0x8B,0xC2,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x82,0x48,0x02,0x08,0x00,0x88,0xFA,0x42,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x82,0x28,0x22,0x88,0x08,0x88,0x8A,0x22,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x82,0x2F,0x9C,0x70,0x07,0x08,0x8A,0x22,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//game over
PROGMEM const unsigned char over[] = {
128, 64, //pictureresolution
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xFF,0xFF,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x8E,0x45,0xF0,0x0E,0x45,0xF7,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x51,0x6D,0x00,0x11,0x45,0x04,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x11,0x55,0x00,0x11,0x45,0x04,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x05,0xD1,0x45,0xE0,0x11,0x45,0xE7,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x5F,0x45,0x00,0x11,0x45,0x04,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x51,0x45,0x00,0x11,0x29,0x04,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xD1,0x45,0xF0,0x0E,0x11,0xF4,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//logo
PROGMEM const unsigned char logo[] = {
128, 32, //pictureresolution
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0x87,0xFE,0x0F,0xE0,0x1F,0xC1,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xC7,0xFF,0x0F,0xF0,0x7F,0xE3,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xF3,0xFF,0x8F,0xF0,0xFB,0xF3,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF9,0xF3,0xEF,0x8F,0xF0,0xFB,0xF7,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7C,0xF3,0xE7,0xCE,0xF0,0xF3,0xE7,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7E,0x01,0xE7,0xCE,0xF1,0xF0,0x07,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0xF1,0xF7,0xDE,0x71,0xF0,0x0F,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xF9,0xFF,0x9E,0x71,0xF0,0x0F,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0xFF,0x1F,0xF9,0xE7,0xDF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x3C,0xF0,0x1F,0xF9,0xE7,0x9E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xFC,0xF0,0x1E,0x79,0xFF,0x9F,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xF8,0x70,0x1C,0x78,0xFE,0x3F,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xE7,0x8F,0xBE,0x3E,0x3F,0xC3,0xFF,0x8F,0xFC,0xFF,0xE1,0xFF,0x80,0x00,
0x00,0x00,0xF3,0xE7,0x9F,0x1F,0x3F,0xC3,0xC7,0xCF,0x00,0xF3,0xE7,0xCF,0x00,0x00,
0x00,0x00,0x79,0xF3,0xCF,0x9F,0x1F,0xE3,0xC7,0x9F,0x01,0xF3,0xCF,0x9E,0x00,0x00,
0x00,0x00,0x3C,0xFF,0xE7,0x9F,0x1F,0xE3,0xCF,0x9F,0x01,0xE7,0xDF,0x00,0x00,0x00,
0x00,0x00,0x1E,0x7F,0xE3,0xCF,0x1E,0xF3,0xCF,0x9F,0xF3,0xFE,0x1F,0xE0,0x00,0x00,
0x00,0x00,0x0F,0x3F,0xF1,0xEF,0x1E,0xF3,0xCF,0xBE,0x07,0xFE,0x0F,0xF0,0x00,0x00,
0x00,0x00,0x07,0x9E,0xF8,0xFF,0x1F,0xF3,0xCF,0x3C,0x07,0x9E,0x01,0xC0,0x00,0x00,
0x00,0x00,0x03,0xCF,0x3C,0x7F,0x1E,0xF3,0xCF,0x3C,0x0F,0x3C,0xF7,0x80,0x00,0x00,
0x00,0x00,0x01,0xE7,0x9C,0x3F,0x1E,0x7B,0xFE,0x3F,0xCE,0x38,0xFE,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
Comments