「RPG±0」に関する日記

次>

100倍速くなる!!

RPG±0、どうしようか悩んでます。
正直、ずっと前からVBじゃ手に終えなくなりそうな気がしてならなかったんですよ。
VBじゃポインタが使えないし、オブジェクト指向も中途半端で扱いにくいし、そもそも遅いし、あまりいいことがなさそうな気がしてたんですよ。
しかし、だからといって全くできないわけでもないんですよね。
このままVBで押し通すか、それとも別の言語で1から作り直すか、いずれにしても具体的な実現方法を考えないことには始まらないんですよね。
とにかく、いけるかどうか判断できないことには中止も続行もできません。

NeoMupl進めてみました。
曲数が多くなるとリストの読み書きが異常に遅くなるのでその対策を。
2500曲程度で最低7秒かかるみたいなんですよね。
前のアルゴリズムだと処理時間がO(n2)なので5000曲あれば約30秒かかる計算になります。
気の長い人なら待てないこともなさそうですがやっぱり遅いものは遅いです。
そこで、ファイルの内容がINIに近いのでINIファイル関連のAPIを使ってみたのですが、結果はというと惨敗。
以前の方式と比べて、1項目編集するたびにファイルの読み書きが入るので一つ一つの動作が半端じゃなく遅いんですよ。
しかも毎回項目を探すから処理時間のオーダーは変わらずO(n2)となるはずです。
たとえもっと効率がよかったとしても、同じ2500曲で50秒以上というのはいくらなんでも時間掛けすぎです。
さすがに気の長い人でも待ちきれません。
そこでしぶしぶ汎用の読み書きクラスを使うのをやめて、使いまわしの効かない専用のコードを書いてみたのですが、これがすごくて…。
さっきと同じ条件でなんと書き込み時間70ミリ秒ですよ!!!
全く誇張なしで100倍速いんです!!!
しかも処理時間のオーダーはO(n)なので、データが2倍になれば前より更に2倍効率がよくなるんです!!!
もう!こうなるとわかってりゃあんな使いまわしは効くけど遅いクラスなんて作ってなかったのに!!
そうそう、今日作ったのは書き出しだけで中途半端なので最新版アップはなしです。

番号と名前

RPG±0にはRPGツクールのオートタイルは使わないことにしました。
最大の理由は、作り方がわからない&面倒くさいということだけれど、ほかにも、実際のところエンターブレインが特許を取っているかもしれないし、そうでなくてもあからさまに方法をパクっているもあるので。
あと、RPG±0ではいろんなものに名前をつけることができます。
例えばイベントに名前をつけたり、キャラクタチップに名前をつけたり、サウンドに名前をつけたり、敵パーティにまで名前を付けられたりします。
デフォルトネームは通し番号と同じものをつけます。

ふにゃさんのBGMは、パネルγのときのように色々面白い仕掛けを入れようと思っていたのですが、いや、今も入れるつもりですが、ゲームプレイ中にBGMを切ったりユーザーが自由に変えられるBGMに切り替えたりできるようにするつもりなので、切り替えたそのときにどのBGMが再生されているかを保持しておかなくてはならなくて、結局それはBGM番号であり、どっちみちBGMは番号で管理することになりそうです。
そりゃ番号をつけるということ自体はパネルγでも同じことですが、こちらはゲーム本体ではサウンド管理クラスにパネルが消えたとか今ピンチだとか、そういうことを通知してサウンド管理クラス側で番号を決めていたのですが、ふにゃさんの場合はそれを通知する側で決めてやら無ければならないということです。
そうなればユーザー指定のBGMとも互換性を図るためBGMはある程度決まった簡単な方式で作らなければならないので、あんまり特殊なことはできなくなるのです。

データベース使えず

GChat、phpMyAdminで仮のデータをいくつか入れて、とりあえずmySQLに接続するだけのコードを書いて、いざ接続!と思ったら、あんたのサーバーからは接続させてやらん、とのデータベースサーバー様の仰せだったので、ローカルテストのときのデータベース利用は諦めることに。
本当は自分のコンピュータにもmySQL入れればいいんだけど、もうこれ以上面倒なものをインストールしたくなかったし、今までどおり普通のファイルでも一応実現はできるので、早々と従来の方式に切り替えてしまいました。
まあ、仮で入れてみたデータで、必要そうなデータは大体分かったので、一応意味はあったものと思います。

