ラベル オリジナルガシャット の投稿を表示しています。 すべての投稿を表示
ラベル オリジナルガシャット の投稿を表示しています。 すべての投稿を表示

2018年10月18日木曜日

【オリジナルガシャット】ガシャット用プログラムの改修版公開【作製番外編6】

このブログに複数あるオリジナルガシャット関係の記事のうち、スケッチ関係の記事を見る方が多いようなので、ベラボーマンガシャットのスケッチ全文を公開します。

ヒダカ様のスケッチがベースとなっていますが、独自の改修がしてあります。改修内容は下記のとおりです。
  • バグルドライバーへの対応
  • クリティカルストライク(クリティカルフィニッシュ)時にランダムで会心(快心?)の一発になるようにした
  • LEDの点滅時間を最大25秒まで対応できるようにした
  • ゲームクリアーかゲームオーバーの音声がランダムで鳴るようにした
  • 武器への対応
  • 「キメワザ」音の再生中にボタンを押してもクリティカルストライクに移行しないようにした

なお、このスケッチで使用しているDFPlayer-Mini-mp3ライブラリは現在非推奨となっているらしいので、現行のDFRobotDFPlayerMiniライブラリに対応させるにはこのスケッチを更に改修する必要があります。

以下、ベラボーマンガシャットのスケッチです。
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>

#define BUTTON_1_PIN 5
#define BUTTON_2_PIN 4
#define BUTTON_3_PIN 6
#define LED_PIN      7

#define NUM_OF_LED   1

#define GASHAT_OFF           0
#define GASHAT_NAME          1
#define GAME_CLEAR           2
#define GAME_OVER            3
#define LEVEL_1              4
#define LEVEL_2              5
#define LEVEL_3              6
#define GASHAT_IN            7
#define GASHAT_OUT           8
#define DRIVER_CLOSE         9
#define CRITICAL_STRIKE     10
#define CRITICAL_READY      11
#define CRITICAL_FINISH     12
#define GENRE               13
#define LEVEL_X             14   // バグルドライバー変身
#define CRITICAL_STRIKE_KAI 15   // クリティカルストライク会心の一発
#define CRITICAL_FINISH_KAI 16   // クリティカルフィニッシュ会心の一発
#define WEAPON_C_READY      17   // 武器クリティカル待機音

#define N_BUTTON 3
#define BT1_ON  LOW
#define BT1_OFF HIGH
#define BT2_ON  LOW
#define BT2_OFF HIGH
#define BT3_ON  LOW      // HIGH→LOW
#define BT3_OFF HIGH     // LOW→HIGH

#define LED_PATTERN 250  // 25秒にするため200→250

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_OF_LED, LED_PIN, NEO_GRB + NEO_KHZ400);
SoftwareSerial mySerial(2, 3); // RX, TX

const uint8_t OFF_OFF_OFF[] = {BT1_OFF, BT2_OFF, BT3_OFF};
const uint8_t ON_OFF_OFF[]  = {BT1_ON,  BT2_OFF, BT3_OFF};
const uint8_t OFF_ON_OFF[]  = {BT1_OFF, BT2_ON,  BT3_OFF};
const uint8_t OFF_OFF_ON[]  = {BT1_OFF, BT2_OFF, BT3_ON };
const uint8_t ON_ON_OFF[]   = {BT1_ON,  BT2_ON,  BT3_OFF};
const uint8_t ON_OFF_ON[]   = {BT1_ON,  BT2_OFF, BT3_ON };
const uint8_t OFF_ON_ON[]   = {BT1_OFF, BT2_ON,  BT3_ON };
const uint8_t ON_ON_ON[]    = {BT1_ON,  BT2_ON,  BT3_ON };

const uint8_t LED_GASHAT_NAME[][3] PROGMEM = {
  {  0,  0, 32},{  0,  0, 64},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0, 64},
  {  0,  0,128},{  0,  0, 64},{  0,  0, 64},{  0,  0, 32},{  0,  0, 16},{  0,  0,  0},
  {  0,  0,  0},{ 16, 32, 64},{ 24, 64,128},{ 16, 32, 64},{ 24, 64,128},{ 16, 32, 64},
  {  8, 16, 32},{ 16, 32, 64},{ 24, 64,128},{ 16, 32, 64},{ 24, 64,128},{ 16, 32, 64},
  {  8, 16, 32},{ 16, 32, 64},{  8, 16, 32},{  0,  0,  0},{ 16, 32, 64},{ 24, 64,128},
  { 16, 32, 64},{ 24, 64,128},{ 16, 32, 64},{  8, 16, 32},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  0,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_GAME_CLEAR[][3] PROGMEM = {
  {  8, 16, 32},{ 12, 24, 64},{ 24, 64,128},{ 12, 24, 64},{ 24, 64,128},{ 12, 24, 64},
  { 24, 64,128},{ 12, 24, 64},{  0,  0,  0},{ 12, 24, 64},{ 12, 24, 64},{ 24, 64,128},
  { 12, 24, 64},{  0,  0,  0},{ 24, 64,128},{ 12, 24, 64},{ 24, 64,128},{ 12, 24, 64},
  { 24, 64,128},{ 12, 24, 64},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},
  { 12, 24, 64},{ 12, 24, 64},{ 12, 24, 64},{ 12, 24, 64},{  8, 16, 32},{  8, 16, 32},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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}
};

