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

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

やっとリプレイの不具合も治ったようなので、ステージ4を作っていこうかと思って
前からやってみたかったラスタースクロールを使用したスクロール方法を考えてみた↓

ラスタースクロールを使用したスクロールスクリプト
コレを動かすとこんな感じ↓
20007_11_14.jpg
背景画像はデジタル素材の部屋さんでお借りしました

実際にはスクロールしているように見えるだけで、同じ画像がウネウネしてるだけなのですが
イメージとしては溶岩の上を飛んでいるようなイメージだったので、なかなか良い感じでは
ないかと自分では思っています。

ですが、このスクリプト、メチャクチャ思いですorz
私のパソコンではFPS50程度がやっと。もう一台のXPマシンではFPS20も行かないくらいです。
最初、es_excopyを使用して作製していたので、これをes_exput命令に置き換えてみたのですが
重さはかわらず。
やはり、1回のループで480回描画しているのが原因なんでしょうかね。。。
でも今までの経験では、480回程度ではココまで重くなる事はなかったような気がするのですが
良くわかってません^^;
何か良い方法は無いものか考え中です。

ちなみにスクリプトの64行目と65行目を入れ替えると横揺れに変更出来ます^^
2007_11_141.jpg
PR
ここ一週間くらい、ずっとリプレイがずれる不具合の原因を考えていましたが
全く原因がわからなかったので、この問題は後回しにして次のステージを作製
していこうと思ったんですが、どうしても気になってしまい作業が捗りません。

なので、もう一度色々と考えてみて、なんとか修正できた(と思いたい)ので
Ver3.7として公開します↓
Solid State SURVIVOR Ver3.7(右クリック→対象をファイルに保存で保存して下さい。20M程度あります)
リプレイの修正のみでゲーム内容に変更はありません。

***ダウンロードして頂いた方へ**************************************
大変お手数なのですが私のリプレイファイルを入れていますので、よろしければ
一度再生してみて頂けませんでしょうか?
正確に再生されたとすると、ラストボスを撃破し20349929点(ハイスコアと同じ点数)
にて終了します。(エンディングは流れません)
その他、色々とネタばれしますのでご注意下さい。

このリプレイの録画環境は
開発マシン IBM ThinkPad R32(2658-MJJ)
OS Microsoft Windows 2000 SP4
CPU Mobile Pentium4 1.70Ghz
メモリ 512MB
ビデオ Mobility Radeon 16MB
DirectX DirectX 9.0c
となっています。
よろしくお願い致します。
************************************************************************

まず不具合の内容ですが、windows2000で録画したリプレイをwindowsXPで再生すると
リプレイがずれる。
その逆で、windowsXPで録画したリプレイをwindows2000で再生するとリプレイがずれる。
と言った内容でした。

同じプログラムを動かしているのになぜ???と非常に悩みました。
ランダムを使用しないプログラムを作ったり、プラグインを変えてみたり、HSPのバージョンを
変えてみたり、その他諸々・・・・・・
でも、やっぱりずれるんです。
リプレイのずれる原因なんて、ランダム要素の部分しかないやろ~と勝手に考えていたのに
見事に裏切られました。
2007_11_12.jpg
こんな感じでパソコン2台並べて、ずーっと考えてました(汗)

そうこうするうちに、一つ判ったことはver1.2ではずれないのにver2.0以降ではずれるって事です。
なので、ver1.2ではやってない事が原因だろうと思って、ver2.0が出来上がるまでの
過程のバックアップファイル(30個程度ありました)を一個づつ起動させて
リプレイとって2台のマシンで確認して~って作業を繰り返してやっと原因を発見しました^^

Ver2.0にする直前のファイルと比べると、あきらかに直前のファイルだとリプレイがずれないのに
ver2.0だとリプレイがずれます。
二つのファイルを見比べてみると、行数も同じでどこが違うんだ?と思って調べてみると
読み込む画像のファイル形式が違うだけでした。
具体的には、ver2.0はgifファイルを使用しているのですが、直前verではbmpファイルを
使用していたんです。

でも、まさかこんな事が原因やないやろ~と半信半疑でver2.0の画像ファイルをgifからbmp
に置き換えて見ると・・・
!!!
治った・・・
何故だかわかりませんが、ちゃんと再生されました。
家にある他のパソコンでも、ちゃんと再生されています^^
う~ん、どういう事なんでしょうかね?2000とXPでgifファイルの読み込み方が違うんでしょうか?
なんにせよ、これで治ったと思いたい。
もう、いい加減リプレイファイルを眺めるのも飽きました^^;

ココ最近、原因不明で突然落ちるという御報告を何件か頂いていました。
しかし私の環境では再現できず、原因がわからずじまいだったのですが
コメント欄にてハリコさんがTSSフォルダを削除すると、落ちるバグは発生しなかったと
御報告いただき、それならば試しに音楽をストリーム再生にしてみようかと思って
音楽の再生方法をOGGファイルによるストリーム再生に変更してみました。

