忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
プチコン4で開発していたSTG、ReflectionForce公開しました!

ダウンロードキー 4EKE334XF
Switchをお持ちなら無料体験版で遊ぶことが出来ます。






1.ニンテンドーeショップでプチコン4で検索。体験版はサーバー利用券無しの方です。
2.プチコン4起動後のトップメニューから作品を見るを選択
3.Rボタンを3回押して公開キー4EKE334XFを入力
4.ローカルからゲームを起動すれば遊べます。
体験版は8時間に1回しかダウンロード出来ないのでご注意下さい。

作り始めたのが2019年の6月20日と書いてあるので約半年くらい時間がかかった感じです。
それでもゲームモードは未実装だし音楽は使いまわしなので本来ならもっと時間かかってるはず。
今後ゲームモードの追加や細かい修正なんかもしていきたい所です。

今回のSTGのテーマは狙い撃ちです。小さい敵は通常ショットで殲滅して大きい敵やボスなどは波動砲で狙って倒す・・・みたいなのをイメージして作っています。
難易度は高いと思うのでビギナー機体だとかなり敵弾が消せるようにしています。
とりあえず大きなバグが無いと良いなぁ。。。
PR

プチコン4でWAVファイルを読み込んで効果音として使用しようと思ったのですが上手く鳴らせるようになるのに苦労したので忘備録。

まず大前提としてWAVファイルをプチコン4に転送するために麗の小屋さんのPetit4Sendを使用します。
WAVファイルを鳴らす方法として思いつくのがPCMSTREAM命令ですが、PCMSTREAM命令だと音を重ねる事が出来ない(私が鳴らす方法を知らないだけかもしれません)ので効果音を鳴らすのには向いていません。
なのでWAVSETA命令でWAVファイルを波形登録して鳴らすようにしてみました。

一応PCMSTREAM命令でのWAVファイルの鳴らし方も書いておきます。
01 OTO[]
02 OTO=LOADV("DAT:KOUKAON.WAV")
03 PCMSTREAM OTO,48000
04 PCMVOL 10000
05 WHILE 1
06  VSYNC 1
07 WEND
こんな感じで書けば任意のwavファイルを鳴らすことが出来ます。音は勝手にループしますので止めたい場合はPCMSTOP命令で止めて再開する場合はPCMCONT命令で、PCMPOSで再生位置を設定出来ます。

WAVSETA命令で鳴らす場合はこんな感じ。
01 OTO[]
02 OTO=LOADV("DAT:KOUKAON.WAV")
03 WAVSETA 244,127,0,0,127,OTO,69,0,99235,48000
04 BGMSET 128,"@244O4A2"
05 BGMPLAY 128
WAVSETA命令の内容は下記のようになっています。
***********************************************************
WAVSETA 楽器番号,アタック,ディケイ,サスティン,リリース,配列,基準音程,ループ先頭,ループ終端,サンプル周波数[,オフセット][,BEEPループ]
***********************************************************
配列の要素数はPRINT DIM (OTO,0)で調べる事が出来るので例えばDIM (OTO,0)が99236ならば1引いた99235を設定すればOKです。基準音程は69で「"O4A":オクターブ4のラ」を設定した事になりサンプル周波数を48000にした時にWAVファイルと同じ音程で鳴らすことが出来るようです。
WAVファイルの音長によって"@244O4A2"のA2の2の部分を1にしたり4にしたりして(音の長さを設定する)効果音がループしない良い感じのところに設定します。
実際に効果音を鳴らす場合は効果音毎にトラックを変更しないと音が重ならないのでショット音はBGMPLAY 0,128で爆破音はBGMPLAY 1,129とかにすれば上手く行くと思います。
new3DSを購入した時に、それまで使っていた3DS LLは売ってしまったのですが
プチコン3号を使ってみるとnewとノーマル3DSでかなりの速度差がある事がわかりました。

こんな事なら3DS LL売るんじゃなかった・・・と思っても後の祭りw
って事でノーマルな3DSを購入してみました。
 
中古で1万円くらいで購入。
当初は動作確認用だしジャンクな3DS買おうと思っていたのですが
ヤフオク見ててもジャンクでも7~8千円くらいしていて、そこまで
出すんなら普通の中古でエエかーと思いまして。
もっと安くで売ってると思っていたのですが人気あるんですねぇ。

とりあえず自分が作ったテストプログラムで速度差を見てみると・・・

newでFPS60ギリギリくらいまで動作させてみるとノーマルの場合はFPS20程度
まで低下する模様。
大体、ノーマルとnewで3倍くらいの速度差があるようです。
ココまで速度差があると、newでギリギリ動作するゲーム作るとノーマルでは
殆どまともに動かないって感じになりそうですねぇ。
ノーマル基準で作れば良いのですが、それだと折角のnewのパワーを持て余すことに
なってしまって勿体無い気もしますし難しい所です。

あと、現在公開しているテストプログラムの公開キーを記載しておきます。

弾幕STGテストプログラム
公開キー:K2K4EK4V
ファイル名:KT_DANSTG_TES

弾幕表示のテストプログラムです。
各種ボタンで表示間隔や弾速などを変更出来ます。
敵弾400発とか撃たしても余裕でFPS60動作しますので
弾幕STGの作成も出来そうです^^




スプライトを使った擬似3D表示プログラム
公開キー:E5DEE3
ファイル名:KT_3DTEST