const uint8_t LED_GAME_OVER[][3] PROGMEM = {
  { 16,  0,  0},{128,  0,  0},{ 64,  0,  0},{  0,  0,  0},{128,  0,  0},{ 64,  0,  0},
  {  0,  0,  0},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},{ 64,  0,  0},{  0,  0,  0},
  {128,  0,  0},{ 64,  0,  0},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},{ 64,  0,  0},
  {128,  0,  0},{ 64,  0,  0},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},{ 64,  0,  0},
  {128,  0,  0},{ 64,  0,  0},{128,  0,  0},{ 96,  0,  0},{ 72,  0,  0},{ 64,  0,  0},
  { 48,  0,  0},{ 32,  0,  0},{ 16,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_GASHAT_LEVEL1[][3] PROGMEM = {
  {  0,  0, 16},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0,  0},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0, 32},
  {  0,  0, 16},{  0,  0,  8},{  0,  0,  0},{  8, 16, 32},{ 24, 64,128},{  8, 16, 32},
  { 24, 64,128},{ 12, 32, 64},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 12, 32, 64},
  {  0,  0,  0},{ 24, 64,128},{ 16, 32, 64},{  8, 16, 32},{ 24, 64,128},{  0,  0,  0},
  { 12, 32, 64},{ 24, 64,128},{ 12, 32, 64},{ 24, 64,128},{ 24, 64,128},{  0,  0,  0},
  { 24, 64,128},{ 16, 32, 64},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{  0,  0,  0},
  { 24, 64,128},{ 12, 32, 64},{ 24, 64,128},{ 16, 32, 64},{ 24, 64,128},{ 24, 64,128},
  { 24, 64,128},{ 24, 64,128},{  0,  0,  0},{ 24, 64,128},{  0,  0,  0},{ 24, 64,128},
  { 24, 64,128},{ 24, 64,128},{ 24, 64,128},{  0,  0,  0},{ 24, 64,128},{ 24, 64,128},
  { 24, 48, 96},{ 24, 48, 96},{ 16, 32, 64},{ 16, 32, 64},{ 16, 32, 64},{ 16, 32, 64},
  { 12, 24, 48},{ 12, 24, 48},{  8, 16, 32},{  8, 16, 32},{  4,  8, 16},{  4,  8, 16},
  {  0,  0,  0},{ 16, 32, 64},{  8, 16, 32},{  0,  0,  0},{ 24, 64,128},{ 24, 64,128},
  {  8, 16, 32},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},
  { 27, 54,108},{ 24, 48, 96},{ 21, 42, 84},{ 18, 36, 72},{ 16, 32, 64},{  8, 16, 32},
  {  6, 12, 24},{  3,  6, 12},{ 24, 64,128},{ 16, 32, 64},{  8, 16, 32},{ 24, 64,128},
  { 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},
  { 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},
  { 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},
  { 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 24, 64,128},{ 18, 48, 96},
  { 12, 32, 64},{  8, 16, 32},{  0,  0,  0},{  0,  0,  0},{ 12, 24, 48},{  8, 16, 32},
  {  6, 12, 24},{  3,  6, 12},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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}
};

const uint8_t LED_GASHAT_LEVEL2[][3] PROGMEM = {
  {  0,  0, 16},{  0,  0,128},{  0,  0, 64},{  0,  0,  0},{  0,  0,128},{  0,  0, 64},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0, 64},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0, 32},{  0,  0,  0},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0,  0},{  0,  0,128},{  0,  0,128},{  0,  0, 64},{  0,  0,  0},{  0,  0,128},
  {  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0,  0},{  0,  0, 32},{  0,  0,128},
  {  0,  0, 64},{  0,  0, 32},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{128,  0,  0},{128,  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,  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,  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,  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,  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,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0, 64},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0, 96},{  0,  0, 80},{  0,  0, 64},{  0,  0, 48},
  {  0,  0, 32},{  0,  0, 16},{  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},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_GASHAT_LEVEL3[][3] PROGMEM = {
  {128,  0,  0},{ 64,  0,  0},{ 32,  0,  0},{128,  0,  0},{108,  0,  0},{ 88,  0,  0},
  { 68,  0,  0},{ 48,  0,  0},{ 28,  0,  0},{ 20,  0,  0},{  8,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{ 64,  0,  0},{ 32,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},
  { 36,  0,  0},{ 18,  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,  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,  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},
  {128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},
  {128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},
  { 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},
  { 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},
  {  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},
  {128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},
  {128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},
  { 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},
  { 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},
  {  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},
  {128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},
  {128,128,  0},{ 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},
  { 64, 64,  0},{ 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},
  { 32, 32,  0},{  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  0},
  {  0,  0,  0},{128,128,  0},{128,128,  0},{ 64, 64,  0},{ 32, 32,  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,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0, 64},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0, 96},{  0,  0, 80},{  0,  0, 64},{  0,  0, 48},
  {  0,  0, 32},{  0,  0, 16},{  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},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_GASHAT_IN[][3] PROGMEM = {
  {  0,  0, 16},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0,  0},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0, 32},
  {  0,  0, 16},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  0,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_GASHAT_OUT[][3] PROGMEM = {
  {  0,  0, 64},{  0,  0,128},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0,128},
  {  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 96},{  0,  0, 80},
  {  0,  0, 64},{  0,  0, 48},{  0,  0, 32},{  0,  0, 16},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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},{  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}
};

