エレ玩 Konyaの開発記録

アクセスカウンタ

zoom RSS EGP01でスーマリもどき2

<<   作成日時 : 2011/06/25 09:01   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 3 / トラックバック 1 / コメント 3

 かなり間が開いてしまいました。
少々仕事が忙しかったのもありますが、いつもの怠け心が最大の原因です。
時期が時期だっただけに御心配をお掛けしたかもしれません。
失礼しました。

画像


さて、3ヶ月以上前に紹介のスーマリもどき、ようやくプログラムを公開できるレベルになりました。
とは言え、ゲームシステムのほとんどは3ヶ月前に完成しており、足りないのは主に、以下の項目になります。

 @敵が出ない
 Aキノコが出ない
 B1面のマップデータしかない
 CBGMがない


で、現状は以下です。

 @敵は出ないまま
 Aキノコは出ないまま
 Bマップは全3面で、地上面のみ。
 CBGMは鳴るが、音階ズレあり。


ほとんど変わってないじゃん!!
3ヶ月以上も何やってたの!?


いゃ だから、仕事が少々...怠け心が少々...

一応、ゲームとしては成立してます。
ゴールまでの制限時間を短くしてあり、
少ない時間でいかにコインを獲得するかが、ゲームの肝。
純粋にジャンプテクニックを競うゲームに仕上げてあるのです。

と言い訳したところで、動画をどうぞ。





・・・ ちゃんとした移植を期待した方には申し訳ない気持ちでいっぱいです。

ガッカリした後は、ちょっとだけ解説します。


ゲームのBGMや効果音は面白さに関わる重要な要素です。
最低でもBGMと効果音の2音を同時出力できなければ、とっても寂しいゲームになると思います。
(その寂しさが味わいになる場合もありますが・・・)

EGP01キットのサンプルプログラムでは、下図のようにタイマ2と出力コンペアモジュールを使い、プログラムデータで指定の周波数パルスを出力、効果音やBGMを鳴らしています。
しかし、この方法では複数音の同時出力ができません。PWMでPCM再生すれば複数音の合成も可能ですが、BGMのデータサイズが膨大になってしまいます。

画像


そこで、更にタイマ3と出力コンペアモジュール2を使い、RP17ピンへの出力を切り替えることで2音同時出力を実現しています。dsPIC33Fはピンに出力する内蔵モジュールをプログラムで切り替え可能です。


画像


各出力コンペアモジュールは指定周波数のパルス出力を継続し、1周期分の出力を完了するたびに、RP17ピンの接続モジュールを切り替えます。
しかし、下の波形のように短い周期と長い周期の組み合わせでは、短い周期の出力が削られる割合が高くなり、音が変わってしまいます。実際今回のスーマリもどきでも、BGM(長い周期)が鳴っている時のジャンプ、コイン(短い周期)の音はザラザラした感じになっています。
まぁ、それでも鳴らないよりはましですね。

画像



スーマリもどきでは残り時間が100、50を切るとBGMのテンポが速くなるのですが、プログラムでテンポを速くするのではなく、それぞれのテンポのデータをわざわざ準備しています。
当然、プログラムでテンポを制御した方がデータサイズも小さくなり、またゲームの雰囲気を盛り上げる効果がいろいろと期待できますが、単にプログラムが面倒で、手抜きをしちゃったわけです。


さて、プロジェクトファイル一式を以下に公開します。

 EGP01_SMBmodoki01.lzh

プログラムファイル一覧

 EGP01.c      : メインプログラム
 EGP01_Asm.s   : アセンブラ記述のサブルーチン集
 EGP01_Asm.h   : アセンブラ記述の外部変数/関数の定義
 ChrData.inc    : 個別キャラクタ グラフィックデータ(スーマリ用)
 ChrDataCmn.inc : 共通キャラクタ グラフィックデータ(文字フォント等)
 SndData.inc    : 個別サウンドデータ(スーマリ用))
 SMBMAP.inc    : マップデータ

 
名作冒険アクションゲームが、すっかりミニゲームにグレードダウンしてしまいましたが、一応、これで完成です。
気が向けば、敵やキノコの追加をするかもしれませんが、気持ちは既に次のゲームに移っており、皆様の改造を期待しています。
もっとも、相変わらず行き当たりバッタリのソースコードなので解析が大変と思います。
ぐちゃぐちゃなコード読むのが快感と言う、Mの方はどうぞ挑戦してみてください。

