与えることで有効にすることが出来ます。その方法をまとめてみました。
デバッグモードにはテストプレイとバトルテストがあり、テストプレイは
スイッチ(フラグなど)の変更や壁抜けなどができるようになります。
バトルテストはどうも制作環境でないと動作しなさそうですので、
ここではテストプレイをデバッグモードとして扱います。

F9キーでスイッチ(S)や変数(V)の変更ができます。

Ctrlキーを押しながら移動すると壁抜けができるようになります。
コマンドラインパラメータは以下のようになっています。
■RPGツクールVX Ace
Game.exe [test/btest] [console]
test テストプレイ
btest バトルテスト
console コンソールの表示
■RPGツクールVX
Game.exe [test/btest]
test テストプレイ
btest バトルテスト
■RPGツクールXP
Game.exe [debug/btest]
debug テストプレイ
btest バトルテスト
■RPGツクール2000/2003
RPG_RT.exe [TestPlay/BattleTest] [HideTitle] [Window]
TestPlay テストプレイ
BattleTest バトルテスト
HideTitle タイトル非表示
Window ウィンドウモードで起動
ショートカットを作成し、リンク先の末尾にパラメータを追加すると簡単です。


RPGツクール2000/2003製のゲームはデフォルトでフルスクリーン起動しますが
このようにパラメータを与えることで最初からウィンドウモードで起動できます。
2000/2003では第1、2引数を省略できないので適当な文字を入れておいて下さい。
例)RPG_RT.exe NULL NULL Window
残念ながらRPGツクールXP以降の多くのゲームは、デバッグモードで起動すると
「スクリプトの読み込みに失敗しました。」と表示され終了してしまいます。
(どうやらスクリプトが暗号化されているとこのように表示されるみたいです)
このような起動時のチェックであれば、チェックを回避するよう改造したり、
後から改造コードでメモリ上のデバッグモードフラグを入れることで対処できます。
しかし、対策としてスクリプトでデバッグモードフラグを常時チェックしている
ものには、これらの方法では回避することができません。
起動時チェック用に改造コードを記載しておきます。
改造コードの使い方はこちらを参照して下さい。
■RPGツクールVX Ace
*デバッグモード
FILENAME Game.exe
00000FA6: 32 14
■RPGツクールVX
*デバッグモード
FILENAME Game.exe
00001964: 23 1C
■RPGツクールXP
*デバッグモード
FILENAME Game.exe
0000160E: 14 06
制作者としては見てほしくない部分かもしれませんが、ユーザーとしては興味深い
ですよね。昔のRPGでどうしても行けない場所にやきもきした思いをした方は
特にそう思うのではないでしょうか。
デバッグモードフラグのチェックを回避する改造コードをテスト公開します。
上の改造コードは使用せず、こちらのコードのみを使用して下さい。
改造コードはうさみみハリケーンやスペシャルねこまんま等で実行できます。
ゲームが使用するdllによってコードが異なりますので、「Game.ini」の「Library」
の項目を確認しておいて下さい。
■RPGツクールVX Aceデバッグモードの改造コードをSSGにしてみましたのでこちらもどうぞ。
;デバッグモード(RGSS301.dll)
*00410004>19E550-8B018B500485D2750B83FB08740583FB18750142C3
*00410004>0635F4-E857AF1300
;デバッグモード(RGSS300.dll)
*00410004>19E700-8B018B500485D2750B83FB08740583FB18750142C3
*00410004>0633E4-E817B31300
■RPGツクールVX
;デバッグモード(RGSS200J.dll)
*0040BCC0>0FBBE0-8B018B500485D2750D85DB750985F6750585FF750142C3
*0040BCC0>088534-E8A7360700
;デバッグモード(RGSS202J.dll)
*0040BCC0>0FBC00-8B018B500485D2750D85DB750985F6750585FF750142C3
*0040BCC0>088554-E8A7360700
■2012/4/28更新
RPGツクールVX Ace製ゲームのデバックモードについて追加しました。
■2012/7/17更新
デバッグモードのチェックを回避する改造コードをテスト公開しました。