const uint8_t LED_DRIVER_CLOSE[][3] PROGMEM = {
  {  0,  0, 64},{  0,  0,128},{  0,  0,128},{  0,  0,  0},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 96},
  {  0,  0, 64},{  0,  0, 32},{  0,  0, 16},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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},{  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},
  {  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}
};

const uint8_t LED_CRITICAL_STRIKE[][3] PROGMEM = {
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 32,  0,  0},
  { 24,  0,  0},{ 12,  0,  0},{128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},
  { 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 32,  0,  0},{ 24,  0,  0},{ 12,  0,  0},
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 36,  0,  0},
  { 24,  0,  0},{ 12,  0,  0},{  0,  0,128},{  0,  0,128},{ 64, 64,128},{ 64, 64,128},
  {  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},{ 64,  0, 64},{ 64,  0, 64},
  {128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},{128,  0,  0},{128,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  0},
  {  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},{  0, 64, 64},{  0, 64, 64},
  {  0, 64,128},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 36,  0,  0},
  { 24,  0,  0},{ 12,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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}
};

const uint8_t LED_CRITICAL_READY[][3] PROGMEM = {
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  0},
  {  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},{  0, 64, 64},{  0, 64, 64},
  {  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},{ 64, 64,128},{ 64, 64,128},
  {  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},{ 64,  0, 64},{ 64,  0, 64},
  {128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},{128,  0,  0},{128,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  0},
  {  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},{  0, 64, 64},{  0, 64, 64},
  {  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},{ 64, 64,128},{ 64, 64,128},
  {  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},{ 64,  0, 64},{ 64,  0, 64},
  {128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},{128,  0,  0},{128,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  0},
  {  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},{  0, 64, 64},{  0, 64, 64},
  {  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},{ 64, 64,128},{ 64, 64,128},
  {  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},{ 64,  0, 64},{ 64,  0, 64},
  {128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},{128,  0,  0},{128,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  0},
  {  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},{  0, 64, 64},{  0, 64, 64},
  {  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},{ 64, 64,128},{ 64, 64,128},
  {  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},{ 64,  0, 64},{ 64,  0, 64},
  {128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},{128,  0,  0},{128,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  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,  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,  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,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_CRITICAL_FINISH[][3] PROGMEM = {
  {  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},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},
  { 48,  0,  0},{ 32,  0,  0},{ 24,  0,  0},{ 12,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 32,  0,  0},
  { 24,  0,  0},{ 12,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},
  { 48,  0,  0},{ 36,  0,  0},{ 24,  0,  0},{ 12,  0,  0},{  0,  0,128},{  0,  0,128},
  { 64, 64,128},{ 64, 64,128},{  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},
  { 64,  0, 64},{ 64,  0, 64},{128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  0},{  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},
  {  0, 64, 64},{  0, 64, 64},{  0, 64,128},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},
  {128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},
  { 48,  0,  0},{ 36,  0,  0},{ 24,  0,  0},{ 12,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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}
};

const uint8_t LED_GENRE[][3] PROGMEM = {
  { 16, 16,  0},{ 64, 64,  0},{128,128,  0},{ 72, 72,  0},{ 32, 32,  0},{128,128,  0},
  { 64, 64,  0},{ 16, 16,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_GASHAT_LEVELX[][3] PROGMEM = {
  {  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},{  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},{128,  0,  0},{ 64,  0,  0},{ 32,  0,  0},{128,  0,  0},{108,  0,  0},
  { 88,  0,  0},{ 68,  0,  0},{ 48,  0,  0},{ 28,  0,  0},{ 20,  0,  0},{  8,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 32,  0,  0},{  0,  0,  0},{128,  0,  0},
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},
  { 72,  0,  0},{ 36,  0,  0},{ 18,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{  0,  0,  0},{  0,  0,  0},
  {128,  0,  0},{128,  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,  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,  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,  0,  0},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0, 64},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},{  0,  0,128},
  {  0,  0,128},{  0,  0,128},{  0,  0, 96},{  0,  0, 80},{  0,  0, 64},{  0,  0, 48},
  {  0,  0, 32},{  0,  0, 16},{  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},{  0,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{  0,  0,  0},{  0,  0,  0}
};

const uint8_t LED_CRITICAL_STRIKE_KAI[][3] PROGMEM = {
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 32,  0,  0},
  { 24,  0,  0},{ 12,  0,  0},{128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},
  { 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 32,  0,  0},{ 24,  0,  0},{ 12,  0,  0},
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 36,  0,  0},
  { 24,  0,  0},{ 12,  0,  0},{  0,  0,128},{  0,  0,128},{ 64, 64,128},{ 64, 64,128},
  {  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},{ 64,  0, 64},{ 64,  0, 64},
  {128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},{128,  0,  0},{128,  0,  0},
  { 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},{128, 64,  0},{128, 64,  0},
  {128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},{ 64,128,  0},{ 64,128,  0},
  {  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},{  0, 64,  0},{  0, 64,  0},
  {  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},{  0, 64, 64},{  0, 64, 64},
  {  0, 64,128},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 36,  0,  0},
  { 24,  0,  0},{ 12,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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}
};

