2015年2月10日火曜日

妖怪ウオッチ零式 プログラム編 メダルパターンデータ

メダルのパターンデータは、メダルの裏の突起で決まります。
頭の方から4列になる4ビットのデータ列です。
そのうちの最後の列はターミネータのようで、
0b1010固定となっています。
このメダルの場合固定データを除くと以下のように
なります。
{0b0110,0b0101,0b1100},//ダークニャン
このデータをテーブルに登録して順に出力して行きます。



const uint8_t pat_array[][3] = {
{0b0110,0b0101,0b1100},//ダークニャン
・・・・・・・・・・・・・
・・・・・・・・・・・・・
};
しかしAVR2313はデータエリアが128バイトしかありません100種類以上もの妖怪をおさめきれません。 そこでこのデータはPROGMEMをつけてプログラムエリアに配置することにします。
PROGMEM const uint8_t pat_array[][3]  ={

全てのデータは一元管理され、順番に取り出すことが出来ますがあまりに多すぎます、そこで種族ごとに切り替えて、その種族の先頭から順に取り出すことにします。その種族最後までいったら、またその種族の先頭に戻ります。
別の種族に行くには種族切り替えSWで切り替えます。

種族の先頭を管理するために、一つ管理テーブルを用意します。
ここには各種族ごとの先頭、最終オフセットを格納します。
struct CTL_TBL{ //族情報インデックス管理テーブル
    unsigned char top_offs;//族情報先頭オフセット
    unsigned char end_offs;//族情報最終オフセット
}ctl_tbl[ZOK_MAX]={
    {ZOK1_TOP,ZOK1_MAX-1},           //イサマシ族
    {ZOK2_TOP,(ZOK2_TOP+ZOK2_MAX)-1},//フシギ族
    {ZOK3_TOP,(ZOK3_TOP+ZOK3_MAX)-1},//ゴーケツ族
    {ZOK4_TOP,(ZOK4_TOP+ZOK4_MAX)-1},//プリチー族
    {ZOK5_TOP,(ZOK5_TOP+ZOK5_MAX)-1},//ポカポカ族
    {ZOK6_TOP,(ZOK6_TOP+ZOK6_MAX)-1},//ウスラカゲ族
    {ZOK7_TOP,(ZOK7_TOP+ZOK7_MAX)-1},//ブキミー族
    {ZOK8_TOP,(ZOK8_TOP+ZOK8_MAX)-1},//ニョロロン族
    {ZOK9_TOP,(ZOK9_TOP+ZOK9_MAX)-1},//カイマ族
    {ZOK10_TOP,(ZOK10_TOP+ZOK10_MAX)-1},//レジェンド族
    {ZOK11_TOP,(ZOK11_TOP+ZOK11_MAX)-1}//その他族
};

種族切り替えSWはこのテーブルのオフセットでぐるぐる切り替えます。
召還SWは現在相対位置インデックスをもとに、このテーブルのメンバ
top_offs;//族情報先頭オフセット
end_offs;//族情報最終オフセット
の内容をもとに、現在種族のメダルパターン位置を算出しとりだします。

戻る

0 件のコメント:

コメントを投稿