RPG±0、マップチップのサイズも自由にして欲しいとの意見があったので、それに対応するためデータ形式とインターフェースを全面的に作り直すことにしました。
まあ、インターフェースに関しては既に作り直す気になっていたのでちょうどいい機会です。

ふにゃさんのBGMはちまちまと作り続けています。
サブメロディも入れてみたり。消すけど。

1125498071.mid

スコア報告用ページほぼ完成

アクセス解析してみたら、8月のアクセス数が先月から倍増していました。
8月はアキタラヤメル企画でいろいろやっていたもんで、夏休みということもあってずいぶん伸びたんだと思います。
こういう月があると次の月が怖かったりしますが。

パネルγのランキング、報告ページの作成はできました。
鍵生成に使う乱数の精度が悪かったので、ちょっと補正をしてやらねばなりませんでした。
しかしそのおかげで以前よりはずっとマシな報告スタイルになったと思います。
あとはこれを受け取るCGIさえ完成すれば…。

ふにゃさんのBGMを引き続き作っていました。
とはいっても、出だしの部分にちょっと手を加えただけです。

RPG±0、要望があって、世界地図に対応することになりました。
少し難しそうですが、マップごとに世界地図のどこに当たるかなどの情報を記録すればできそうです。
そして、キャラクターシステム。
パーティ編成とかはどうしようかと考えたのですけれども、どうもイベントやら何やらと絡めて考えるとどのキャラクターも、そう、主人公から村人に至るまで、全部同じ方法で取り扱えば、私にもRPG作者にも優しいシステムになると思うんですよ。
A君のマップチップに話しかけると間違えてB君の顔グラフィックが出ちゃったなんて事も防げると思うんですよ。
まだいろいろありそうなので詳しくはまた後日。

1125413337.mid

簡単エディタ

ふにゃふにゃのページを更新しました。
開発メモ。どうやら以前のエディタは難しすぎてエディタ作者自身にも手に負えない代物だったようで、以前の何でもできるエディタは残しつつも、新しい簡易エディタを作ることにしました。

  1. ペイントの鉛筆ツールで曲線を描くかのごとく自由で簡単で直感的な直線生成
  2. ドラッグ&ドロップで置きたい場所に置ける画像
  3. 必要なファイルは全部ステージファイル一つに埋め込み、最低限動作に必要なファイルを極力減らす
  4. エクスプローラからドラッグ&ドロップで勝手に背景としてインポートされる一枚絵
  5. その他必要なファイルはインポートできるようにする。インポートしたファイルは関連付けられたプログラムで開く
  6. いろいろあった設定は必要最低限まで減らす。あとは自動設定
  7. 当然の如く用意されるすり抜け防止策
  8. ステージ作者が最初に使いたがるだろう機能をコンパクトにまとめたツールボックス
  9. ステージ作者を困惑から救う優れたヘルプシステム
だいたい開発理念はこんなもの。

そして、Bomber丸Worldのページも更新。
戦闘画面がついに出ました。
イメージ画像ですけど。
なかなか面白いことになっていますよ。

そんでもって、RPG±0、さしあたり自分で不便に思っていた右クリックの挙動を統一。
スポイト機能と右クリックメニュー、両方一気に実行されます。

チャットの人工無能ちゃん、以前のようにファイルに入れておくよりも、mySQLのデータベースに入れておいたほうが管理しやすいと思ったので、mySQLを勉強し始めました。
とりあえずphpMyAdminの使い方を思い出しつつどんなデータがどう使われるのかを覚えていきます。

ふにゃさんは今日はBGMを作成中。
先日言っていた違和感はほぼ取れたように感じます。
メロディ以外のパートは修正するときの補助のために入れた音で、後ではずすかもしれません。

1125326932.mid

アラビアン

ミスター・フレーム、作りました。
最初は敵クラスとふにゃクラスの多重継承で作っていたのですが、それが大失敗で、無駄且つ危険な拡張性の高いコードを残して多重継承によるミスター・フレームは消え去りました。
ミスター・フレームはふにゃの動きを模倣するということで、お手本となるふにゃを内部的に持ち、位置や状態などはお手本からコピーすることになりました。
お手本が死んじゃったら、遅れてミスター・フレームも死にます。

カービィのエアライドの、ウエライド:砂のMIDIを作ってみました。
作りかけなんですがゲーム記のところにアップしておきました。