const uint8_t LED_CRITICAL_FINISH_KAI[][3] PROGMEM = {
  {  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},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},
  { 48,  0,  0},{ 32,  0,  0},{ 24,  0,  0},{ 12,  0,  0},{128,  0,  0},{108,  0,  0},
  { 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},{ 48,  0,  0},{ 32,  0,  0},
  { 24,  0,  0},{ 12,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},
  { 48,  0,  0},{ 36,  0,  0},{ 24,  0,  0},{ 12,  0,  0},{  0,  0,128},{  0,  0,128},
  { 64, 64,128},{ 64, 64,128},{  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},
  { 64,  0, 64},{ 64,  0, 64},{128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  0},{  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},
  {  0, 64, 64},{  0, 64, 64},{  0, 64,128},{128,  0,  0},{ 64,  0,  0},{128,  0,  0},
  {128,  0,  0},{108,  0,  0},{ 96,  0,  0},{ 84,  0,  0},{ 72,  0,  0},{ 60,  0,  0},
  { 48,  0,  0},{ 36,  0,  0},{ 24,  0,  0},{ 12,  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,  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,  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,  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,  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,  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,  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,  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,  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,  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}
};

const uint8_t LED_WEAPON_C_READY[][3] PROGMEM = {
  {  0,  0, 16},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0,  0},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},
  {  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0,128},{  0,  0, 64},{  0,  0, 32},
  {  0,  0, 16},{  0,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},{128,  0,  0},
  {  0,  0,  0},{  0,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  0},{  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},
  {  0, 64, 64},{  0, 64, 64},{  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},
  { 64, 64,128},{ 64, 64,128},{  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},
  { 64,  0, 64},{ 64,  0, 64},{128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  0},{  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},
  {  0, 64, 64},{  0, 64, 64},{  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},
  { 64, 64,128},{ 64, 64,128},{  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},
  { 64,  0, 64},{ 64,  0, 64},{128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  0},{  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},
  {  0, 64, 64},{  0, 64, 64},{  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},
  { 64, 64,128},{ 64, 64,128},{  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},
  { 64,  0, 64},{ 64,  0, 64},{128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  0},{  0,128, 64},{  0,128, 64},{  0,128,128},{  0,128,128},
  {  0, 64, 64},{  0, 64, 64},{  0, 64,128},{  0, 64,128},{  0,  0,128},{  0,  0,128},
  { 64, 64,128},{ 64, 64,128},{  0,  0, 64},{  0,  0, 64},{ 64,  0,128},{ 64,  0,128},
  { 64,  0, 64},{ 64,  0, 64},{128,  0,128},{128,  0,128},{128,  0, 64},{128,  0, 64},
  {128,  0,  0},{128,  0,  0},{ 64,  0,  0},{ 64,  0,  0},{128, 64, 64},{128, 64, 64},
  {128, 64,  0},{128, 64,  0},{128, 128, 0},{128,128,  0},{ 64, 64,  0},{ 64, 64,  0},
  { 64,128,  0},{ 64,128,  0},{  0,128,  0},{  0,128,  0},{ 64,128, 64},{ 64,128, 64},
  {  0, 64,  0},{  0, 64,  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,  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,  0},{  0,  0,  0},{  0,  0,  0}
};

void setup () {
  mySerial.begin (9600);
  mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
  mp3_set_volume (25);

  pinMode(BUTTON_1_PIN, INPUT_PULLUP);
  pinMode(BUTTON_2_PIN, INPUT_PULLUP);
  pinMode(BUTTON_3_PIN, INPUT_PULLUP);

  pixels.begin();
  pixels.show();
}

uint8_t before_state[]  = {BT1_OFF, BT2_OFF, BT3_OFF};
uint8_t current_state[] = {BT1_OFF, BT2_OFF, BT3_OFF};
boolean single_mode_flag   = false;
boolean critical_mode_flag = false;
uint8_t randNumber = 0;          // ランダム再生対応
/* uint8_t game_clear_flag = 0;  ランダム再生のため未使用に */
uint8_t action = GASHAT_OFF;
uint8_t led_index = 0;
uint8_t wait          = 0;       // LED点灯のタイムラグ対応
int     slot_in_time  = 0;       // スロット挿入時間
uint8_t s_process_ID  = 0;       // 待機処理判別 0:なし 1:キメワザスロット 2:キースラッシャー 3:ガシャコンウェポン
boolean slot_in_flag  = false;   // スロット挿入フラグ