Solid State SURVIVOR Ver3.6(右クリック→対象をファイルに保存で保存して下さい。20M程度あります)
内容はHSPコンテストに出した物と変更はありません。
今まで突然落ちるバグが発生していた方、大変お手数なのですが
このファイルを実行してみて、バグが発生するかどうか試してみて頂けませんでしょうか?
バグチェックさせているようで申し訳ないのですが、私の方では確認のしようがないので
藁にもすがる思いなんです。

で、音楽をストリーム再生しようと思ってまず思いついたのがMP3による再生です。
ですが、あまり詳しくはわからないのですが権利?著作権?か何かの関係でMP3の使用は
あまり好ましくないようで、MP3よりはOGGの方が権利などを気にせずに使用出来るようです。
そこで、HSP3.1に標準で付属しているHSPOGG.DLLを使ってみたのですが
どうやら、まだバグがあるようで上手くなったり鳴らなかったり、ループしたりしなかったりで
イマイチ使い勝手が良くありませんでした。

ここでフト思いました。wavファイルで再生させれば良いんじゃないかと。
で早速wavファイルを作成してみました。
TSSファイルをwavに変換するには、偽TCPを使うのが便利です。
2007_11_61.jpg
テキストをコピペして、ソフトの上で右クリックすると「wavファイルへ書き出し」と言う項目が
あるので、それをクリックすればwavファイルに変換してくれます^^
ですが、ここで生成されるwavファイルは44100Hz 32bitというちょっと変わった?ファイルで
普通のプレイヤーでは聴けない事が多いです。(実際、私も最初は聴けませんでした)

普通は44100Hz 16bitなので32bitから16bitに変換する必要があります。
この変換にはAudacityが便利です。
2007_11_62.jpg
私も今回はじめて知ったのですが、VSTプラグインにも対応しており
かなり使えそうなソフトだな~と思いました。
ちなみに変換は、波形表示の左側をクリックしてはサンプルファーマットを設定で変更出来ます。

で、無事普通に聴けるwavファイルにはなったのですが、全部使う曲を1ループ分録音しただけで
200Mくらい容量があります。
さすがにコレではアップ出来ないので、我慢の出来る限界ぎりぎりまで音質をさげてみました。
22050Hz 8bitにしてみたのですが、それでもまだ35Mくらいあり小さいとは言えません。
まぁ、とりあえず再生させてみようと思って、HSP DirectSound Extensionを使って再生
させてみたのですが、ここで問題が・・・

私の作った曲には殆ど前奏があります。再生の流れとしては前奏~Aメロ~Bメロ~サビ~Aメロに戻る
って感じにしたいのですが、そんな命令は見当たらず、どうすれば???となってしまいました。
ds_loopで検索してみるとリンク先のPlayLoud!!さんの所でds_loopの検証をされていました。
で、結局はds_getpを使用すれば、出来ない事はないが環境によってはループが上手く出来なかったり
ループポイントを指定するのも大変だったりと、イマイチしっくりこない感じ。

じゃぁいっそゲーム中に使う時間分のループを録音して、OGGで鳴らすしかないなぁ~って事になって
OGGに変換してみると、全体で18M程度しかない・・・って1ループのwavより全然小さい!
しかも、こっちの方が音質は良いし、これはOGGで演奏するしかない!ループとか考えなくてよい
ので楽だし(笑)と、良い事づくめに思えてきました。

ちなみにwavファイルの編集には定番のサウンドエンジンフリーがお勧め。
2007_11_63.jpg
とてもフリーとは思えないくらい高性能で、フェードイン、アウトやらエフェクト掛けたりとか
全体の音量変えたりとか、ループを増やしたりとか、やりたいと思った事は多分殆ど出来ます。

で、OGGを再生させようと思ってプラグインを探してみました。
その中で良さそうだったのがK-Kさん作の「Ogg Vorbis 再生プラグイン Ver 0.2  for HSP
なかでも、ds_tell命令(再生位置取得)とds_seek命令(再生位置指定)がよさげやな~と
思ったんですが、この命令は結局上手く動いてくれませんでした。残念。

ですが、OGGファイルの再生はバッチリできますのでご安心を。
でも、このDLLを導入するに当たってちょっと苦労したので、その辺を書いてみます。
まず、スクリプトの先頭に#include "ds_play.as"として導入するのですが、実行してみると
symbol in use in line 6とエラーが出て動きません。
なんでや?と思って調べてみると、どうやらdsoundex.asと競合?してるらしく
HSPフォルダのcommonにあるds_play.asとdsoundex.asを見比べてみると
おなじ関数を#funcしている部分があり、その部分が上手く動かない原因のようでした。
なので、その同じ部分の命令を書き換えると上手く動くようになりましたよ。
具体的にはds_initとds_playとds_stopとds_freeの新規名称を変更すればOK。