スプライトを使った擬似3D表示プログラムです。
各種ボタンで表示間隔や速度、回転などが出来ます。
こちらも余裕でFPS60動作しますので目指せ!ギャラクシーフォース
って感じですかねw
ついにプチコン3号が配信開始されました!
とりあえず動作の限界が知りたくて簡単な弾幕STGプログラムを作ってみました。



自機1
自機弾60
敵1
敵弾400
BG4枚
を使って自機と敵、自機と敵弾、自機弾と敵の当たり判定を行っているのですが
殆ど処理落ちなく動いてしまって驚愕。
普通に弾幕STG作れてしまうスペックですw

ちなみにプチコンmkIIの時はこんな感じ↓だったので、いかにプチコン3号が進化してるかわかりますね。


しかもこの動画はFPS30ですしね。

で、今回も悩んだSPHITの使い方
基本的な考え方はコチラのエントリで書いていますが、プチコン3号では
SPHITSP(スプライト同士の判定)とSPHITRC(スプライトと矩形の判定)に変更
されています。
SPHITSPの当たり判定範囲はSPCOLで指定するのですが、説明には
「SPCOL 管理番号, Xオフセット, Yオフセット, 幅, 高さ, [スケール対応] , マスク」
となっていますが、ここで大事なのは最後のマスク
「0〜&HFFFFFFFF(ビット単位でグループ属性を管理)
 SPHIT系命令で、対象との判定時に互いのビットANDをとり、0であれば衝突していないとみなす。」
このマスクで同じグループにあるもの同士のスプライトの当たり判定を行うって事になります。

0〜&HFFFFFFFFと書いていますが&Hってのは16進数って意味です。
16進数だとややこしいので2進数に変換してみます。
変換はWindows標準の関数電卓(表示の所で選択出来ます)が便利です^^

今だとスマホのアプリとかでもありますね。

FFFFFFFFは2進数だと
1111 1111 1111 1111 1111 1111 1111 1111
16進数の0は2進数でも0ですがわかりやすく書くと
0000 0000 0000 0000 0000 0000 0000 0000
となります。
つまり、この0とFFFFFFFFを縦に並べてみて同じ場所に1があれば当たってると判定する
って事になります。

例えば自機を0000 0000 0000 0000 0000 0000 1111 1111
敵を0000 0000 0000 0000 0000 0000 1111 0000
敵弾を0000 0000 0000 0000 0000 0000 0000 1111
に設定したとすると…
0000 0000 0000 0000 0000 0000 1111 1111:自機=&H000000FF
0000 0000 0000 0000 0000 0000 1111 0000:敵=&H000000F0
0000 0000 0000 0000 0000 0000 0000 1111:敵弾=&H0000000F
となり、自機と敵、自機と敵弾は当たり判定を行いますが、敵と敵弾は当たり判定を行わない
設定となります。
プチコン3号では0が32個(32ビット)あるので32種類の別々の当たり判定を
行う事が出来るってことになりますが、普通は数種類もあれば充分。

2進数と16進数の変換が面倒くさいって時は16進数で考えて
0とFしか使わないようにすると解りやすいです。
&H000000FF
&H000000F0
&H0000000F
みたいに考えるとFがある場所でグループを判断出来るので便利です。

そして今回は画像のサイズを取得出来る命令があるのが凄く便利
それがSPDEF命令なのですがWebの説明書には
「SPDEF 定義番号 OUT U,V,幅,高さ,原点X,原点Y [,アトリビュート]」
(プチコン3号の説明書にはなぜか載ってない)
この命令で画像の幅と高さがわかるので
SPCOLの前にSPDEFで画像サイズを取得しておけばSPCOLの範囲指定も楽です。

SPDEF  定義番号 OUT U,V,W,H
SPHOME 管理番号,W/2,H/2
SPCOL  管理番号,-W/2,-H/2,W,H,TRUE,&H000000FF
みたいに書けるので、いちいち画像サイズを考えなくて良いですね。

あとはSPHITSPで判定したいスプライトの管理番号を指定すればOK
HIT=SPHIT (管理番号)
とすれば変数HITに当たったスプライトの管理番号が代入されます。
(当たっていない時は-1となる)
HIT=SPHIT (自分の管理番号、相手の管理番号)
とすれば個別に当たり判定を指定することも可能です。

って事でだいたいのスペックはわかってきたので、第三回プチコン大喜利に向けて
何か作ろうかと思っているのですがお題は「飛び出す」なんですよねー。
上の動画のような上下繋がった画面(XSCREEN4)は3D表示が使えないので
どうしようかなーと考え中です。
第二回プチコン大喜利の結果が発表されました。




結果は大喜利大賞受賞!

何か賞に選ばれたら良いなーとは思っていたのですが、まさか大賞とは思って
なかったので、とても嬉しいです^^
そして、動画の中で出てくる「次のプチコン」が気になりまくりますねーw
やはり次があるなら、3DSで立体視対応とかでしょうか。
現状のプチコンだと弾幕STG作るにはちょっと処理速度的に辛いかなーって感じ
なので、もうちょっと速くなってくれると良いなーなどと思っております。


カウンター
Twitter
カレンダー
01 2020/02 03
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
最新コメント
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
[11/24 kt.]
[11/24 NONAME]
プロフィール
HN:
kt.
HP:
性別:
男性
自己紹介:
STG大好きな45歳。
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]