void loop(){
  current_state[0] = digitalRead(BUTTON_1_PIN);
  current_state[1] = digitalRead(BUTTON_2_PIN);
  current_state[2] = digitalRead(BUTTON_3_PIN);
 
  if(memcmp(before_state, OFF_OFF_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      if(single_mode_flag == false){
        wait = 1;
        action = set_action(GASHAT_NAME);
      }else{
        randNumber = random(2);                                     // ランダム再生
        if(randNumber == 0){
          wait = 1;                                                 // LED点灯のタイムラグ対応
          action = set_action(GAME_CLEAR);
        }else{
          wait = 1;
          action = set_action(GAME_OVER);
        }
      }
      single_mode_flag = !single_mode_flag;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      slot_in_time = 0;
      slot_in_flag  = true;
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      critical_mode_flag = true;                                    // 武器挿入時にフラグを真に
      slot_in_time = 0;
      slot_in_flag  = true;
      wait = 1;
      action = set_action(WEAPON_C_READY);
    }
  }else if(memcmp(before_state, ON_OFF_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;                                        // 引抜時にフラグを偽に
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      if(s_process_ID == 3 && slot_in_time >= 40){                  // 武器挿入から2秒以上経過しているか
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(CRITICAL_FINISH);
        }else{
          wait = 1;
          action = set_action(CRITICAL_FINISH_KAI);
        }
        s_process_ID = 0;                                           // 次回ループ時に実行しないように
      }else{
        ;
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_2);
      }else{
       if(s_process_ID == 3 && slot_in_time >= 40){
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_FINISH);
          }else{
            wait = 1;
            action = set_action(CRITICAL_FINISH_KAI);
          }
          s_process_ID = 0;
        }else{
          ;
        }
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_2);
    }
  }else if(memcmp(before_state, OFF_ON_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      if(s_process_ID == 2 && slot_in_time >= 40){
        wait = 1;
        action = set_action(GENRE);
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_3);
      }else{
        if(s_process_ID == 2 && slot_in_time >= 40){
          wait = 1;
          action = set_action(GENRE);
          s_process_ID = 0;
        }else{
          ;
        }
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_X);                                 // バグルドライバー対応
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_3);
    }
  }else if(memcmp(before_state, OFF_OFF_ON, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(CRITICAL_READY);
      }else{
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(CRITICAL_STRIKE);
        }else{
          wait = 1;
          action = set_action(CRITICAL_STRIKE_KAI);
        }
      }
      critical_mode_flag = !critical_mode_flag;
    }
  }else if(memcmp(before_state, ON_ON_OFF,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      if(critical_mode_flag == false){                              // 武器対応
        wait = 1;
        action = set_action(DRIVER_CLOSE);
      }else{
        if(slot_in_time >= 40){
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_FINISH);
          }else{
            wait = 1;
            action = set_action(CRITICAL_FINISH_KAI);
          }
        }else{
          s_process_ID = 3;
        }
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(DRIVER_CLOSE);
      }else{
        if(slot_in_time >= 40){
          wait = 1;
          action = set_action(GENRE);
        }else{
          s_process_ID = 2;
        }
      }
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(s_process_ID >= 1 && slot_in_time >= 40){
        switch(s_process_ID){
          case 1:
            wait = 1;
            action = set_action(CRITICAL_READY);
            critical_mode_flag = !critical_mode_flag;
            break;
          case 2:
            wait = 1;
            action = set_action(GENRE);
            break;
          case 3:
            randNumber = random(2);
            if(randNumber == 0){
              wait = 1;
              action = set_action(CRITICAL_FINISH);
            }else{
              wait = 1;
              action = set_action(CRITICAL_FINISH_KAI);
            }
            break;     
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(slot_in_time >= 40){
        if(critical_mode_flag == false){
          wait = 1;
          action = set_action(CRITICAL_READY);
        }else{
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_STRIKE);
          }else{
            wait = 1;
            action = set_action(CRITICAL_STRIKE_KAI);
          }
        }
        critical_mode_flag = !critical_mode_flag;
      }else{
        s_process_ID = 1;
      }
    }
  }else if(memcmp(before_state, ON_OFF_ON,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_2);
      }else{
        ;
      }
    }
  }else if(memcmp(before_state, OFF_ON_ON,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_3);
     }else{
        ;
      }
    }
  }else if(memcmp(before_state, ON_ON_ON,   N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      randNumber = random(2);
      if(randNumber == 0){
        wait = 1;
        action = set_action(CRITICAL_FINISH);
      }else{
        wait = 1;
        action = set_action(CRITICAL_FINISH_KAI);
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(GENRE);
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      randNumber = random(2);
      if(randNumber == 0){
        wait = 1;
        action = set_action(CRITICAL_FINISH);
      }else{
        wait = 1;
        action = set_action(CRITICAL_FINISH_KAI);
      }
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GENRE);  
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(s_process_ID >= 1 && slot_in_time >= 40){
        switch(s_process_ID){
          case 1:
            wait = 1;
            action = set_action(CRITICAL_READY);
            critical_mode_flag = !critical_mode_flag;
            break;
          case 2:
            wait = 1;
            action = set_action(GENRE);
            break;
          case 3:
            randNumber = random(2);
            if(randNumber == 0){
              wait = 1;
              action = set_action(CRITICAL_FINISH);
            }else{
              wait = 1;
              action = set_action(CRITICAL_FINISH_KAI);
            }
            break;     
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }
  }

  if(wait >= 1) {                                                   // 0.1秒毎に実行するように
    flash_led(action);
    wait = 0;
  }else{
    wait++;
  }

    before_state[0] = current_state[0];
    before_state[1] = current_state[1];
    before_state[2] = current_state[2];

  if(slot_in_flag == true){                                         // スロット挿入時間処理
    if(slot_in_time < 5000){
      slot_in_time++;
    }else{
      slot_in_time = 0;
    }
  }

  delay(50);                                                        // 武器認識率向上のため100→50
}

uint8_t set_action(uint8_t action){
  mp3_play(action);
  led_index = 0;
  return action;
}

void flash_led(uint8_t action){
  switch(action){
  case GASHAT_NAME:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_NAME[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_NAME[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_NAME[led_index][2]))));
    break;
  case GAME_CLEAR:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GAME_CLEAR[led_index][0])),
                                         pgm_read_byte(&(LED_GAME_CLEAR[led_index][1])),
                                         pgm_read_byte(&(LED_GAME_CLEAR[led_index][2]))));
    break;
  case GAME_OVER:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GAME_OVER[led_index][0])),
                                         pgm_read_byte(&(LED_GAME_OVER[led_index][1])),
                                         pgm_read_byte(&(LED_GAME_OVER[led_index][2]))));
    break;
  case LEVEL_1:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_LEVEL1[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_LEVEL1[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_LEVEL1[led_index][2]))));
    break;
  case LEVEL_2:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_LEVEL2[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_LEVEL2[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_LEVEL2[led_index][2]))));
    break;
  case LEVEL_3:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_LEVEL3[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_LEVEL3[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_LEVEL3[led_index][2]))));
    break;
  case GASHAT_IN:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_IN[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_IN[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_IN[led_index][2]))));
    break;
  case GASHAT_OUT:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_OUT[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_OUT[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_OUT[led_index][2]))));
    break;
  case DRIVER_CLOSE:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_DRIVER_CLOSE[led_index][0])),
                                         pgm_read_byte(&(LED_DRIVER_CLOSE[led_index][1])),
                                         pgm_read_byte(&(LED_DRIVER_CLOSE[led_index][2]))));
    break;
  case CRITICAL_STRIKE:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_CRITICAL_STRIKE[led_index][0])),
                                         pgm_read_byte(&(LED_CRITICAL_STRIKE[led_index][1])),
                                         pgm_read_byte(&(LED_CRITICAL_STRIKE[led_index][2]))));
    break;
  case CRITICAL_READY:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_CRITICAL_READY[led_index][0])),
                                         pgm_read_byte(&(LED_CRITICAL_READY[led_index][1])),
                                         pgm_read_byte(&(LED_CRITICAL_READY[led_index][2]))));
    break;
  case CRITICAL_FINISH:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_CRITICAL_FINISH[led_index][0])),
                                         pgm_read_byte(&(LED_CRITICAL_FINISH[led_index][1])),
                                         pgm_read_byte(&(LED_CRITICAL_FINISH[led_index][2]))));
    break;
  case GENRE:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GENRE[led_index][0])),
                                         pgm_read_byte(&(LED_GENRE[led_index][1])),
                                         pgm_read_byte(&(LED_GENRE[led_index][2]))));
    break;
  case LEVEL_X:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_GASHAT_LEVELX[led_index][0])),
                                         pgm_read_byte(&(LED_GASHAT_LEVELX[led_index][1])),
                                         pgm_read_byte(&(LED_GASHAT_LEVELX[led_index][2]))));
    break;
  case CRITICAL_STRIKE_KAI:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_CRITICAL_STRIKE_KAI[led_index][0])),
                                         pgm_read_byte(&(LED_CRITICAL_STRIKE_KAI[led_index][1])),
                                         pgm_read_byte(&(LED_CRITICAL_STRIKE_KAI[led_index][2]))));
    break;
  case CRITICAL_FINISH_KAI:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_CRITICAL_FINISH_KAI[led_index][0])),
                                         pgm_read_byte(&(LED_CRITICAL_FINISH_KAI[led_index][1])),
                                         pgm_read_byte(&(LED_CRITICAL_FINISH_KAI[led_index][2]))));
    break;
  case WEAPON_C_READY:
    pixels.setPixelColor(0, pixels.Color(pgm_read_byte(&(LED_WEAPON_C_READY[led_index][0])),
                                         pgm_read_byte(&(LED_WEAPON_C_READY[led_index][1])),
                                         pgm_read_byte(&(LED_WEAPON_C_READY[led_index][2]))));
    break;
  case GASHAT_OFF:
  default:
    pixels.setPixelColor(0, pixels.Color(0,0,0));
  }

  if(led_index < LED_PATTERN){
    led_index++;
  }else{
    pixels.setPixelColor(0, pixels.Color(0,0,0));
  }

  pixels.show();
}