PRG±0、意見をもらって、とりあえず需要ができたので、作る優先順位を上げることにしました。
半年以内にできたらいいな。
一応、作る予定のところをリニューアルして書き直してみました。

1125240329.png

12音階

毎度毎度のことだけどレポートが…。
今回は連休だったこともあり、いつも以上に…だらけてました。
反省すればするほど悪くなるってどうなのよ。

昨日書き忘れていましたが、変数の値を近づけるテンプレートというのを作りました。
例えば地面との動摩擦力の場合、動摩擦力は速度が0に向かう方向に一定値かかるため、正の速度を持っている場合は一定値減じて、負の場合は増やして、となるのですが、速度が小さくなるとそれが行き過ぎてしまうためその場合は0にしなければならないのですが、これが簡単だけどあまりによく使う処理だから一つ一つ書くのが面倒だし、可読性も圧倒的に落ちるし、ということで、テンプレートが使われる典型的パターンと踏んで作ってみました。

RPG±0、タイトルくらいは表示できるようにしようとファイル読み込みを作っていたら、ファイルセレクト機能がないことに気付き、ファイルセレクト機能を実現するため入力を作ろうとしたのですがDirectInputはいじったことがないためわからず結局のところタイトル画像をやる気のない画像に差し替えただけにとどまりました。

今日は12音階音楽。
作り方があるそうなのでそれにしたがって作ってみました。
まずド~シまでの12音を平等に使ったメロディを作る。
音の高さ関係をひっくり返したものとタイミングをひっくり返したものを作る機械的作業。
半音ずつずらしてそれぞれ12段階のバリエーションを作る。
できた48の旋律を組み合わせてそれを発展させていって音楽として完成させていく。
今回は最初の2段階だけで作ったものです。
ノート以外のイベントは一切入っていないので前のMIDIの影響をもろに受けて変化します。

1121697082.mid

ゆびきった!

MIDIAPでとにかく早く音を鳴らしたいと思って適当なコードを書いたら全然動いてくれませんでした。
いろいろ試したんだけどやり方がまずかったのか…。
もうちっと詳しく調べておきます。

PRG±0Editで、タイトルウィンドウを閉じたときの挙動がおかしかったので修正しました。
本当はキャラクターの設定でも作りたかったんだけど面倒で…。

Bomber丸WorldのBGMのページを更新しました。
海辺の町と基本テーマを新たに追加。
密林ダンジョンボスと地下ダンジョンボス2をバージョンアップしました。
基本テーマは実は途中で転調してたりします。
途中で短調になってる部分があるけど、ああいうのってメロディックマイナースケールっていうのかな。
メロディックマイナースケールなんてわかりっこねえって思ってたけど結構自然に入れちゃってたんだな、と。
形式が先にあって音楽がそれにあわせて作られるんじゃなくて、まるっきり逆なのね…。

昔買って今は動かないゲーム&ウォッチ風のゲームを分解していたらガラスで指を切りました。
別に表皮だけなんで血は出ませんでしたが、なんとなく目をこすったら手に付いた油が…。

RPGツクール

久々にRPG±0のページを更新。
さて、これでシステムを見直す必要が出てきました。
RPGツクール体験版をインストールしたんで参考にしてみました。
ツールの作り手ではなく使い手として触れるのは自分のソフトでは不可能だったので今まで見えていなかった部分が見えてきたような気がします。

Bomber丸Worldのページも更新。
キャラと文化的背景が増えてます。

パネルγのプラクティス4を作ろうかと思ったのですが、めんどくさそうでやる気が萎えて結局何もせず。

ウィンドウ

パネルγでやったことと同じことをPRG±0でも。
ウィンドウをクリップしてウィンドウモードでウィンドウを動かしてもウィンドウの位置に合わせた位置に正しくウィンドウ内に収まるようにウィンドウにウィンドウの内容を表示できるようになりました。
さらに保存してあるデータのタイトル画面を表示できるようにもしてみたかったんだけど面倒だったんで後回し。

パネルγの動作チェックも。
空中で素早くパネルを揃えることにより脅威の空中消しが!
例によって得点は変わりませんが。

またもマテリアル