ありがとうございました。
ぜひVXaceも公開してもらえればと思います。
ちゃんと動作してますかね?何かおかしなところがあればコメントにお願いします。
ありがとうございました!
質問なのですが、VXのゲームをデバックチェックによってollydbgで実行できないのですが、その回避方法について知っていれば教えてもらえないでしょうか?
デバッグモードのチェック回避のコードで実行でできるのかとも思いましたが、うさみみハリケーンで実行しても終了後にはチェック回避のコードが無効になってしまうのでollydbgでの起動はできませんでした。
初心者すぎる質問かと思いますが、お暇がある時に是非ご教授お願いします。
こちらを参考にしてください。
私は「Olly Advanced」というプラグインを使用しています。
http://www.openrce.org/downloads/details/241/Olly_Advanced
大抵のデバッガチェックは回避できますし、バグの修正もできるので
ollydbg1を使うなら入れておくといいと思いますよ。
英語で訳がわらないのでとりあえずHELPの画像通りにチェックしてみたところ、読み込んだ瞬間終了してしまいました。
後日英訳しながらやってみます^^;
とりあえずの目標はVXのゲームでお金が減らないようにしてみたいですw
ご教授ありがとうございました!
「Anti-Debug」のProcess32Next、FindWindow、IsDebuggerPresent
にチェックを入れておきましょう。
後は状況に合わせてでいいかと思います。
Scramble Export Table、GetTickCountあたりは不具合を起こす可能性が
高いと思うので注意が必要です。
しかしVXのゲームを起動するとエントリーポイントがコードセクション外〜〜と出て、お金の格納アドレスが変わってしまっいブレークポイントがうまく設定できませんでした;;
これが自己変異型というやつなのでしょうか?
解説サイトと照らしあわせてやってるだけなので自分では手に余りそうです^^;
ただ、RPGツクールの実行ファイルはスクリプトのプレーヤーなので
プログラムを書き換えるような改造は、かなり難しいかもしれません。
もしかしてメモリのパラメータ全てが2n+1なんでしょうか?
だとするとニーモニックも全然違う表記されますよね・・・。
ということでパラメータの値だけ2n+1ですね。
DANAの部屋さんのHPでアドレス可変型の改造方法を参考にやってみましたが、ポインタの特定には至りませんでした;;
しかしポインタの特定をしたとしても、減算処理がスクリプトのプレーヤーで処理されているのなら○○減らないはできないのでしょうか?ねこまんまなどのコード自動更新で値が減ったら戻す、というのを繰り返せば出来はするんでしょうが・・・。
しているのであれば、ブレイクしたプログラムコードは様々なパラメータを
呼び出し、書き込みしているルーチンになるかと思うので、書き換えてしまうと
他の値にまで影響が出てしまいます。
私が公開しているデバッグモードフラグのチェックを回避する改造コードも
そうなのですが、特定の値以外には影響が出ないようにフィルタリングする
プログラムを書くことになるので、かなり大変です。
まぁ減らない処理ができないにしても増やすことは容易いので今のところそれでも十分なのでそれでいいかな、と思います。
色々ご教授いただいて本当にありがとうございました!
[subject]デバッグモード:b_toggle,_[:0x410004:]
,ssl->debug_chn,offset
[group]debug_chn
0x19E340,8B018B500485D2750B83FB08740583FB18750142C3
,000000000000000000000000000000000000000000
0x0633E4,E857AF1300,8B018B5004
[/group]
[group]debug_chn
0x19E700,8B018B500485D2750B83FB08740583FB18750142C3
0x0633E4,E857AF1300,8B018B5004
[/group]
にしないと、元からあるコードを塗りつぶしてしまいました。
環境によってズレがあるんでしょうか?
よろしければご確認お願いします。
確かに元からあるコードを塗りつぶしていました。
[group]debug_chn
0x19E700,8B018B500485D2750B83FB08740583FB18750142C3
0x0633E4,E857AF1300,8B018B5004
[/group]
上のコードだとフリーズしたため、[:0x410004:]+0x0633E4
に当たる部分の書き換え後のコードををうさみみで確認すると
CALL 101A1A80
という命令でした。
0x101A1A80は、_[:0x410004:]+0x19E340と同値でした。
改めて塗りつぶしを回避しつつ動作するコードを作ったら次のようになりました。
[group]debug_chn
0x19E700,8B018B500485D2750B83FB08740583FB18750142C3
0x0633E4,E817B31300,8B018B5004
[/group]
変更点としては、[:0x410004:]+0x0633E4の命令を
CALL 101A1E40
に書き換えるようにしました。
0x101A1E40は、_[:0x410004:]+0x19E700と同値です。
動作確認せずに書いて申し訳ないです。
せっかくなのでRGSS300.dllの回避コードも記事に掲載したいと思うのですが
よろしいですかね?
ところで、リックさんはこちらでSSGを公開なさっている方しょうか?
http://www.necocan.info/supb2/x/topics.cgi?mode=res&no=14064
私のブログにもRPGツクール系ゲームの改造リクエストを頂いているので
汎用的な改造SSGの作成を陰ながら応援しています。
私の方でも何かご協力出来ればいいのですが…
>>せっかくなのでRGSS300.dllの回避コードも記事に掲載したいと思うのですがよろしいですかね?
構いません。むしろ何故無いのだろうと思って掲示板に書かせてもらいました。
>>ところで、リックさんはこちらでSSGを公開なさっている方しょうか?
そうです。RICKとハンドルネームで公開しています。
自分がサーチした中気づいた点を書いています。
所持金はモジュール部分を変更すれば使えるみたいです。(当然他の項目のモジュール部分も書き換える必要あり)
ステータスは「status_info」をレベルやHP・MPの末端の領域と同一の領域の数値を書き換えれば使えると思います。3人目以降のアクターのデータがセーブデータに反映されると(?)ポインタが変動するようです。それに対応するため[14]のざくざくアクターズのssgは最近こっそり更新していたりします。ユニットリストがハオまであればそれが最新版です。
アイテムエディタは例のサイトに書いてあるとおり謎の16進数の解析ができなければ先に進めない状況です。謎の16進数はアイテム番号と関係有りそうですが、自力では無理そうなので断念しています。
XP,VX,VXAceのアイテム等のリストの取得はRPGツクールVXリーダー(とEXCELとサクラエディタ)が便利です。コピペしたあとちょっといじればアイテムの名前だけを取り出せます。(評価版の場合武器は除く)
長文失礼しました。
RGSS300.dllの回避コード掲載させて頂きました。
また、沢山の情報もありありがとうございます。
参考にさせて頂きたいと思います。
提案ですが、回避コードのssgも公開されてはいかがでしょうか?
自分は回避コードというより、いつでもデバッグモードがon/offできるコードというように使ってますので(もちろんSSGでの話)。また、当コードがonの状態だとF12リセット(勝手にこう呼んでる)が使用できないゲームも多いので。
RGSS200J.dllの場合のssgのコードを参考までに書いておきます。
(便宜上カンマ手前で改行あり)
[subject]デバッグモード:b_toggle,_[:0x0040BCC0:]
,ssl->debug_chn,offset
[group]debug_chn
0x0FBBE0,8B018B500485D2750D85DB750985F6750585FF750142C3
,0000000000000000000000000000000000000000000000
0x088534,E8A7360700,8B018B5004
[/group]
RGSS202J.dllのoffの文字列はRGSS200J.dllと共通です。
RGSS301.dllのoffの文字列はRGSS300.dllと共通です。
前のコメントはVXAceについてでした。ご存知かも知れませんが、
VX作品は猫缶INDEXのkn氏作の最新の「らんだむダンジョン」のssgがリストを書き換えるだけで使えるようになることが多いです。このssgで所持金が書き換えられたらビンゴといえるでしょう。(「らんだむダンジョン」が標準的な暗号化を施してあるため?)そうでなければ、ポインタ探索しつつ構文中のXXXX=>key;のXXXXを書き換えていけば使えるようになると思われます。
http://www.necocan.info/supb2/x/topics.cgi?mode=res&no=13298
上記サイトの[18]の添付ファイルにポインタ探索履歴等を書いたssgをアップしています。ぜひ参考にしてみてください。
XPも構文はそのまま使える模様です。キーの書き換えは必須ですが。
長文失礼しました。
ssgの件考えてみます。
回避コードだけでなく汎用的な所持金などのの変更も出来ると便利そうですね。
シリーズが多いので大変かもしれませんが、時間があればやってみたいです。
その際は色々と参考にさせて頂きたいと思いますのでよろしくお願い致します。
確認していませんが情報ありがとうございます。
ちなみにRGSS103J.dllの(ここでいう)回避コードのssgは猫缶INDEXの「投稿データ掲載所」にあります。
一部おかしな(?)RGSS103J.dllを同梱したゲームもありますが。(例:FANTASY WORLD ver.1.20)
確かに、ゲーム自体は稼働したのですが・・・どういうわけか
デバックモードが機能しないようです。
ゲーム自体はフリーで配布されてる物なんですが。。。orz
原因と思われる可能性と思いつく限りの対処法を書いてみます。
@Game.exeが改造済みである。
(対処法)再度そのゲームをDLし直す等で対応
Aそのゲームがランタイム(RGSS202J.dll)を同梱していて、更にそのファイルが通常とは違うものである
(対処法1)ゲームタイトルを書いた上で報告
(対処法2)自力で探す。
自分なりの探し方を書いてみます。
@ねこまんまの16進数検索で
8B018B50048B
を検索。自分の環境&通常のdllでは1008AE64がヒット。
ARGSS202J.dllを逆アセンブル。Hexダンプが
0000・・・・
というように00が続いている領域を探す。
自分の環境&通常のdllでは100FE510をコードの先頭アドレスに選択。
B1008AE64の命令を書き換え。
自分の環境&通常のdllでは
CALL 100FE510
バイト列は
E8A7360700
になりました
Cコード作成
1008AE64-E8A7360700
100FE510-8B018B500485D2750D85DB750985F6750585FF750142C3
RGSS104J.dllの「おっさん or die」のデバッグについて簡単に解析してみましたが
通常であればあるはずのデバッグモードフラグへのアクセスが全くないので
(デバッグメニューは常時、壁抜けは移動時にフラグを読み取っている)
デバッグ機能自体が削除されているか、無効化されているのかもしれません。
(そういったことが出来るのかわかりませんが…)
現状のところさっぱりといった感じです。
ちなみに猫缶INDEXのRGSS103J.dllのSSGはデバッグフラグのONOFFのみのようです。
RGSS103J.dllにも新旧があるようですね。その2種類に対応されていました。
(FANTASY WORLD ver.1.20のが古いもの)
↑↑のRPGツクールVX(RGSS202J.dll)でデバックモードが機能しないという方も
デバッグの無効化がされている可能性がありそうですので
タイトルを教えてもらえるとありがたいです。
どろっぷふぁくとりーってやつです。
ちなみに、この他に幾つか・・・
RPGツクールVXで作られて販売されているRPGがありますね。
同様に、デバックモード自体機能しないみたいですね。
あと、VXAce作られた物でも同様の現象の物が存在するようです。
質問。メモリパッチや回避コードでポインタを使っている理由は何ですか?ポインタで飛んだ先も起点となる(同じ)モジュール内にあるのだからポインタを使わなくてもよさそうなのですが。
あと、細かいことですが、VX Aceのモジュール名に「J」は不要です。
「おっさん or die」をRPGツクールVXリーダーで覗いてみたら、アイテム名が謎の文字列に置き換わっていました。RPGツクールXP セーブデータ改造ツール Pro(最近フリーウェア化)では正常に表示されました。
2000や2003も解析してみました。データはそのままなんの変換もなく格納サれており、多重ポインタも最大3(ssgの[:と:]のセットで1と数えると)という程度でした。
アイテムリストの取得方法は自分の知る限りRPGツクール2000/2003 セーブデータ改変ツールのアイテムリストを丸写しするくらいです。ちなみにjoydel(joykeyの付属ソフト)でパッドを無効化しても起点は変わらない模様です。
ついさっき落として検証してみました。自分の環境では普通にデバッグモード(回避コード)を使えました。多分Game.exeが改造されているのが原因だと思われます。
Game.exeを改造すると多少はRGSS202J.dllの領域に影響を及ぼすみたいです。(XPの「おっさん or die」ではそうだった。)
自分が使ったコードを一応書いてみます。(ssg用、便宜上カンマで改行あり)
[subject]デバッグモード:b_toggle,
_(MName::RGSS202J.dll),ssl->debug_chn,offset
[group]debug_chn
0x0FE510,8B018B500485D2750D85DB750985F6750585FF750142C3
,0000000000000000000000000000000000000000000000
0x08AE64,E8A7360700,8B018B5004
[/group]
ついでにいうと、このゲームは猫缶Indexのkn氏作のらんだむダンジョンのssgがリストを変更すればそのまま使える模様です。
どろっぷふぁくとりーを私の方でも確認してみましたが、掲載している回避コードで
問題なくデバッグモードに出来ました。
例えば管理者として起動していないだとか、既に改造済みのGame.exeだとか
何か別の問題で改造出来ていないのかもしれません。
>>リックさん
回避コードは上の方のコメントにもあるように様々なデータを読み出している
ルーチンにデバッグメニュー、壁抜けからフラグへのアクセスのみONにする
というプログラムを追加して、それをコード化したものです。
「おっさん or die」だとそもそもフラグへのアクセス自体がないので
この方法ではどうしようもない状態です。
質問のポインタを使っている理由ですが、環境によってズレが起きないよう
基本的に元々のプログラム通りそのままコードにしています。
回避コードはSSGなら↑の_(MName::RGSS202J.dll)のようにDLLを起点にするのが
良さそうですね。
それと「J」のご指摘ありがとうございました。修正しました。
2000や2003の場合はデバッグモードのアドレスへのポインタもデバッグモードのアドレスもモジュールRPG_RT.exe内にありますが、それでも環境によりズレが生じたりするのでしょうか?あるいは、全ver.のRPG_RT.exeに対応するためのものなのでしょうか?
1つ上の問題は自己解決しました。お騒がせしました。最近ツクールXP以降のssgばっかり作っていたので(1度構文を作ればほとんど流用可能&プログラム見なくても感覚でポインタ探索できるようになった)逆アセンブラのプログラムを逆に辿るという基本を忘れていました。.exeの中に入ってもまだ安心できないことを思い出しました。
ツクールのssgで思い出したのですが、
www.necocan.info/supb2/x/topics.cgi?mode=res&no=3237
の[153](No.9314)にRPGツクールシリーズ(2000〜VXまで)ある程度汎用性のあるssgがありました。これが自己解決の鍵になりました。
連投すみませんでした。
未初期化のグローバル変数や静的変数の領域ですので
アドレスが変動したり、ズレることもないとは思います。
本当に念のため、元々のアセンブラのプログラム通りにしたという感じです。
例えば.bssセクションまでポインタ探索したRPGツクール2003のゲーム「POKEMON FANTASY」用に作ったSSGは同じツクール2003のゲーム「どらえもんのび太のFINAL FANTASY」では使える気配がありませんでしたが、.dataセクションまでポインタ探索したものは「どらえもんのび太のFINAL FANTASY」でも使えそうでした。
ちなみに、アリスソフトのSystem3.xのいくつかのゲームも解析したことがあるのですが、やはり起点が.exeなら.dataセクションを起点とするのが正解のようです。
追伸:
最近SRPGツクール95の「メイドさんと最低の野郎ども」に手を出してみました。デバッグモードで何ができるのかに興味があるので、時間があったらでいいので対応お願いします。
環境で変動は無くても、ゲーム事に変動してしまうんですね。
.dataセクションは初期化されたデータの領域なので、ゲームが変わっても
同じデータですが.bssセクションはどこにどの値が入るかが
わからないってことですか。
汎用システムですもんね。ようやく見えて来ました。
SRPGツクール95の件了解です。
今やってる解析が終わったら取り掛かろうと思います。
「SRPGEXEC.EXE」を見てみましたがそれらしい文字列は見つからず
よくわかりませんでした。
検索すると「デバックでスイッチのオンオフ確認はできても変更ができない」
とあるので、一応デバッグ機能はありそうですが…
2013年05月30日 03:38に書いたURLの場所にSRPGツクール95用のプログラム改変系のssgがありまして、そのSSGで十分楽しむことができました。
上記URLには思わぬ掘り出し物があることが多いのでたびたび覗いてみるのもよさそうですね、更新は止まっていますが。
上記のツールで暗号化したツクール2000シリーズ製のゲームをデバッグできるようにできますか?
ちらっと目を通しただけなので、はっきりとは言えませんが
デバッグ機能自体が無いように思えます
なるほど
デバッグしたい時は暗号化ツールを無効化してRTPで動かせるようにしないとできないということですね
デバッグモードのSSGを公開しました。
ゴールドの改造なんかもいずれ入れていきたいですね。
しばらくは時間が取れそうもないですが…
2000/2003のデバッグモードのメモリパッチ版が消えてますね。何か問題でもあったのでしょうか?ssgではアドレス補正版になってるみたいですし。
ここで一つ質問です。VXACEの回避コードをONにした時のCALL命令のジャンプ先はRGSS300.dllの場合は
_(MName::RGSS300.dll)+0x1A1E40から
MOV EAX,[ECX] (8B01)
MOV EDX,[EAX+4] (8B50 04)
(以下略)
という意味で書かれていると思いますが、
うさみみでは
_(MName::RGSS300.dll)+0x1A1E3F
から
ADD [EBX+4508B01],CL (008B 018B5004)
(以下略)
というように認識されていますが大丈夫なのでしょうか?
RGSS301.dllの場合も同様の現象が見られます。
ちなみに使用はできますが、違和感を感じたので質問させて頂きました。
改造コードでの公開をやめ、全てに対応できるようSSGのサーチを
利用することにしました。
質問についてですが、「code cave」と呼ばれるコードの無い空間(00のところ)
にコードを書き込むと、デバッガが誤認識してしまうことがあります。
プログラム上は全く問題ないので大丈夫ですよ。
フラグ回避コードVX用(デバッグモード(RGSS202J.dll))のを使用しても
確かに正常には可動はするのですが、デバックモードへ入れないようです
※ゲーム自体は最新版を使用しました。
自分はここで公開されているデバッグモードのSSGのコードで
問題なくデバッグモードに出来ました。
例えば管理者として起動していないだとか、既に改造済みのGame.exeだとか
何か別の問題で改造出来ていないのかもしれません。
有料のゲームのようでしたので、私の方では確認していないのですが
以前にもRGSS202J.dllでデバッグモードにならないというものがあったので
何か問題があるのかもしれませんね。
念のためRTPの再インストールをお願いします。
適当にツクール作品(すべてvx)で試したところ、
できるのとできないのがありました。
本気でデバッグモードのチェックを行っている作品のは回避できないみたいです。
というコードを作るのは不可能でしょうか?
可能だと思います。
VX Aceのほうは既存のコードを弄るだけで簡単に出来そうですが
VXのほうは片方だけをフィルタリングしないとなので
区別するための値を見つけるのが面倒かもしれません。
壁抜けはバイナリエディタでセーブデータをいじるだけで実現でき、
また、デバッグモードのコードをONにしたまま、うっかりF12リセット
してしまうとバトルテストに必要だと思われるファイルがない
という旨のエラーが出て強制終了してしまうので、
それぞれ分離できないのかなと思って質問させて頂きました。
テストプレイ(Ctrlで壁抜け&F9でスイッチ・変数表示)と、
バトルテストの両方が有効になっている模様です。
記事に書いてある通り、バトルテストは制作環境でないと動作しないので、
できれば、テストモードのみ有効するコードを時間があるときで良いので対応お願いします。
P.S.
Ollydbgは使ったことはあまりないのですが最新バージョンの日本語化は期待しています。
出てしまうようで、切り離しできませんでした。
壁抜けのみでしたら問題ないみたいですね。
F12を押してもエラーが出ないようにする方向で解析してみます。
レベル300以上にしたいのですけど
SSGでもやるとスクリプトGameActor353行目でnomethodErrorがでるんです。
udefined method>for nil:nilClassとでます、多分300以上の上限解除の値が無くNULLとなって無いものと比べようとしてバグが出たんだと思いますデバッグでそこの変数を変えれればどうにかなるかと思いデバッグしたく。
スペシャルねこまんま57号でおっさんordieのデバッグしようと思い
*デバッグモード
FILENAME Game.exe
0000160E: 14 06
を実行しようと思ったんですけど。
指定ファイルをオープンできませんと出てきましたと言われましたけど、その後ファイル書き換え処理を完了しましたとでました。
ですけどF9でデバッグモードでないです、ちなみにエディターでも0000160E: 14 のところを06にしてます。
セーブデータ書き換えるにも暗号化されていてversion error code:2とでてお手上げです。
デバッグモードなんとかできる方法ないのでしょうか?
おっさん or dieはデバッグモードの対策をしているようで
プログラムを弄るのでは無理っぽいです。
SSGとはどんなものなのか、
どうやって使うのか教えていただけないでしょうか。
どこにも載ってなくて困ってます
選択するだけで改造コードが実行できるというスグレモノなのです。
http://wcs.main.jp/index/software/spal/
詳しくはこちらか、「SpoilerAL」で検索してみて下さい。
-1073741824〜1073741823までは2n+1で求まるのですが、
その範囲外はどうなっているのか
また、VX AceのTPはどのように格納されているのか教えていただければ幸いです。
また、F12バトルテストエラーについてもお願いします。
追伸
http://www.necocan.info/supb2/x/topics.cgi?ode=res&no=14064
に公開しているVX Ace製ゲーム用のSSGがアイテムエディタ以外
ほぼ完成&おそらくステータス以外ほぼ汎用であるものが出来ました。また、壁抜けのみのコードは自力でなんとかなりました。
だいぶお待たせしていたF12キーのバトルテストエラーについてのみ
解析してみましたが、リセットと切り離してエラーのみ回避するのは
難しそうです。
とりあえずSSGにはF12キーを無効化するようにしておきました。
新しいデバッグ対策も出てきているようですね。
今回いくつかのゲームを見てみましたが
F9キーを押してデバッグメニューを出した途端
固まってしまうものがありました。
ツクール汎用のSSGお疲れ様でした。
現在多忙のため何もお手伝いできず申し訳ないです。
F12リセットを無効化したとのことですが、
ゲームによってはゲーム終了->タイトルでも発生しますが
それも無効化したのでしょうか?
XPやVXやVXAceでは
ON(True) = 0200000
OFF(false)= 00000000
nil = 04000000
で格納されていて
すり抜けやセーブ禁止等のフラグも上記の値で格納されていました。
また、VXの場合、該当アドレスの8バイト前から4バイトのバイト列が2回続けて存在しています。
(例)すり抜けONの場合
6A 2C 00 00 6A 2C 00 00 02 00 00 00
デバッグモードのフラグももこんな感じでモジュールの領域外のメモリ領域に格納されていてポインタをたどるのが面倒だからプログラムコードで対処されているのでしょうか?
追伸:
(主に)RPGツクールのゲームのSSGを投稿していく自分用(?)のスレを作成いたしました。全シリーズの汎用(標準仕様)の
SSGもそこに置いています。
http://www.necocan.info/supb2/x/topics.cgi?mode=res&no=19628
ゲーム上でのリセットは駄目だと思います。
今回のはスクリプトでのフラグチェックを回避するために
プログラムをいじっています。
確かにこういった汎用システムだとポインタをたどるのは
非常に難しいので、できれば避けたいですね。
やるとしたら、以前グリーフシンドロームでやったような
プログラムをいじってポインタを空き領域に書き出して
そこを参照するような感じでしょうか。
当方あまり改造については詳しくなく、上記のコードをしてもエラーが出てしまいます。(既に開いてるプログラムがあるとかで・・・。)
なのでコードを教えてください、お願いします。
VXのRGSS202J.dllであることは確かなのですが・・・。
最低でもゲームタイトルくらいは書かないと伝わりにくいと思いますよ。
仮にもし、Vitamin PlusならばここにあるSSGの
「(MName::RGSS202J.dll)」を「(MName::RGSS202E.dll)」に
置換すれば使えましたのでここで報告しておきます。(v1.6で確認)
もし使えなければRPGツクールVXのランタイムの再インストールをおすすめします。
>>nilさん
F12リセットの無効化のみですか。
F12リセットの無効化は別の意味で役に立つと思います。
F12リセットを使うとスタック関連のエラーが出るゲームがちらほらありますが(主にRPGツクールVX)、これを有効にすればうっかりF12を押しても大丈夫になりますね。
デバッグモードON時のF12リセットエラー完全回避は難しいみたいですね。SSGの場合はON/OFFができるのが幸いです。ON/OFFの状態に注意して扱うよりなさそうです。
最近のテストモード無効化はテストモードが起動するボタンを「なし」にしているものを見かけます。言い換えればテストモードに関する定義の中身を空っぽにしているとも言えますが。そういったものに対し対応することは可能なのでしょうか?
あと、余力があり、かつ可能ならば、獲得経験値n倍、獲得金n倍(シフト命令でも掛け算でも可)、アイテム必ずドロップをお願いしたいです。
P.S.
ついにRPGツクールVX Aceの標準仕様用のSSGにアイテムエディタを実装することが出来ました。中身見ても笑わないでください(笑)。
投稿先はPosted by リック at 2014年06月04日 00:37に記載のリンク先です。
VXとVX Aceのテストモードとバトルテストのフラグのアドレスの特定に成功しました。対策されると落ちるタイプなので実用性はなさそうなのでアドレスのみ。回避コードにおけるテストモードのみの分離化の参考になればと思い書き込ませていただきました。
//VX
//テストモード
[group]address_test
0x3B4B=>key;
[:(((MName::RGSS200J.dll)|(MName::RGSS202J.dll))+0x18B018):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]
//バトルテスト
[group]address_btest
0x3B53=>key;
[:(((MName::RGSS200J.dll)|(MName::RGSS202J.dll))+0x18B018):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]
//VX Ace
//テストモード
[group]address_test
0x3D23=>key;
[:(((MName::RGSS300.dll)|(MName::RGSS301.dll))+0x2AC044):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]
//バトルテスト
[group]address_btest
0x3D2B=>key;
[:(((MName::RGSS300.dll)|(MName::RGSS301.dll))+0x2AC044):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]
何年も一方的にお世話になってます
もし
スマホゲーム
ドラゴンポーカーに可能でしたら有料で構わないので
ご指導頂けましたらうれしいです
以前に利用させていただいて非常に便利だったため今一度手元にほしいのですが、別所で再配布とかないですかね?
身勝手な申し出で申し訳ないですがお願いします!
別サイト(と言うかブログ)で配布中です。
2つサイトがありますが無難な方のリンクを貼っておきます。
「一般向け同人RPG改造館」
http://www.dojin-rpg-cheat.com/