2018年8月26日日曜日

【オリジナルガシャット】フルタマンガシャット動画公開【作製番外編5】

生存報告も兼ねた更新です。

オリジナルガシャットとは別件でサウンド編集のソフトを弄っていたのですが、マイドキュメントの中に昨年12月頃作製したオリジナルガシャット用の音声データを発見しました。

フルタマンガシャット

当時、話題になっていたフルタマン&フルタイソウで作製しましたが、元ネタがゲームではないため、作製後にそのまま放置していました。
しかし、折角作製したものを、このまま眠らせておくのももったいないので動画として公開します。
ちなみに、動画には撮っていませんが、レベル3音声はフルタイソウ第2です。

なお、この動画は動画編集の練習&YouTubeでの終了画面のテストも兼ねて公開しています。見辛い点等があったとしてもご容赦を…

2018年7月23日月曜日

【雑記】備忘録メモ

オリジナルガシャットでゲーム名音声を作製した際の方法を忘れかけてきたので備忘録として残しておきます。

はじめに

超絶倫人ベラボーマンガシャットの作製で困ったのは、ゲーム名の音声が存在しないため、オリジナルの音声を自分で作製することでした。
初めはオリジナル音声の作製に無料の音声合成ソフトを使用してみたのですが、女性の音声はともかく、男性の音声はいまいちな感じでした。
次に有料ソフトの試聴で試してみたところ、悪くはなかったのですが、流石に有料ソフトの試聴音声を切り貼りするのは気が引けたので別の方法を考えてみました。


用意するもの

  • Google翻訳が動作するブラウザ
  • 録音できるソフトウェア


作業内容

通常、Google翻訳の「音声を聞く」で日本語の文章を聞いてみると、女性の音声で再生されます。
ですが、オリジナルガシャットではどうしても男性の音声が欲しかったので、男性の音声で無理やり再生させる方法を考えました。
方法は下記のとおりです。