以上でございます。


テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 3
なるほど(納得、参考になった、ヘー)
驚いた
ナイス

トラックバック(1件)

タイトル (本文) ブログ名/日時
効果音作成
ゼビ○スの効果音は連続的に周波数が変化している音やランダムノイズを使用した音であり、BGMのように単純な音階にすることができないため、出力コンペアを使用してそれらの音を表現するために、ある時間ごとに区切って周波数を変えていく方法を使用しました。 連続的に周波数が変化している例として、地上用の弾の効果音を横軸時間、縦軸周波数で大まかにグラフにすると下図のようになります。 ...続きを見る
kunizoの電子工作memo
2012/03/26 21:45

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(3件)

内 容 ニックネーム/日時
お久しぶりです。実は先週から、PIC24FJ64GA002やPIC24FJ64GA004をMPLAB IDE v8.80 & C30 v3.30c でコンパイルし、PICckit3 で1度でも書込むと、内蔵高速クロック(FRC:8MHz固定のはず)が10MHzで発振してしまうのです。今まで使っていたハードとソフトウエアで、なにも変更していません。usartやSPI等の通信レート、ディレイ時間等がすべて1.25倍になってしまい、パラメーター値を変更しないと、正常に通信が出来なくなってしまいました。
驚くのは、昔のC30バージョンでコンパイルした同じソースのHex実行ファイルを当時のままで書込んでも、治らない事です。

そこで、エレ玩さんが、過去にPIC24FJ64GA002を使用していた事を思い出しました。
もしも可能であれば、C30 v3.30c を使って、FRC発振を1:1でFoscとして使う設定にして、RA3からFosc/2出力を出して、そのクロッック周波数を計ってみてくれませんか?
_CONFIG2でFNOSC_FRC、OSCIOFNC_OFFとし、CLKDIV = 0とすれば、Fosc=FRCとなってRA3のFosc/2=4(MHz)なるはずですが、5MHzが観測されてしまいます。この状態でusartを標準設定すると、通信レートが1.25倍になってしまいハイパーターミナルやTeraTerm等の固定通信レート設定では、いかなるレートに調整しても通信できなくなってしまいます。
もちろん強制的にusartの通信パラメータを1.25倍してコンパイルすれば正常になります。
PIC24FJ64GA002や004のFRCは、プリスケーラやPLLを如何に使っても、10の倍数の発振周波数は得られないはずです。
こんな状況は私だけなのでしょうか?
トンちゃん
2011/11/10 07:11
PIC24FJ64GA002,004の内部高速クロックのFRCが、規定の8MHzでは無く、10MHzで発振してしまう件は、PICkit3のファームウエアに問題があったらしく、最新のPICkit3用のファームウエアは、この書き換えてしまう問題を修正したそうですが、一度この問題の有るファームウエアにて書込みを行ってしまったPIC24FJ64GA002,004のFRCは、その内部のFRC校正用ビットが書き換えられてしまい元には戻らないそうです。
トンちゃん
2011/11/25 17:04
初めまして、のぶと申します。
この液晶自分もやりましたが、ここまでやるとは神の領域ですね。。。
感心しました。
突然ですが液晶のことにかなりお詳しそうですので以下ご教授願いませんでしょうか?
aitendoさんで買ったHT1603BというLCDですが、7SEG部分の表示はサンプルプログラムどうりですぐにできたのですが、アイコン部分(アンテナ/電池マークなどなど)の出し方がちんぷんかんぷんですw
http://www.aitendo.com/product/3594
サイトにある英語のマニュアル(コントローラチップPCF8576のPDFファイル)も読んで見ましたがやっぱりさっぱりです。
ネットで関連するものも見当たりません。
7SEG部分を表示した時、アイコン部分の刻印がうっすらと浮かび上がってますので単なる位置のON/OFF制御が必要と見受けられるのですが。。。
どのコマンドをどういう風に使うのか理解できませんでした。
お時間ある時で良いので教えてもらえませんでしょうか?
ぶっしつけで大変失礼します。
のぶ
2012/05/10 16:34

コメントする help

ニックネーム
本 文
EGP01でスーマリもどき2 エレ玩 Konyaの開発記録/BIGLOBEウェブリブログ
文字サイズ:       閉じる