Dante98とかのページ
![]()
ワイド画面のPC等でDanteWinが起動できないバグを修正するパッチ(Ver.2.0.1.10専用)を作りました。
DanteWinのフォルダに展開して一回だけ実行してください。
久々更新。9ヶ月ぶり。
いろいろあって、激しくやる気なし。さらにGUIに凝りだしたら、ちっとも進まなくなった。
(win32gui、超Cooool!)
とりあえず、現状のコマンドライン版に簡易インストールチェックを追加したものを公開してみる。
さらに、某所に影響されてこんなものを書いてみる。
EBから回答があった。結果は概ね良好。
コンバートはOK、編集はNGとのこと。
あと、利用者をRPGXPユーザーに限定して欲しいそうだ。
つーことで、こんな感じになる予定。
権利関係を考えてると、どうにもモチベーションが上がらんので、
思い切ってEBに問い合わせてみた。
返答を待って開発再開といきませう。
11月頭に休みが取れそうなんで、一気に仕上げるつもり。
さらに2週間進展なし。
何をやっていたかと言うと、、、、しくしく、お仕事です。
ゲームショウ
もビジネスデーに行けなかったので、自費で明日行くことに。
例によって、B・A・R
の帽子をかぶっていきます。
これだけでは、なんなので、スクリーンショットを1枚追加。
ウィンドウのスキンも変えてみたり。
ほぼデフォルトのまま。「すばやさ」が増えてるくらいか。
アイテムの説明は考え中。DARK FORCEだと店員の解説からパクれそう。
予想通り、1週間ほぼ進展なし。
ただ、何もしてなかったんじゃなくて、公開方法を検討してみたり。
ここでちょっと方針転換。
そもそも自分としてはコンバートするだけで
ゲームとして遊べるものを考えていたんだけど、
それだとRPGツクールXPの規約に抵触する気がしてきた。
(RPGツクールXPで作った作品ではなくなるので)
で、考えました。
素材のコンバートは問題ないはずで、
マップやイベントだって広義的に捉えれば素材だろう。
要はエディタでちょいと手を加えてやれば、
「RPGツクールXPで作った」と言い張れるんじゃないかと。
ちょいと苦しいですかねぇ。
いっそのこと画像のコンバート以外は
RPGツクールXP(で作ったゲーム)で作りますかね。
それなら「RPGツクールXPで作った」ことになりますから。
まぁ、ほとんどの場合、権利表記したり、
原作がDante98であることを知らせる必要があるので、
実際は多少手を入れるとは思うけど。
現実的なところで、とりあえず個人利用に限って
コンバーターを配布するかな。
あと「Scripts.rxdataからrbファイルを取り出すプログラム」は、
よく考えると非常にヤバ気だったので消しました。
フォーマットばらしちゃったので、あんまし意味ないですが。
セーブデータ変換ツール完成。試しにコンバートしてみる。
動いてるっぽい。
逆変換ツールも完成したら、テストプレイしながら調整作業に入るかな。
やっぱ、その前に一旦ソースを整理しようっと。
このページもいい加減整理しないと、、、。
トップページにVGA超の画像を何枚も貼ってるのはさすがにマズい。
まだ実装していないものリスト(とりあえず思いつくものだけ)
今週はCEDEC
で忙しいので(終わったら即、仕事)、さらにペース落ちそう。
F1のBARホンダ
の帽子(白地に側面が黒)をかぶっていくので、見かけたら声をかけてください。
RGSSのウィンドウハンドルを取得するDLL修正。
呼び出し規約が__cdeclになってた。
引数がないので__stdcallと変わらないと思うけど一応修正。
ようやくまともな戦闘ができるようになった。
たべ五郎の周りはちゃんと光りまっせ。
MMLMusicを組み込むとセーブでクラッシュするので、
とりあえずRPGツクール95からDante98のMIDIをパクってやってます。
BGM42に対応するMIDIがないっぽい。なぜ?
Dante98 for Windowsに重大バグ発見。
(「あるがまま」のコードです。細かいことは気にしないでください。)
int __fastcall TD98Character::GetDefense(void) const
{
return FAttack;
}
防御力が攻撃力になってるよ~。ゲームバランスが違うのも当然か、、、。
多分1バイト書き換えたら直ると思う。修正パッチ作るかなぁ。
調査の結果、意味なしコードと判明。
派生クラスで上書きされてて、誰も呼んでない。<ぉ
一応、アドレス0x0000D07Eを0x14->0x18に書き換えたら直ります。
意味ないけど。
エネミー、トループのコンバート終了。
パラメータが限界値越えてるせいで、エディタで編集できん、、、。
エディタの範囲チェック全部はずしてください>EB。
UTF8サンプル修正。
そもそも終端NULL文字をつけなくてよろしい。
MMLMusic.dll使用するとセーブするときにクラッシュする怪現象発生。
せっかくBGM再生できたのに。
現実逃避で
RGSSのウィンドウハンドルを取得するDLLを作ってみた。
FindWindowよりかは正確なはず。
同じゲームを複数起動しても大丈夫なんですってよ、奥さん。
以下、お試しコード
FindRgssWindow = Win32API.new('FindRgssWindow.dll', 'FindRgssWindow', 'v', 'l')
# ウィンドウハンドルの値を表示
p FindRgssWindow.call()
現実逃避その2。
エディタ画像もアップ可とのことなので
イベント編集画面を置いてみる。
エディタから修正可能なようにコンバートしてるところがミソ。
ツクールWeb
にてRGSS100J.dll先行公開版(Ver.1.00a)が公開された。
(2004/08/21:リンク先修正)
Win32API使えたのね、、、。
MMLMusic.dllを使えないか模索中。
UTF8なRPGXPのためにサンプルを載せてみる。
# MultiByteToWideChar/WideCharToMultiByteの定義(抜粋)
CP_ACP = 0
CP_UTF8 = 65001
MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
# MessageBoxAの定義(抜粋)
MB_OK = 0x00000000
MessageBoxA = Win32API.new('user32', 'MessageBoxA', 'lppi', 'i')
# UTF8 -> UTF16
text = 'テキスト';
len = MultiByteToWideChar.call(CP_UTF8, 0, text, text.size, nil, 0);
buf = "\0" * (len*2)
len = MultiByteToWideChar.call(CP_UTF8, 0, text, text.size, buf, buf.size/2);
# UTF16 -> Shift-JIS(というか現在のコードページ)
len = WideCharToMultiByte.call(CP_ACP, 0, buf, buf.size/2, nil, 0, nil, nil);
buf2 = "\0" * len
len = WideCharToMultiByte.call(CP_ACP, 0, buf, buf.size/2, buf2, buf2.size, nil, nil);
# Shift-JIS文字列にASCII文字列を繋げるのはOK
buf2 += 'abc';
# Shift-JIS文字列にUTF-8文字列を繋げるのはNG
#buf2 += 'あいうえお';
# 表示
MessageBoxA.call(0, buf2, "title", MB_OK)
まぁ、適当に関数かクラスにして下さい。
追記:とりあえずMML再生成功しました。
エネミー画像変換ツール作成。
ついでにタイルセット変換ツール
も16色PNGを吐き出すように修正。
バトル以外は実装できたっぽい。
BGMは某氏からもらったMMLコンバータで作ったMIDを突っ込む。
効果音はRTPの中から似たものをチョイス。
BGMのループを修正せねば。
なんとか
MMLMusic.dllを呼び出せないか思案していたところ、
外部プログラムとファイルを使って通信する方法を思いついた。
試しにファイルの更新を監視して、
更新されたら内容を表示するプログラムを作って実験。
BGM/SEぐらいならなんとかなりそう。
そうそう、テレポート用に変数追加。
| 番号 | 内容 |
|---|---|
| 3 | テレポート先:マップ ID |
| 4 | テレポート先:X 座標 |
| 5 | テレポート先:Y 座標 |
今日実装したコマンド
宿屋はXPのマニュアルと同じくコモンイベントで実装。
現時点でのスイッチ、変数の使い方は次の通り。
| 番号 | 内容 |
|---|---|
| 1~200 | 通常のスイッチ |
| 201~400 | アイテム所持フラグ用擬似スイッチ |
| 401~600 | 武器所持フラグ用擬似スイッチ |
| 601~800 | 防具所持フラグ用擬似スイッチ |
| 801~820 | パーティー参加フラグ用擬似スイッチ |
| 番号 | 内容 |
|---|---|
| 1 | ゴールド参照用擬似変数 |
| 2 | 宿泊料金 |
そこそこ動くようになった。 ルテナスオーブならプレイできるかも。
これまでに実装したコマンド
「セルフスイッチ」作戦でイベント条件のみコンバートしてみた。
結果、1マップ200KB超のサイズに、、、。
やっぱ単純なイベントはうまく圧縮しないと厳しそう。
キャラクター画像変換ツール
やっぱバグってました。
アニメーションの順番、64番以降の画像を修正。
直接PNG吐くように変えました。
メッセージコマンドをコンバートしたので試してみた。
がーん。顔グラが欠けてる、、、。 セルフスイッチ作戦ダメかも。
イベント条件の数を勝手に増やして(スイッチ最大10個)もう1回。
エディタで弄れなくなるけど、しゃーないね。
どーでもいいけど、XPになっても名前は変更できません。
イベント条件はなんとかなりそう。
前と逆の発想で「セルフスイッチ」のみで実現する。
アイテム、武器、防具のコンバートとりあえず版ができた。
いよいよ、イベントのコンバート開始。
XPにはイベントの条件に「アイテム所持」がなくて、いきなり詰まる。
スイッチ201番以降をアイテム所持しているかどうかのフラグに
割り当てることにするかな。
アイテム数とフラグを同期すると面倒なので、
スイッチを参照する部分を直接修正する方向で。
アイテム、武器、防具が分かれてるのでちと面倒。
ようやくアイテムの有無をスイッチで参照できるようになった。
と、ここで重要なことに気が付いた。イベント条件の数が足りん!
RPGXPのイベント条件は「スイッチ」×2、「変数」、
「セルフスイッチ」の4つ。
対してDante98は「所持アイテム」、「パーティー参加キャラ」、
「ゲーム進行スイッチ」、「所持金」の4つ。
「所持金」は変数に割り当てるとして、
「パーティー参加キャラ」は「セルフスイッチ」で表現するの無理でしょ。
どーすっかなぁ。
Dante98のコンバートが終わったら2000もやってみますかね。
CDを実家に置いてきてしまったみたいなのでVALUE版を買ってきました。
ついでに、「恋愛シミュレーションツクール2」も買ってみた。
これに付いてるキャラクターモンタージュ機能が前から気になってたので。
でも、これ、素材が少なすぎてあんまし使えませんね。
素材作りの手助けをしている唯一のツクールだけにもったいない。
なんで「アドベンチャーツクール」じゃないんだろう。
ジャンルにこだわらずいろんな素材が欲しいところ。
助けて!バーチャルファイブ!レッツ、コンパイル!
Arrayじゃなくて、Tableだった、、、。 あと0次元のTableも作れない。しょうもない修正。
Tableのサイズ書き間違えてました。修正。
アクターのコンバート完了。経験値はスクリプトに埋め込むかな。
TableクラスのMarshalで躓いてる人が多いみたいなので、
フォーマットを書いてみます。
_dump、_load が定義されているので他のデータとちょっと違います。
(07/30修正)
| 型 | 内容 |
|---|---|
| ヘッダ | 'u' |
| Symbol | Table |
| Fixnum | データのサイズ (符号付き4バイト整数×5 + 符号付き2バイト整数×(xsize×ysize×zsize)) |
| 符号付き4バイト整数(リトルエンディアン) | 次元数(1~3) |
| 符号付き4バイト整数(リトルエンディアン) | xsize |
| 符号付き4バイト整数(リトルエンディアン) | ysize |
| 符号付き4バイト整数(リトルエンディアン) | zsize |
| 符号付き4バイト整数(リトルエンディアン) | xsize×ysize×zsize |
| 符号付き2バイト整数(リトルエンディアン) | self[0, 0, 0] |
| 符号付き2バイト整数(リトルエンディアン) | self[1, 0, 0] |
| 符号付き2バイト整数(リトルエンディアン) | self[x, y, z] |
| 符号付き2バイト整数(リトルエンディアン) | self[xsize-1, ysize-1, zsize-1] |
「1画面=1マップ」案も「1024画面=1マップ」案も無理そうなので、
「Danteの1ファイル=1マップ」で考えてみた。
「1画面=1マップ」でない場合、自動実行イベントを工夫しないといけない。
とりあえず、
キャラクター画像変換ツール
も置いときます。
使い方は前のと一緒。あんま確認してないのでバグってるかも。
640×480解像度記念にDante98からのコンバータを作ってみることにする。
rxdataファイルはRubyのMarshalフォーマットであることは体験版の時点で解析済み。
例によって解析済んでからMarshal知ったけど。
文字列はUTF-8。これはマニュアルにも書いてあった。
Ruby使えば楽なんだろうけど、
組み込みがメンドくさいので自前で処理してます。
スクリプトで追加したデータなんかもrxdata直接編集するツール作れば
GUIで楽々編集できそう。
データ圧縮するときも、
Dataフォルダ配下のファイルは何でも入っちゃうみたいなのでいけるかも。
スクリプトは暗号化されてるみたいなので後回し。
とりあえず、タイルセットとマップからやってみる。
うーむ、1画面=1マップで作ったらマップが足りなくなった。(最大999個)
フィールドマップをひとつにまとめてもいいけど、
今度は全部フィールドのゲームで1マップに入らなくなる。
どうしよう、、、。

(7/25追記:画面はハメコミ合成ではありません)
キャラクタがデフォルトのままなので念のためモザイクかけてみたり。
Dante98風の枠はフォググラフィック。
需要があるかもしれない
タイルセット変換ツール
を置いときます。
コマンドラインからDante98のディレクトリで実行です。
Dante98のディレクトリに実行ファイルをコピーして
ダブルクリックでもいけます。
「RPGツクールXP」購入。無事に認証通過。