言語を「ラテン語」に

再生したい音声をローマ字で入力し、確認

後は、ローマ字を修正しつつ音声を確認し、満足のいく発音になったら録音

です。
オリジナルガシャットのゲーム名音声が怪しげな発音なのはこれのせいです。

2018年6月17日日曜日

【雑記】やりたいこと・やりたかったことリスト

最近忙しくて、趣味の時間が取れないため、備忘録として残しておきます。最近物忘れが多くなってきたので。
あくまで「やりたいこと・やりたかったことリスト」なので、ここにリストアップされた事を全部やる訳ではないのでご了承を…

オリジナルガシャット改修案1

自分がオリジナルガシャット作製に使用したのはSG版ガシャットなのですが、発光部の構造がDX版とは結構異なります。
そこで、DX版っぽくするため考えてみた案が、薄いアクリル板を加工し、発光部のクリアパーツに仕込むことで導光板として作用させることです。
100均で売っているアクリル製のカードスタンドが、素材として良い感じなので購入してきたのですが、加工する時間が取れず保留案件となっています。


オリジナルガシャット改修案2

前回作製したオリジナルガシャットはやむを得ずリチウムポリマー電池を使用しましたが、安全面が気になります。
そこで、ピン形リチウム電池(電気ウキやミライトで使用されている電池)が小型かつ3Vなので、ピン形リチウム電池×2本と3.3Vのステップダウンモジュールで動作させることができないかと考えていますが、作業する時間が取れず保留案件となっています。
色々実験してみましたが、ピン型リチウム電池×2本では、DFPlayerの安定駆動は困難でした。


オリジナルガシャット改修案3

公式の不正なガシャット(変な表現ですが)であるハリケーンニンジャガシャットのラベルには、ゲンムコーポレーションのロゴがありません。
なので、自作ガシャットのラベルもゲンムコーポレーションのロゴ抜きで…と考えていたのですが、これも作業する時間が取れず保留案件となっています。


フルボトル発光改造

これはフルボトル発光改造が流行っていた時期に考えていたネタです。
その当時はLEDと電池をフルボトル内に仕込んで発光させるのが主流だったので、何か違う手法はないかと考えて、無線電力伝送回路で発光させるのはどうだろうとの結論にたどり着きました。
無線電力伝送回路と書くと何やら複雑そうですが、仮面ライダーウィザードのリングが発光するのと同じ原理です。
受信部はシンプルに作れるのですが、送信部の作製に手間取り、公開の時期を逃してしまったのでお蔵入りです。


オリジナルガイアメモリ作製

オリジナルとは言っても、某ライダーのガイアメモリを作ってみたいだけなんですけどね…
8年前は、他の方がYouTubeに投稿している様に、ボイスレコーダーを使っての作製を考えていたのですが、当時は音声素材が集まらなかったためお蔵入りしてしまったものです。
今はゲームやオリジナルドラマ等でそれなりに素材を集めることができ、オリジナルガシャット作製技術の応用でDX版に近い物が作れそうなので、時間があれば作ってみたいのですが…


ブラックホールLEDの技術を使った何か

YouTubeでブラックホールLED作製の動画を見て、何か作ってみたいと思ったものの、良いアイディアが思い浮かびませんでした。
最近の製品ではジーニアスボトルにこれに近い技術が使われてますね。
備忘録として残します。


無線電力伝送回路の技術を使った何か

フルボトル発光改造は頓挫してますが、技術自体は他にも使えるはず。
備忘録として残します。

2018年4月15日日曜日

【オリジナルガシャット】源平討魔伝ガシャット動画公開【作製番外編4】

さて、本筋のオリジナルガシャット作製はひと区切りつけたので、昨年の10月1日の雑記に記載のあった3案の最後のひとつを公開します。

源平討魔伝ガシャット

レベル3音声をどうするか迷っており、製作自体が保留となっています。

【音声改造】オリジナルガシャット作製その8 『ベラボーマンガシャット暫定版完成』

オリジナルガシャットの暫定版が完成しました。

アマゾンで必要な部品を購入してから約13ヶ月…途中、作製を中断していた期間もありますが、ようやく形になりました。

超絶倫人ベラボーマンガシャット

きかんしゃトーマスガシャットの作製が頓挫して以降、いろいろと迷走していましたが、自分がプレイしたことがあり、かつ音源が手に入ったゲームの中で、納得のいくレベルで作成できたものです。
心残りがあるとすれば、ゲーム名の音声が原作には無かったため、Google翻訳で無理やりゲーム名の音声を作ったことでしょうか。

発光部やラベルなどの作製しなければいけない物や、発光パターンの改良等、しなければならない事はまだまだありますが、ひと区切りつけないとこのままダラダラ弄り続けてしまうと思うので、ここで暫定完成とします。

なお、このベラボーマンガシャットに関しては今後も改良を続け、完成度が更に上がったら改めて投稿しようとは思いますが、今回の作製で培った知識や技術で色々やってみたいことが出てきたので、当面の間はそちらを優先しようと思います。

2018年3月27日火曜日

【オリジナルガシャット】作製雑記3 『DFPlayerライブラリが正常動作しない』

DFRobotDFPlayerMini版ライブラリで動作しなかった原因がなんとなく分かってきたような気がします。


ヒダカ ヒロジ様のブログで「電源の問題か繋ぎ方の問題か」とのコメントがあり、購入した製品について色々調べてみました。