随分と久しぶりですがRPG±0、やりましたよ。
ええ、弟から不満が出ていたマップのスクロールをスクロールバーでより直感的に、よりWindowsらしく操作できるようになりましたよ。
ついでに起動時の標準で出るウィンドウをマップウィンドウだけにしました。
で、敵キャラのこともそろそろ考えようかとも思ったのですが、キャラグラフィックを作るのが面倒だったのでフリー素材を探してみたのですが、どうもこの辺は作者の個性が出るところらしく、使いまわしの利くフリー素材として提供されているものはごく少数でした。

ごちゃごちゃ

レポートやっとりました。
計器がごちゃごちゃしてわかりにくいけど原理や結果は簡単なので普段よりは楽にできそうな気がして、その分だらけて、結局間に合わないような気がしてならないので、急いで終わらせたいのですが、まだデータ整理だけでほとんど終わらず。

掲示板に自前のスタールシートを使ってみました。
元々blockquoteでインデントしていたりしているようなHTMLだったのでスタイル指定の違いによる見た目の変化を抑えるためいろいろとタグを補ったり削ったりもしました。

そういえば「RPG±0」最近触ってないけどこれも時々いじってやらないと忘れてしまうかもしれないのでそろそろ開発再開しなければと思っています。

HP作成論を更新しました。
HPM時代のもののログを手直しして書いただけなので更新履歴には入れていません。

いろいろやってみる日

「RPG±0」のイベント編集で、機能拡張にあわせて編集画面を出す処理を変えなかったために編集できないようになっていたのを修正しました。
今後はマップ間移動の処理を作ろうかと思っています。

Q&Aのページを自己紹介のCGIと同じ方式にしました。
見た目はともかくこっちのほうが管理しやすいのでこちらにしました。

アクセスログを回収しました。
とりあえず先月は新たなリンクはなし、yahooがいまだにHPMに人を招き入れている、403エラーは想定しているもの以外は特にない模様。
ダウンロード数は微妙に減りましたが好調です。

日記過去ログの11月分とゲーム紹介のページを更新しました。
メトロイドやらFFCCやらマリオ64をやりつつCGIとかゲームとか作っています。

弟の友達が来てスマブラをやった模様。
どうでもいいけど。

明日か明後日あたりByteEditをアップします。

ガベージコレクタ

アクセスログ回収。
403エラーが増えてました。
わざとですけどね。

「RPG±0」で、DirectMusicを使えるところまで作りました。
そして、64個のサウンド+ミュージックのバッファも。
最初はObject型かVariant型の配列64個を作って両方に対応するつもりでしたが、型判別が面倒臭そうだし、自動メンバ表示が出てこないので、DirectSoundBufferとDirectMusicSegmentの両方を64個用意し、どちらを使うかを判別するための変数も64個。
どうせCreateしない限りは大してメモリを使わないんだし、変数が64個から192個になったってそう変わるものではないでしょう。
終了処理では、オブジェクトの実態の有無とは関係なしに片っ端からNothingにしています。
この辺ガベージコレクタが働いてくれてるのでCなどのようにNULLじゃなければ解放とかそんなまどろっこしいことはせずに済んで楽チンです。

アクティブウィンドウ

「RPG±0」で、DirectMusic&Soundの処理を作ろうとしていたのですが、そのためにはデバッグのためウィンドウを切り替えたりすることが必要となってきたので、先にウィンドウ切り替え処理、つまり、DirectDrawのウィンドウモードでの使用(こちらはとっくの昔に実装済み)と非アクティブのときに他のウィンドウを支障なく操作できるようにするような処理を作りました。
「ふにゃふにゃ」の時には非アクティブの検出にはWindowsからメッセージを受け取ってそれで判別していましたが、VBではそんなこと(めんどくさくて)できないので、GetForegroundWindowがメインウィンドウのhWndでなかったら一致するまでずっとWhileでDoEventsだけの空ループを回すという仕様にしました。
空ループを回す前後に音楽や効果音などの中断処理を入れれば完璧なのですが、上と同じく面倒なのでそんなことはしません。
一応、サウンド処理自体もDirectSoundクラスを生成するところぐらいはできています。

マスターテンポ

「真面目にDirectX」を書くのと「RPG±0」を作るためにDirectX7のマニュアルを見ていて、DirectMusicの基本的なところを読み返していたら、偶然C++のSetMaster~関連の記述を見つけました。
VBのSetMaster~関連の関数はC++用には見つからなかったのでVB特有の機能だと思っていたのですが、どうやらSetGlobalParamでGUIDを設定することにより可能なようです。
本当は「RPG±0」のほうと作る予定だったのですが、C++でのSetMasterTempoを試すため、「DirectMusicPlayer」のほうに変更を加えました。