で、このDLLでOGGを再生する場合、メモリに読み込んで再生する方法と、演奏する時に
読み込んで再生する方法とがあるのですが、メモリに読み込んで再生させる方法だと
なぜか音飛びが発生してしまう場合があったので、再生時に読み込ませる方法にすれば
私のパソコンの場合はOKでした。
file0="title.ogg"
ds_open 0,file0
 if stat!=0 : dialog "ファイルが開けません",1:end
 ds_play 0,0
みたいにすれば再生されます。
ただ、他のパソコンでもちゃんと再生されるのかは不明なので、ちょっと不安ではあります^^;
(家のパソコンではちゃんと再生されましたが)
ストリーム再生の場合は、ステージ終了時にフェードアウトなんかも出来そうなので
これで、勝手に落ちるバグがなおるんだったら本格的にOGGに変更しようかな?と思っています。

そして、リプレイがずれる原因は、ここ数日悩んでますが未だわからず。
でも、以前公開したVerではずれないので、何が原因があるはずだと思って色々と試してるんですが
直らないんですよね・・・
このままだと先に進めない感じなので、とりあえずこの問題は置いといて、先を作って行こうかと
思っています^^;

先日HSPコンテスト2007のHSPTV部門(ショートプログラム部門)に出品した「blur」の
ソースファイルを公開して、来年も参加するかどうかはわかりませんが
忘れない為に、私なりに思いついた容量削除のポイントなんかを書いてみたいと思います。

ソースはこちら↓

HSP3.1使用 HSPTVがインストールされていないと動きません。

まず、このゲームは元々HPで公開していた物を改変していったものなのですが
最初の状態は、タイトルとゲーム画面で別々のループを使って動かしていました。
この方法でも問題なく動くのですが同じ記述を2回使わないといけない場所などもあり
もったいないので、一つのループで全てを終わらすように変更しました。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
それと、スクリプトの書き方でも削減できる書き方があります。
a=a+1
と書く場合は
a+=1
と書いた方が良い

a++
よりも
a+
の方が良い

mes ""+a+""
よりも
mes""+a
の方が良い

font "MS ゴシック"
よりも
font  "msgothic"
の方が良い。
さらにfont命令等の""を使う命令を沢山使う場合は
a= "msgothic"
font  a
と書いた方が良い

と言った感じでした(間違ってるかもしれませんが)
これらの方法は、あと数バイト減らしたいと思った時に有効です。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
あと
if a>10 : b=0
if a<10 : b=1
(aが10以上のときはbは0。aが10以下の時はbは1)
みたいな記述の場合は
if a>10 : b=0 : else : b=1
(aが10以上のときはbは0。そうでなければbは1)
という感じでelseを使うとまとめられます(elseはそうでなければという意味合いだと思います)
で、もっと言うとelseを使うんじゃなくて
b=1
if a>10 : b=0
(bは1。でもaが10以上の時はbは0)
と書けるようにスクリプトを考えるのが一番良いように思いました。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
表示する文字は日本語よりも英語の方が容量を削れる
スコアと書くよりもSCOREと書いた方が良いです。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
数字に置き換えれる変数は数字にする。
repeat a よりも
repeat 50 と書いた方が良い
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
省略出来る命令は、なるべく省略する。
color 0,0,0よりも
color ,,の方が良いです。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
最後に同じような記述の部分を探してまとめる。
blurの場合で言うと、敵弾処理の部分がそうだったんですが
弾の速さや移動方向が違うだけで、移動するスクリプト自体は同じような物なので
弾発射用のスクリプトを作って、変数で分岐させるようにしてまとめました。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
後、やっても無駄だったこと。
{}を::に置き換える。
変数の文字数を減らす。
苦労したわりに、まったく減りませんでした^^;

と言った感じです。色々と間違ってる可能性もあるので、間違っていたらゴメンナサイ。
しかし6000バイトってのは少ないですね。他の作品を見ると、どうやって動かしてるんだ?
と思うものばかりで、私などまだまだだな~と感じました。
でも、いかに6000バイトに収めるかってのは結構面白かったので、また来年も参加出来たら
良いな~と思っています^^
Solid State SURVIVORのりプレイがずれる原因は未だわからず。
音楽の再生方法をストリーム再生にしてみようと思って、HSPOGG.DLLを使ってみるも
ループしないはずなのにループしてしまったり、音が出なかったり、終了時もおかしかったりと
全く上手く行かずで、ちょっとテンション下がり気味です^^;

気分転換にHSPコンテスト2007で出品されていた2DSTGを色々と遊んでみたので
その中で気になったものを紹介してみたいと思います。