購入したProMicro(Arduino Leonardo互換)の製品は、J1のソルダジャンパがオープンの場合3.3V駆動、ショートの場合5V駆動とのことで、手元の基板を確認してみたところ、J1のジャンパはオープン状態だったので3.3V駆動で間違いなさそうな感じでした。
ところが、念のため製品を購入したページを再確認してみたところ、半年程前のレビューに「3.3V表記は嘘で、VCCはJ1 open状態で5Vです。」とあり、3.3V駆動に見せかけた5V駆動の製品っぽい可能性が出てきました。

まぁ、5V駆動であるならば、5V用の対策をすれば良いだけの話なのですが、それにしても、今までのプロトタイピングは3.3V駆動前提で試作していたのに、よく動作したなぁとは思います。

2018年3月25日日曜日

【音声改造】オリジナルガシャット作製その7 『前回の不具合への対策』

今回はSGガシャットへの実装に向けて、前回の動作確認により判明した問題への対策を行いました。

スピーカー周りに接触不良がある

念のため、新しい導線で繋ぎ直してみましたが、やはりスピーカーから音は出ませんでした。
配線が原因ではないとすると、基板上に何らかの原因があると思われるのですが、その原因を調査するとなると手間がかかり過ぎるため、今回は新しいDFPlayerに交換しました。
交換後は問題なく動作するようになりました。


電源について再検討する

以前、オリジナルガシャットの電源をボタン電池で何とかしようとしていた時期に、3.3Vのステップダウンモジュールを購入していたので、それを使用してみたところ、LEDの謎の点滅現象はなくなりました。
また、AruduinoもDFPlayerも問題なく動作しました。


その他課題

スケッチのライブラリをDFRobotDFPlayerMiniに変更し、ArduinoIDEの検証ボタンを押してみたところ、mp3_set_serialやmp3_set_volume等でエラーが発生してしまいました。
ネットで原因を検索してみたところ、DFPlayer_Mini_Mp3のライブラリとはコードが異なるため、その部分も修正しないといけない様子。
そのため、そのサイトを参考にしてスケッチを修正し、エラーが出ない状態になったので、開発機に書き込んで動作確認をしてみたのですが、DFPlayerが全く反応しなくなってしまいました。
DFPlayer_Mini_Mp3版のスケッチを再度書き込んだら問題なく動作したので、DFRobotDFPlayerMini版のスケッチに何か問題があるのか、我が家の開発機との相性が良くないのか…
(参考にしたサイトにあったMP3を再生するスケッチをそのまま書き込んでも動作しなかったので、我が家の開発機との相性問題っぽい…)
いずれにせよ、対応には時間がかかりそうなので、当面の間はDFPlayer_Mini_Mp3版で行くこととします。


以上の対策を行い、SGガシャット実装用の機器で動作確認をしたところ、無事動作するようになったのですが、SGガシャット内に搭載するための作業中に失敗してしまいました。
基板画像

ガシャット内のレイアウトを調整中に配線の一部が切れてしまいました。
はんだごて等を実家に置いてきてしまったため、実家に帰った時に修理します…

その8に続きます。】

2018年3月18日日曜日

【音声改造】オリジナルガシャット作製その6 『本番用部品での検証』

今回は手持ちのArduino基板にスケッチの書き込みを行い、動作検証をしてみました。
動作検証画像


今回の動作検証で判明したこと

スピーカー周りのどこかに接触不良がある

ガシャットのスイッチを操作したところ、DFPlayerのLEDは点灯するのに音が鳴りませんでした。
試しにDACの所にイヤホンの線を接続すると音声が聞こえたので、DFPlayer自体が壊れているわけではなさそうです。


電源について再検討する

電源ユニットから3.3Vを供給して動作確認していた時には何の問題も無く動作したのですが、リチウムイオンポリマー電池で動作確認をした際に、何の操作もしていないのにLEDがずっと特定の点灯パターンを繰り返す状態になってしまいました。


その他課題

今使用しているDFPlayerのDFPlayer-Mini-mp3ライブラリは現在非推奨となっているらしいので、DFRobotDFPlayerMiniの方のライブラリに対応したスケッチを検討します。

その7に続きます。】

2018年2月12日月曜日

【オリジナルガシャット】けものガシャット(仮称)動画公開【作製番外編3】

生存報告も兼ねての更新です。

今回は、昨年の10月1日の雑記に記載した、(当時)最も音声データの作製が進んでいた案が、お蔵入り確定になったので、ブログ用としてこっそり公開します。

けものガシャット

けものガシャット(仮称)です。
当初はアプリ版を参考にして作製していたのですが、レベル2とレベル3音声の作製が難航したため、アニメ等から一部の音源を拝借しました。
そのため、ガシャットネーム音が2種類あります。

2017年12月24日日曜日

【オリジナルガシャット】レッキングクルーガシャット動画(高画質版)公開【作製番外編2】

相変わらず忙しく、オリジナルガシャットの作製になかなか時間が割けない状況ですが、前回のレッキングクルーガシャットをハンディカメラで撮り直してみました。

今回はガシャコンブレイカーの電源を入れ忘れずに撮影できたのですが、完成した動画を見た感じ、クリティカルフィニュッシュ音はあと0.2秒程度早めで良かったかもしれません。

とりあえず、レッキングクルーガシャットの製作はここで一旦中止として、次回からは別のネタの作製に入ります。