やごの日

ドラクエ5やってました。
ダメージはあんまり受けないけどマホトラやら不思議な踊りのせいで見る見るうちにMPが失われていきます。
砂浜で敵と戦うとトロピカルな雰囲気になります。
トンネラーは土偶戦士を呼びまくって経験値の源泉になっています。
笑い袋×2+ホイミスライム×3+死神兵×1の組み合わせだとメダパニ+仲間呼び+ホイミ+毒でかなり苦戦させられます。
毒はともかくやっぱりメダパニ最強。

「RPG±0」で、イベント画面に表示されるイベントをわかりやすくしました。
「コマンド名 パラメータ1 パラメータ2 …」という表示を、わかりやすい日本語表記にしたのです。
「会話 しんいち バーロー。」だと、「しんいち『バーロー。』」てな感じでセリフっぽくなります。

日記の9月分のログをアップしました。
よく見るとスタイルシートを使っていたりタイトルが変更になっていたりします。

さむいさむいマウンテン

「BZ」というバイナリエディタをダウンロードしてきました。
まあまあ使いやすいけど、すごいってほどでもない。
ビットマップ表示はいまいち使えない。
基本的な読み書きは支障なくできるし楽。
置換ができない。
「ByteEdit」はこの「BZ」にない機能を重点的に作っていこうかと思っています。
バイト列置換、数値の出現頻度解析など。

で、「BZ」で「ふにゃ」を開いて、音楽ダイアログの部分を直接書き換えて、MP3も表示できるようにしました。
「BZ」の話はここまで。
そのあと、前からやろうと思っていた、氷のステージ全体マップを、作ってみました。
大きなマップも扱えるマップエディタとして、「RPG±0」が適当(1023x1023チップまで)だったので、テキストを出力できるように少し改造してから、全部のステージを入れてみました。
半端じゃなくでかいです。
マップチップ数にして298x54、幅9536ピクセル、高さ1728ピクセル、16色ビットマップで保存すると8MB、実際の大きさに換算すると90m前後、人間の大きさに換算すると500mを超えます。
山としては物足りないにしても、バナナを探すのには巨大です。
そういうことで、「RPG±0」のテキスト出力でできたものを加工して、HTML形式でアップしてみました(240KB)。
あと、これを作っているときにマップの構造に矛盾点が見つかったので、直しておきました。

制作予定

「RPG±0」と「ふにゃさん」のページを更新しました。
制作予定を追加しました。

「ふにゃさん」は320x240のやや狭い画面で作りますが、ふにゃだったらこの程度で充分でしょう。
640x480なんて解像度なんてふにゃには過ぎた広さです(320x240だってスーファミよりは解像度高いわけですし)。
あと、ウィンドウモードとフルスクリーンモードを用意して、ウィンドウモードではある程度GUIで操作できるようにしようと思っています。
最近のパソコンゲームは変にファミコンやプレステを真似をしているような気がしてならないのです。
なぜああいうゲームはWindowsの便利なGUIを捨てようとするのでしょうか。
まあそんなことどうだっていいんですけど。

「RPG±0」は全く進んでいませんね、ずっと前から。
「Bomber丸World」より先に完成させなきゃならないんですが…

ももももも~

リンク集をリニューアルしました。
CGIを使うことによって、デザインを統一することができ、バナーが複数あるところではその中からランダムで表示されます。
将来的には、管理モードから簡単にリンクを追加する方法、リンク報告フォーム(もしかして、いらない?)、検索機能(これがやりたくてCGIにした)を付けようと思っています。
で、そのついでに、あるサイトをリンクに追加しました。
が、見えません。
たまにはいいじゃありませんか。
実は意外なところで見つかるのですが。
ちなみに、掲示板一言PRの良いところは、書きたいことがたくさんあるサイトに対してはたくさんのコメントを書けるのですが、常に表示されるのが一言だけで、しかもどのサイトの紹介も出現確率が一定であるので、表面上はみんな平等に扱っているように見えるのです。
ちなみに、まれに一言PRが表示されないこともありますが、これは、PRするべきではない、つまり、閉鎖・停止中のサイトが選ばれたために表示されないということです。

「RPG±0」のページを更新しました。
現在の制作状況を簡単に書いています。
エディタはまあまあ進んでるけどプレイヤーはさっぱり。

次>