XED
s-WS000003.jpg
ゲームシステムはケイブ系の3ボタン(ショット、ボム、高速ショット&低速移動)で
ドット絵も良く書き込まれており、全体的にカッコイイです。
敵の弾幕、配置共に良く練りこまれており、難易度も難し過ぎずで、とても遊びやすい。
このコンテストの中の作品で一番はまりました^^
中でも、ボム的な武器のXEDが熱くて、一定の範囲内に入った敵弾を消去し、消去した弾の数だけ
ホーミングレーザーを打ち返す。と言ったシステムが導入されており
敵弾大量発生→XED発動→打ち返しホーミングレーザー発射→敵一掃→俺TUEEEEEEE!!!
って感じで熱く遊べます。音楽もカッコよくて個人的にはイチオシ。


新 BLUE FALCON -風雲竜虎編-
s-WS000011.jpg

こちらも操作方法は3ボタン(ショット、ボム、高速ショット)なのですが、このゲームには
コアブレイクというシステムがあり、敵を引き付けて倒すとコアブレイクが発動し
その倒した爆風で別の敵を倒し、連鎖でどんどん敵を倒して行く事が出来るようになっています。
このコアブレイクがとても爽快で楽しいです^^ちょっと爆風が見にくいのが難点かな?


鳥竜-ToriTatsu-
s-WS000006.jpg

こちらもゲームシステムはケイブ系の3ボタン(ショット、ボム、高速ショット)でおそらく
ケツイを意識したであろうグネグネ弾幕が、これでもかってくらい襲ってきます。
しかも大量に弾を撃っているにもかかわらず、動作も軽くてHSPでもこんなに弾撃てるんやな~
と感心しました。
Solid State SURVIVORの場合だと300発程度の敵弾を撃つと私のパソコンの場合
FPSが落ちだすのですが、このゲームはもっと弾を撃っても大丈夫な感じでした。


WINGLANCER (HSPLet version)
s-WS000013.jpg

リンク先のZAPさんの作品。過去に発表されたタイトルのHSPLet移植バージョンです。
なつかしの8bit機を思い出すグラフィック&音楽でシンプルに楽しめます。
たまーに、思いだしたようにプレイしたくなるんですよね~。
このバージョンの音楽はストリーム再生のようですが、本家?の方はTSS使用による
PSGサウンド再生なのですが、非常にカッコよくてお勧めです^^


VENOM STRIKE
s-WS000008.jpg

こちらも往年の8bit機を思い出すグラフィックが良い感じです。
1ステージがあまり長くないのでサクサク遊べるのが良い感じなのですが
私のパソコンだと、なぜかFPSが30~40程度しか出ず普通にプレイ出来なかったのが
残念でした。


ABOGADRO改
s-WS000015.jpg
こちらはショット+ボムの2ボタン操作で、各ステージの間隔が短いので
サクサク遊べるのですが、難易度は高く何度も挑戦してクリアしていく感じです。
この作者さんのサイトにはHSP講座があるのですが、とても詳しく解説されていて
私も何度もお世話になっています^^


SpaceJapper(体験版)
s-WS000002.jpg
こちらは、十字キー+3ボタン操作(メイン武器、サブ武器、武器切り替え)なのですが
この武器切り替えシステムが面白くて、装備する場所や個数によって攻撃方法が変わる
システムになっており、また弾数も決まっているのでアイテムを補給しつつ色んな武器で
攻撃って感じが楽しいです。なんとなくアインハンダーみたいな感じがしました。
体験版なので仕方ないですが、1面しかないのが残念でした。


GARUDA
s-WS000001.jpg
コチラはショートプログラム部門から。
このゲーム、敵キャラのデザインはしっかりしてるわ、多間接キャラがグリグリ動くわ
効果音も鳴るわで、一体どうやってプログラムしてるんだ???と非常に感心しました。
とても6000バイトで作れる感じじゃ無いんですが、一体どうやってるんでしょうねぇ・・・


それと2DSTGじゃないですが、とても感動したので紹介。
Another Bound
s-WS000016.jpg
バイオハザードのようなFPSゲームなのですが、HSPでもここまで出来るのか!
と非常に感動しました^^
私のパソコンのような低いスペックのマシンでもサクサク動きますし
操作方法もとっつきやすく、音楽もゲームにマッチしていて文句のつけようがありません。
普段、FPSゲームは殆どプレイしませんが、とりあえず軽くプレイするつもりが
1~2時間くらいずっとプレイしていました。
たぶん、このゲームが最優秀賞を受賞するんじゃないかと思うくらい完成度の高いゲームです。

他にも色々とあったんですが、きりが無いのでこの辺で終わります^^

Twitter
カレンダー
03 2025/04 05
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 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]